Skip to content

Commit 740444e

Browse files
committed
Fix Android TV APK distribution
1 parent f096cc9 commit 740444e

File tree

10 files changed

+714
-20
lines changed

10 files changed

+714
-20
lines changed
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
name: Android TV APK
2+
3+
on:
4+
pull_request:
5+
paths:
6+
- "android-tv/**"
7+
- ".github/workflows/android-tv-apk.yml"
8+
push:
9+
branches:
10+
- main
11+
paths:
12+
- "android-tv/**"
13+
- ".github/workflows/android-tv-apk.yml"
14+
workflow_dispatch:
15+
inputs:
16+
release_tag:
17+
description: "Optional release tag used to publish the built APK"
18+
required: false
19+
type: string
20+
release_title:
21+
description: "Optional release title"
22+
required: false
23+
type: string
24+
kvideo_url:
25+
description: "Optional default KVideo URL baked into the APK"
26+
required: false
27+
type: string
28+
29+
permissions:
30+
contents: write
31+
32+
jobs:
33+
build_android_tv_apk:
34+
runs-on: ubuntu-latest
35+
env:
36+
KVIDEO_URL: ${{ github.event_name == 'workflow_dispatch' && inputs.kvideo_url || '' }}
37+
defaults:
38+
run:
39+
working-directory: android-tv
40+
41+
steps:
42+
- name: Checkout repository
43+
uses: actions/checkout@v4
44+
45+
- name: Set up Java 17
46+
uses: actions/setup-java@v4
47+
with:
48+
distribution: temurin
49+
java-version: "17"
50+
cache: gradle
51+
52+
- name: Set up Android SDK
53+
uses: android-actions/setup-android@v3
54+
55+
- name: Install Android SDK packages
56+
run: sdkmanager "platforms;android-34" "build-tools;34.0.0"
57+
58+
- name: Make Gradle wrapper executable
59+
run: chmod +x ./gradlew
60+
61+
- name: Build debug APK
62+
run: ./gradlew --no-daemon assembleDebug -PkvideoUrl="$KVIDEO_URL"
63+
64+
- name: Upload APK artifact
65+
uses: actions/upload-artifact@v4
66+
with:
67+
name: kvideo-android-tv-apk
68+
path: android-tv/app/build/outputs/apk/debug/app-debug.apk
69+
if-no-files-found: error
70+
71+
- name: Publish GitHub release
72+
if: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag != '' }}
73+
working-directory: .
74+
env:
75+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
76+
RELEASE_TAG: ${{ inputs.release_tag }}
77+
RELEASE_TITLE: ${{ inputs.release_title }}
78+
run: |
79+
release_notes="$(mktemp)"
80+
effective_title="${RELEASE_TITLE:-Android TV APK ${RELEASE_TAG}}"
81+
default_url_text="${KVIDEO_URL:-未预置,首次启动时手动填写}"
82+
83+
cat >"$release_notes" <<EOF
84+
预构建的 Android TV APK。
85+
86+
使用方式:
87+
1. 下载并侧载安装 APK
88+
2. 首次启动时输入你的 KVideo 地址
89+
3. 保存后即可直接进入
90+
91+
构建提交:$GITHUB_SHA
92+
默认地址:$default_url_text
93+
EOF
94+
95+
if gh release view "$RELEASE_TAG" >/dev/null 2>&1; then
96+
gh release upload "$RELEASE_TAG" "android-tv/app/build/outputs/apk/debug/app-debug.apk#KVideo-AndroidTV.apk" --clobber
97+
gh release edit "$RELEASE_TAG" --title "$effective_title" --notes-file "$release_notes"
98+
else
99+
gh release create "$RELEASE_TAG" "android-tv/app/build/outputs/apk/debug/app-debug.apk#KVideo-AndroidTV.apk" \
100+
--title "$effective_title" \
101+
--notes-file "$release_notes" \
102+
--target "$GITHUB_SHA"
103+
fi

README.md

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -781,40 +781,53 @@ npm start
781781

782782
项目内置了一个轻量的 Android TV WebView 壳应用,可以将 KVideo 打包成 APK 安装到 Android TV 或机顶盒上。
783783

784+
**直接下载:**
785+
786+
- 仓库维护者可以通过 GitHub Actions 的 `Android TV APK` 工作流直接发布预构建 APK 到 **Releases**
787+
- 用户下载安装后,首次启动时填写自己的 KVideo 地址即可,不需要再改源码重新编译
788+
784789
**前置要求:**
785790

786791
- [Android Studio](https://developer.android.com/studio)(推荐)或 Android SDK Command-line Tools
787792
- JDK 17+
788793

789794
**步骤:**
790795

791-
1. **修改目标 URL**:编辑 `android-tv/app/src/main/java/com/kvideo/tv/MainActivity.kt`,将 `KVIDEO_URL` 改为你的部署地址:
792-
```kotlin
793-
private const val KVIDEO_URL = "https://your-kvideo-instance.com"
794-
```
795-
796-
2. **使用 Android Studio 构建(推荐)**
796+
1. **使用 Android Studio 构建(推荐)**
797797
- 用 Android Studio 打开 `android-tv/` 目录
798798
- 等待 Gradle 同步完成
799799
- 点击 **Build → Build Bundle(s) / APK(s) → Build APK(s)**
800800
- APK 输出在 `android-tv/app/build/outputs/apk/debug/app-debug.apk`
801801

802-
3. **使用命令行构建**
802+
2. **使用命令行构建**
803803
```bash
804804
cd android-tv
805805
./gradlew assembleDebug
806806
```
807807
APK 输出在 `app/build/outputs/apk/debug/app-debug.apk`
808808

809-
4. **安装到 Android TV**
809+
如果你希望在构建时预置默认地址,可额外传入 `-PkvideoUrl`
810+
```bash
811+
cd android-tv
812+
./gradlew assembleDebug -PkvideoUrl="https://your-kvideo-instance.com"
813+
```
814+
815+
3. **安装到 Android TV**
810816
```bash
811817
adb install app/build/outputs/apk/debug/app-debug.apk
812818
```
813819
或通过 U 盘、文件管理器等方式侧载安装。
814820

821+
4. **首次启动配置**
822+
- 首次打开 APK 时输入你的 KVideo 部署地址
823+
- 保存后应用会记住该地址,后续直接打开即可
824+
- 需要修改地址时,可在站点根页按返回,或使用部分遥控器的菜单键重新打开设置页
825+
815826
> **注意**:此 APK 是一个 WebView 壳应用,需要你的 KVideo 实例已经部署并可访问。APK 本身不包含 KVideo 代码,仅作为 TV 端的浏览器入口。
816827
>
817828
> **最低系统要求**:Android 8.0 (API 26) 及以上。Android 7.0 及更低版本的 WebView 不支持本项目使用的 ES2017+ JavaScript 特性和现代 CSS,可能导致白屏。如遇白屏问题,请升级系统 WebView 或使用 Android 8.0+ 设备。
829+
>
830+
> **发布方式**:GitHub Actions 的 `Android TV APK` 工作流会持续验证壳应用可构建;如需对外发布预构建 APK,可手动触发该工作流并填写 `release_tag`,生成对应的 GitHub Release 资产。
818831
819832
#### 选项 6:Apple TV 应用构建
820833

android-tv/app/build.gradle.kts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,25 @@ plugins {
33
id("org.jetbrains.kotlin.android") version "1.9.22"
44
}
55

6+
val defaultKVideoUrl = providers
7+
.gradleProperty("kvideoUrl")
8+
.orElse("")
9+
.get()
10+
.replace("\\", "\\\\")
11+
.replace("\"", "\\\"")
12+
613
android {
714
namespace = "com.kvideo.tv"
815
compileSdk = 34
916

1017
defaultConfig {
1118
applicationId = "com.kvideo.tv"
12-
minSdk = 21
19+
minSdk = 26
1320
targetSdk = 34
1421
versionCode = 1
1522
versionName = "1.0.0"
23+
24+
buildConfigField("String", "DEFAULT_KVIDEO_URL", "\"$defaultKVideoUrl\"")
1625
}
1726

1827
buildTypes {
@@ -32,6 +41,10 @@ android {
3241
kotlinOptions {
3342
jvmTarget = "17"
3443
}
44+
45+
buildFeatures {
46+
buildConfig = true
47+
}
3548
}
3649

3750
dependencies {

0 commit comments

Comments
 (0)