美团walle打包教程
我们在android开发的时候经常会遇到多渠道打包,传统是使用productFlavors来进行多渠道打包,但是这个随着公司的需求越来越多,安装包越来越大。开始12个渠道包的速度还可以,可是安转包过大的时候,通常渠道包要打半个小时左右,这是十分不能容忍的。而且你的as说不好就会随便的抽风。又要从头开始,于是就推荐了walle来打包。
1.walle介绍
Walle:美团介绍;https://tech.meituan.com/mt-apk-packaging.html
Github地址:https://github.com/Meituan-Dianping/walle
以下是个人使用步骤:如果有遗漏,或者你在使用的过程中有任何问题欢迎在简书留言。
2. 个人推荐先配置gradle环境,配置成功后查看
显示这个表示配置正确
3. jdk环境,要安装1.8以上的版本
4. 使用步骤
(1)在你的build.gradle中添加插件依赖
classpath 'com.meituan.android.walle:plugin:1.1.6'
(2)在你的项目build.gradle中添加
implementation 'com.meituan.android.walle:library:1.1.6'
由于本人项目使用的是
classpath 'com.android.tools.build:gradle:3.1.2'
官方的compile 'com.meituan.android.walle:library:1.1.6'中compile 不再使用,你可以查看as官方的文档
apply plugin: 'walle'
(3)在你项目中build.gradle中添加(注意这个是在android外面)
附代码
walle { apkOutputFolder = new File("${project.buildDir}/outputs/channels") apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}-${flavorName}.apk' //configFile与channelFile两者必须存在一个,否则无法生成渠道包。两者都存在时优先执行configFile channelFile = new File("${project.getProjectDir()}/channel") //configFile = new File("${project.getProjectDir()}/config.json")}// 根据不同的applicationId来配置不同的channelFile/configFileafterEvaluate { project.android.applicationVariants.all { BaseVariant variant -> variant.assemble.doFirst { if (variant.applicationId.endsWith(".debug")) { project.walle.channelFile = new File("${project.getProjectDir()}/channel_debug") } } }}
(4)在你项目中的build.gradle中android
附代码
signingConfigs { sankuai { storeFile file("签名路径") storePassword '密码' keyPassword '密码' keyAlias '' } } buildTypes { release { buildConfigField("boolean", "PUBLIC", "false") zipAlignEnabled true minifyEnabled false// shrinkResources true//去掉不用资源 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.sankuai } debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' buildConfigField("boolean", "PUBLIC", "false") signingConfig signingConfigs.sankuai applicationIdSuffix 'debug' } }
(5)在你的项目文件下新建文件
文件内容:渠道包名称测试随便写
(6)注意如果你的项目中有用c的代码,请添加(在你项目中的build.gradle中android下添加)
附代码
task ndkBuild(type: Exec) { commandLine 'cmd', "C:/D/sdk/ndk-bundle", '-C', file('src/main/jni').absolutePath}tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn ndkBuild}
查看ndk路径
Ndk路径
5. 开始打包
附命令
(a)replease包:gradlew clean assembReleaseChannels
(b)Debug包 gradlew clean assembDebugChannels
成功如图所示
安装包25兆,打包用时2分钟
6验证渠道包正确
在你的application中添加代码
定义String channel;
附代码
/** * 得到渠道标识 */private void readChanel() { channel= WalleChannelReader.getChannel(this.getApplicationContext()); if(!TextUtils.isEmpty(channel)){ Log.e("xxxxxxxxxxxxxxxxxxxxx",channel); }}
就这样多渠道打包完成了
7总结:
由于公司项目以前是classpath 'com.android.tools.build:gradle:2.2.3'
升级跟换了很多,遇到了很多坑。以前混淆的无法使用,加上会报错,所以现在去掉了混淆,如果哪位大神遇到了混淆报错,并且解决了,请留言谢谢了。
网友评论