TVBox蜂蜜版(FongMi)内置源及打包
SoEasy同学
编辑于 2024年02月05日 01:45
收录于文集
共11篇

1.下载FongMi版仓库

代码块
JavaScript
自动换行
复制代码
https://github.com/FongMi/TV
复制成功

首先修改gradle/wrapper/gradle-wrapper.properties,用于加速gradle的下载:

代码块
JavaScript
自动换行
复制代码
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
复制成功

改成

代码块
JavaScript
自动换行
复制代码
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的镜像,放在前面,

代码块
JavaScript
自动换行
复制代码
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 例如:

代码块
JavaScript
自动换行
复制代码
# host文件添加
180.163.151.161 dl.google.com
复制成功

3,部分包无法下载 有些本地包无法下载,可以去掉版本读取本地文件 app/build.gradle

代码块
JavaScript
自动换行
复制代码
implementation(ext: 'aar', name: 'dlna-core', group: 'fongmi', version: 'release')
复制成功

修改成

代码块
JavaScript
自动换行
复制代码
implementation(ext: 'aar', name: 'dlna-core')
复制成功

其它的ext本地包同样处理方法。

4,部分包版本问题

代码块
JavaScript
自动换行
复制代码
implementation 'com.google.android.material:material:1.11.0'
implementation 'androidx.media:media:1.7.0'
复制成功

无法下载,可以将版本改成

代码块
JavaScript
自动换行
复制代码
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方法。 判断未填写播放源,添加一个即可:

代码块
JavaScript
自动换行
复制代码
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方法。 判断未填写播放源,添加一个即可:

代码块
JavaScript
自动换行
复制代码
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方法。

代码块
JavaScript
自动换行
复制代码
    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方法,手动改一下即可:

代码块
JavaScript
自动换行
复制代码
    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方法

代码块
JavaScript
自动换行
复制代码
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方法。

代码块
JavaScript
自动换行
复制代码
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版本大致一样:

代码块
JavaScript
自动换行
复制代码
    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,打包,选择版本类型