1.下载FongMi仓库

https://github.com/FongMi/TV
切换到Android4.x分支kitkat

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

distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip
修改成
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.4.2-all.zip

配置环境变量:GRADLE_USER_HOME 指定一个固定的目录

配置JDK:JAVA_HOME环境变量 ,选择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.Android Studio设置

主要设置gradle的路径,及使用的JDK版本
2024-04-13T03:22:38.png

项目设置中,配置Android SDK,选择api34即可。

3.依赖问题

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") }

2024-04-13T03:23:18.png
初次同步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.依赖media仓库

在kitkat分支的项目根目录下的setting.gradle文件中,最后一行
apply from: file("/media/core_settings.gradle")
需要依赖media的源码。
1)先下载media的源代码
https://github.com/androidx/media
选择指定版本1.2.0
2)将media的代码和FongMi版的仓库TV放在同一级目录下
3)修改FongMI的kitkat项目里setting.gradle文件,将
apply from: file("/media/core_settings.gradle")
改成
apply from: file("../media/core_settings.gradle")
用于读取相邻目录的media文件
4)点击右上角gradle开始编译
2024-04-13T03:24:07.png

5.python编译

由于项目依赖pyramid模块打包,该模块需要调用python编译代码,使用python3.8
2024-04-13T03:24:29.png

需要的windows环境里安装好python3.8的版本,不能升级太高版本,必须指定3.8
https://www.python.org/ftp/python/3.8.9/python-3.8.9-amd64.exe
安装时注意指定一下环境变量等。
在pyramid模块里的build.gradle中,配置python路径在buildPython中。

6.minSdk兼容问题

由于app模块的build.gradle里设置的minSdk为16,为了兼容android4.x,但是引入的media模块中/media/libraries/datasource_okhttp模块里defaultConfig.minSdkVersion=21,当app和okhttp混合编译时会有冲突,所以要修改media里的代码
将/media/libraries/datasource_okhttp模块里build.gradle里

defaultConfig.minSdkVersion 21

改成

defaultConfig.minSdkVersion 16

7.解决编译问题

app模块里
java/com/fongmi/android/tv/player/ExoUtil.java文件依赖的Media3版本有改动,需要将报错的地方修改或注释,一共4处:

private static String getMimeType(String format, int errorCode) {
        if (format != null) return format;
//        if (errorCode == PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED || errorCode == PlaybackException.ERROR_CODE_PARSING_MANIFEST_MALFORMED) return MimeTypes.APPLICATION_OCTET;
        if (errorCode == PlaybackException.ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED || errorCode == PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED) return MimeTypes.APPLICATION_M3U8;
        return null;    }

private static MediaItem getMediaItem(Uri uri, String mimeType, List<Sub> subs, Drm drm) {
        MediaItem.Builder builder = new MediaItem.Builder().setUri(uri);
        if (subs.size() > 0) builder.setSubtitleConfigurations(getSubtitles(subs));
        if (drm != null) builder.setDrmConfiguration(drm.get());
//        builder.setAllowChunklessPreparation(Players.isHard());
        if (mimeType != null) builder.setMimeType(mimeType);
//        builder.setAds(Sniffer.getRegex(uri));
        return builder.build();
    }

public static LoadControl buildLoadControl() {
    return new DefaultLoadControl(Setting.getBuffer());
}

// 改成

public static LoadControl buildLoadControl() {
    return new DefaultLoadControl();
}

8.打包
1,选择build-generate signed apk
2024-04-13T03:26:25.png

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

4.等待打包成功
2024-04-13T03:27:12.png

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