轉(zhuǎn)發(fā)請注明出處:
安卓猴的博客(http://sunjiajia.com)
前言
國內(nèi)Android應用市場
品種太多眯亦,血統(tǒng)不純,每次上線App都打包打到手軟较解,上傳上到吐血
!好在我們有了Android studio和gradle,一條命令打包各種渠道版本App书闸!
正文
Umeng多渠道
我們在項目中會使用統(tǒng)計SDK尼变,用的最流行的當屬umeng
了吧。這里我們就用友盟來說明浆劲。
用了友盟的App的清單文件AndroidManifest.xml
中都會寫上meta-data
嫌术,來區(qū)分不同的渠道:
<meta-data
android:name="UMENG_CHANNEL"
android:value="Channel_ID" />
1.將Channel_ID
更改為${UMENG_CHANNEL_VALUE}
,如下:
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
2.在app
的build.gradle
設置produceFlavors
:
productFlavors {
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
qihoo {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qihoo"]
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
qq {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qq"]
}
}
3.來看看我在項目中使用的build.gradle
文件內(nèi)容:
apply plugin: 'com.android.application'
def releaseTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
defaultConfig {
// 這里的applicationId根據(jù)自己的替換
applicationId "com.sunjiajia.xxxxx"
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "0.0.1"
multiDexEnabled true //dex突破65535限制
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]
}
lintOptions {
disable 'MissingTranslation', 'ExtraTranslation'
abortOnError false
}
signingConfigs {
// /home/monkey/Projects/AndroidStudioProjects/debug.jks是簽名文件所在全路徑
// debug時打包用的簽名
debug {
keyAlias 'debug'
keyPassword '123456'
storeFile file('/home/monkey/Projects/AndroidStudioProjects/debug.jks')
storePassword '123456'
}
// release時打包用的簽名
release {
keyAlias 'monkey'
keyPassword '123123'
storeFile file('/home/monkey/Projects/AndroidStudioProjects/monkey.jks')
storePassword '123123'
}
}
buildTypes {
debug {
// 顯示Log
buildConfigField "boolean", "LOG_DEBUG", "true"
versionNameSuffix "-debug"
minifyEnabled false
zipAlignEnabled false
shrinkResources false
signingConfig signingConfigs.debug
}
release {
// 不顯示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
minifyEnabled true
zipAlignEnabled true
// 移除無用的resource文件
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 輸出apk名稱為appname_v1.0_2015-09-15_09-57-58_wandoujia.apk
// 下面的appname改為你自己的app name
def fileName = "appname_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
}
// 友盟多渠道打包
productFlavors {
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
qihoo {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qihoo"]
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
qq {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qq"]
}
}
}
dependencies {
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:design:23.0.1'
}
命令創(chuàng)建task
1.進入項目的根目錄:
// 打包全部Debug版本
./gradlew assembleDebug
// 打包全部Release版本
./gradlew assembleRelease
2.assemble
和Product Flavor
結(jié)合創(chuàng)建指定渠道的任務版本牌借。例如:
// 打包wandoujia渠道的Release版本和Debug版本
./gradlew assembleWandoujia
// 打包wandoujia渠道的Release版本
./gradlew assembleWandoujiaRelease
結(jié)語
大家有什么問題度气,在下面留言就可以了,也可以關(guān)注我的微博@安卓猴膨报,交流更及時磷籍。