小背景
为了保持项目结构的清晰,大多数时候对于三方 SDK 会将其 aar、jar、so 等单独用一个 module 装起来,可用传递依赖的方式去配置 jar,但 so 与 aar 则需要另外配置。
另外,还有 额外的res、纯 java 目录等。
混淆文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'other/proguard-rules.pro'
.aar
对于 aar,需要修改的是 flatDir,一般放在 app/build.gradle 统筹全局,这也是无法传递依赖的折中解决办法。
由于 aar 一般是远程依赖,这里也是使用相当于添加一个仓库的效果,所以在 repositories 的节点下。
来自 flatDir 方法注释:
.so
对于 so,则需要修改 jniLibs,可以用+=的方式去拼接,也可以按官方的这种写法
android { ... sourceSets { main { jniLibs.srcDirs 'imported-lib/src/', 'more-imported-libs/src/' } } }
官方文档:添加预构建的原生库
java、manifest、aidl、res、assets 源代码目录
sourceSets { main { manifest.srcFile '/src/main/AndroidManifest.xml' java.srcDirs = ['/src/main/java', 'other/src/main/java'] aidl.srcDirs = ['/src/main/aidl', 'other/src/main/aidl'] res.srcDirs = ['/src/main/res'] assets.srcDirs = ['/src/main/assets'] } }
这里为什么有个 main 呢,主要还是因为 flavor,main 只是一个基础的 flavor。
透露个小姿势,这里都是用的xxx.srcDirs
直接指定一个数组,但实际上,也可以使用拼接的方式。但往往看到的都是:
java.srcDirs += 'other/src/main/java' java.srcDirs += ['/src/main/java', 'other/src/main/java']
其实这里可以还可以这样做,并不需要+=
,为什么?看看这个就知道了Gradle building java projects
java{ srcDir 'other/src/main/java' }
关于 Android 相关配置的官方文档:
include、exclude
其实没什么 include,因为指定 srcDirs 就是指定包含编译的内容了。但是 exclude 是有的:Gradle Doc SourceSet
sourceSets { main { java { exclude 'some/unwanted/package/**' } } }
无意中看到一个不错的 example:
本站由以下主机服务商提供服务支持:
0条评论