walle 官网:https://github.com/Meituan-Dianping/walle
1.为什么使用walle打包
传统打包方式很简单省事,但并不省时,通过这种方式打包,gradle每次都要重新编译,所以很耗时,每打包一次要等十几分钟,如果渠道多的app估计要等半小时以上。
美团开源的Android Signature V2 Scheme 签名下的新一代渠道包打包神器Walle,跟gradle打包不同,walle是在APK Signature Block 区块添加自定义的渠道信息,从而不用每次编译
2.使用walle打包的步骤
2.1 配置Gradle
project 的 build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "com.meituan.android.walle:plugin:latest.integration"
}
}
App的 build.gradle
apply plugin: 'walle'
// 需要在buildTypes中加signingConfig,否则报这个错: Error:Plugin requires 'APK Signature Scheme v2 Enabled' for release.
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.sankuai
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.sankuai
}
}
dependencies {
compile 'com.meituan.android.walle:library:1.0.3'
}
2.2 Walle信息配置
在App的 build.gradle 中添加如下信息
walle {
apkOutputFolder = new File("${project.buildDir}/outputs/channels"); //在app/build/outputs/channels 下生成xxx.apk
// 定制渠道包的APK的文件名称 ${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk
apkFileNameFormat = '${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
// 渠道配置文件 其中${project.getProjectDir()}指的是app目录
channelFile = new File("${project.getProjectDir()}/channel")
}
2.3 添加 channel 渠道文件
在app目录下添加名为channel 的文件:
anzhuo
anfen
anbei
PC6
360
yingyongbao
baidu
wandoujia
pp
xiaomi
oppo
lenovo
huawei
2.4 获取渠道
在需要获取渠道信息的地方使用如下代码获取渠道信息:
String channel = WalleChannelReader.getChannel(this.getApplicationContext());
2.5 打包
生成渠道包的方式是和assemble${variantName}Channels指令结合,渠道包的生成目录默认存放在 build/outputs/apk/,也可以通过walle闭包中的apkOutputFolder参数来指定输出目录
用法示例:
生成渠道包 gradlew clean assembleReleaseChannels
支持 productFlavors gradlew clean assembleMeituanReleaseChannels
生成单个渠道包 gradlew clean assembleReleaseChannels -PchannelList=anzhuo
生成多个渠道包 gradlew clean assembleReleaseChannels -PchannelList=wandoujia,baidu
3. 使用美团walle打包结合百度统计
传统打包使用功能清单文件配合 gradle 中的 productFlavors ,但美团walle的渠道是在 channel 配置文件中的,所以需要动态的通过 channel 配置文件来为 百度统计设置渠道信息(其他需要设置信息的 sdk 同百度统计)
3.1 百度统计的 功能清单渠道设置方式
productFlavors {
kuan {
manifestPlaceholders = [BaiduMobAd_CHANNEL: "kuan"]
}
xiaomi {
manifestPlaceholders = [BaiduMobAd_CHANNEL: "xiaomi"]
}
//..
}
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="BaiduMobAd_STAT_ID"
android:value="xxx"/> <!-- abcd1234 -->
//...
<!-- 渠道商编号-->
<!-- 这个同一个name的 meta-data 同时只能存在一个-->
<meta-data
android:name="BaiduMobAd_CHANNEL"
android:value="${BaiduMobAd_CHANNEL}"/>
</application>
3.2 百度统计动态修改渠道
String channel = WalleChannelReader.getChannel(this.getApplicationContext());//获取美团walle当前渠道
StatService.setAppChannel(this, channel, true);//设置百度统计当前渠道
4.使用walle打包的异常
gradlew clean assembleReleaseChannels
* What went wrong:
Unable to start the daemon process.
This problem might be caused by incorrect configuration of the daemon.
For example, an unrecognized jvm option is used.
Please refer to the user guide chapter on the daemon at https://docs.gradle.org/3.3/userguide/gradle_daemon.html
Please read the following process output to find out more:
-----------------------
Error occurred during initialization of VM
Could not reserve enough space for 1572864KB object heap
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
> Starting Daemon
D:\workspace\dm78>
问题原因:java版本是32位的
查看java版本是32位还是64位:
java -d32 -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) Client VM (build 25.131-b11, mixed mode, sharing)
java -d64 -version
Error: This Java instance does not support a 64-bit JVM.
Please install the desired version.