gradle打包教程,gradle打包
需求:開發了一個App,賣給了A公司(baidustore),此時B公司(lestore)找上門要定製+額外的功能模組……
我們統計一下這兩個項目有什麼區別
| 公司名稱 |
baidustore |
lestore |
| 包名 |
com.baudustore.test |
com.lestore.test |
| Umeng渠道號 |
BAIDUSTORE |
LESTORE |
| 應用程式名稱 |
AndroidDemoForBaidu |
AndroidDemoForLeStore |
| 資源 |
res |
res |
| 版本號碼 |
1.0_baidu |
1.0_lestore |
| 簽名 |
huangyanan.keystore |
huangyn1.keystore |
| 功能A |
有 |
無 |
| 功能B |
無 |
有 |
| 功能CDEFG等 |
有 |
有 |
| …… |
…… |
…… |
我們可以看到絕大部分功能都是一樣的,我們可以先把功能全做了,後期打包時通過配置項分別打出滿足A公司B公司需求的app,還可以為CDE公司做私人定製……
gradle可以做這樣的事情,現在知道的有兩種方法:
1、建立檔案方法
2、不需要建立檔案,使用gradle的manifestPlaceholders方法
主要步驟:
1、添加不同的signing
開啟project structure選擇signing tab添加不同的簽名key,如:
2、添加不同的打包資訊
開啟flavors tab,添加flavor,添加包名、簽名配置、版本名等,如:
修改之後,開啟gradle.build檔案,可以看到如下內容:
android { signingConfigs { huangyanan { storeFile file('/Users/huangyanan/huangyanan.keystore') keyAlias 'huangyanan' keyPassword '111111' storePassword '111111' } huangyn1 { storeFile file('/Users/huangyanan/Documents/huangyn1.keystore') keyAlias 'huangyn1' keyPassword '111111' storePassword '111111' } }……省略…… productFlavors { baidustore { minSdkVersion 21 applicationId 'com.baudustore.test' signingConfig signingConfigs.huangyanan targetSdkVersion 21 versionCode 1 versionName '1.0_baidu' } lestore { minSdkVersion 21 applicationId 'test.lestore.test' signingConfig signingConfigs.huangyn1 targetSdkVersion 21 versionCode 1 versionName '1.0_lestore' } }}……省略……
此時打包,就有不同的包名對應不同的簽名key的release包了
3、修改umeng 渠道號:
開啟AndroidManifest.xml檔案,添加如下代碼:
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL}"/>
開啟app的build.gradle檔案,在productFlavors中的lestore和baidustore的{}中分別添加
manifestPlaceholders = [UMENG_CHANNEL: "LESTORE"]
manifestPlaceholders = [UMENG_CHANNEL: "BAIDUSTORE"]
這裡使用的是gradle的manifestPlaceholders方法
4、修改應用程式名稱和資源
在app/src目錄下建立和Flavor名稱一致的檔案夾,如:
按照目錄結構把我們想要進行替換或修改的資源放進來:
這裡簡單修改了圖片的launcher_icon和app_name
渠道號修改也可以用這種方法來做,去替換AndroidManifest.xml中某些節點的東西。
5、打包
先clean project,然後在項目所在目錄輸入命令
mac 和linux輸入
./gradlew build
windows系統
gradlew.bat build
執行完畢,可以在app/build/outputs/apk目錄下看到打包好的app了
6、問題
看有的人說可以使用manifestPlaceholders方法去替換activity名稱,試了一下沒有成功,後續看看怎麼弄的。
demo
參考:
http://tools.android.com/tech-docs/new-build-system/user-guide
Gradle Android外掛程式使用者指南中文版