Files
MeshChatX/android/README.md

3.3 KiB

MeshChatX Android App

This directory contains the Android app build configuration using Chaquopy to embed the Python MeshChatX server.

Architecture

The app uses a WebView to display the existing Vue.js frontend. The Python server runs in the background via Chaquopy and serves the web interface on https://127.0.0.1:8000.

Updating Android Python ABI Wheels (Python 3.11)

Use this workflow when a dependency (for example cryptography) requires custom Android wheels for arm64-v8a and x86_64.

  1. Build wheels in a Podman Python 3.11 container to avoid host Python mismatches:
    • Use docker.io/library/python:3.11-bookworm.
    • Mount project root to /work and Android SDK to /opt/android-sdk.
    • Export ANDROID_HOME and ANDROID_SDK_ROOT to /opt/android-sdk.
    • Example container entry: podman run --rm --network host -e ANDROID_HOME=/opt/android-sdk -e ANDROID_SDK_ROOT=/opt/android-sdk -v "/opt/android-sdk:/opt/android-sdk" -v "<repo>:/work" -w /work docker.io/library/python:3.11-bookworm bash
  2. Keep custom Chaquopy recipes in android/chaquopy-recipes/<package>-<major>/:
    • Define package/version in meta.yaml.
    • Store source patches in patches/.
  3. Build both ABIs with Chaquopy build-wheel.py and place final wheels in android/vendor/.
  4. Update android/app/build.gradle pip installs to the new pinned version.
  5. Rebuild with ./gradlew assembleDebug and verify split outputs:
    • app-arm64-v8a-debug.apk
    • app-x86_64-debug.apk
    • app-universal-debug.apk

Notes:

  • For Rust-backed wheels (such as modern cryptography), build inside the container with Rust toolchain available.
  • Keep recipe files and patches versioned; keep generated build artifacts untracked.

Custom Recipes and Patches

This project keeps Android-specific Chaquopy recipes in android/chaquopy-recipes/ to bridge gaps between desktop Python dependencies and Android wheel availability.

  • cryptography-46

    • Purpose: provide Android ABI wheels for cryptography 46.0.7 (arm64-v8a, x86_64) because upstream Chaquopy index only provided older builds.
    • patches/openssl_no_legacy.patch: disables OpenSSL legacy provider loading, which is unavailable in the bundled Android OpenSSL runtime.
    • patches/pyo3_no_interpreter.patch: enables compatible pyo3 ABI settings for Chaquopy Python 3.11 Android builds.
  • aiohttp-3.13

    • Purpose: align Android with desktop dependency line (aiohttp 3.13.3) by building fresh ABI wheels with Chaquopy.
    • No source patch is required; recipe pins the newer upstream version for Android wheel generation.
  • psutil-7.2

    • Purpose: align Android with desktop dependency line (psutil 7.2.2) while preserving Android runtime behavior.
    • patches/chaquopy.patch: treats android platform as Linux in psutil internals and forces a safe partition enumeration path because /proc/filesystems can be restricted by SELinux on some Android API levels.
  • bcrypt-5

    • Purpose: tracks attempted upgrade path to desktop-equivalent bcrypt.
    • Status: currently not enabled in Android app dependencies; bcrypt==3.1.7 remains pinned for stable APK builds.

License

This directory is part of the main project licensing split:

  • project-owned portions: 0BSD
  • original upstream MeshChat portions: MIT

See ../LICENSE for full text and notices.