参考:
多渠道打包
Android多渠道打包
如果我们需要把app提交到多个应用市场,而且需要统计各个应用市场的下载量用于对比,那么我们需要给个应用市场提交的app标明渠道号。
多渠道打包一般配合友盟统计使用,用友盟确定个渠道数据。
但是如果我们只把app上传到了一个应用市场,那么就不需要多渠道打包,正常打包即可。
多渠道打包的方法
- gradle自动化打包方案
- 美团打包方案
gradle自动化打包方案
Step1:配置友盟应用统计
集体见文档,不在介绍。
友盟统计分析Android文档
步骤
- 获取Appkey
- 导入SDK
- 配置AndroidManifest.xml
- 代码统计
<meta-data
android:name="UMENG_APPKEY"
android:value="585e1758ae1bf86fd70012e3"/>
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL}"/>
Step2:配置多渠道打包
第一步:在module中配置flavors
注意:[UMENG_CHANNEL: "yingyongbao"]
中的UMENG_CHANNEL
要与meta-data
中的android:value="${UMENG_CHANNEL}"
的UMENG_CHANNEL
一致,拼写不要错了。
android {
...
productFlavors {
yingyongbao {
manifestPlaceholders = [UMENG_CHANNEL: "yingyongbao"]
}
qihu360 {
manifestPlaceholders = [UMENG_CHANNEL: "qihu360"]
}
uc {
manifestPlaceholders = [UMENG_CHANNEL: "uc"]
}
}
}
简单的写法
productFlavors {
wandoujia {
}
baidu {
}
c360 {
}
uc {
}
productFlavors.all {
flavor ->
flavor.manifestPlaceholders =[UMENG_CHANNEL:name]
}
}
第二步:正常的打包
如何打带签名的包?
//签名
signingConfigs{
release {
storeFile file("D:/ScrollByToDemo/keystore.jks")
storePassword "123456"
keyAlias "key"
keyPassword "123456"
}
debug{
storeFile file("D:/ScrollByToDemo/keystore.jks")
storePassword "123456"
keyAlias "key"
keyPassword "123456"
}
}
美团打包方案
多个module使用同一个library,如何保证library版本号相同?
project的build.grale
ext {
compileSdkVersion = 25
buildToolsVersion = '25.0.3'
minSdkVersion = 16
targetSdkVersion = 25
versionCode = 1
versionName = '1.0'
supportLibVersion = '25.3.1'
}
module的build.gradle
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId "com.cqc.demo"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
dependencies {
...
compile "com.android.support:appcompat-v7:$supportLibVersion"
compile "com.android.support:design:$supportLibVersion"
}
修改导出的包的apk名称
AS3.0前这么设置:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出apk名称为AiYaGirl_1.0.apk
// def fileName = "AiYaGirl_${defaultConfig.versionName}.apk"
def fileName = "AiYaGirl_v${variant.versionName}_release_${variant.flavorName}.apk"
if (variant.buildType.isDebuggable()) {
fileName = "哎呀_v${variant.versionName}_debug_${variant.flavorName}.apk"
}
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
AS3.0设置:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "飞豹物流_v${defaultConfig.versionName}.apk"
}
}
}