爲什麼要有多渠道打包?
答:由於現在應用市場繁多,爲了統計各個應用市場用戶的下載量、活躍量,還可以分析用戶操作習慣,優化我們的APP。
以友盟爲例(因爲我用的就是它),需要在AndroidManifest.xml裏面添加:
<meta-data
android:name="UMENG_CHANNEL"
android:value="Channel_ID" />
我們的原理就是用各個渠道的標識來替換“Channel_ID”值。
1、對AndroidManifest.xml中的“Channel_ID”使用placeHolder
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
2、在模塊下的build.gradle文件中的defaultConfig中添加下面代碼
manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"_default" ]
注意:在Plugin 3.0.0之後有一種自動匹配消耗庫的機制,便於debug variant 自動消耗一個庫,然後就是必須要所有的flavor 都屬於同一個維度。需要多添加一句:flavorDimensions "versionCode"
android {
...
defaultConfig {
...
flavorDimensions "versionCode"
manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"_default" ]
}
}
其中,“_default”是指默認值。
注意:渠道名不能以數字開頭
productFlavors {
_default{}
wandoujia{}
_360{}
yingyongbao{}
xiaomi{}
huawei{}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ]
}
4、這樣我們就可以通過圖形界面或Terminal進行多渠道打包了1、使用圖形界面的話,按住ctrl點中你想要打的渠道,然後點擊Finish開始打包
2、使用Terminal的話,輸入 gradlew assembleRelease ,打出所有正式版的包;
如果想單獨打某一個渠道的,輸入 gradlew assemble_360Release 即可
如果你還沒有生成密鑰庫,打出來的包名中會有“unsigned”的標識,也就是未簽名。
不知道如何給應用簽名的話,可以看我的上一遍博客:Android項目簽名、打包(使用圖形界面和Terminal)
3、通過Gradle tasks面板進行打包
打開Android Studio的Gradle tasks面板(右邊側邊欄),會發現模塊多了很多任務,想打哪個包,就雙擊哪個。
Gradle常用命令
gradlew代表 gradle wrapper,意思是gradle的一層包裝,大家可以理解爲在這個項目本地就封裝了gradle,即gradle wrapper。
下面列舉了幾個常見的命令:
gradlew -v:版本號
gradlew clean:把之前打包所產生的所有文件全部清除
gradlew build:檢查依賴並編譯打包
這裏注意的是 gradlew build 命令把debug、release環境的包都打出來
gradlew assembleDebug 編譯並打Debug包
gradlew assembleRelease 編譯並打Release的包
參考:
http://www.cnblogs.com/shanpow/p/4097320.html