Android 支持V2&V3 簽名的渠道包生成腳本

前言

在Android 7.0上引入了v2簽名機(jī)制,v2簽名是對整個apk基于二進(jìn)制生成簽名,因此只要apk有任何改動都會導(dǎo)致校驗失敗。而我們原來v1版的渠道包生成方案是在apk中META-INF目錄中插入一個空文件標(biāo)識渠道,這必然會破壞apk的二進(jìn)制結(jié)果從而導(dǎo)致簽名失效。

至于v3簽名,是Android 9.0開始才引入的方案,是對v2完善和補(bǔ)充,具體的原理和簽名結(jié)構(gòu)均參照v2模式

在此我們使用了美團(tuán)的Walle來實現(xiàn)兼容v2簽名的渠道包生成腳本,腳本現(xiàn)已支持v2&v3

參見APK 簽名方案 v2

使用方法

腳本邏輯:腳本會自動檢測apk,如果已簽名則直接寫入渠道信息;若不存在v2則根據(jù)配置項部分重新簽名。因此對于源文件無特殊要求,放入debug包、v1包、v2包都可以使用

1.放入apk文件

2.修改py文件中配置項部分(可選)

3.執(zhí)行腳本

注意:

新腳本打包channel獲取方式變更,腳本請搭配lib-common 1.1.1.0食用

腳本詳解

腳本主要分三步流程

1.zipalign字節(jié)對齊

2.apk簽名

3.生成渠道包

注意:不管你的源文件是否簽名過,或者說你打包時只勾選了v1,第二步都會幫你apk文件重新簽署上v1及v2簽名。

這三步都是對官方命令行的封裝,有疑問請直接參閱文檔

1.?https://developer.android.com/studio/publish/app-signing?hl=zh-cn#sign-manually

2.?https://developer.android.com/studio/command-line/apksigner.html?hl=zh-cn

3.?https://github.com/Meituan-Dianping/walle/blob/master/walle-cli/README.md

測試用例

測試build-tools=27.0.3

只勾選V1

勾選v1及v2

360加固

Android 4.4Android 7.1Android 9.0

測試步驟

在設(shè)備上安裝線上APK,使用新腳本打包,驗證老腳本遷移后可否順利升級

驗證新腳本apk獲取的渠道名是否正確

坑點

若使用命令行簽名,build-tools>=28,會引入v3簽名。但是如果使用Android studio打包,即使項目build-tools版本為28,也不會引入v3簽名。而且Android studio上也只提供了v1v2的選擇項。因此推測google只在命令行簽名工具中開放了v3

渠道包腳本會破壞v3簽名,解決方法有兩個,要么修改腳本來兼容v3的簽名格式,要么使用build-tool 27打包不要引入v3。本腳本目前選擇的是后者.

walle腳本已更新,同時支持v2&v3

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容