Android程序的簽名
Andriod系統要求所有的程序經過數字簽名才能安裝。
在release模式下編譯程序, 在Package面版上按project右鍵,選擇Android Tools>Export Application Package.或者你可以點擊Manifest Editor, overview 頁面上的“Exporting the unsigned .apk”連接 ,導出未簽名apk文件。保存.apk文件之后,用Jarsigner及你自己的密鑰給apk文件簽名 ,如果沒有密鑰, 你可以用Keystore創建密鑰和密鎖。如果已經有一個密鑰了,如公共密鑰,就可以給.apk文件簽名了。
Android程序的簽名和Symbian類似都可以自簽名(Self-signed),但是在Android平臺中證書初期還顯得形同虛設,平時開發時通過ADB接口上傳的程序會自動被簽有Debug權限的程序。需要簽名驗證在上傳程序到Android Market上時大家都已經發現這個問題了。Android signed制作方法
首先在Android開發時沒有安裝JDK的網友在Sun官方網站下載JDK:http://www.java.net/download/jdk ... 6-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輸入的一樣就行了,如圖:
本人測試時使用:jarsigner -verbose -keystore android123.keystore android123.apk android123
有關Android程序發布和簽名可以查看SDK中 http://code.google.com/android/devel/sign-publish.html 一文.
附上keytool參數以及jarsigner參數:
#p#
keytool用法:
-certre
[-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 <類> 加密服務提供者的名稱
[-providerArg <參數>]] ... 主類文件和構造函數參數
【編輯推薦】