今天一个小伙伴问我如何分渠道打包,我翻了翻之前的工程,找了一个Demo给他。基本步骤还是比较简单的。
环境: 使用Android studio 或者直接用Gradle
- 在AndroidManifest.xml中增加一个 placeholder, placeholder的名称由你使用的统计服务而定,如果你用的是友盟,那么需要添加一个 meta-data 如下所示:
<meta-data android:name="UMENG_CHANNEL" android:value="${CHANNEL_VALUE}" />
友盟用的名字是 UMENG_CHANNEL
- 修改项目的 gradle文件, 在gradle里面添加下面的代码
android {
.. .. ..
productFlavors {
shb {}
qq {}
wandoujia {}
baidu {}
c360 {}
huawei {}
xiaomi {}
lenovo {}
meizhu {}
}
productFlavors .all { flavor ->
flavor .manifestPlaceholders = [ CHANNEL_VALUE: name]
}
.. .. ..
}
.. .. ..
productFlavors {
shb {}
qq {}
wandoujia {}
baidu {}
c360 {}
huawei {}
xiaomi {}
lenovo {}
meizhu {}
}
productFlavors .all { flavor ->
flavor .manifestPlaceholders = [ CHANNEL_VALUE: name]
}
.. .. ..
}
productFlavors 里面是不同分支包的配置情况
flavor -> flavor.manifestPlaceholders = [
CHANNEL_VALUE: name] 是把AndroidManifest.xml 里面的
"${CHANNEL_VALUE}"
替换成自己定义的名字。
- 不同渠道的APK文件自动用不同的名称
不同的包用不同的名称也是为了方便自己管理包文件。我们希望APK生成的名称格式是: 软件名称-VersionCode-VersionNumber-渠道名称.apk
我们需要在gradle里添加下面的代码
buildTypes {
release {
applicationVariants .all { variant ->
variant .outputs .each { output ->
def flavor = "default";
if (variant .productFlavors .size() > 0)
flavor = variant .productFlavors .get( 0);
def date = new Date();
def formattedDate = date .format( 'yyyyMMdd')
def versionCode = variant .versionCode
def versionName = defaultConfig .versionName
def file = output .outputFile
println variant
println versionName
def finalName = "Release-" + versionCode + "-v" + versionName + "-" + flavor .name + ".apk"
output .outputFile = new File(file .parent, finalName)
}
}
}
release {
applicationVariants .all { variant ->
variant .outputs .each { output ->
def flavor = "default";
if (variant .productFlavors .size() > 0)
flavor = variant .productFlavors .get( 0);
def date = new Date();
def formattedDate = date .format( 'yyyyMMdd')
def versionCode = variant .versionCode
def versionName = defaultConfig .versionName
def file = output .outputFile
println variant
println versionName
def finalName = "Release-" + versionCode + "-v" + versionName + "-" + flavor .name + ".apk"
output .outputFile = new File(file .parent, finalName)
}
}
}
别忘了在 Gradle 里面定义版本号,如下:
defaultConfig {
versionCode 50
versionName "1.1.04.23"
}
versionCode 50
versionName "1.1.04.23"
}
到这里,该添加的代码都添加了。
运行一下看看,在菜单: build->Generate Signed APK
在菜单里面选择需要的渠道。
哈哈,这就可以把生成的打包文件提供给运营使用了。