」只用 1 分鐘「 – 超簡極速 Apk 簽名 & 多渠道打包神器

眾所周知,渠道包作為當下國內 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: 如果不保持一致,則會觸發加固的防二次打包功能,無法正常運行。