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


显示这个表示配置正确

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'


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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,002评论 25 709
  • 最近在项目中遇到需要实现 Apk 多渠道、定制化打包, Google 、百度查找了一些资料,成功实现了上述功能,在...
    看一季残花落幕阅读 2,557评论 1 8
  • 这一章主要针对项目中可以用到的一些实用功能来介绍Android Gradle,比如如何隐藏我们的证书文件,降低风险...
    acc8226阅读 7,734评论 3 25
  • 今天所有的教师都来我们学校听体育课。这是我们在别的小学的老师给我们班上课。听说老师给我们带来了礼物我们很兴奋首先老...
    惠政豪阅读 306评论 0 0
  • 日记一则,记于2014.12.11晚 今天是我的生日,祝我生日快乐!好惨啊,孤零零地在杭州过,没有一个人知道,没有...
    浩二R阅读 687评论 4 16