以前项目一直使用Python脚本进行打包,自打Android7.0出来之后发现Python脚本打出来的包,不能以adb install 方式安装到7.0 的手机上,于是市场毫不留情的就把Apk打回来了,原来Android 7.0 引入一项新的应用签名方案 APK Signature Scheme v2,它能提供更快的应用安装时间和更多针对未授权 APK 文件更改的保护。原来的Python脚本打出来的包都是基于v1打的,不适用于Android7.0。这个时候发现Android Studio 自身的打包可以打V2的包,但是试了一次打三个渠道包,速度真是不忍直视,打个包出来速度出奇的慢,Android 的渠道有多,这种方式打包太费时间,于是找到了美团的walle 打包,集成后发现速度杠杠的。下面来介绍一下walle的集成步骤吧
1、配置gradel
在位于项目的根目录 build.gradle 文件中添加Walle Gradle插件的依赖, 如下:
buildscript {
dependencies {
classpath 'com.meituan.android.walle:plugin:1.1.5'
}
}
在当前App的 build.gradle 文件中apply这个插件,并添加上用于读取渠道号的AAR
apply plugin: 'walle'
dependencies {
compile 'com.meituan.android.walle:library:1.1.5'
}
2、配置插件
在当前App的 build.gradle 文件中配置
walle {
apkOutputFolder = new File("${project.buildDir}/outputs/channels")
apkFileNameFormat = '${appName}-${channel}.apk'
//configFile与channelFile两者必须存在一个,否则无法生成渠道包。两者都存在时优先执行configFile
channelFile = new File("${project.getProjectDir()}/channel")
//configFile = new File("${project.getProjectDir()}/config.json")
}
配置解释:
apkOutputFolder apk输出目录 例子中的最终Apk 目录是在 app/build/outputs/channels 下,这个目录不需要我们自己建,打包完成会自己建好的
apkFileNameFormat 打包出来的App名字
channelFile 渠道包信息文件目录
渠道包信息文件配置,上述例子中的文字路径是app/channel
#自定义的
#自定义的
line
#应用宝
myapp
#360市场
market360
#豌豆荚
wandoujia
#小米
xiaomi
#华为
huawei
#百度
baidu
#vivo
vivo
#open
oppo
#酷安
kuan
贴一张我的项目结构出来,看一下配置文件对应的目录
到这里我们配置信息就完成了,接下来就可以直接打包了
在Android studio 的Terminal 中输入 ./gradlew clean assembleReleaseChannels 回车即可
回车后看见下列信息就表示打包完成了
10个渠道只用了三分多钟是不是挺快,如果使用Android studio自带打包工具,至少30+分钟。
渠道包是可以打好了,但是这个渠道umeng并不知道,所以我们还需要将这个渠道名配置到umeng中去
walle 提供了获取渠道信息的类
String channel = WalleChannelReader.getChannel(this.getApplicationContext());
我们需要做的是将它赋值给umeng
在Application 中初始化umeng
String channel = Const.DEBUG ? "line" : WalleChannelReader.getChannel(this.getApplicationContext());
String umengAppkey = "1111111111111111";
MobclickAgent.UMAnalyticsConfig umAnalyticsConfig = new MobclickAgent.UMAnalyticsConfig(this,
umengAppkey,
channel,
MobclickAgent.EScenarioType.E_UM_NORMAL,
true);
MobclickAgent.startWithConfigure(umAnalyticsConfig);
MobclickAgent.setDebugMode(Const.DEBUG);
这样我们就可以在umeng里统计到渠道信息了
walle 更多使用可以去看官方的文档:https://github.com/Meituan-Dianping/walle
APK Signature Scheme v2介绍可以去这里:http://blog.csdn.net/vane918/article/details/54099373