feat(android): add separate legacy32 APK build for armeabi-v7a

This commit is contained in:
Dark_Avery 2026-03-23 20:48:45 +03:00
parent 4f65813785
commit 54b86cd9e2
4 changed files with 105 additions and 22 deletions

View File

@ -322,7 +322,8 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 30 timeout-minutes: 30
env: env:
ANDROID_APK_NAME: tg-ws-proxy-android-${{ github.event.inputs.version }}.apk ANDROID_APK_STANDARD_NAME: tg-ws-proxy-android-${{ github.event.inputs.version }}.apk
ANDROID_APK_LEGACY32_NAME: tg-ws-proxy-android-${{ github.event.inputs.version }}-legacy32.apk
defaults: defaults:
run: run:
working-directory: android working-directory: android
@ -370,7 +371,7 @@ jobs:
printf '%s' "$ANDROID_KEYSTORE_BASE64" | base64 --decode > "$RUNNER_TEMP/android-release.keystore" printf '%s' "$ANDROID_KEYSTORE_BASE64" | base64 --decode > "$RUNNER_TEMP/android-release.keystore"
test -s "$RUNNER_TEMP/android-release.keystore" test -s "$RUNNER_TEMP/android-release.keystore"
- name: Build Android release APK - name: Build Android release APKs
env: env:
LOCAL_CHAQUOPY_REPO: ${{ github.workspace }}/android/.m2-chaquopy-ci LOCAL_CHAQUOPY_REPO: ${{ github.workspace }}/android/.m2-chaquopy-ci
ANDROID_KEYSTORE_FILE: ${{ runner.temp }}/android-release.keystore ANDROID_KEYSTORE_FILE: ${{ runner.temp }}/android-release.keystore
@ -379,16 +380,23 @@ jobs:
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
run: | run: |
chmod +x gradlew build-local-debug.sh chmod +x gradlew build-local-debug.sh
./build-local-debug.sh assembleRelease ./build-local-debug.sh assembleStandardRelease
./build-local-debug.sh assembleLegacy32Release
- name: Rename APK - name: Rename APKs
run: cp app/build/outputs/apk/release/app-release.apk "app/build/outputs/apk/release/$ANDROID_APK_NAME" run: |
cp app/build/outputs/apk/standard/release/app-standard-release.apk \
"app/build/outputs/apk/standard/release/$ANDROID_APK_STANDARD_NAME"
cp app/build/outputs/apk/legacy32/release/app-legacy32-release.apk \
"app/build/outputs/apk/legacy32/release/$ANDROID_APK_LEGACY32_NAME"
- name: Upload artifact - name: Upload artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: TgWsProxy-android-release name: TgWsProxy-android-release
path: android/app/build/outputs/apk/release/${{ env.ANDROID_APK_NAME }} path: |
android/app/build/outputs/apk/standard/release/${{ env.ANDROID_APK_STANDARD_NAME }}
android/app/build/outputs/apk/legacy32/release/${{ env.ANDROID_APK_LEGACY32_NAME }}
release: release:
needs: [build-windows, build-win7, build-macos, build-linux, build-android] needs: [build-windows, build-win7, build-macos, build-linux, build-android]
@ -422,6 +430,7 @@ jobs:
dist/TgWsProxy_linux_amd64 dist/TgWsProxy_linux_amd64
dist/TgWsProxy_linux_amd64.deb dist/TgWsProxy_linux_amd64.deb
dist/tg-ws-proxy-android-${{ github.event.inputs.version }}.apk dist/tg-ws-proxy-android-${{ github.event.inputs.version }}.apk
dist/tg-ws-proxy-android-${{ github.event.inputs.version }}-legacy32.apk
draft: false draft: false
prerelease: false prerelease: false
env: env:

View File

@ -142,13 +142,25 @@ tg-ws-proxy [--port PORT] [--host HOST] [--dc-ip DC:IP ...] [-v]
Требуются JDK 17, Android SDK и Gradle. Локальная debug-сборка: Требуются JDK 17, Android SDK и Gradle. Локальная debug-сборка:
```bash ```bash
./android/build-local-debug.sh ./android/build-local-debug.sh assembleStandardDebug
``` ```
Результат: Результат:
```text ```text
android/app/build/outputs/apk/debug/app-debug.apk android/app/build/outputs/apk/standard/debug/app-standard-debug.apk
```
Legacy32 debug-сборка:
```bash
./android/build-local-debug.sh assembleLegacy32Debug
```
Результат:
```text
android/app/build/outputs/apk/legacy32/debug/app-legacy32-debug.apk
``` ```
### Android signed release APK ### Android signed release APK
@ -166,13 +178,15 @@ export ANDROID_KEY_PASSWORD=...
```bash ```bash
cd android cd android
./gradlew assembleRelease ./build-local-debug.sh assembleStandardRelease
./build-local-debug.sh assembleLegacy32Release
``` ```
Результат: Результат:
```text ```text
android/app/build/outputs/apk/release/app-release.apk android/app/build/outputs/apk/standard/release/app-standard-release.apk
android/app/build/outputs/apk/legacy32/release/app-legacy32-release.apk
``` ```
**Аргументы:** **Аргументы:**
@ -285,6 +299,17 @@ Tray-приложение хранит данные в:
- Apple Silicon macOS 11.0+ - Apple Silicon macOS 11.0+
- Linux x86_64 (требуется AppIndicator для системного трея) - Linux x86_64 (требуется AppIndicator для системного трея)
Android-артефакты:
- `tg-ws-proxy-android-vX.Y.Z.apk`
- `tg-ws-proxy-android-vX.Y.Z-legacy32.apk`
Для signed Android release в GitHub Actions нужны secrets:
- `ANDROID_KEYSTORE_BASE64`
- `ANDROID_KEYSTORE_PASSWORD`
- `ANDROID_KEY_ALIAS`
- `ANDROID_KEY_PASSWORD`
## Лицензия ## Лицензия
[MIT License](LICENSE) [MIT License](LICENSE)

View File

@ -70,9 +70,22 @@ android {
versionName = "0.1.0" versionName = "0.1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
ndk { flavorDimensions += "runtime"
abiFilters += listOf("arm64-v8a", "x86_64") productFlavors {
create("standard") {
dimension = "runtime"
ndk {
abiFilters += listOf("arm64-v8a", "x86_64")
}
}
create("legacy32") {
dimension = "runtime"
versionNameSuffix = "-legacy32"
ndk {
abiFilters += listOf("armeabi-v7a")
}
} }
} }
@ -115,8 +128,13 @@ android {
} }
chaquopy { chaquopy {
defaultConfig { productFlavors {
version = "3.12" getByName("standard") {
version = "3.12"
}
getByName("legacy32") {
version = "3.11"
}
} }
sourceSets { sourceSets {
getByName("main") { getByName("main") {

View File

@ -43,10 +43,26 @@ fi
ATTEMPTS="${ATTEMPTS:-5}" ATTEMPTS="${ATTEMPTS:-5}"
SLEEP_SECONDS="${SLEEP_SECONDS:-15}" SLEEP_SECONDS="${SLEEP_SECONDS:-15}"
TASK="${1:-assembleDebug}" TASK="${1:-assembleStandardDebug}"
LOCAL_CHAQUOPY_REPO="${LOCAL_CHAQUOPY_REPO:-$ROOT_DIR/.m2-chaquopy}" LOCAL_CHAQUOPY_REPO="${LOCAL_CHAQUOPY_REPO:-$ROOT_DIR/.m2-chaquopy}"
CHAQUOPY_MAVEN_BASE="${CHAQUOPY_MAVEN_BASE:-https://repo.maven.apache.org/maven2}" CHAQUOPY_MAVEN_BASE="${CHAQUOPY_MAVEN_BASE:-https://repo.maven.apache.org/maven2}"
task_uses_legacy32() {
[[ "$TASK" =~ [Ll]egacy32 ]]
}
task_uses_standard() {
if [[ "$TASK" =~ [Ss]tandard ]]; then
return 0
fi
if task_uses_legacy32; then
return 1
fi
return 0
}
prefetch_artifact() { prefetch_artifact() {
local relative_path="$1" local relative_path="$1"
local destination="$LOCAL_CHAQUOPY_REPO/$relative_path" local destination="$LOCAL_CHAQUOPY_REPO/$relative_path"
@ -76,15 +92,30 @@ prefetch_chaquopy_runtime() {
"com/chaquo/python/runtime/chaquopy_java/17.0.0/chaquopy_java-17.0.0.pom" "com/chaquo/python/runtime/chaquopy_java/17.0.0/chaquopy_java-17.0.0.pom"
"com/chaquo/python/runtime/chaquopy_java/17.0.0/chaquopy_java-17.0.0.jar" "com/chaquo/python/runtime/chaquopy_java/17.0.0/chaquopy_java-17.0.0.jar"
"com/chaquo/python/runtime/libchaquopy_java/17.0.0/libchaquopy_java-17.0.0.pom" "com/chaquo/python/runtime/libchaquopy_java/17.0.0/libchaquopy_java-17.0.0.pom"
"com/chaquo/python/runtime/libchaquopy_java/17.0.0/libchaquopy_java-17.0.0-3.12-arm64-v8a.so"
"com/chaquo/python/runtime/libchaquopy_java/17.0.0/libchaquopy_java-17.0.0-3.12-x86_64.so"
"com/chaquo/python/target/3.12.12-0/target-3.12.12-0.pom"
"com/chaquo/python/target/3.12.12-0/target-3.12.12-0-arm64-v8a.zip"
"com/chaquo/python/target/3.12.12-0/target-3.12.12-0-stdlib-pyc.zip"
"com/chaquo/python/target/3.12.12-0/target-3.12.12-0-stdlib.zip"
"com/chaquo/python/target/3.12.12-0/target-3.12.12-0-x86_64.zip"
) )
if task_uses_standard; then
artifacts+=(
"com/chaquo/python/runtime/libchaquopy_java/17.0.0/libchaquopy_java-17.0.0-3.12-arm64-v8a.so"
"com/chaquo/python/runtime/libchaquopy_java/17.0.0/libchaquopy_java-17.0.0-3.12-x86_64.so"
"com/chaquo/python/target/3.12.12-0/target-3.12.12-0.pom"
"com/chaquo/python/target/3.12.12-0/target-3.12.12-0-arm64-v8a.zip"
"com/chaquo/python/target/3.12.12-0/target-3.12.12-0-stdlib-pyc.zip"
"com/chaquo/python/target/3.12.12-0/target-3.12.12-0-stdlib.zip"
"com/chaquo/python/target/3.12.12-0/target-3.12.12-0-x86_64.zip"
)
fi
if task_uses_legacy32; then
artifacts+=(
"com/chaquo/python/runtime/libchaquopy_java/17.0.0/libchaquopy_java-17.0.0-3.11-armeabi-v7a.so"
"com/chaquo/python/target/3.11.10-0/target-3.11.10-0.pom"
"com/chaquo/python/target/3.11.10-0/target-3.11.10-0-armeabi-v7a.zip"
"com/chaquo/python/target/3.11.10-0/target-3.11.10-0-stdlib-pyc.zip"
"com/chaquo/python/target/3.11.10-0/target-3.11.10-0-stdlib.zip"
)
fi
for artifact in "${artifacts[@]}"; do for artifact in "${artifacts[@]}"; do
prefetch_artifact "$artifact" prefetch_artifact "$artifact"
done done