1. 程式人生 > >apk檔案簽名之命令列法

apk檔案簽名之命令列法

    寫了一個法語詞典,想傳到Google play上,發現需要apk簽名,猶豫是初次嘗試,故查閱了相關資料,結合自己的實踐經歷,我這裡講如何操作,至於為什麼這麼做,網上一搜一大片,我就不贅述了:

    匯出apk檔案:

如下圖所示,匯出apk檔案。不要從原始碼/bin檔案裡面找apk檔案,那個是加入了debug簽名的,不是我們需要的unsigned apk。

    命令列進行簽名:

第一步:

Apk簽名首先要有一個.keystore的簽名用的檔案。這個keystore是由jdk自帶的工具keytool生成的,具體生成方式參考一下:
開始->執行->cmd->cd 到你安裝的jdk的目錄這裡我是 D:\Program Files\Java\jdk1.7.0_05\bin

然後輸入:
keytool -genkey -alias JFrench.keystore -keyalg RSA -validity 1000000 -keystore JFrench.keystore

-alias 後跟的是別名這裡是 asaiAndroid.keystore
-keyalg 是加密方式這裡是 RSA
-validity 是有效期 這裡是 20000
-keystore 就是要生成的keystore的名稱 這裡是 JFrench.keystore
然後按回車
按回車後首先會提示你輸入密碼:這個在簽名時要用的要記住了哦。
然後會再確認你的密碼。
之後會依次叫你輸入 姓名,組織單位,組織名稱,城市區域,省份名稱,國家程式碼等。

示例如下圖:

第二步:

在 D:\Program Files\Java\jdk1.7.0_05\bin 還提供一個工具 jarsigner.exe
好現在可以在剛才的命令列後繼續執行以下命令給APK簽名:
jarsigner -verbose -keystore JFrench.keystore -signedjar JFrench_signed.apk JFrench.apk JFrench.keystore
-keystore:keystore 的名稱
JFrench.apk  是簽完名後的APK
JFrench.apk 是簽名前的apk
然後按回車:會要求輸入剛才設定的密碼,輸入後按回車就開始簽名了。

如下圖:
最後就能在bin目錄下面找到JFrench_sighed.apk檔案了。

第三步:

用zipalign(壓縮對齊)優化你的APK檔案。未簽名的apk不能使用,也不能優化。簽名之後的apk谷歌推薦使用zipalign.exe(位於android-sdk-windows\tools目錄下)工具對其優化:

D:\>zipalign -v 4 JFrench_signed.apk JFrench_signed_zipaligned.apk

  如上,zipalign能夠使apk檔案中未壓縮的資料在4個位元組邊界上對齊(4個位元組是一個性能很好的值),這樣android系統就可以使用mmap()(請自行查閱這個函式的用途)函式讀取檔案,可以在讀取資源上獲得較高的效能,
  PS:1.在4個位元組邊界上對齊的意思就是,一般來說,是指編譯器吧4個位元組作為一個單位來進行讀取的結果,這樣的話,CPU能夠對變數進行高效、快速的訪問(較之前不對齊)。
          2.對齊的根源:android系統中的Davlik虛擬機器使用自己專有的格式DEX,DEX的結構是緊湊的,為了讓執行時的效能更好,可以進一步用"對齊"進一步優化,但是大小一般會有所增加。