影视内置打包修改
一、下载FongMi版仓库
https://github.com/FongMi/TV
首先修改gradle/wrapper/gradle-wrapper.properties,用于加速gradle的下载: 将源代码
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
改成
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.8-all.zip
二、下载JDK17
建议下载amazon-corretto版本
https://corretto.aws/downloads/resources/17.0.9.8.1/amazon-corretto-17.0.9.8.1-windows-x64-jdk.zip
三、 解决加速及依赖问题(科学上网忽略)
在同步的过程中,会出现下载依赖慢,某些包下载不了等问题,解决方法如下: ★★项目根目录下《setting.gradle》文件中★★,添加aliyun的镜像,放在前面,
//改为阿里云的镜像地址
maven { setUrl("https://maven.aliyun.com/repository/central") }
maven { setUrl("https://maven.aliyun.com/repository/jcenter") }
maven { setUrl("https://maven.aliyun.com/repository/google") }
maven { setUrl("https://maven.aliyun.com/repository/gradle-plugin") }
maven { setUrl("https://maven.aliyun.com/repository/public") }
改后效果如下:
pluginManagement {
repositories {
//改为阿里云的镜像地址
maven { setUrl("https://maven.aliyun.com/repository/central") }
maven { setUrl("https://maven.aliyun.com/repository/jcenter") }
maven { setUrl("https://maven.aliyun.com/repository/google") }
maven { setUrl("https://maven.aliyun.com/repository/gradle-plugin") }
maven { setUrl("https://maven.aliyun.com/repository/public") }
gradlePluginPortal()
mavenCentral()
jcenter()
google()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
//改为阿里云的镜像地址
maven { setUrl("https://maven.aliyun.com/repository/central") }
maven { setUrl("https://maven.aliyun.com/repository/jcenter") }
maven { setUrl("https://maven.aliyun.com/repository/google") }
maven { setUrl("https://maven.aliyun.com/repository/gradle-plugin") }
maven { setUrl("https://maven.aliyun.com/repository/public") }
mavenCentral()
jcenter()
google()
flatDir {
dirs "$rootDir/app/libs"
}
maven {
url "https://jitpack.io"
}
maven {
url "http://4thline.org/m2"
allowInsecureProtocol = true
}
}
}
include ':app'
include ':hook'
include ':tvbus'
include ':catvod'
include ':quickjs'
include ':thunder'
include ':jianpian'
include ':forcetech'
include ':ijkplayer'
rootProject.name = "TV"
四、内置接口
内置路径: /app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java
原第136行:OK蜂蜜源代码如下:
private void loadConfigCache(Callback callback) {
if (!TextUtils.isEmpty(config.getJson()) && config.isCache()) checkJson(Json.parse(config.getJson()).getAsJsonObject(), callback);
else loadConfig(callback);
}
替换成如下代码:
在此之前请将88行中的
this.loadLive = false;
改成
this.loadLive = true;
这样直播接口就可以和点播接口同步加载,反之不同步。根据自己喜欢选择更改
private void loadConfigCache(Callback callback) {
String url = config.getUrl();
if (!TextUtils.isEmpty(url)) {
// 如果有配置的 URL,尝试从该 URL 加载配置
loadConfigFromUrl(url, callback);
} else {
// 如果没有配置的 URL,使用默认 URL 加载配置
loadConfigFromDefaultUrl(callback);
}
}
private void loadConfigFromUrl(String url, Callback callback) {
try {
String json = Decoder.getJson(url); // 假设 Decoder.getJson 是从 URL 获取 JSON 字符串的方法
if (!TextUtils.isEmpty(json)) {
// 如果成功获取 JSON 字符串,解析 JSON 并调用回调
JsonObject jsonObject = Json.parse(json).getAsJsonObject();
checkJson(jsonObject, callback);
} else {
// 如果获取的 JSON 字符串为空,使用默认 URL 重新加载
loadConfigFromDefaultUrl(callback);
}
} catch (Exception e) {
// 网络请求异常处理
e.printStackTrace();
// 如果请求异常,使用默认 URL 重新加载
loadConfigFromDefaultUrl(callback);
}
}
private void loadConfigFromDefaultUrl(Callback callback) {
String defaultUrl = "此处填入你的接口地址";
try {
String json = Decoder.getJson(defaultUrl);
if (!TextUtils.isEmpty(json)) {
JsonObject jsonObject = Json.parse(json).getAsJsonObject();
checkJson(jsonObject, callback);
Config.find(defaultUrl, 0).name("公众号🍎:风言锋语88").update();
} else {
// 如果默认 URL 加载的 JSON 字符串为空,调用回调的错误方法
App.post(() -> callback.error("微信公众号🍎《风言锋语88》"));
}
} catch (Exception e) {
// 默认 URL 请求异常处理
e.printStackTrace();
App.post(() -> callback.error("加载配置失败:" + e.getMessage()));
}
}
其实到这里可以说已经成功了,以下只是优化避免接口暴露
mobile版修改
1. 隐藏接口地址
mobile代码路径:
app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java
第68里的initView方法。
private void initView() {
// 这里判断有名字就不会写到设置框里,例如名字是:源已内置
if (TextUtils.isEmpty(getConfig().getName())) {
binding.url.setText(ori = getConfig().getUrl());
}
binding.input.setVisibility(edit ? View.VISIBLE : View.GONE);
binding.url.setSelection(TextUtils.isEmpty(ori) ? 0 : ori.length());
}
2. 修改设置弹框里的初始化逻辑,将设置框内容改成空时,重新读取内置源。
mobile代码路径
app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java
第126行里的onPositive方法。
private void onPositive(DialogInterface dialog, int which) {
String url = binding.url.getText().toString().trim();
String name = binding.name.getText().toString().trim();
if (edit) Config.find(ori, type).url(url).name(name).update();
if (url.isEmpty()) {
// 未填写时,点了确定,改成内置源
url = "此处填入你的接口地址";
Config.find(url, 1).name("公众号:风言锋语88").update();
//Config.delete(ori, type);
}
callback.setConfig(Config.find(url, type));
dialog.dismiss();
}
leanback版修改
1. 隐藏接口地址
- leanback代码路径:app/src/leanback/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java
第82行里的initView方法。 leanback版本,除了修改一点代码外,还需新增一个getName方法,手动改一下即可:
private void initView() {
String address = Server.get().getAddress();
// binding.text.setText(url = getUrl());
// 这里判断有名字就不会写到设置框里,例如名字是:源已内置
if (TextUtils.isEmpty(getName())) {
binding.text.setText(url = getUrl());
}
binding.code.setImageBitmap(QRCode.getBitmap(Server.get().getAddress(3), 200, 0));
binding.info.setText(ResUtil.getString(R.string.push_info, Server.get().getAddress()).replace(",", "\n"));
binding.storage.setVisibility(PermissionX.isGranted(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) ? View.GONE : View.VISIBLE);
}
private String getName() {
switch (type) {
case 0:
return VodConfig.get().getConfig().getName();
case 1:
return LiveConfig.get().getConfig().getName();
case 2:
return WallConfig.get().getConfig().getName();
default:
return "";
}
}
2. 修改设置弹框里的初始化逻辑,将设置框内容改成空时,重新读取内置源。
- leanback代码路径:app/src/leanback/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java
第157行里的onPositive方法。
private void onPositive(View view) {
String text = binding.text.getText().toString().trim();
if (edit) Config.find(url, type).url(text).update();
// if (text.isEmpty()) Config.delete(url, type);
if (text.isEmpty()) {
url = "https://www.gitlink.org.cn/api/yf1688/box/raw/GL22.json?ref=master";
Config.find(url, 1).name("公众号:风言锋语88").update();
//Config.delete(ori, type);
}
callback.setConfig(Config.find(text, type));
dialog.dismiss();
}
五、仓库自动升级
路径:catvod/src/main/java/com/github/catvod/utils/Github.java
将第11行
public static final String URL = "https://my.t4tv.hz.cz";
改成
"你的域名/Release";
六、打包
打包apk提取路径:TV/app
七、上传apk软件到自己的仓库
仓库路径设置: 必须在根目录新建一个Release
文件夹,然后在Release
目录中新建一个apk
文件夹,然后在apk
文件夹中新建一个release
文件夹、kitkat
文件夹,dev
文件夹,这三个文件夹分别代表正式版
、安卓4版
、测试版
。在这三个文件夹中新建一个mobile.json
文件和一个leanback.json
文件。
文件填入如下内容:
{
"code": 253, //版本号
"name": "2.5.3", //版本号
"desc": "此处填写升级内容"
}
路径格式
你的域名地址:/Release/apk/release/mobile-python-arm64_v8a.apk 你的域名地址:/Release/apk/release/leanback-python-armeabi_v7a.apk
注意
软件名不能更改手机为mobile-python-arm64_v8a.apk
,TV版为leanback-python-armeabi_v7a.apk
软件上传路径为release
或kitkat
或dev
文件夹。