1.下载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-7.4.2-bin.zip
2.打开代码
用Andirod Studio打开,需要配置两处地方。
2.1 file--setting-- --Android SDK,安装Android14.0(api34),SDK tool如图所示:
2.2 file--setting-- --Gradle。Gradle指定好具体位置,安装Gradle JDK为JDK17(或者JDK17,打包apk必须17)
2.3 配置环境变量
GRADLE_USER_HOME:指定一个固定的目录
JAVA_HOME:指定JDK环境变量 ,选择OPENJDK17
建议下载amazon-corretto版本
https://corretto.aws/downloads/resources/17.0.9.8.1/amazon-corretto-17.0.9.8.1-windows-x64-jdk.zip
2.4 解决加速及依赖问题
1,在同步的过程中,会出现下载依赖慢,某些包下载不了等问题,解决方法如下:
项目根目录下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") }
初次同步gradle时,建议将上面的google(),注释掉,全部优先从阿里云下载,完成后,再放开注释,下载google仓库的剩下的包。
2,下载dl.google.com包缓慢问题,解决方法如下:
使用站长工具的ping检测,获取dl.google.com最佳ip
https://ping.chinaz.com/
将最快的ip地址配置到host中,C:\Windows\System32\drivers\etc\hosts
例如:
# host文件添加
180.163.151.161 dl.google.com
3,部分包无法下载
有些本地包无法下载,可以去掉版本读取本地文件
app/build.gradle
将
implementation(ext: 'aar', name: 'dlna-core', group: 'fongmi', version: 'release')
修改成
implementation(ext: 'aar', name: 'dlna-core')
其它的ext本地包同样处理方法。
4,部分包版本问题
若
implementation 'com.google.android.material:material:1.11.0'
implementation 'androidx.media:media:1.7.0'
无法下载,可以将版本改成
implementation 'com.google.android.material:material:1.10.0'
implementation 'androidx.media:media:1.7.0-alpha01'
3.内置播放源
1,找到点播源的加载位置,main模块
app/src/main/java/com.fongmi.android.tv/api/ApiConfig(有些版本改为VodConfig)文件loadConfig方法。
判断未填写播放源,添加一个即可:
String url = config.getUrl();
if (TextUtils.isEmpty(url)) {
url = "https://gitee.com/kevinr/tvbox/raw/master/spider/test.json";
// 添加以下代码,解决内置源时,投屏播放问题,给定一个配置,写入本地数据库,标记一个name(名字“源已内置”可以随便取,但一定要有,type为0,表示点播)
Config.find(url, 0).name("源已内置").update();
}
checkJson(JsonParser.parseString(Decoder.getJson(url)).getAsJsonObject(), callback);
2,找到直播源的加载位置,main模块
app/src/main/java/com.fongmi.android.tv/api/LiveConfig文件loadConfig方法。
判断未填写播放源,添加一个即可:
String url = config.getUrl();
if (TextUtils.isEmpty(url)) {
url = "https://gitee.com/kevinr/tvbox/raw/master/spider/test.json";
// 添加以下代码,解决内置源时,投屏播放问题,给定一个配置,写入本地数据库,标记一个name(名字“源已内置”可以随便取,但一定要有,type为1,表示直播)
Config.find(url, 1).name("源已内置").update();
}
parseConfig(Decoder.getJson(url), callback);
3,由于直播按钮依赖config里的url参数,内置后判断为空不显示直播按钮,这里改成不判断
修改上面LiveConfig文件里的hasUrl方法
4,修改设置弹框里的初始化逻辑,避免暴露内置源的地址到设置框。修改代码mobile模块或leanback模块里com/fongmi/android/tv/ui/dialog/ConfigDialog.java:68里的initView方法。
private void initView() {
binding.name.setText(getConfig().getName());
// 这里判断有名字就不回写到设置框里,例如名字是:源已内置
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());
}
非mobile版本,代码可能有一点差异,新增一个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(address, 200, 0));
binding.text.setSelection(TextUtils.isEmpty(url) ? 0 : url.length());
binding.positive.setText(edit ? R.string.dialog_edit : R.string.dialog_positive);
binding.info.setText(ResUtil.getString(R.string.push_info, address).replace(",", "\n"));
binding.storage.setVisibility(PermissionX.isGranted(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) ? View.GONE : View.VISIBLE);
}
getName方法
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 "";
}
}
5,修改设置弹框里的初始化逻辑,将设置框内容改成空时,重新读取内置源。修改代码mobile模块或leanback模块里com/fongmi/android/tv/ui/dialog/ConfigDialog.java里的onPositive方法。
private void onPositive(DialogInterface dialog, int which) {
String url = binding.url.getText().toString().trim();
String name = binding.name.getText().toString().trim();
Log.i("ronglei",ori + "---" + type + "---" + edit);
if (edit) Config.find(ori, type).url(url).name(name).update();
if (url.isEmpty()) {
// 未填写时,点了确定,改成内置源
url = "https://gitee.com/kevinr/tvbox/raw/master/spider/test.json";
Config.find(url, 1).name("源已内置").update();
//Config.delete(ori, type);
}
callback.setConfig(Config.find(url, type));
dialog.dismiss();
}
非mobile版本大致一样:
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://gitee.com/kevinr/tvbox/raw/master/spider/test.json";
Config.find(url, 1).name("源已内置").update();
//Config.delete(ori, type);
}
callback.setConfig(Config.find(text, type));
dialog.dismiss();
}
6,这样就完成了内置源的修改,当你去设置的地方填了新的源后,会覆盖内置源,设置为空后,又会读取内置源。
4.打包
1,选择build-generate signed apk
2,选择APK打包后,下一步创建一个签名文件
3,打包,选择版本类型
1 条评论
比如:
gcore.jsdelivr.net
fastly.jsdelivr.net
gh.776161.xyz (海CDN 优化回国)
jsd.cdn.zzko.cn (由54ayao提供,稳如老狗,推荐)
cdn.jsdelivr.us (海外融合Anycast/CDN 优化回国)
jsd.onmicrosoft.cn (国内 CDN)
jsdelivr.b-cdn.net (台湾 CDN)
使用案例:
https://raw.githubusercontent.com/FongMi/CatVodSpider/main/json/config.json
拼接成下面的样子
https://cdn.jsdelivr.us/gh/FongMi/CatVodSpider@main/json/config.json