天天看點

apk反編譯和重新打包

最近用anysdk接android,接入有點小麻煩,不過确實帶來了很大的便利,接入新管道隻需要設定參數就可以了,唯一要注意的就是,釋出的時候把debugMode關閉。

不過android下面的anysdk有個問題,就是所有管道必須用同一套資源,然後使用母包生成管道包,包之間無法做差異化,這與我們項目有點沖突。要解決這個問題,能想到的有兩個辦法:

  1. 母包就将某個管道的最終資源弄進去,再生成管道包,這個确實可行,但是實在太麻煩,不好維護,而且使anysdk帶來的便利大大降低。
  2. 一次性生成所有管道包,再用apktool等工具反編譯,把差異化檔案添加進去,再重新簽名。

    反編譯倒是沒問題,遇到了一個問題:需要額外下載下傳一個apktool.jar。沒想到重簽名卡了好久,因為網上說的指令都是jarsigner -verbose -keystore xx.keystore -signedjar -pkg.apk pkg1.apk xx.keystore,也沒講每個參數什麼意思,用的時候總是出錯,搞了好久才成功。

    下面将指令解釋如下:

    jarsigner:jdk下的一個工具,字尾exe

    -verbose:輸出詳細資訊

    -keystore:秘鑰檔案

    -signedjar:簽名檔案,第一個參數為簽名後的檔案,相當于輸出檔案,第二個為未簽名檔案,輸入檔案。開始搞反了,以為第一個是輸入,第二個輸出,被坑了一把。

    最後一個參數,是keystore的alias名,網上說的真是誤人子弟,放兩個keystore檔案名有何意義,是吧。