目录
1、前言
2、sourceSets 结构简析
3、sourceSets 的属性
3.1 java
3.2 assets
3.3 aidl
3.4 jni
3.5 jniLibs
3.6 manifest
3.7 renderscript
3.8 res
3.9 resources
4、sourceSets 的方法
4.1 setRoot(String path)
5、写在最后
html
Android 项目中,代码的摆放位置都是约定好的,这是由于 gradle 的理念 “约定大于配置”,减小各类配置的书写。java
但约定并不是规定,因此能够进行配置改动,这也是 gradle 的一大优势。在 Android 中,咱们经过 sourceSets
进行配置。android
老规矩,咱们看看 sourceSets 的存在结构形式api
android{
sourceSets{
main{
}
// hello 风味会叠加在 main 上面,而不是替换
hello{
}
}
flavorDimensions('product')
productFlavors{
hello{
dimension 'product'
}
}
}
复制代码
在上面的代码中咱们能够得知三个信息gradle
因此按照套路,咱们来看下 sourceSet 的继承结构,sourceSet 的具体表现类为 com.android.build.gradle.api.AndroidSourceSet
是一个接口,没有继承其余的类。ui
main {
java {
srcDirs = [
'src/main/java',
'src/main/patternFilterableDemo/exclude'
]
excludes = ['zincStudy/*.java']
includes = ["com/zinc/gradlestudy/MainActivity.java"]
}
}
复制代码
AndroidSourceDirectorySet 有三个属性能够设置,咱们一一解析:spa
描述:存在的java代码路径,例如上面咱们设置了两个文件夹 java
和 exclude
3d
描述:针对咱们设置的 “srcDirs” 文件夹路径,设置将哪些类进行编译打包。code
默认状况下该属性的值为**/*.java
(具体规则请查看 PatternFilterable 官方文档),表示包含目录下的全部文件夹以及其下的全部文件。cdn
咱们这里的例子设置了 "com/zinc/gradlestudy/MainActivity.java"
,最终apk包的效果以下图所示
描述:针对咱们设置的 “srcDirs” 文件夹路径,设置将哪些类不进行编译打包。
举个例子:
main {
java {
srcDirs = [
'src/main/java',
'src/main/patternFilterableDemo/exclude'
]
excludes = ['zincStudy/*.java']
}
}
复制代码
咱们只使用 excludes
,最终apk的代码结构以下,已经看不到zincStudy
的代码
强调一下下:includes 和 excludes 的值是针对 “srcDirs” 设置的文件夹路径进行设置的。
assets.srcDirs 'src/main/assets', 'src/main/zincAssets'
复制代码
aidl.srcDirs 'src/main/aidl', 'src/main/zincAidl'
复制代码
jni.srcDirs '目录1','目录2'
复制代码
jniLibs.srcDirs '目录1','目录2'
复制代码
manifest.srcFile 'src/main/ZincManifest.xml'
复制代码
renderscript.srcDirs 'xxx','xxx'
复制代码
res.srcDirs 'src/main/res', 'src/main/zinc-res'
复制代码
resources.srcDir 'xxx','xxx'
复制代码
描述:这个方法会使咱们上面分享的属性失效。 一旦咱们设置了 setRoot ,则 gradle 会在咱们设置的同级目录下找资源。(具体见下面例子)
使用方法:
zinc {
// 若是咱们的代码都在同一个目录下,能够用setRoot进行设置,
// 设置了 setRoot 以后,gradle的编译只会在同级目录下找资源,
// 例如:只会在 src/zincPower/java 找java代码
// 会忽略 java.srcDirs 设置的路径
setRoot 'src/zincPower'
// 这个会忽略
java.srcDirs 'zzz'
}
复制代码
sourceSets 较为简单,但却很好用的,由于在一个项目中,管理好代码结构是一项很是重要的任务,而管理好代码结构的其中一项任务就是要用不一样的文件夹将不一样功能的代码放在该合理的位置, 这样作的好处就是易拆卸(前提是解耦要够,有点扯远了)。
若是喜欢的话请给我一个赞,并关注我吧。文章中若有写的不妥的地方,请评论区与我讨论吧,共同进步。