diff --git a/README.md b/README.md index 735375b2..9d24ba9f 100644 --- a/README.md +++ b/README.md @@ -219,33 +219,34 @@ From repo root: # 1) Build Chaquopy wheels used by android/app/build.gradle bash scripts/build-android-wheels-local.sh -# 2) Build both APK variants +# 2) Build default slim APKs (universal packaging: one APK per flavor+type) cd android -./gradlew --no-daemon :app:assembleDebug :app:assembleRelease +./gradlew --no-daemon :app:assembleSlimDebug :app:assembleSlimRelease ``` -APK outputs (ABI splits plus a universal APK; see `splits { abi { ... } }` in `android/app/build.gradle`): +APK layout uses **product flavors** `slim` and `full` (Python tree size) plus **ABI packaging** `universal` (default) or `split` (see `android/app/build.gradle`). -Debug (`android/app/build/outputs/apk/debug/`): +With **`-PmeshchatxAbiPackaging=universal`** (default), each variant is a single APK containing every selected ABI: -- `app-arm64-v8a-debug.apk` (ARM64 devices) -- `app-x86_64-debug.apk` (x86_64 emulators) -- `app-armeabi-v7a-debug.apk` (32-bit ARM devices) -- `app-universal-debug.apk` (all bundled ABIs in one package) +Debug (`android/app/build/outputs/apk/slim/debug/`): -Release (`android/app/build/outputs/apk/release/`): +- `app-slim-debug.apk` -- `app-arm64-v8a-release-unsigned.apk` -- `app-x86_64-release-unsigned.apk` -- `app-armeabi-v7a-release-unsigned.apk` -- `app-universal-release-unsigned.apk` +Release (`android/app/build/outputs/apk/slim/release/`): + +- `app-slim-release-unsigned.apk` + +Use `:app:assembleFullDebug` / `:app:assembleFullRelease` for the larger `full` Python bundle (offline repository wheels, bundled docs, Vue sources, etc.). + +With **`-PmeshchatxAbiPackaging=split`** and more than one ABI in `-PmeshchatxAbis`, Gradle also emits per-ABI APKs under the same flavor folders, plus a universal split APK when enabled. Notes: - Release outputs are unsigned by default unless you configure signing. -- If you only need one variant, run `:app:assembleDebug` or `:app:assembleRelease`. +- If you only need one build, run for example `:app:assembleSlimDebug` or `:app:assembleSlimRelease`. - Android targets the ABIs listed in `android/app/build.gradle` (including `armeabi-v7a` when enabled). Building wheels for `armeabi-v7a` needs an Android SDK on `ANDROID_HOME` (see `android/README.md`). -- You can override ABI selection per build with `-PmeshchatxAbis=`, for example `-PmeshchatxAbis=armeabi-v7a`. Universal APKs are emitted only when multiple ABIs are selected. +- Override ABI selection with `-PmeshchatxAbis=` or `MESHCHATX_ABIS`. Override packaging with `-PmeshchatxAbiPackaging=universal|split` or `MESHCHATX_ABI_PACKAGING`. +- Chaquopy bundle size: **`slim`** flavor (default) syncs a smaller `meshchatx/` tree into `src/slim/python/`; **`full`** flavor syncs the complete tree into `src/full/python/` (including offline repository wheels after fetch when needed). See `android/README.md`. Additional docs: diff --git a/android/README.md b/android/README.md index ca40c3a3..56a8376a 100644 --- a/android/README.md +++ b/android/README.md @@ -32,34 +32,54 @@ yes | path/to/cmdline-tools/latest/bin/sdkmanager --licenses path/to/cmdline-tools/latest/bin/sdkmanager "platforms;android-34" "build-tools;34.0.0" ``` -Build from the `android/` directory: +Build from the `android/` directory (default **slim** flavor, **universal** ABI packaging): ```bash -./gradlew assembleDebug +./gradlew :app:assembleSlimDebug ``` -Debug APK outputs (ABI splits plus universal) are written under `app/build/outputs/apk/debug/`, for example: +Debug APK example path: -- `app-arm64-v8a-debug.apk` -- `app-x86_64-debug.apk` -- `app-armeabi-v7a-debug.apk` -- `app-universal-debug.apk` +- `app/build/outputs/apk/slim/debug/app-slim-debug.apk` -By default all ABIs are included. To build only specific ABIs, pass a property: +By default all ABIs are included in that single universal APK. To build only specific ABIs: ```bash -./gradlew assembleDebug -PmeshchatxAbis=armeabi-v7a -./gradlew assembleDebug -PmeshchatxAbis=arm64-v8a,x86_64 +./gradlew :app:assembleSlimDebug -PmeshchatxAbis=armeabi-v7a +./gradlew :app:assembleSlimDebug -PmeshchatxAbis=arm64-v8a,x86_64 ``` -`app-universal-*.apk` is produced only when more than one ABI is selected. +To emit **per-ABI split APKs** (and a universal split when Gradle enables it), set: + +```bash +./gradlew :app:assembleSlimDebug -PmeshchatxAbiPackaging=split +``` + +Same property accepts `MESHCHATX_ABI_PACKAGING`. + +### Python bundle: `slim` vs `full` flavors + +The Chaquopy layer packs `meshchatx/` into `assets/chaquopy/app.imy`. These are **Android product flavors** (separate Gradle variants): + +| Flavor | Meaning | +|--------|--------| +| **`slim`** (default `isDefault`) | Smaller APK: sync omits Vue sources (`src/frontend`), bundled Reticulum HTML manual (`public/reticulum-docs-bundled`), RNode flasher static files, and **offline repository wheels** (`public/repository-server-bundled`). | +| **`full`** | Syncs the whole `meshchatx/` tree (Gradle runs `fetchRepositoryBundledWheels` first when bundled wheels are missing). Use when the APK must ship the offline repository mirror and bundled docs. | + +Assemble the matching variant: + +```bash +./gradlew :app:assembleSlimDebug -PmeshchatxAbis=arm64-v8a +./gradlew :app:assembleFullDebug +./gradlew :app:assembleFullRelease +``` ## Signing Release APKs (optional SourceStamp) Build release APKs first: ```bash -./gradlew --no-daemon :app:assembleRelease +./gradlew --no-daemon :app:assembleSlimRelease ``` Create a release signing key (one time): @@ -131,7 +151,7 @@ For **`armeabi-v7a`**, Chaquopy usually has no prebuilt NumPy wheel; `scripts/bu - Store source patches in `patches/`. 3. Build the configured ABIs with Chaquopy `build-wheel.py` (via `scripts/build-android-wheels-local.sh`) 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 (per enabled ABIs), including `app-universal-debug.apk`. +5. Rebuild with `./gradlew :app:assembleSlimDebug` (or `-PmeshchatxAbiPackaging=split` when you need per-ABI artifacts) and confirm the expected APK under `app/build/outputs/apk/`. Local host build example (no shell startup files required): diff --git a/lang/README.de.md b/lang/README.de.md index 3ed1b9bf..0a5afcd9 100644 --- a/lang/README.de.md +++ b/lang/README.de.md @@ -219,30 +219,31 @@ Vom Repository-Root: # 1) Chaquopy-Wheels gemaess android/app/build.gradle bauen bash scripts/build-android-wheels-local.sh -# 2) Beide APK-Varianten bauen +# 2) Standard-Slim-APKs bauen (universal: ein APK pro Flavor und Build-Typ) cd android -./gradlew --no-daemon :app:assembleDebug :app:assembleRelease +./gradlew --no-daemon :app:assembleSlimDebug :app:assembleSlimRelease ``` -APK-Ausgaben (ABI-Splits plus universelles APK; siehe `splits { abi { ... } }` in `android/app/build.gradle`): +Ausgaben richten sich nach **Product Flavors** `slim` / `full` (Groesse des Python-Baums) und **ABI-Packaging** `universal` (Standard) oder `split` (siehe `android/app/build.gradle`). -Debug (`android/app/build/outputs/apk/debug/`): +Mit **`-PmeshchatxAbiPackaging=universal`** (Standard) enthaelt ein APK alle gewaehlten ABIs. -- `app-arm64-v8a-debug.apk` (ARM64-Geraete) -- `app-x86_64-debug.apk` (x86_64-Emulatoren) -- `app-universal-debug.apk` (alle gebundelten ABIs in einem Paket) +Debug (`android/app/build/outputs/apk/slim/debug/`): -Release (`android/app/build/outputs/apk/release/`): +- `app-slim-debug.apk` -- `app-arm64-v8a-release-unsigned.apk` -- `app-x86_64-release-unsigned.apk` -- `app-universal-release-unsigned.apk` +Release (`android/app/build/outputs/apk/slim/release/`): + +- `app-slim-release-unsigned.apk` + +Fuer den vollen Python-Baum: `:app:assembleFullDebug` oder `:app:assembleFullRelease`. Hinweise: - Release-Ausgaben sind standardmaessig unsigniert, sofern keine Signatur konfiguriert ist. -- Wenn nur eine Variante noetig ist: `:app:assembleDebug` oder `:app:assembleRelease`. -- Android zielt auf die ABIs `arm64-v8a` und `x86_64` gemaess `android/app/build.gradle`. +- Fuer eine einzelne Build-Variante z. B.: `:app:assembleSlimDebug` oder `:app:assembleSlimRelease`. +- ABI: `-PmeshchatxAbis` oder `MESHCHATX_ABIS`; Packaging: `-PmeshchatxAbiPackaging` oder `MESHCHATX_ABI_PACKAGING`. +- Chaquopy-Baum `meshchatx/`: **`slim`** nach `src/slim/python/`, **`full`** nach `src/full/python/`. Details in [`android/README.md`](../android/README.md). Weitere Dokumentation: diff --git a/lang/README.it.md b/lang/README.it.md index 3deef92d..02ff3851 100644 --- a/lang/README.it.md +++ b/lang/README.it.md @@ -219,30 +219,31 @@ Dalla root del repository: # 1) Build delle wheel Chaquopy usate da android/app/build.gradle bash scripts/build-android-wheels-local.sh -# 2) Build di entrambe le varianti APK +# 2) Build degli APK slim predefiniti (universal: un APK per flavor e tipo di build) cd android -./gradlew --no-daemon :app:assembleDebug :app:assembleRelease +./gradlew --no-daemon :app:assembleSlimDebug :app:assembleSlimRelease ``` -Output APK (split degli ABI e APK universale; vedere `splits { abi { ... } }` in `android/app/build.gradle`): +Gli output dipendono dai **product flavors** `slim` / `full` (dimensione dell'albero Python) e dall **imballaggio ABI** `universal` (predefinito) o `split` (vedi `android/app/build.gradle`). -Debug (`android/app/build/outputs/apk/debug/`): +Con **`-PmeshchatxAbiPackaging=universal`** (predefinito), un solo APK contiene tutti gli ABI selezionati. -- `app-arm64-v8a-debug.apk` (dispositivi ARM64) -- `app-x86_64-debug.apk` (emulatori x86_64) -- `app-universal-debug.apk` (tutti gli ABI inclusi in un unico pacchetto) +Debug (`android/app/build/outputs/apk/slim/debug/`): -Release (`android/app/build/outputs/apk/release/`): +- `app-slim-debug.apk` -- `app-arm64-v8a-release-unsigned.apk` -- `app-x86_64-release-unsigned.apk` -- `app-universal-release-unsigned.apk` +Release (`android/app/build/outputs/apk/slim/release/`): + +- `app-slim-release-unsigned.apk` + +Per il bundle Python completo: `:app:assembleFullDebug` o `:app:assembleFullRelease`. Note: - Gli output release sono non firmati di default se non configurate le firme. -- Se serve una sola variante: `:app:assembleDebug` o `:app:assembleRelease`. -- Android punta agli ABI `arm64-v8a` e `x86_64` come in `android/app/build.gradle`. +- Per una sola build, ad esempio: `:app:assembleSlimDebug` o `:app:assembleSlimRelease`. +- ABI: `-PmeshchatxAbis` o `MESHCHATX_ABIS`; imballaggio: `-PmeshchatxAbiPackaging` o `MESHCHATX_ABI_PACKAGING`. +- Albero `meshchatx/` per Chaquopy: **`slim`** in `src/slim/python/`, **`full`** in `src/full/python/`. Dettagli in [`android/README.md`](../android/README.md). Documentazione aggiuntiva: diff --git a/lang/README.ja.md b/lang/README.ja.md index 52667e51..07ca3a72 100644 --- a/lang/README.ja.md +++ b/lang/README.ja.md @@ -219,30 +219,31 @@ MeshChatX はネイティブ Android APK のビルドに対応しています( # 1) android/app/build.gradle で使う Chaquopy 用ホイールをビルド bash scripts/build-android-wheels-local.sh -# 2) 両方の APK バリアントをビルド +# 2) 既定の slim APK をビルド(universal: フレーバーとビルドタイプごとに 1 つの APK) cd android -./gradlew --no-daemon :app:assembleDebug :app:assembleRelease +./gradlew --no-daemon :app:assembleSlimDebug :app:assembleSlimRelease ``` -APK の出力(ABI 分割と universal APK。`android/app/build.gradle` の `splits { abi { ... } }` を参照): +**product flavors** `slim` / `full`(Python ツリーの大きさ)と **ABI パッケージング** `universal`(既定)または `split`(`android/app/build.gradle`)で出力が決まります。 -デバッグ(`android/app/build/outputs/apk/debug/`): +**`-PmeshchatxAbiPackaging=universal`**(既定)では、選択した ABI がすべて入った単一 APK です。 -- `app-arm64-v8a-debug.apk`(ARM64 端末) -- `app-x86_64-debug.apk`(x86_64 エミュレータ) -- `app-universal-debug.apk`(同梱 ABI を 1 パッケージに) +デバッグ(`android/app/build/outputs/apk/slim/debug/`): -リリース(`android/app/build/outputs/apk/release/`): +- `app-slim-debug.apk` -- `app-arm64-v8a-release-unsigned.apk` -- `app-x86_64-release-unsigned.apk` -- `app-universal-release-unsigned.apk` +リリース(`android/app/build/outputs/apk/slim/release/`): + +- `app-slim-release-unsigned.apk` + +より大きい Python バンドルが必要なら `:app:assembleFullDebug` または `:app:assembleFullRelease`。 備考: - リリース出力は署名を設定しない限りデフォルトで未署名です。 -- どちらか一方でよい場合は `:app:assembleDebug` または `:app:assembleRelease`。 -- Android の対象 ABI は `android/app/build.gradle` で設定されている `arm64-v8a` と `x86_64` です。 +- 1 種類だけ欲しい場合は例: `:app:assembleSlimDebug` または `:app:assembleSlimRelease`。 +- ABI は `-PmeshchatxAbis` または `MESHCHATX_ABIS`、パッケージングは `-PmeshchatxAbiPackaging` または `MESHCHATX_ABI_PACKAGING` で上書きできます。 +- Chaquopy の `meshchatx/` ツリー: **`slim`** は `src/slim/python/` に小さい同期、**`full`** は `src/full/python/` に完全同期。詳細は [`android/README.md`](../android/README.md)。 追加ドキュメント: diff --git a/lang/README.ru.md b/lang/README.ru.md index dbed3475..9b9bf0f4 100644 --- a/lang/README.ru.md +++ b/lang/README.ru.md @@ -219,30 +219,31 @@ MeshChatX поддерживает нативные Android APK (не тольк # 1) Собрать колёса Chaquopy для android/app/build.gradle bash scripts/build-android-wheels-local.sh -# 2) Собрать обе вариации APK +# 2) Собрать slim APK по умолчанию (universal: один APK на flavor и тип сборки) cd android -./gradlew --no-daemon :app:assembleDebug :app:assembleRelease +./gradlew --no-daemon :app:assembleSlimDebug :app:assembleSlimRelease ``` -Выходные APK (разбиение по ABI и универсальный APK; см. `splits { abi { ... } }` в `android/app/build.gradle`): +Выходы определяются **product flavors** `slim` / `full` (размер дерева Python) и **ABI-упаковкой** `universal` (по умолчанию) или `split` (см. `android/app/build.gradle`). -Отладка (`android/app/build/outputs/apk/debug/`): +При **`-PmeshchatxAbiPackaging=universal`** (по умолчанию) один APK содержит все выбранные ABI. -- `app-arm64-v8a-debug.apk` (устройства ARM64) -- `app-x86_64-debug.apk` (эмуляторы x86_64) -- `app-universal-debug.apk` (все включённые ABI в одном пакете) +Отладка (`android/app/build/outputs/apk/slim/debug/`): -Релиз (`android/app/build/outputs/apk/release/`): +- `app-slim-debug.apk` -- `app-arm64-v8a-release-unsigned.apk` -- `app-x86_64-release-unsigned.apk` -- `app-universal-release-unsigned.apk` +Релиз (`android/app/build/outputs/apk/slim/release/`): + +- `app-slim-release-unsigned.apk` + +Для полного Python-бандла: `:app:assembleFullDebug` или `:app:assembleFullRelease`. Примечания: - Релизные артефакты по умолчанию не подписаны, если не настроена подпись. -- Если нужна одна вариация: `:app:assembleDebug` или `:app:assembleRelease`. -- Целевые ABI — `arm64-v8a` и `x86_64` согласно `android/app/build.gradle`. +- Для одной сборки, например: `:app:assembleSlimDebug` или `:app:assembleSlimRelease`. +- ABI: `-PmeshchatxAbis` или `MESHCHATX_ABIS`; упаковка: `-PmeshchatxAbiPackaging` или `MESHCHATX_ABI_PACKAGING`. +- Дерево `meshchatx/` для Chaquopy: **`slim`** синхронизируется в `src/slim/python/`, **`full`** в `src/full/python/`. Подробнее в [`android/README.md`](../android/README.md). Дополнительная документация: diff --git a/lang/README.zh.md b/lang/README.zh.md index 9af477da..c30145d0 100644 --- a/lang/README.zh.md +++ b/lang/README.zh.md @@ -219,30 +219,31 @@ MeshChatX 支持构建原生 Android APK(不仅限于 Termux)。 # 1) 构建 android/app/build.gradle 所需的 Chaquopy 轮子 bash scripts/build-android-wheels-local.sh -# 2) 构建两种 APK 变体 +# 2) 构建默认 slim APK(universal:每种 flavor + 构建类型一个 APK) cd android -./gradlew --no-daemon :app:assembleDebug :app:assembleRelease +./gradlew --no-daemon :app:assembleSlimDebug :app:assembleSlimRelease ``` -APK 输出(ABI 分包与 universal APK;见 `android/app/build.gradle` 中的 `splits { abi { ... } }`): +输出由 **product flavors** `slim` / `full`(Python 树大小)和 **ABI 打包** `universal`(默认)或 `split`(见 `android/app/build.gradle`)决定。 -调试(`android/app/build/outputs/apk/debug/`): +**`-PmeshchatxAbiPackaging=universal`**(默认)下,单个 APK 包含所选的全部 ABI。 -- `app-arm64-v8a-debug.apk`(ARM64 设备) -- `app-x86_64-debug.apk`(x86_64 模拟器) -- `app-universal-debug.apk`(所有已打包 ABI 的单包) +调试(`android/app/build/outputs/apk/slim/debug/`): -发布(`android/app/build/outputs/apk/release/`): +- `app-slim-debug.apk` -- `app-arm64-v8a-release-unsigned.apk` -- `app-x86_64-release-unsigned.apk` -- `app-universal-release-unsigned.apk` +发布(`android/app/build/outputs/apk/slim/release/`): + +- `app-slim-release-unsigned.apk` + +需要更大 Python 包时用 `:app:assembleFullDebug` 或 `:app:assembleFullRelease`。 说明: - 若未配置签名,发布构建默认未签名。 -- 若只需一种变体,可运行 `:app:assembleDebug` 或 `:app:assembleRelease`。 -- Android 目标 ABI 为 `android/app/build.gradle` 中配置的 `arm64-v8a` 与 `x86_64`。 +- 若只需一种构建,可运行例如 `:app:assembleSlimDebug` 或 `:app:assembleSlimRelease`。 +- ABI 可用 `-PmeshchatxAbis` 或 `MESHCHATX_ABIS` 覆盖;打包方式用 `-PmeshchatxAbiPackaging` 或 `MESHCHATX_ABI_PACKAGING`。 +- Chaquopy 的 `meshchatx/` 树:**`slim`** 同步到 `src/slim/python/`(较小),**`full`** 同步到 `src/full/python/`(完整)。详见 [`android/README.md`](../android/README.md)。 更多文档: