跳转到内容
2026年 元旦 倒计时
0000
——小鱼🐬

影视内置打包修改

一、下载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的镜像,放在前面,

java
	//改为阿里云的镜像地址
	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") }

改后效果如下:

java
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蜂蜜源代码如下:

java
    private void loadConfigCache(Callback callback) {
        if (!TextUtils.isEmpty(config.getJson()) && config.isCache()) checkJson(Json.parse(config.getJson()).getAsJsonObject(), callback);
        else loadConfig(callback);
    }

替换成如下代码:

在此之前请将88行中的

java
this.loadLive = false;

改成

java
this.loadLive = true;

这样直播接口就可以和点播接口同步加载,反之不同步。根据自己喜欢选择更改

java
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方法。

java
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方法。

java
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方法,手动改一下即可:

java
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方法。

java
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文件。

文件填入如下内容:

js
{
  "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 软件上传路径为releasekitkatdev文件夹。


《风言锋语88》