# TV 定制版

基于 FongMi TV 的 Android 影音应用，提供电视端（Leanback）和手机端（Mobile）两套界面，支持点播、直播以及外部配置。

## 定制内容

- 取消应用启动时的自动更新检测。
- 首页根据配置动态显示入口：
  - 未配置点播：显示“直播、设置”。
  - 已配置点播：显示“点播、直播、设置”。
- 设置页增加“启动时进入直播”选项。
- 该选项首次安装默认开启，之后会记住用户选择。
- 启动直播状态采用与“无痕模式”一致的“开/关”文字显示。
- 预设直播配置；该地址也可以手动填写到点播配置：

```text
http://iptv.373720560.xyz/qwer1234
```

## 项目信息

| 项目 | 内容 |
| --- | --- |
| 包名 | `com.fongmi.android.tv` |
| 版本 | `5.4.1` |
| 编译 SDK | API 37 |
| 目标 SDK | API 28 |
| 标准版最低系统 | Android 7.0（API 24） |
| 老电视兼容版 | Android 6.0（API 23） |
| CPU 架构 | `arm64-v8a`、`armeabi-v7a` |
| 界面版本 | `leanback`、`mobile` |

## 版本选择

### 界面

- `leanback`：电视、电视盒子，适合遥控器操作。
- `mobile`：手机和平板，适合触摸操作。

### CPU 架构

- `arm64-v8a`：大多数较新的 64 位设备。
- `armeabi-v7a`：32 位设备及部分只提供 32 位运行环境的老电视。

CPU 是 64 位不代表系统一定支持 64 位应用。部分老电视应优先尝试 `armeabi-v7a`。

### 老电视兼容包

Android 6.0 电视可使用：

```text
Release/apk/leanback-armeabi_v7a-android6-debug.apk
```

该版本具有以下特点：

- 最低支持 Android 6.0（API 23）。
- 使用 `armeabi-v7a` 架构。
- 同时包含 v1 和 v2 APK 签名。
- 不包含 Chaquopy Python 引擎，因此 Python 类型的点播源不可用。
- Java、CSP、QuickJS、普通 HTTP/HLS 点播与直播不受影响。

Android 5.x 及更低版本暂不支持。

## 配置行为

### 点播

点播配置 URL 非空时，首页会自动出现“点播”入口。删除点播配置后，该入口自动隐藏。

配置支持 `sites`、`parses`、`lives`、`doh`、`proxy`、`hosts`、`ads` 等字段。

### 直播

支持常见的 JSON、M3U 和 TXT 直播源，包含频道分组、EPG、收藏等功能。

### 启动进入直播

路径：

```text
设置 -> 启动时进入直播
```

状态为“开”时，配置加载完成后会自动进入直播；状态为“关”时停留在首页。

## 本地构建

### 环境要求

- macOS、Linux 或 Windows
- JDK 21
- Android SDK Platform 37
- Android Build Tools

在项目根目录创建 `local.properties`：

```properties
sdk.dir=/你的/Android/Sdk/路径
```

项目中的 `gradlew` 可能没有执行权限，可直接使用 `bash gradlew`。

### 构建调试包

电视 ARM64：

```bash
bash gradlew assembleLeanbackArm64_v8aDebug --no-build-cache
```

电视 32 位：

```bash
bash gradlew assembleLeanbackArmeabi_v7aDebug --no-build-cache
```

手机 ARM64：

```bash
bash gradlew assembleMobileArm64_v8aDebug --no-build-cache
```

手机 32 位：

```bash
bash gradlew assembleMobileArmeabi_v7aDebug --no-build-cache
```

### 构建 Android 6 老电视包

```bash
bash gradlew assembleLeanbackArmeabi_v7aDebug \
  -Plegacy=true \
  --no-build-cache
```

输出目录：

```text
app/build/outputs/apk/
```

### 构建 Release 包

```bash
bash gradlew assembleLeanbackArm64_v8aRelease --no-build-cache
bash gradlew assembleLeanbackArmeabi_v7aRelease --no-build-cache
```

Release 构建完成后，APK 会复制到：

```text
Release/apk/
```

如果 `local.properties` 没有提供正式签名信息，Release 包会使用调试签名。

正式签名配置示例：

```properties
storeFile=/绝对路径/release.jks
keyAlias=你的别名
storePassword=你的密码
```

## ADB 安装

查看设备：

```bash
adb devices
```

覆盖安装并保留数据：

```bash
adb install -r 你的安装包.apk
```

如果提示签名不一致，需要先卸载旧版本：

```bash
adb uninstall com.fongmi.android.tv
adb install 你的安装包.apk
```

卸载会清除应用配置和观看记录。

## 常见问题

### 安装包无法解析

常见原因：

1. 电视系统低于 APK 的最低 Android 版本。
2. APK 架构与电视运行环境不一致。
3. 老系统不支持仅使用 v2 签名的 APK。
4. 下载或复制过程中 APK 文件损坏。

Android 6 老电视优先使用老电视兼容包。

### 提示应用未安装

通常是已安装版本与新 APK 的签名不同。卸载旧版本后重新安装。

### 配置了点播但首页没有入口

确认地址填写在“点播配置”而不是“直播配置”。配置保存后，首页会自动刷新并显示“点播”。

### 设置页崩溃

本定制版已经移除存在兼容问题的 `MaterialSwitch`，改为与“无痕模式”一致的文字状态显示。

## 目录结构

```text
TV/
├── app/                 主应用
│   └── src/
│       ├── main/        公共业务逻辑
│       ├── leanback/    电视界面
│       ├── mobile/      手机界面
│       └── legacy/      Android 6 兼容代码
├── catvod/              Spider 与网络基础模块
├── chaquo/              Python 引擎
├── quickjs/             JavaScript 引擎
├── docs/                配置及接口文档
└── Release/apk/         Release 和兼容 APK
```

## 相关文档

| 文档 | 内容 |
| --- | --- |
| [CONFIG.md](docs/CONFIG.md) | 点播及直播配置格式 |
| [LIVE.md](docs/LIVE.md) | 直播源格式 |
| [SPIDER.md](docs/SPIDER.md) | Spider 接口 |
| [LOCAL.md](docs/LOCAL.md) | 本地 HTTP API |

## 说明

本项目仅提供播放器及配置加载能力。请确保使用的内容源具有合法授权，并遵守所在地区的法律法规。
