2012年2月12日 星期日

Android : 以 SignApk.jar 來簽署(sign) 修改過的 apk (2012.02.13更新)

最近在研究可以自訂題庫的 Android 小遊戲,基本的構想是,別人除了下載遊戲的 .apk 檔去安裝以外,也可以將題庫檔換成自己想放的題目,讓它可以更彈性,發揮更大的效益。要達到這樣的功能當然可以把題庫檔或是所需要的相關檔案由 SD Card 來存取即可,但是,如果是要把建好的題庫和相關檔案給學生玩,要一一去教導他們把檔案放到指定的路徑,應該挺累人的。如果可以把遊戲的 .apk 檔更換題庫及檔案後,讓學生只要下載後重新安裝,相信應該會是較理想的方法。
由於基本上 Android 的 .apk 檔是 .zip 的格式,所以我們也不用什麼特殊的工具即可去增刪裡面的檔案,只要用常用的 7-zip 或 WinRAR ......等工具即可。真的那麼簡單嗎?沒錯!就是這麼簡單!不過,要注意的是,Android 為了確認軟體是原作者所放出來的,apk 檔會以金鑰來「簽署」(相關內容可以用 Keytool  和 jarsigner 的關鍵字去查詢),因此,被我們改過的 apk 如果沒有重新簽署過,就無法安裝到 Android 中,這個我是試過才知道會有問題的。本來還以為原來的構想行不通了,幸好,有比較簡單的方法可以解決,我們只要把更動過的 apk 檔以 SignApk.jar 重新「簽署」過即可安裝到 Android 中了。


準備工作

  • 下載 SignApk.zip ,下載後的檔案先以解壓縮工具解壓縮,可以儲存到自訂的位置。
  • 安裝 JAVA ,由於我們用來簽署 apk 的工具是 JAVA 的程式,如果電腦中沒有,就要先去  http://java.com 下載並安裝。
  • 準備個人金鑰,如果嫌麻煩,在 SignApk.zip 中有別人製作好的。如果自己製作的,就將簽署用的 certificate.pem 和個人金鑰 key.pk8 兩個檔案放到 SignApk 的目錄中,將原來的兩個舊檔案覆蓋即可。


操作程序

如果前面的準備工作都做好了,為了讓大部份的人都可以方便使用,不用記很長的命令,我把簽署的指令寫到了 SignApk 目錄中的「auto_signapk.bat」,這樣,只要把想重新簽署的 apk 檔利用滑鼠〔拖曳〕,並〔對準 auto_signapk.bat〕後放開,即會自動在 apk 原來目錄中產生一個重新簽署過的 xxx-new.apk 。
以 7-zip 更新了 swfLoader.apk 中 assets 目錄裡的 index.txt 後存檔
在 SignApk 目錄中有一個 auto_singapk.bat
把要重新簽署的 swfLoader.apk 拖曳並對準 auto_signapk.bat 後放開
在 apk 原來的目錄中多了一個 swfLoader-new.apk 的檔案
以圖中的例子來說,經過重新簽署的 swfLoader-new.apk 就可以安裝到 Android 中了,不過,如果原來的 swfLoader.apk 如果是原版的,因為不是同樣的金鑰簽署過的,表示作者(作品)不同,並無法直接覆蓋掉已安裝在 Android 中的,就會無法安裝新版的,所以,必須把它手動移除,才能安裝修改過的。

舊版的和新版的可能因為電子簽章不同而無法安裝
由 [管理應用程式] 中 [解除安裝] 舊的 apk
因此,如果是老師要給學生用的,給學生下載使用前,建議要先用自己的金鑰重新簽署過再給學生,這樣,他們下次就不會出現無法更新的情形了。


檔案下載

  • 我加了 auto_signapk.bat 的 SignApk.zip (2012.02.13 更新)


相關連結

更新紀錄
  • 2012.02.13 SignApk.zip 裡的 auto_singapk.bat 更新了一下,解決它在中文或帶有空格的路徑會執行失敗的問題。

4 則留言:

  1. 腳本寫的有點亂啊...這樣寫比較快吧
    @echo off
    cd /d %~dp0
    set apkf=%1
    if ^%apkf:~-1% == ^" goto Quote
    java -jar signapk.jar certificate.pem key.pk8 %1 %apkf:~0,-4%_Sign.apk
    exit
    :Quote
    java -jar signapk.jar certificate.pem key.pk8 %1 "%apkf:~1,-5%_Sign.apk"

    回覆刪除
    回覆
    1. 呵〜莫嫌腳本寫得爛!
      哈!在下非資訊本科系,寫寫東西純屬興趣,寫得爛,正常啊!
      不過,還是謝謝指教。

      刪除
    2. 抱歉 我簽署後一樣 剖析問題

      刪除
    3. 抱歉 我簽署後一樣 剖析問題

      刪除

 
© 2009. Design by Pocket