安卓低版本兼容

This commit is contained in:
mtvpls
2026-06-01 10:38:39 +08:00
parent 9d3f458291
commit c42e0c2019
3 changed files with 22 additions and 7 deletions
+18 -6
View File
@@ -34,8 +34,18 @@ permissions:
jobs: jobs:
build: build:
name: Build Android TV APK name: Build Android TV APK (${{ matrix.variant }})
runs-on: ubuntu-latest 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: steps:
- name: Checkout source code - name: Checkout source code
@@ -80,6 +90,7 @@ jobs:
APP_NAME: ${{ inputs.app_name }} APP_NAME: ${{ inputs.app_name }}
VERSION_NAME: ${{ inputs.version_name }} VERSION_NAME: ${{ inputs.version_name }}
VERSION_CODE: ${{ inputs.version_code }} VERSION_CODE: ${{ inputs.version_code }}
MIN_SDK: ${{ matrix.min_sdk }}
ANDROID_KEYSTORE_PATH: /tmp/android-tv-release.keystore ANDROID_KEYSTORE_PATH: /tmp/android-tv-release.keystore
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
@@ -89,24 +100,25 @@ jobs:
-PBASE_URL="$BASE_URL" \ -PBASE_URL="$BASE_URL" \
-PAPP_NAME="$APP_NAME" \ -PAPP_NAME="$APP_NAME" \
-PVERSION_NAME="$VERSION_NAME" \ -PVERSION_NAME="$VERSION_NAME" \
-PVERSION_CODE="$VERSION_CODE" -PVERSION_CODE="$VERSION_CODE" \
-PMIN_SDK="$MIN_SDK"
- name: Collect APK artifacts - name: Collect APK artifacts
run: | run: |
mkdir -p /tmp/android-tv-apks 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 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 fi
if [ -f apps/android-tv/app/build/outputs/apk/release/app-release-unsigned.apk ]; then 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 fi
ls -lh /tmp/android-tv-apks ls -lh /tmp/android-tv-apks
- name: Upload APK artifacts - name: Upload APK artifacts
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: moontvplus-android-tv-${{ inputs.version_name }} name: moontvplus-android-tv-${{ inputs.version_name }}-${{ matrix.label }}
path: /tmp/android-tv-apks/*.apk path: /tmp/android-tv-apks/*.apk
if-no-files-found: error if-no-files-found: error
retention-days: 30 retention-days: 30
+2
View File
@@ -8,6 +8,7 @@
- `APP_NAME`: Android TV 桌面显示名称 - `APP_NAME`: Android TV 桌面显示名称
- `VERSION_NAME`: APK 版本名 - `VERSION_NAME`: APK 版本名
- `VERSION_CODE`: APK 版本号,整数 - `VERSION_CODE`: APK 版本号,整数
- `MIN_SDK`: 最低 Android API,标准版为 `23`Android 6+),兼容版为 `21`Android 5+
App 启动时会自动打开: App 启动时会自动打开:
@@ -17,6 +18,7 @@ BASE_URL 去掉末尾 / 后 + /tv
## 特性 ## 特性
- GitHub Actions 默认构建两个版本:`android6plus` 标准版和 `android5plus` 兼容版
- 锁定横屏 - 锁定横屏
- 支持 Android TV Launcher - 支持 Android TV Launcher
- 允许 HTTP 明文访问 - 允许 HTTP 明文访问
+2 -1
View File
@@ -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 appDisplayName = propOrEnv("APP_NAME", "APP_NAME", "MoonTVPlus TV")
val versionNameValue = propOrEnv("VERSION_NAME", "VERSION_NAME", "1.0.0") val versionNameValue = propOrEnv("VERSION_NAME", "VERSION_NAME", "1.0.0")
val versionCodeValue = propOrEnv("VERSION_CODE", "VERSION_CODE", "1").toIntOrNull() ?: 1 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 fun escapeJavaString(value: String): String = value
.replace("\\", "\\\\") .replace("\\", "\\\\")
@@ -30,7 +31,7 @@ android {
defaultConfig { defaultConfig {
applicationId = "com.moontvplus.tv" applicationId = "com.moontvplus.tv"
minSdk = 23 minSdk = minSdkValue
targetSdk = 35 targetSdk = 35
versionCode = versionCodeValue versionCode = versionCodeValue
versionName = versionNameValue versionName = versionNameValue