友盟多渠道打包 Android Apk
目前專案中使用到了多渠道打包的功能,首先理解多渠道打包,渠道可理解成安卓apk應用市場平臺,所以多渠道打包可以理解成在打包多個應用市場的apk,要在每個應用市場上打包一個安卓Apk,這樣好處是可以在檢視apk在每個安卓市場的下載量,活躍度,便於公司進行重點運營和推廣,因為友盟多渠道統計比較成熟,所以公司採用的是友盟的多渠道打包統計;
多渠道打包的步驟:
1,首先去到上面官網為自己的應用申請Appkey
2,然後下載整合SDK,本人是使用AndroidStudio整合的,好處是直接在app Module 的build.gradle中新增如下依賴就可以:
dependencies {
compile 'com.umeng.analytics:analytics:latest.integration'
}
3.manifest的配置主要包括新增許可權,以下許可權缺一不可,填寫Appkey和填寫渠道id三部分
<manifest……>
<uses-sdk android:minSdkVersion="8"></uses-sdk>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<application ……>
……
<activity ……/>
<meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"/>
<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL" />
</application>
</manifest>
上面不清楚可以去到官網仔細瀏覽一遍;
從第三部開始 我自己Module 中 manifest的應用配置如下:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="UMENG_APPKEY"
android:value="4f83c5d852701564c0000011" /><!--友盟 Appkey 自己應用註冊申請來的-->
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" /> <!--渠道號,多渠道這裡使用了佔位符$-->
</application>
因為我們要在多個應用市場上面打包,所以這裡的value的值我們不能寫死,比如寫huawei,這樣只打華為應用市場的apk,而我們是多個市場的,所以這裡使用佔位符是動態獲取;
下面要渠道app build.gradle中進行配置
1.首先要新增一個 渠道號
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "multi_channel.shion.com.multichannel"
minSdkVersion 9
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
// AndroidManifest.xml 裡面UMENG_CHANNEL的value為 ${UMENG_CHANNEL_VALUE}
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]//新增一個預設渠道號
}
2.配置打包相關
//新增我們簽名檔案配置
signingConfigs {
debug {
storeFile file("liverpool.jks")//key store
storePassword "123456"
keyAlias "multichannel"
keyPassword "123456"
}
release {
storeFile file("liverpool.jks")
storePassword "123456"
keyAlias "multichannel"
keyPassword "123456"
}
}
//打包相關配置
buildTypes {
debug {
shrinkResources true // 移除無用的resource檔案
minifyEnabled false //不啟用混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro',
'proguard-fresco.pro'
//簽名配置
signingConfig signingConfigs.debug
}
release {
shrinkResources true // 移除無用的resource檔案
minifyEnabled false //不啟用混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//簽名配置
signingConfig signingConfigs.release
}
}
上面都有註釋 打包相關配置buildTypes中分別配置了測試(debug)和釋出(release),我們最主要關心的是簽名配置 signingConfig 的值,我們都寫在了signingConfigs的配置了,而且這個要寫在 buildTypes 的上面,不然打包的時候會報如下錯誤:
至於release {
storeFile file("liverpool.jks")
storePassword "123456"
keyAlias "multichannel"
keyPassword "123456"
}
是我們申請apk打包的的時候都必須要自己弄得,(沒搞過的話,自己隨便建個工程打包就知道了)
3.下面就是最關鍵的部分了
配置多渠道打包:也是我們公司產品要釋出的應用市場
//多渠道打包支援
productFlavors {
Alpha {//自己打包測試使用
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: Alpha]
}
Tencent {//投放應用寶市場
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: Tencent]
}
Baidu {//投放百度市場
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: Baidu]
}
Wandoujia {//投放豌豆莢市場
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: Wandoujia]
}
PP {//投放PP助手市場
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: PP]
}
Qihoo {//投放PP助手市場
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: Qihoo]
}
Vivo {//投放vivo市場
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: Vivo]
}
Oppo {//投放oppo市場
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: Oppo]
}
Xiaomi {//投放小米市場
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: Xiaomi]
}
Meizu {//投放魅族市場
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: Meizu]
}
Huawei {//投放華為應用市場
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: Huawei]
}
Lenovo {//投放聯想市場
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: Lenovo]
}
Letv {//投放樂視市場
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: Letv]
}
Gionee {//投放金立市場
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: Gionee]
}
HiMarket {//投放安卓市場
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: HiMarket]
}
}
//注意我註釋掉的,可以去掉註釋,那樣的話,下面這句就可以不用了
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
解釋:productFlavors 支援多渠道打包,使用它的話,可以為下面每一個市場打包一個apk,裡面也是用了manifestPlaceholders 使用相關的值替換了UMENG_CHANNEL_VALUE
如果怕麻煩,可以像上面那樣寫使用
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
會遍歷productFlavors下面所有的名稱替換UMENG_CHANNEL_VALUE ;
最後使用gradlew assembleRelease 打生產包 ;gradlew assembleDebug 打測試包