[转]安卓新一代多渠道打包工具Walle 解决渠道包V2签名问题
2018-03-02 14:23
711 查看
转自https://www.jianshu.com/p/572b59829a08
。
这个时候就可以用task要打包了,双击即可。或者直接在命令行输入
1490758426(1).jpg
没出现渠道打包task的同学请点击左上角的刷新按钮。
1490759814(1).jpg
当然了,Walle并不是为了解决打包速度而产生的一个工具,美团研究walle的原因是因为在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅—生成渠道包)已经行不通了,具体可以看看Walle自己是怎么说的。
Walle信息配置
配置项具体解释:
apkOutputFolder:指定渠道包的输出路径, 默认值为new File("${project.buildDir}/outputs/apk")
apkFileNameFormat:定制渠道包的APK的文件名称, 默认值为'${appName}-${buildType}-${channel}.apk'
可使用以下变量:
channelFile:包含渠道配置信息的文件路径,channel文件放在module的同级目录下。 具体内容格式详见:渠道配置文件示例,支持使用#号添加注释。
获取渠道
在需要获取渠道信息的地方使用如下代码获取渠道信息
通过读取<meta-data>来获取渠道号
打包
生成渠道包的方式是和assemble${variantName}Channels指令结合,渠道包的生成目录默认存放在 build/outputs/apk/,也可以通过walle闭包中的apkOutputFolder参数来指定输出目录
用法示例:
生成渠道包 ./gradlew clean assembleReleaseChannels
支持 productFlavors ./gradlew clean assembleMeituanReleaseChannels
生成单个渠道包 ./gradlew clean assembleReleaseChannels -PchannelList=google
生成多个渠道包 ./gradlew clean assembleReleaseChannels -PchannelList=google,dianping
更多用法
github
作者:tse1y 链接:https://www.jianshu.com/p/572b59829a08 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
为什么要打多个渠道的包?
大家都知道,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即可 <meta-data android:name="CUSTOM_CHANNEL" android:value="${CUSTOM_CHANNEL_VALUE}" />
这个时候就可以用task要打包了,双击即可。或者直接在命令行输入
./gradlew assembleRelease//打包所有渠道 ./gradlew assembleWandoujiaRelease//打包单个渠道 Wandoujia
1490758426(1).jpg
没出现渠道打包task的同学请点击左上角的刷新按钮。
Walle多渠道打包
这种方法是很简单省事,但是并不省时啊!通过这种方式打包,gradle每次都要从资源文件开始到生成apk重新走一遍,所以很耗时,每次打包一次要等十几分钟,如果渠道多的app估计要等上半小时以上。这时候我们就要想想有没有其他的打包方式了,刚好在推酷上看到了美团开源的Android Signature V2 Scheme 签名下的新一代渠道包打包神器Walle,跟gradle打包不一样,walle是在APK Signature Block区块添加自定义的渠道信息,具体如下。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的文件名称, 默认值为'${appName}-${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());
通过读取<meta-data>来获取渠道号
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参数来指定输出目录
用法示例:
生成渠道包 ./gradlew clean assembleReleaseChannels
支持 productFlavors ./gradlew clean assembleMeituanReleaseChannels
生成单个渠道包 ./gradlew clean assembleReleaseChannels -PchannelList=google
生成多个渠道包 ./gradlew clean assembleReleaseChannels -PchannelList=google,dianping
更多用法
github
作者:tse1y 链接:https://www.jianshu.com/p/572b59829a08 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章推荐
- 支持Android7.0 Signature V2 Scheme 多渠道打包,并解决类似360加固后获取不到渠道信息 - 渠道统计失败的问题
- 支持Android7.0 Signature V2 Scheme多渠道打包,并解决360加固获取不到渠道信息,渠道统计失败的问题
- 支持Android Signature V2 Scheme 多渠道打包,并解决类似360加固后获取不到渠道信息 - 渠道统计失败的问题
- Android Multi channel package tool (安卓多渠道打包工具)
- 新一代Android渠道打包工具:1000个渠道包只需要5秒
- 使用mac gradle指令 打包安卓apk遇到$TERM not set问题解决办法
- 美团多渠道打包工具walle及结合python实现界面化快速打包
- 渠道打包工具打包后\n变成换行符的问题
- Android 新一代多渠道打包神器(支持N版本新的签名方法)
- android ant多渠道 批量打包 遇到问题及解决
- Android Signature V2 Scheme 签名下的新一代渠道包打包神器
- 安卓转战React-Native之签名打包成Apk并极速多渠道打包
- APP签名打包后百度地图安卓SDK验证密钥失败的问题
- 安卓获取渠道名渠道id Android获取设备唯一标识的终极解决方法,防止安卓7.0时崩溃问题
- 安卓开发之打包签名Keystore密码忘了解决办法
- 一个解决android多渠道打包的问题插件之(兰贝壳儿)
- android studio version 2.3.3 打包签名V1和V2的问题
- 解决混淆报错问题-打包签名出现问题的解决方法
- 使用正式签名打包APK,打开debug模式报错的问题解决方法
- 新一代开源Android渠道包生成工具Walle