按照上一篇文章使用Walle實現多渠道打包打出來的包經360加固後,會導致無法獲取到渠道信息,所以如果你打的渠道包要經過360加固,就不能使用上一篇文章的方法打渠道包,這裏提供另一種方法:
1、app的 build.gradle 文件添加walle的依賴用於獲取渠道信息
dependencies {
compile 'com.meituan.android.walle:library:1.1.6'
}
2、將之前配置在manifest文件中標籤內的友盟的渠道信息刪除,修改友盟初始化方法爲:
//獲取渠道信息
String channel = WalleChannelReader.getChannel(this.getApplicationContext());
UMConfigure.init(this, BuildConfig.UMENG_APPKEY, channel, UMConfigure.DEVICE_TYPE_PHONE, "");
3、正常打包,然後加固,得到加固後的apk(還未簽名),這裏暫且命名爲app_release_enc.apk
4、上github下載 ProtectedApkResignerForWalle項目,將第3步加固後未簽名的apk放到此項目的根目錄:
5、修改config.py文件:
#!/usr/bin/python
#-*-coding:utf-8-*-
#keystore信息
#Windows 下路徑分割線請注意使用\\轉義
keystorePath = "./xxx.keystore"
keyAlias = "xxx"
keystorePassword = "xxx"
keyPassword = "xxx"
#加固後的源文件名(未重簽名)
protectedSourceApkName = "app_release_enc.apk"
#加固後的源文件所在文件夾路徑(...path),注意結尾不要帶分隔符,默認在此文件夾根目錄
protectedSourceApkDirPath = ""
#渠道包輸出路徑,默認在此文件夾Channels目錄下
channelsOutputFilePath = ""
#渠道名配置文件路徑,默認在此文件夾根目錄
channelFilePath = ""
#額外信息配置文件(絕對路徑,例如/Users/mac/Desktop/walle360/config.json)
#配置信息示例參看https://github.com/Meituan-Dianping/walle/blob/master/app/config.json
extraChannelFilePath = ""
#Android SDK buidtools path , please use above 25.0+
sdkBuildToolPath = "/B/sdk/build-tools/27.0.3"
這裏順便補充下相對路徑知識(老忘):
"/" 表示根目錄
"./" 表示當前目錄
"../" 表示上一級目錄("../../"上二級)
6、修改channel裏的要打包的渠道:
這裏暫且只打華爲、小米、應用包三個渠道的包:
huawei
xiaomi
yingyongbao
7、cmd打開命令行窗口,進入ProtectedApkResignerForWalle項目根目錄,執行命令:python ApkResigner.py
執行成功後,ProtectedApkResignerForWalle項目根目錄會生成channels文件夾,打開此文件夾可以看到新生成的3個渠道包:
自此,walle打的包加固後獲取不到渠道信息的問題就解決了。
結合熱更新的補充
1、項目打出基準包後,build文件下會生成如下圖所示的bakApk文件,此文件我們一定要保存好,後面如果要打補丁時,要保證build文件下方有此文件,否則補丁包打不出來。
2、我們將第1步生成的基準apk上傳到360網頁加固後,下載加固成功但未簽名的apk放到ProtectedApkResignerForWalle項目根目錄生成多渠道apk(生成的apk會自動簽名),然後發佈到各個應用市場。
3、當發現有bug時,我們首先修復bug,改完後將第1步生成的bakApk文件放到app目錄下的build文件裏,然後打補丁包。
4、將生成的補丁包上傳到bugly,然後各個應用市場的app都會收到補丁。
另外,github上ProtectedApkResignerForWalle項目給出的注意事項: