android多渠道打包插件,安卓新一代多渠道打包工具Walle

为什么要打多个渠道的包?

大家都知道,android应用商店大大小小有几百个,作为一个有志向的app,就需要做到统计各个应用商店的下载量,不同渠道下的app使用时长、安装数量、使用用户数等等信息,这个时候就需要打多个渠道包。渠道包的原理大致就是往apk中写入不同的渠道信息,对这个问题有疑问的同学可以看看gradle官网或者看看这篇文章。

传统多渠道打包

用android studio开发的同学都知道,传统的多渠道打包方法是通过gradle配置productFlavors,在配合grade的manifestPlaceholders插件,就可以实现task打多渠道包了,具体如下。

//app目录下在build.gradle文件中添加如下代码

productFlavors {

yingyongbao {

manifestPlaceholders = [CUSTOM_CHANNEL_VALUE: "yingyongbao"]

}

baidu {

manifestPlaceholders = [CUSTOM_CHANNEL_VALUE: "baidu"]

}

}

//在AndroidManifest.xml中添加如下代码 如果有使用友盟把CUSTOM_CHANNEL换成UMENG_CHANNEL即可

android:name="CUSTOM_CHANNEL"

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

这个时候就可以用task要打包了,双击即可。或者直接在命令行输入

./gradlew assembleRelease//打包所有渠道

./gradlew assembleWandoujiaRelease//打包单个渠道 Wandoujia

572b59829a08?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

1490758426(1).jpg

没出现渠道打包task的同学请点击左上角的刷新按钮。

Walle多渠道打包

这种方法是很简单省事,但是并不省时啊!通过这种方式打包,gradle每次都要从资源文件开始到生成apk重新走一遍,所以很耗时,每次打包一次要等十几分钟,如果渠道多的app估计要等上半小时以上。这时候我们就要想想有没有其他的打包方式了,刚好在推酷上看到了美团开源的Android Signature V2 Scheme 签名下的新一代渠道包打包神器Walle,跟gradle打包不一样,walle是在APK Signature Block区块添加自定义的渠道信息,具体如下。

572b59829a08?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

1490759814(1).jpg

当然了,Walle并不是为了解决打包速度而产生的一个工具,美团研究walle的原因是因为在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅—生成渠道包)已经行不通了,具体可以看看Walle自己是怎么说的。

Walle简单使用

Gradle 插件使用方式

//配置 build.gradle

//在位于项目的根目录 build.gradle 文件中添加Walle Gradle插件的依赖, 如下:

buildscript {

dependencies {

classpath 'com.meituan.android.walle:plugin:1.0.3'

}

}

//并在当前App的 build.gradle 文件中apply这个插件,并添加上用于读取渠道号的AAR,

apply plugin: 'walle'

//如果不需要通过walle获取渠道号 则不需要加

dependencies {compile 'com.meituan.android.walle:library:1.0.3'}

Walle信息配置

//在当前App的 build.gradle 中添加如下信息

walle {

// 指定渠道包的输出路径

apkOutputFolder = new File("${project.buildDir}/outputs/channels");

// 定制渠道包的APK的文件名称 ${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk

apkFileNameFormat = '${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';

// 渠道配置文件

channelFile = new File("${project.getProjectDir()}/channel")

}

配置项具体解释:

apkOutputFolder:指定渠道包的输出路径, 默认值为new File("${project.buildDir}/outputs/apk")

apkFileNameFormat:定制渠道包的APK的文件名称, 默认值为'

math?formula=%7BappName%7D-{buildType}-${channel}.apk'

可使用以下变量:

projectName - 项目名字

appName - App模块名字

packageName - applicationId (App包名packageName)

buildType - buildType (release/debug等)

channel - channel名称 (对应渠道打包中的渠道名字)

versionName - versionName (显示用的版本号)

versionCode - versionCode (内部版本号)

buildTime - buildTime (编译构建日期时间)

fileSHA1 - fileSHA1 (最终APK文件的SHA1哈希值)

flavorName - 编译构建 productFlavors 名

channelFile:包含渠道配置信息的文件路径,channel文件放在module的同级目录下。 具体内容格式详见:渠道配置文件示例,支持使用#号添加注释。

获取渠道

在需要获取渠道信息的地方使用如下代码获取渠道信息

String channel = WalleChannelReader.getChannel(this.getApplicationContext());

通过读取来获取渠道号

private void readMetaDataFromApplication() {

try {

ApplicationInfo appInfo = this.getPackageManager()

.getApplicationInfo(getPackageName(),

PackageManager.GET_META_DATA);

String mTag = appInfo.metaData.getString("mTag");

Log.e(TAG, "mTag=" + mTag);

} catch (NameNotFoundException e) {

e.printStackTrace();

}

}

打包

生成渠道包的方式是和assemble${variantName}Channels指令结合,渠道包的生成目录默认存放在 build/outputs/apk/,也可以通过walle闭包中的apkOutputFolder参数来指定输出目录

用法示例:

生成渠道包

mac ./gradlew clean assembleReleaseChannels

win gradlew clean assembleReleaseChannels

支持 productFlavors

mac ./gradlew clean assembleMeituanReleaseChannels

win gradlew clean assembleMeituanReleaseChannels

生成单个渠道包

mac ./gradlew clean assembleReleaseChannels -PchannelList=google

win gradlew clean assembleReleaseChannels -PchannelList=google

生成多个渠道包

mac ./gradlew clean assembleReleaseChannels -PchannelList=google,dianping

win gradlew clean assembleReleaseChannels -PchannelList=google,dianping

释放你的双手,让商务运营自己打包

walle-cli 是walle 提供的命令行工具 ,简单的用法:

获取信息

显示当前apk中的渠道和额外信息:

java -jar walle-cli-all.jar show /Users/Meituan/app/build/outputs/apk/app.apk

写入信息

写入渠道

java -jar walle-cli-all.jar put -c meituan /Users/Meituan/Downloads/app.apk

写入额外信息,不提供渠道时不写入渠道

java -jar walle-cli-all.jar put -c meituan -e buildtime=20161212,hash=xxxxxxx /Users/xxx/Downloads/app.apk

指定输出文件,自定义名称。 不指定时默认与原apk包同目录。

java -jar walle-cli-all.jar put -c meituan /Users/Meituan/Downloads/app.apk /Users/xxx/Downloads/app-new-hahha.apk

批量写入

命令行指定渠道列表

java -jar walle-cli-all.jar batch -c meituan,meituan2,meituan3 /Users/walle/app/build/outputs/apk/app.apk

指定渠道配置文件

java -jar walle-cli-all.jar batch -f /Users/Meituan/walle/app/channel /Users/Meituan/walle/app/build/outputs/apk/app.apk

配置文件示例 支持使用#号添加注释

输出目录可指定,不指定时默认在原apk包同目录下。

指定渠道&额外信息配置文件

java -jar walle-cli-all.jar batch2 -f /Users/Meituan/walle/app/config.json /Users/Meituan/walle/app/build/outputs/apk/app.apk

输出目录可指定,不指定时默认在原apk包同目录下。

更多用法

获取cli所有功能

java -jar walle-cli-all.jar -h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值