美團(tuán)walle打包教程
我們在android開發(fā)的時候經(jīng)常會遇到多渠道打包薛匪,傳統(tǒng)是使用productFlavors來進(jìn)行多渠道打包,但是這個隨著公司的需求越來越多古沥,安裝包越來越大岩齿。開始12個渠道包的速度還可以盹沈,可是安轉(zhuǎn)包過大的時候襟诸,通常渠道包要打半個小時左右,這是十分不能容忍的菇用。而且你的as說不好就會隨便的抽風(fēng)陷揪。又要從頭開始悍缠,于是就推薦了walle來打包。
1.walle介紹
Walle:美團(tuán)介紹滤港;https://tech.meituan.com/mt-apk-packaging.html
Github地址:https://github.com/Meituan-Dianping/walle
以下是個人使用步驟:如果有遺漏溅漾,或者你在使用的過程中有任何問題歡迎在簡書留言添履。
2. 個人推薦先配置gradle環(huán)境暮胧,配置成功后查看
顯示這個表示配置正確
3. jdk環(huán)境往衷,要安裝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兩者必須存在一個,否則無法生成渠道包疟呐。兩者都存在時優(yōu)先執(zhí)行configFile????channelFile = new File("${project.getProjectDir()}/channel")????//configFile = new File("${project.getProjectDir()}/config.json")}// 根據(jù)不同的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)在你的項目文件下新建文件
文件內(nèi)容:渠道包名稱測試隨便寫
(6)注意如果你的項目中有用c的代碼,請?zhí)砑樱ㄔ谀沩椖恐械腷uild.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;
附代碼
/**?* 得到渠道標(biāo)識?*/private void readChanel() {????channel= WalleChannelReader.getChannel(this.getApplicationContext());????if(!TextUtils.isEmpty(channel)){????????Log.e("xxxxxxxxxxxxxxxxxxxxx",channel);????}}
就這樣多渠道打包完成了
7總結(jié):
由于公司項目以前是classpath 'com.android.tools.build:gradle:2.2.3'
升級跟換了很多撞芍,遇到了很多坑序无。以前混淆的無法使用衡创,加上會報錯,所以現(xiàn)在去掉了混淆哟玷,如果哪位大神遇到了混淆報錯一也,并且解決了,請留言謝謝了讼渊。