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版本
项目设置中,配置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") }
初次同步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开始编译
5.python编译
由于项目依赖pyramid模块打包,该模块需要调用python编译代码,使用python3.8
需要的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
2,选择APK打包后,下一步创建一个签名文件
3,打包,选择版本类型release
4.等待打包成功
3 条评论
{
"lives": [
{
"name": "M3U",
"url": "https://github.hscsec.cn/live.m3u"
},
]
}
buildscript {
。。。。。。。
repositories {
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
}
}
https\://mirrors.aliyun.com/macports/distfiles/gradle/gradle-7.4.2-all.zip
https://cdn.jsdelivr.net/gh/coderluojust/github-hosts/hosts