android studio 渠道打包工具,Android Studio多渠道打包套路

本文详细介绍了在Android Studio中使用友盟统计进行多渠道打包的步骤,包括在AndroidManifest.xml设置动态变量、在build.gradle配置productFlavors、执行打包操作以及通过命令行打包。同时,文章提供了签名配置和自定义APK输出名称的方法,帮助开发者高效地管理不同渠道的APK打包工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说到多渠道,这里不得不提一下友盟统计,友盟统计是大家日常开发中常用的渠道统计工具,而我们的打包方法就是基于友盟统计实施的。按照友盟官方文档说明,渠道信息通常需要在AndroidManifest.xml中配置如下值:

上面的value值Channel_ID就是渠道标识。我们的期望的就是在编译时候这个值能够自动变化以满足区分多渠道的需求。

(一)在AndroidManifest.xml里设置动态渠道变量

android:name="UMENG_CHANNEL"

android:value="${UMENG_CHANNEL_VALUE}" />

(二)在build.gradle设置productFlavors

这里假定我们需要打包的渠道为酷安市场、360、小米、百度、豌豆荚

android {

productFlavors {

kuan {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "kuan"]

}

xiaomi {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]

}

qh360 {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qh360"]

}

baidu {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]

}

wandoujia {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]

}

}

}

或者批量修改

android {

productFlavors {

kuan {}

xiaomi {}

qh360 {}

baidu {}

wandoujia {}

}

productFlavors.all {

flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]

}

}

所谓ProductFlavors其实就是可定义的产品特性,配合 manifest merger 使用的时候就可以达成在一次编译过程中产生多个具有自己特性配置的版本。上面这个配置的作用就是,为每个渠道包产生不同的 UMENG_CHANNEL_VALUE 的值。

(三)执行打包操作

在AndroidStudio菜单栏点击Build菜单–>Generate signed APK–>选择key,并输入密码

797c0cb879e62e7a97de99a7bb0998ce.png

然后下一步,选择打包渠道

c3cd355263314b4483e7935836300230.png

最后点击完成按钮

d1ddbabed9a94ca9a3124d190af04925.png

上图可以看到,我们已经成功的将五个渠道包打好。

(四)执行打包命令 ./gradlew assembleRelease

除了使用AndroidStudio图形打包操作以外,我们也可以使用命令行进行打包操作,具体步骤如下:

在AndroidStudio窗口左下角打开Terminal面板,输入gradlew assembleRelease命令

c4518687d50541a54bfe6ba71f247088.png

如果系统中没有安装Gradle,则会自动下载完成安装及初始化

3e51206b1c363ecce5447e873d61151b.png

打包成功后会提示BUILD SUCCESSRUL

be8cc8dd0caa381ddd97fa5ff2822542.png

在app–>build–>outputs–>apk路径中就可以看到打包成功后的APK

71f7c96e3b8d6eedfa63f2ac88048576.png

注意,此时这里的APK包名显示为unsigned,也就是说未签名,我们可以继续在build.gradle文件中配置签名信息

signingConfigs {

release{

storeFile file("../wooyun_keystore") //签名文件路径

storePassword "123456"

keyAlias "123456"

keyPassword "123456" //签名密码

}

}

然后再次执行gradlew assembleRelease命令

2f66b3e0d902b36b3e0c30499b382582.png

这次生成的就是含有签名的渠道包。

当我们的渠道包版本比较多时,可以自定义所打APK包名称,用以区分

// 自定义输出配置,这里我们加上APK版本号1.0

applicationVariants.all { variant ->

variant.outputs.each { output ->

def outputFile = output.outputFile

if (outputFile != null && outputFile.name.endsWith('.apk')) {

// 输出apk名称为wooyun_v1.0_wandoujia.apk

def fileName = "wooyun_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"

output.outputFile = new File(outputFile.parent, fileName)

}

}

}

9112c438584335cd898df69f63a7f741.png

assemble是Gradle中的编译打包命令,有如下用法:

如果我们想打包wandoujia渠道的release版本,执行如下命令就好了:

gradlew assembleWandoujiaRelease

如果我们想打包wandoujia渠道的debug版本,执行如下命令就好了:

gradlew assembleWandoujiaDebug

如果我们只打wandoujia渠道版本,则:

gradlew assembleWandoujia

此命令会生成wandoujia渠道的Release和Debug版本

同理我想打全部Release版本:

gradlew assembleRelease

这条命令会把Product Flavor下的所有渠道的Release版本都打出来。

下面是我个人的build.gradle配置文件,分享给大家,以作参考

apply plugin: 'com.android.application'

android {

compileSdkVersion 23

buildToolsVersion "23.0.3"

defaultConfig {

applicationId "com.wooyun.castiel"

minSdkVersion 15

targetSdkVersion 23

versionCode 1

versionName "1.0"

}

//签名

signingConfigs {

debugConfig {

storeFile file("../wooyun_keystore") //签名文件

storePassword "123456"

keyAlias "123456"

keyPassword "123456" //签名密码

}

release{

storeFile file("../wooyun_keystore") //签名文件

storePassword "123456"

keyAlias "123456"

keyPassword "123456" //签名密码

}

}

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名称为wooyun_v1.0_wandoujia.apk

def fileName = "wooyun_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"

output.outputFile = new File(outputFile.parent, fileName)

}

}

}

}

}

productFlavors {

kuan {}

xiaomi {}

qh360 {}

baidu {}

wandoujia {}

}

productFlavors.all {

flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]

}

}

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

testCompile 'junit:junit:4.12'

compile 'com.android.support:appcompat-v7:23.4.0'

}

上面的signingConfigs配置中,可以写两个代码块,分别名为debugConfig和releaseConfig,并在其中写好一个完整签名需要的keyAlias、keyPassword、storeFile file、storePassword。

然后在buildTypes中,分两个代码块,分别是debug时用的,和release时用的。在其中引用刚刚写好的debugConfig和releaseConfig即可。

注意:signingConfigs代码块一定要写在buildTypes前面,否则会报下面这种错:

Could not find property 'debugConfig' on SigningConfig container.

签名密码写在gradle中不安全,故最好在打包上线的时候将相关代码注释掉。

ps:下面看下android studio 多渠道打包报错

What went wrong:

Execution failed for task ':项目名:shrinkGuanwangReleaseMultiDexComponents'.

java.io.IOException: Can't read D:\wanxiaoStudio-2.5\build\intermediates\classes-proguard\guanwang\release\classes.jar

Try:

Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

总结

以上所述是小编给大家介绍的Android Studio多渠道打包套路,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值