」只用 1 分鐘「

2022-06-14 18:01:07

眾所周知,渠道包作為當下國內 Android 應用市場常見的分發方式,當 APP 和後臺互動或進行資料上報時,會帶上各自的 channel 渠道資訊,以此方便企業 & 開發者統計 APP 在各渠道的下載量、使用者量、留存率等關鍵活躍資料,並針對性的調整應用內容和推廣方案。而 Android 應用市場存在大大小小几百個商店,每當需要釋出 APP 或迭代新版本,往往需要開發者生成多個渠道包或是在各應用市場重新分發,且官方提供的 ProductFlavor 多渠道打包工具,對於每一個渠道包,都需要進行一次完整的 APK 打包過程,對於注重效率的開發者而言整個環節其實相當耗時,是否有更好的多渠道簽名打包方案呢?

近期,頂象技術團隊開源了自己的 Android apk 打包工具,精簡,高效,應用開發者需要的多渠道打包神器來了!

頂象 Apk 簽名和多渠道打包工具

下載後的包內檔案:

一.簽名功能簡介

我們先來看看 V1 和 V2 簽名的區別:

在 Android Studio 中點選選單 Build->Generate signed apk... 打包簽名有兩種簽名選項 V1 (Jar Signature) V2 (Full APK Signature),**

從 Android 7.0 開始,谷歌增加新簽名方案 V2 Scheme (APK Signature);

但 Android 7.0 以下版本,只能用舊簽名方案 V1 scheme (JAR signing)

V1 簽名:

  • 來自 JDK (jarsigner), 對 zip 壓縮包的每個檔案進行驗證,簽名後還能對壓縮包修改 (移動 / 重新壓縮檔案)
  • 對 V1 簽名的 apk/jar 解壓,在 META-INF 存放簽名檔案 (MANIFEST.MF, CERT.SF, CERT.RSA),
  • 其中 MANIFEST.MF 檔案儲存所有檔案的 SHA1 指紋 (除了 META-INF 檔案), 由此可知: V1 簽名是對壓縮包中單個檔案簽名驗證

V2 簽名:

  • 來自 Google (apksigner), 對 zip 壓縮包的整個檔案驗證,簽名後不能修改壓縮包 (包括 zipalign),
  • 對 V2 簽名的 apk 解壓,沒有發現簽名檔案,重新壓縮後 V2 簽名就失效,由此可知: V2 簽名是對整個 APK 簽名驗證

V2 簽名優點很明顯:

  • 簽名更安全 (不能修改壓縮包)
  • 簽名驗證時間更短 (不需要解壓驗證), 因而安裝速度加快


頂象 apk 簽名工具預設同時使用 V1+V2 簽名方式,用於對 android 加固後的 apk 進行重新簽名。

啟用工具介面:

使用說明:

  • 下載頂象簽名工具 dx-signer.jar,雙擊執行。
  • 選擇輸入 apk、aab 檔案。
  • 選擇簽名的 key 檔案,並輸入 key 密碼。
  • 選擇重籤後 apk、aab 的路徑,以 apk 結束。如:D:\sign.apk
  • 點選 「簽名」 按鈕,等待即可簽名完成。

ps: 如果有 alias(證書別名)金鑰的或者有多個證書的,請在高階 tab 中選擇 alias 並輸入 alias 密碼

命令列介面:

支援的 option 如下:

例如:

二.多渠道功能簡介

頂象多渠道工具相容友盟和美團 walle 風格的多渠道包,方便客戶把 APP 釋出到不同的應用平臺,進行渠道統計。


使用說明:

  • 在 app 中預留讀取渠道資訊的入口,具體見讀取渠道資訊
  • 在簽名使用基礎上,點選選擇渠道清單
  • 選擇清單檔案 channel.txt。具體檔案格式見渠道格式檔案說明
  • 點選簽名,等待生成多個帶簽名的渠道 app

讀取渠道資訊:

頂象多渠道工具相容友盟和美團 walle 風格的多渠道包,下面是兩種不同風格的渠道資訊讀取方法。選其中之一即可。

您可以讀取這個欄位。

渠道檔案格式說明

請準備渠道清單檔案 channel.txt, 格式為每一行一個渠道, 例如:

License

三.常見問題:

關於 app 簽名:

Q: app 簽名是什麼?

A: 簽名就是用於識別 app 開發者,並保證 apk 完整性的一個機制,谷歌要求每一個 app 都需要有簽名。

Q: 為什麼上傳的 app 需要有簽名?

A: 加固有防二次打包的功能,需要提前 apk 原本的簽名,供加固後驗證簽名正確性用。

Q: 在 androidstudio 中打出的 debug 版本包,可以加固嗎?

A: 不建議用 debug 版本包加固,因為 debug 版本的包使用的是 androidstudio 的 debug 簽名,可能導致加固後無法重簽名,或者籤錯名的情況。導致無法正常執行。

關於加固後重簽名:

Q: 上傳之前 apk 已經簽過名了,為什麼加固後又要重新籤一次?

A: 加固之後會破壞 apk 原有的簽名,所以需要重新簽名,否則無法安裝。

Q: 為什麼重簽名需要和加固前保持一致?

A: 如果不保持一致,則會觸發加固的防二次打包功能,無法正常執行。