前段時間開發過程中需要對一套代碼進行生成多個不同版本的apk的操作,在網上找了很多的資料學習了下,同時也在我的博客中記錄下以免遺忘,希望對大家有所幫助。
productFlavors
同時生成多渠道多版本的操作主要是靠productFlavors 來實現的,以下介紹下productFlavors 的一些屬性。
productFlavors的大體結構如下所示
android{
productFlavors{
productA{
#這里定義產品A的特性
}
productB{
#這里定義產品B的特性
}
#更多產品 ...
}
這張是最終打包的時候出現的版本選擇
Paste_Image.png
可以進行多選或者單選進行選擇編譯版本,再也不用重復進行最原始的操作,一次打包一個,每次都得配置和替換不同版本的不同代碼邏輯和資源文件。
簡單,明了。
productFlavors 的詳細屬性
1.不同的applicationId 和版本號
根據需求打包不同類型不同id的版本。
android{
productFlavors{
province{//省級版本
applicationId "com.crazyman.product.province"
versionName "version-province-1.0"
}
city {//市級版本
applicationId "com.crazyman.product.city "
versionName "version-city -1.0"
}
county{//縣級版本
applicationId "com.crazyman.product.county"
versionName "version-county-1.0"
}
town{//村鎮級版本
applicationId "com.crazyman.product.town"
versionName "version-town-1.0"
}
}}
2.多渠道設置
根據需求假設要發布以下幾個渠道的app供不同的運用商店進行上傳。
android{
productFlavors{
province{
manifestPlaceholders = [SD_CHANNEL_VALUE: "province"
name:"省級app"]
}
city {
manifestPlaceholders = [SD_CHANNEL_VALUE: "city",name:"城市 app"]
}
county{
manifestPlaceholders = [SD_CHANNEL_VALUE: "county",
name:"縣城app"]
}
town{
manifestPlaceholders = [SD_CHANNEL_VALUE: "town",name:"鄉鎮app"]
}
}}
同時在manifest中需要填寫
<meta-data android:name="SD" android:value="${SD_CHANNEL_VALUE}"/>
<application
android:allowBackup="true"
android:label="${name}"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
·····
</activity>
</application>
3.不同的版本使用不同的jar包
根據需求使用不同的jar工具。
dependencies {
provinceCompile 'com.github.hss01248:DialogUtil:1.0.1'
cityCompile 'com.github.hss01248:DialogUtil:1.0.2'
countyCompile 'com.github.hss01248:DialogUtil:1.0.1'
townCompile 'com.github.hss01248:DialogUtil:1.0.0'
}
4.不同的版本使用不同資源文件或者代碼
在工程中根據自己的需求建立不同的版本的文件夾如下:
Paste_Image.png
其中city版,和province版需要不同的代碼和啟動界面,其他沒有新建的目錄使用公用模塊main中的代碼和資源文件。
Paste_Image.png
記住:不要放入公用的部分,只放入不同的代碼或者文件,代碼,文件的路徑和main文件夾里面的一致。
參考文獻:
http://blog.csdn.net/crazyman2010/article/details/53471162#reply