2013年1月12日星期六

[教學]簽署應用程式 sign APK 發佈 Android App

[Tutorial] Sign android application apk before publishing

官方的簽署應用程式APK教學,很長,不想看吧
http://developer.android.com/tools/publishing/app-signing.html

基本上要發佈一個可以安裝到 Android 手機的 APK 是一定要經過簽署(Sign)的。在 Eclipse compile 到手機運行只是 Debug 用的,不能用作發佈。無論是自己私下不經 Play store 發佈或放上 Play store 賣,都必須簽署。至於簽署用的 Key 則可以由自家電腦產生。

1. 先準備兩樣簽署需要的程式 (.exe)
查看 keytool.exe 和 jarsigner.exe,如電腦已經有裝JDK,應該就會放在
C:\Program Files\Java\JDK1.7.0_07\bin 裡頭。
如果沒有keytool.exe 和 jarsigner.exe,就到 http://www.oracle.com/technetwork/java/javase/downloads/index.html 下載JDK 吧。

2. 先在任何地方(如桌面)建立一個文件夾 "keytool",再在 "keytool" 裡建立文件夾 "key"。

3. 在Eclipse 指著Project 點右鍵 Android Tools >Exports unsigned application package,儲存到 keytool  文件夾。此時會有一個未經簽署 (unsigned)的 APK 檔,這刻它是無法被安裝的。



4. 執行 CMD ,並指標 keytool 文件夾位置,如cd C:\users\mrslow\desktop\keytool\

5. 如果已經建立 PATH ,在CMD 打以下Command 產生簽署用的 Key:

keytool -genkey -v -keystore key/my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
然後會詢問輸入密碼,輸入2次確認後還會問一些問題,亂答就好了,不必認真。
直到再問


Enter key password for <my-release-key.keystore>
<RETURN if same as keystore password>:

此時按 Enter 來使用同一組密碼。
你用來 Encrypt 的 Private key 已經產生了,在 key 文件夾內名叫 my-release-key.keystore。

6. 再輸入以下 Command 簽署 APK

jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore key/my-release-key.keystore -signedjar apk_signed.apk my_application.apk alias_name
當中的 my_application.apk 是第3步所產生的 apk 名稱。
輸入剛才那組密碼。

7. 簽署好的APK會放在Keytool 內。檢查是否簽署有效可用以下 Command :

jarsigner -verify apk_signed.apk

8. 如果成功會出現 "jar varified" 字樣,如果有 Warning 可以不用理會。
現在把 APK 放進電話裡,應可順利安裝了。

使用過一次後,日後再要簽署 APK 就可在 Eclipse 裡右鍵點選 Android Tools> Export signed application package,然後選回儲存好的 keystore ,就不必再用CMD簽署 APK。

4 則留言:

  1. 好難懂 如果懂這些的人應該也早就會自己改了..

    回覆刪除
  2. 你好,我完成了第4步,而第5步說keytool不是內部命令,請問如何解決?謝謝Sam

    回覆刪除
    回覆
    1. 謝謝,我試到了,是參考以下與你提示的作比較才了解,所以成功。

      keytool -genkey -v -keystore C:\Android\Equator_Bytes.keystore -alias Equator_Bytes -keyalg RSA -keysize 2048 -validity 10000

      jarsigner -verbose -keystore C:\Android\Equator_Bytes.keystore C:\Android\Cloudy_Day_unsigned.apk Equator_Bytes

      zipalign -v 4 C:\Android\Cloudy_Day_unsigned.apk C:\Android\CloudyDay.apk

      刪除