美团walle打包教程

美团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环境,配置成功后查看


美团walle打包教程_第1张图片

显示这个表示配置正确

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打包教程_第2张图片

附代码

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


美团walle打包教程_第3张图片

附代码

 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)在你的项目文件下新建文件


美团walle打包教程_第4张图片

文件内容:渠道包名称测试随便写


美团walle打包教程_第5张图片

(6)注意如果你的项目中有用c的代码,请添加(在你项目中的build.gradle中android下添加)


美团walle打包教程_第6张图片

附代码

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路径


美团walle打包教程_第7张图片


Ndk路径

美团walle打包教程_第8张图片

5. 开始打包


美团walle打包教程_第9张图片

附命令

(a)replease包:gradlew clean assembReleaseChannels

(b)Debug包 gradlew clean assembDebugChannels

成功如图所示


美团walle打包教程_第10张图片

安装包25兆,打包用时2分钟

6验证渠道包正确

在你的application中添加代码


美团walle打包教程_第11张图片

定义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'


升级跟换了很多,遇到了很多坑。以前混淆的无法使用,加上会报错,所以现在去掉了混淆,如果哪位大神遇到了混淆报错,并且解决了,请留言谢谢了。

你可能感兴趣的:(美团walle打包教程)