Android簽名用keytool和jarsigner製作apk檔案作者: Android開發網原創 時間: 2008-11-14
Android程式的簽名和Symbian類似都可以自簽名(Self-signed),但是在Android平台中認證初期還顯得形同虛設,平時開發時通過ADB介面上傳的程式會自動被簽有Debug許可權的程式。需要簽名驗證在上傳程式到Android Market上時大家都已經發現這個問題了。Android signed製作方法
首先在Android開發時沒有安裝JDK的網友在Sun官方網站下載JDKhttp://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe,其實僅需要中的Keytool和Jarsigner。
詳細的簽名步驟:
第一步
C:\Program Files\Java\jdk1.6.0_10\bin>keytool -genkey -alias android123.keystore
-keyalg RSA -validity 20000 -keystore android123.keystore
輸入keystore密碼:[密碼不回顯]
再次輸入新密碼:[密碼不回顯]
您的名字與姓氏是什嗎?
[Unknown]: android123
您的組織單位名稱是什嗎?
[Unknown]: www.android123.com.cn
您的組織名稱是什嗎?
[Unknown]: www.android123.com.cn
您的組織名稱是什嗎?
[Unknown]: www.android123.com.cn
您所在的城市或地區名稱是什嗎?
[Unknown]: New York
您所在的州或省份名稱是什嗎?
[Unknown]: New York
該單位的兩字母國家代碼是什麼
[Unknown]: CN
CN=android123, OU=www.android123.com.cn, O=www.android123.com.cn, L=New York, ST
=New York, C=CN 正確嗎?
[否]: Y
輸入<android123.keystore>的主密碼
(如果和 keystore 密碼相同,按斷行符號):
其中參數-validity為認證有效天數,這裡我們寫的大些20000天。還有在輸入密碼時沒有回顯,只管輸入就可以了,一般位元建議使用20位,最後需要記下來後面還要用,整個過程:
接下來我們開始為apk檔案簽名了。
第二步
執行下面這句jarsigner -verbose -keystore android123.keystore -signedjar android123_signed.apk android123.apk android123.keystore 就可以生辰簽名的apk檔案,這裡輸入檔案android123.apk,最終產生android123_signed.apk為Android簽名後的APK執行檔案。下面提示輸入的密碼和keytool輸入的一樣就行了,:
有關Android程式發布和簽名可以查看SDK中 http://code.google.com/android/devel/sign-publish.html 一文.
附上keytool參數以及jarsigner參數:
keytool用法:
-certreq [-v] [-protected]
[-alias <別名>] [-sigalg <sigalg>]
[-file <csr_file>] [-keypass <密鑰庫口令>]
[-keystore <密鑰庫>] [-storepass <存放庫口令>]
[-storetype <儲存類型>] [-providername <名稱>]
[-providerclass <提供方類名稱> [-providerarg <參數>]] ...
[-providerpath <路徑列表>]
-changealias [-v] [-protected] -alias <別名> -destalias <目標別名>
[-keypass <密鑰庫口令>]
[-keystore <密鑰庫>] [-storepass <存放庫口令>]
[-storetype <儲存類型>] [-providername <名稱>]
[-providerclass <提供方類名稱> [-providerarg <參數>]] ...
[-providerpath <路徑列表>]
-delete [-v] [-protected] -alias <別名>
[-keystore <密鑰庫>] [-storepass <存放庫口令>]
[-storetype <儲存類型>] [-providername <名稱>]
[-providerclass <提供方類名稱> [-providerarg <參數>]] ...
[-providerpath <路徑列表>]
-exportcert [-v] [-rfc] [-protected]
[-alias <別名>] [-file <認證檔案>]
[-keystore <密鑰庫>] [-storepass <存放庫口令>]
[-storetype <儲存類型>] [-providername <名稱>]
[-providerclass <提供方類名稱> [-providerarg <參數>]] ...
[-providerpath <路徑列表>]
-genkeypair [-v] [-protected]
[-alias <別名>]
[-keyalg <keyalg>] [-keysize <密鑰大小>]
[-sigalg <sigalg>] [-dname <dname>]
[-validity <valDays>] [-keypass <密鑰庫口令>]
[-keystore <密鑰庫>] [-storepass <存放庫口令>]
[-storetype <儲存類型>] [-providername <名稱>]
[-providerclass <提供方類名稱> [-providerarg <參數>]] ...
[-providerpath <路徑列表>]
-genseckey [-v] [-protected]
[-alias <別名>] [-keypass <密鑰庫口令>]
[-keyalg <keyalg>] [-keysize <密鑰大小>]
[-keystore <密鑰庫>] [-storepass <存放庫口令>]
[-storetype <儲存類型>] [-providername <名稱>]
[-providerclass <提供方類名稱> [-providerarg <參數>]] ...
[-providerpath <路徑列表>]
-help
-importcert [-v] [-noprompt] [-trustcacerts] [-protected]
[-alias <別名>]
[-file <認證檔案>] [-keypass <密鑰庫口令>]
[-keystore <密鑰庫>] [-storepass <存放庫口令>]
[-storetype <儲存類型>] [-providername <名稱>]
[-providerclass <提供方類名稱> [-providerarg <參數>]] ...
[-providerpath <路徑列表>]
-importkeystore [-v]
[-srckeystore <源密鑰庫>] [-destkeystore <目標密鑰庫>]
[-srcstoretype <源儲存類型>] [-deststoretype <目標儲存類型>]
[-srcstorepass <源存放庫口令>] [-deststorepass <目標存放庫口令>]
[-srcprotected] [-destprotected]
[-srcprovidername <源提供方名稱>]
[-destprovidername <目標提供方名稱>]
[-srcalias <源別名> [-destalias <目標別名>]
[-srckeypass <源密鑰庫口令>] [-destkeypass <目標密鑰庫口令>]]
[-noprompt]
[-providerclass <提供方類名稱> [-providerarg <參數>]] ...
[-providerpath <路徑列表>]
-keypasswd [-v] [-alias <別名>]
[-keypass <舊密鑰庫口令>] [-new <新密鑰庫口令>]
[-keystore <密鑰庫>] [-storepass <存放庫口令>]
[-storetype <儲存類型>] [-providername <名稱>]
[-providerclass <提供方類名稱> [-providerarg <參數>]] ...
[-providerpath <路徑列表>]
-list [-v | -rfc] [-protected]
[-alias <別名>]
[-keystore <密鑰庫>] [-storepass <存放庫口令>]
[-storetype <儲存類型>] [-providername <名稱>]
[-providerclass <提供方類名稱> [-providerarg <參數>]] ...
[-providerpath <路徑列表>]
-printcert [-v] [-file <認證檔案>]
-storepasswd [-v] [-new <新存放庫口令>]
[-keystore <密鑰庫>] [-storepass <存放庫口令>]
[-storetype <儲存類型>] [-providername <名稱>]
[-providerclass <提供方類名稱> [-providerarg <參數>]] ...
[-providerpath <路徑列表>]
jarsigner用法: [選項] jar 檔案別名
jarsigner -verify [選項] jar 檔案
[-keystore <url>] 密鑰庫位置
[-storepass <口令>] 用於密鑰庫完整性的口令
[-storetype <類型>] 密鑰庫類型
[-keypass <口令>] 專用密鑰的口令(如果不同)
[-sigfile <檔案>] .SF/.DSA 檔案的名稱
[-signedjar <檔案>] 已簽名的 JAR 檔案的名稱
[-digestalg <演算法>] 摘要演算法的名稱
[-sigalg <演算法>] 簽名演算法的名稱
[-verify] 驗證已簽名的 JAR 檔案
[-verbose] 簽名/驗證時輸出詳細資料
[-certs] 輸出詳細資料和驗證時顯示認證
[-tsa <url>] 時間戳記機構的位置
[-tsacert <別名>] 時間戳記機構的公用密鑰認證
[-altsigner <類>] 替代的簽名機制的類名
[-altsignerpath <路徑列表>] 替代的簽名機制的位置
[-internalsf] 在簽名塊內包含 .SF 檔案
[-sectionsonly] 不計算整個清單的散列
[-protected] 密鑰庫已保護驗證路徑
[-providerName <名稱>] 提供者名稱
[-providerClass <類> Data Encryption Service提供者的名稱
[-providerArg <參數>]] ... 主類檔案和建構函式參數