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
2024-04-13T03:15:46.png

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仓库的剩下的包。
2024-04-13T03:16:38.png

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);

2024-04-13T03:17:40.png

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);

2024-04-13T03:18:00.png

3,由于直播按钮依赖config里的url参数,内置后判断为空不显示直播按钮,这里改成不判断
修改上面LiveConfig文件里的hasUrl方法
2024-04-13T03:18:12.png

4,修改设置弹框里的初始化逻辑,避免暴露内置源的地址到设置框。修改代码mobile模块或leanback模块里com/fongmi/android/tv/ui/dialog/ConfigDialog.java:68里的initView方法。
2024-04-13T03:18:25.png

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();
    }

2024-04-13T03:19:10.png
非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
2024-04-13T03:19:35.png

2,选择APK打包后,下一步创建一个签名文件
3,打包,选择版本类型
2024-04-13T03:19:50.png

最后修改:2024 年 04 月 13 日
如果觉得我的文章对你有用,请随意赞赏