目錄
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 較爲簡單,但卻很好用的,由於在一個項目中,管理好代碼結構是一項很是重要的任務,而管理好代碼結構的其中一項任務就是要用不一樣的文件夾將不一樣功能的代碼放在該合理的位置, 這樣作的好處就是易拆卸(前提是解耦要夠,有點扯遠了)。
若是喜歡的話請給我一個贊,並關注我吧。文章中若有寫的不妥的地方,請評論區與我討論吧,共同進步。