加固+美團walle簽名打包+Python一鍵打包

ZENLovely發表於2018-04-15

Python+加固+美團walle簽名打包#

運營人員往往為了更加精準的統計和分析各個渠道包的下載量或者其他資訊,往往需要我們打大量的渠道包。傳統的方式完全讓我痛苦不堪,加上加固,完全是痛苦不堪.

常見的多渠道打包策略

一.傳統的友盟多渠道打包。

1.在manifest檔案中配置"UMENG_CHANNEL <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" /> 2.在gradle中動態配置所有需要的渠道號 `android節點下

flavorDimensions "default"
  productFlavors {
    channel_oppo {}
    channel_vivo {}
    channel_huawei {}
    channel_xiaomi {}
    channel_baidu {}
    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }
}`
複製程式碼

3.通過gradletask 或者手動選擇所需要的渠道打出渠道包;

該種打包方式,每個包都是完全在打一遍,效率極低.

二.在APK中META-INFO中寫入渠道名的空檔案

該種方式可以只需要一個母包,效率可以.但是Android N中引入的V2簽名後,該方式就行不通了.

##正事來了,美團walle打包 walle打包解決了V2簽名校驗的問題,把渠道資訊寫入了不受保護的Apk signingBlock.對大神膜拜!!! 我懶得寫了, 詳細原理及介紹請移步:tech.meituan.com/android-apk…

看完記得回來....... 引用walle打包其實十分簡單,當然我還是遇到了一個小坑;

使用方式

`project根目錄gradle buildscript {

dependencies {
    classpath 'com.meituan.android.walle:plugin:1.1.6'
}
複製程式碼

}`

`app目錄下
apply plugin: 'walle'

dependencies {
compile 'com.meituan.android.walle:library:1.1.6'
複製程式碼

}`

`配置外掛
walle {
// 指定渠道包的輸出路徑
apkOutputFolder = new File("${project.buildDir}/outputs/channels");
// 定製渠道包的APK的檔名稱
apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
// 渠道配置檔案
channelFile = new File("${project.getProjectDir()}/channel")
複製程式碼

}

預設檔名可以自己配置

更多用法github傳送門:

github.com/Meituan-Dia…

配置好後terminal執行

./gradlew clean assembleReleaseChannels

生成渠道包, 如果是第一次執行會比較慢(我第一次執行,在lib工程報錯,提示的是sdk tool.jar cannot find ,我在工程的gradle.properties又指定了sdk才解決); 編譯success所有包在bulid.outputs資料夾下;

你以為這就結束了????是不是很愉快?

問題來了,應用加固如果選擇簽名會使渠道號丟失;而且不同的渠道包都需要加固,這個時間我反正是無法忍受!!

so,高潮來了,怎麼一次加固完,然後運用walle多渠道打包,把渠道資訊寫入簽名塊;

先附上鍊接:

[https://blog.csdn.net/blf09/article/details/72782795](https://blog.csdn.net/blf09/article/details/72782795 "命令列"'

只需要一個加固過未簽名的母包,就可以迅速打出想要的渠道包了. 試過上述的方法,會發現那些指令還是比較繁瑣的,所以有同學就用Python自動化指令碼實現一鍵打包了;

gitHub連結:

github.com/Jay-Goo/Pro…

注意的點

所以需要先安裝Python環境,我第一次安裝的是3.6X版本的環境,發現.py檔案執行錯誤,原因在於2.x和3.xPython語法規則上存在一些差異,如果你會Python的話可以嘗試著解決,否則就安裝2.x環境吧; 編輯好channel 以及config.py 執行Python ApkResigner.py 就可以在配置的輸出目錄打出想要的渠道包了,親測有效,而且十分便捷!

相關文章