diff --git a/.github/workflows/android-tv.yml b/.github/workflows/android-tv.yml index 6c44e09..0b3f429 100644 --- a/.github/workflows/android-tv.yml +++ b/.github/workflows/android-tv.yml @@ -34,8 +34,18 @@ permissions: jobs: build: - name: Build Android TV APK + name: Build Android TV APK (${{ matrix.variant }}) runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - variant: standard + min_sdk: '23' + label: android6plus + - variant: compat + min_sdk: '21' + label: android5plus steps: - name: Checkout source code @@ -80,6 +90,7 @@ jobs: APP_NAME: ${{ inputs.app_name }} VERSION_NAME: ${{ inputs.version_name }} VERSION_CODE: ${{ inputs.version_code }} + MIN_SDK: ${{ matrix.min_sdk }} ANDROID_KEYSTORE_PATH: /tmp/android-tv-release.keystore ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} @@ -89,24 +100,25 @@ jobs: -PBASE_URL="$BASE_URL" \ -PAPP_NAME="$APP_NAME" \ -PVERSION_NAME="$VERSION_NAME" \ - -PVERSION_CODE="$VERSION_CODE" + -PVERSION_CODE="$VERSION_CODE" \ + -PMIN_SDK="$MIN_SDK" - name: Collect APK artifacts run: | mkdir -p /tmp/android-tv-apks - cp apps/android-tv/app/build/outputs/apk/debug/app-debug.apk "/tmp/android-tv-apks/moontvplus-tv-${{ inputs.version_name }}-debug.apk" + cp apps/android-tv/app/build/outputs/apk/debug/app-debug.apk "/tmp/android-tv-apks/moontvplus-tv-${{ inputs.version_name }}-${{ matrix.label }}-debug.apk" if [ -f apps/android-tv/app/build/outputs/apk/release/app-release.apk ]; then - cp apps/android-tv/app/build/outputs/apk/release/app-release.apk "/tmp/android-tv-apks/moontvplus-tv-${{ inputs.version_name }}-release-signed.apk" + cp apps/android-tv/app/build/outputs/apk/release/app-release.apk "/tmp/android-tv-apks/moontvplus-tv-${{ inputs.version_name }}-${{ matrix.label }}-release-signed.apk" fi if [ -f apps/android-tv/app/build/outputs/apk/release/app-release-unsigned.apk ]; then - cp apps/android-tv/app/build/outputs/apk/release/app-release-unsigned.apk "/tmp/android-tv-apks/moontvplus-tv-${{ inputs.version_name }}-release-unsigned.apk" + cp apps/android-tv/app/build/outputs/apk/release/app-release-unsigned.apk "/tmp/android-tv-apks/moontvplus-tv-${{ inputs.version_name }}-${{ matrix.label }}-release-unsigned.apk" fi ls -lh /tmp/android-tv-apks - name: Upload APK artifacts uses: actions/upload-artifact@v4 with: - name: moontvplus-android-tv-${{ inputs.version_name }} + name: moontvplus-android-tv-${{ inputs.version_name }}-${{ matrix.label }} path: /tmp/android-tv-apks/*.apk if-no-files-found: error retention-days: 30 diff --git a/apps/android-tv/README.md b/apps/android-tv/README.md index 59fa029..80b8c09 100644 --- a/apps/android-tv/README.md +++ b/apps/android-tv/README.md @@ -8,6 +8,7 @@ - `APP_NAME`: Android TV 桌面显示名称 - `VERSION_NAME`: APK 版本名 - `VERSION_CODE`: APK 版本号,整数 +- `MIN_SDK`: 最低 Android API,标准版为 `23`(Android 6+),兼容版为 `21`(Android 5+) App 启动时会自动打开: @@ -17,6 +18,7 @@ BASE_URL 去掉末尾 / 后 + /tv ## 特性 +- GitHub Actions 默认构建两个版本:`android6plus` 标准版和 `android5plus` 兼容版 - 锁定横屏 - 支持 Android TV Launcher - 允许 HTTP 明文访问 diff --git a/apps/android-tv/app/build.gradle.kts b/apps/android-tv/app/build.gradle.kts index b3ba4d5..f2cb9b8 100644 --- a/apps/android-tv/app/build.gradle.kts +++ b/apps/android-tv/app/build.gradle.kts @@ -12,6 +12,7 @@ val rawBaseUrl = propOrEnv("BASE_URL", "BASE_URL", "http://192.168.1.10:3000") val appDisplayName = propOrEnv("APP_NAME", "APP_NAME", "MoonTVPlus TV") val versionNameValue = propOrEnv("VERSION_NAME", "VERSION_NAME", "1.0.0") val versionCodeValue = propOrEnv("VERSION_CODE", "VERSION_CODE", "1").toIntOrNull() ?: 1 +val minSdkValue = propOrEnv("MIN_SDK", "MIN_SDK", "23").toIntOrNull() ?: 23 fun escapeJavaString(value: String): String = value .replace("\\", "\\\\") @@ -30,7 +31,7 @@ android { defaultConfig { applicationId = "com.moontvplus.tv" - minSdk = 23 + minSdk = minSdkValue targetSdk = 35 versionCode = versionCodeValue versionName = versionNameValue