exoplayer 的编译控制使用gradle. 相对较复杂, 这里大致梳理一下里面的结构和一些关键问题。
整个工程范围的配置:
gradle.properties:
gradle.properties里面定义的属性是全局的,可以在各个模块的build.gradle里面直接引用, 以键值对的形式呈现.
android.useAndroidX=true 表示当前项目启用 AndroidX
android.enableJetifier=true 表示将依赖包也迁移到 AndroidX。
如果取值为 false, 表示不迁移依赖包到 AndroidX,但在使用依赖包中的内容时可能会出现问题,当然了,如果你的项目中没有使用任何三方依赖,那么,此项可以设置为 false
android.enableUnitTestBinaryResources=true 使能测试资源访问,经常与includeAndroidResources = true 配合使用
buildDir=buildout 构建输出的文件夹
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m 虚拟机参数配置
另外,这里面还经常会配置的可以参考:
https://juejin.im/post/582d606767f3560063320b21#heading-19
这里面可以配置一些私密的东西,一般不建议提交,最好是把私密的配置独立到文件里面。javadoc_combined.gradle 文档自动生成合并
javadoc_combined-->javadoc_util.gradle( 依赖)javadoc_library.gradle
javadoc_library.gradle->javadoc_util.gradle
该文件在每个子module 里面都有引用publish.gradle
自动化发布工具, 将jar或者aar发布到marven 本地或中心仓库constants.gradle
主要配置了一些version信息及重要的全局变量,如modulePrefix, ext.
def 与 ext的区别:
关键字def来自于Groovy,定义了一个local scope的变量。而ext.outDir是新加了一个property:outDir。可以想像成project有一个properties的map,这个map里面有一个键值ext,你把你的property放到这个map里面以便之后引用。
build.gradle 里面引用ext: "project.ext."
如果在根build.gradle 里面定义了ext 闭包, 那么子模块应该这样使用它"rootProject.ext.".
在这个文件里面gradle.ext 的由来:
gradle.ext.exoplayerRoot = 'path/to/exoplayer'
gradle.ext.exoplayerModulePrefix = 'exoplayer-'
apply from: new File(gradle.ext.exoplayerRoot, 'core_settings.gradle')
exoplayer官网给出的第三方apk 本地依赖exoplayer 的一些配置参数
- project build.gradle
它在根目录,它配置的所有工程共同的配置项
7.Settings.gradle
一般涉及多项目, 多项目的管理