一、什麼是androidsourcesets
androidsourcesets是Android Studio項目中的一個非常重要的概念。它可以讓我們在同一個項目中構建多個版本和變體,每個版本和變體可以有自己的代碼、資源和配置文件。簡單的說,就是我們可以通過androidsourcesets在一個項目中構建出多個獨立的apk。
在一個Android Studio項目中,通常會包含兩個androidsourcesets:main和androidTest。其中main是主要的源碼集,所有版本和變體共享這個源碼集。而androidTest則是測試代碼的源碼集,只有單元測試和Android Instrumentation測試可以使用它。
二、如何使用androidsourcesets
首先,我們需要在build.gradle文件中定義androidsourcesets:
android {
...
sourceSets {
free {
manifest.srcFile 'src/free/AndroidManifest.xml'
java.srcDirs = ['src/free/java']
res.srcDirs = ['src/free/res']
}
paid {
manifest.srcFile 'src/paid/AndroidManifest.xml'
java.srcDirs = ['src/paid/java']
res.srcDirs = ['src/paid/res']
}
}
}
上面的代碼定義了兩個androidsourcesets:free和paid。每個androidsourcesets都指定了對應的AndroidManifest.xml、Java源碼和資源文件所在目錄。
接下來,我們可以在同一個項目中構建出多個版本和變體。例如,在創建buildType的時候指定使用的androidsourcesets:
android {
...
buildTypes {
debug {
...
}
release {
...
}
customType {
...
resConfigs "en", "fr"
initWith debug
applicationIdSuffix ".customType"
sourceSets {
free {
manifest.srcFile 'src/customTypeFree/AndroidManifest.xml'
java.srcDirs = ['src/customTypeFree/java']
res.srcDirs = ['src/customTypeFree/res']
}
paid {
manifest.srcFile 'src/customTypePaid/AndroidManifest.xml'
java.srcDirs = ['src/customTypePaid/java']
res.srcDirs = ['src/customTypePaid/res']
}
}
}
}
}
上面的代碼創建了一個名為customType的buildType。為了使用自定義的androidsourcesets,我們需要在customType里重新定義它們。注意,在customType里我們可以定義不同的資源配置(使用resConfigs)或者應用ID後綴(使用applicationIdSuffix),以便在構建不同的版本和變體時能夠正確的識別它們。
三、androidsourcesets常用場景
1、分渠道打包
在實際開發中,我們經常需要將同一個應用打包成不同的渠道,以便於在市場上進行多渠道推廣。使用androidsourcesets,我們可以很方便的實現這一功能。例如,在build.gradle文件中定義渠道相關的androidsourcesets:
android {
...
productFlavors {
xiaomi {
...
sourceSets {
free {
manifest.srcFile 'src/xiaomiFree/AndroidManifest.xml'
java.srcDirs = ['src/xiaomiFree/java']
res.srcDirs = ['src/xiaomiFree/res']
}
paid {
manifest.srcFile 'src/xiaomiPaid/AndroidManifest.xml'
java.srcDirs = ['src/xiaomiPaid/java']
res.srcDirs = ['src/xiaomiPaid/res']
}
}
}
oppo {
...
sourceSets {
free {
manifest.srcFile 'src/oppoFree/AndroidManifest.xml'
java.srcDirs = ['src/oppoFree/java']
res.srcDirs = ['src/oppoFree/res']
}
paid {
manifest.srcFile 'src/oppoPaid/AndroidManifest.xml'
java.srcDirs = ['src/oppoPaid/java']
res.srcDirs = ['src/oppoPaid/res']
}
}
}
}
}
上面的代碼定義了兩個productFlavors:xiaomi和oppo。每個flavor都定義了對應的androidsourcesets。當使用不同的flavor構建apk時,系統會根據不同的sourceSets打包出不同的apk。
2、分模塊開發
在較大的應用中,為了方便開發和維護,我們可以將應用分成多個模塊進行開發。使用androidsourcesets,我們可以在一個項目中構建多個獨立的模塊和apk。例如,在build.gradle文件中定義不同的androidsourcesets:
android {
...
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java']
res.srcDirs = ['src/main/res']
}
module1 {
manifest.srcFile 'src/module1/AndroidManifest.xml'
java.srcDirs = ['src/module1/java']
res.srcDirs = ['src/module1/res']
}
module2 {
manifest.srcFile 'src/module2/AndroidManifest.xml'
java.srcDirs = ['src/module2/java']
res.srcDirs = ['src/module2/res']
}
}
}
上面的代碼定義了三個androidsourcesets:main、module1和module2。每個androidsourcesets都定義了對應的AndroidManifest.xml、Java源碼和資源文件所在目錄。接下來,我們可以在同一個項目中構建出多個獨立的apk。
3、多語言版本開發
在國際化應用中,為了提供更好的用戶體驗,我們需要提供多語言版本的應用。使用androidsourcesets,我們可以很方便的實現這一功能。例如,在build.gradle文件中定義不同語言版本的androidsourcesets:
android {
...
productFlavors {
english {
...
sourceSets {
free {
manifest.srcFile 'src/englishFree/AndroidManifest.xml'
java.srcDirs = ['src/englishFree/java']
res.srcDirs = ['src/englishFree/res']
}
paid {
manifest.srcFile 'src/englishPaid/AndroidManifest.xml'
java.srcDirs = ['src/englishPaid/java']
res.srcDirs = ['src/englishPaid/res']
}
}
}
french {
...
sourceSets {
free {
manifest.srcFile 'src/frenchFree/AndroidManifest.xml'
java.srcDirs = ['src/frenchFree/java']
res.srcDirs = ['src/frenchFree/res']
}
paid {
manifest.srcFile 'src/frenchPaid/AndroidManifest.xml'
java.srcDirs = ['src/frenchPaid/java']
res.srcDirs = ['src/frenchPaid/res']
}
}
}
}
}
上面的代碼定義了兩個語言版本的productFlavors:english和french。每個flavor都定義了對應的androidsourcesets。使用resConfigs屬性,我們可以指定打包時僅使用特定語言的資源。
四、總結
androidsourcesets是Android Studio項目中非常重要的概念,可以讓我們在同一個項目中構建多個版本和變體。androidsourcesets常用於分渠道打包、分模塊開發和多語言版本開發等場景,對於大型項目非常實用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/207267.html
微信掃一掃
支付寶掃一掃