安卓tv打包

This commit is contained in:
mtvpls
2026-06-01 09:52:29 +08:00
parent a682998930
commit 9d3f458291
13 changed files with 486 additions and 0 deletions
+112
View File
@@ -0,0 +1,112 @@
name: Build Android TV APK
on:
workflow_dispatch:
inputs:
base_url:
description: '服务端 Base URL,不需要带 /tv,例如 https://example.com 或 http://192.168.1.10:3000'
required: true
default: 'http://192.168.1.10:3000'
type: string
app_name:
description: 'Android TV 应用名称'
required: true
default: 'MoonTVPlus TV'
type: string
version_name:
description: '版本名'
required: false
default: '1.0.0'
type: string
version_code:
description: '版本号,必须是整数'
required: false
default: '1'
type: string
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
actions: read
jobs:
build:
name: Build Android TV APK
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Install Android SDK packages
run: |
sdkmanager "platforms;android-35" "build-tools;35.0.0"
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
gradle-version: '8.10.2'
- name: Prepare Android TV icon from public/logo.png
run: |
cp public/logo.png apps/android-tv/app/src/main/res/drawable/logo.png
- name: Decode Android signing keystore
env:
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
run: |
if [ -n "$ANDROID_KEYSTORE_BASE64" ]; then
echo "$ANDROID_KEYSTORE_BASE64" | base64 -d > /tmp/android-tv-release.keystore
else
echo "ANDROID_KEYSTORE_BASE64 is not set, release APK will be unsigned."
fi
- name: Build APK
working-directory: apps/android-tv
env:
BASE_URL: ${{ inputs.base_url }}
APP_NAME: ${{ inputs.app_name }}
VERSION_NAME: ${{ inputs.version_name }}
VERSION_CODE: ${{ inputs.version_code }}
ANDROID_KEYSTORE_PATH: /tmp/android-tv-release.keystore
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
run: |
gradle assembleDebug assembleRelease \
-PBASE_URL="$BASE_URL" \
-PAPP_NAME="$APP_NAME" \
-PVERSION_NAME="$VERSION_NAME" \
-PVERSION_CODE="$VERSION_CODE"
- 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"
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"
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"
fi
ls -lh /tmp/android-tv-apks
- name: Upload APK artifacts
uses: actions/upload-artifact@v4
with:
name: moontvplus-android-tv-${{ inputs.version_name }}
path: /tmp/android-tv-apks/*.apk
if-no-files-found: error
retention-days: 30