Android應用簽名

來源:互聯網
上載者:User
為了要簽名?

    開發Android的人這麼多,完全有可能大家都把類名,包名起成了一個同樣的名字,這時候如何區分?簽名這時候就是起區分作用的。

    由於開發商可能通過使用相同的Package Name來混淆替換已經安裝的程式,簽名可以保證相當名字,但是簽名不同的包不被替換。

    APK如果使用一個key簽名,發布時另一個key簽名的檔案將無法安裝或覆蓋老的版本,這樣可以防止你已安裝的應用被惡意的第三方覆蓋或替換掉。

    這樣簽名其實也是開發人員的身份標識。交易中抵賴等事情發生時,簽名可以防止抵賴的發生。

 

簽名的注意事項
  • 所有的Android應用都必須有數位簽章,沒有不存在數位簽章的應用,包括模擬器上啟動並執行。Android系統不會安裝沒有數位憑證的應用。
  • 簽名的數位憑證不需要權威機構來認證,是開發人員自己產生的數位憑證,即所謂的自簽名。
  • 模擬器開發環境,開發時通過ADB介面上傳的程式會先自動被簽有Debug許可權,然後才傳遞到模擬器。如所示,Eclipse菜單的Window -> Preferences -> Android –> Build 下顯示的是我們預設的調試用的簽名數位憑證。

  • 正式發布一個Android應用時,必須使用一個合適的私密金鑰產生的數位憑證來給程式簽名,不能使用ADT外掛程式或者ANT工具產生的調試認證來發布。
  • 數位憑證都是有有效期間的,Android只是在應用程式安裝的時候才會檢查認證的有效期間。如果程式已經安裝在系統中,即使認證到期也不會影響程式的正常功能。
  • 簽名後需使用zipalign最佳化程式。
  • Android將數位憑證用來標識應用程式的作者和在應用程式之間建立信任關係,而不是用來決定終端使用者可以安裝哪些應用程式。
簽名的方法方法一、使用Eclipse工具

此方法適用於Android1.5及以上版本。

步驟一:開啟Eclipse->選擇你要簽名的項目->右擊->android tools->Export signed Application package

步驟二,在出現的視窗確認是不是這個項目要簽名,然後選擇下一步:

步驟三:在Export Android Application 這一步,如果我們之前已有有了 keystore, 選擇我們之前已有的,否則我們建立一個。

如下,選擇需要儲存這個認證檔案的目錄,以及這個認證檔案的一個密碼。

步驟四,點擊下一步後,我們需要填寫keystore的基本資料,如,別名,密碼,有效期間,姓名,組織,組織名稱,所在城市,所在省份,國家等,點擊Next

步驟五、選擇被簽名後的APK儲存位置。點擊finish。注意是選擇最終將產生的檔案。

之後我們在剛才選擇的目錄下就可以看到產生的簽名後的APK檔案。

方法二:使用命令列方式簽名。

這種方式比起前面要複雜很多了,但是卻對我們理解APK檔案有很多協助。這裡我們是使用Keytool和Jarsigner給程式簽名。

keytool 是個密鑰和認證管理工具。jarsigner 工具利用密鑰倉庫中的資訊來產生或校正 Java 存檔 (JAR) 檔案的數位簽章 (JAR 檔案將類檔案、圖象、聲音和/或其它數字化資料打包在一個檔案中)。

這兩個工具都是JDK內建的,所以你當前需要先確保JDK安裝正確。並且環境變數設定正確,以便可以以命令列的方式進行處理。

 

步驟一:用 KeyTool 產生認證檔案

下面是我隨便產生的一個認證檔案:

E:\Projects\cybercare.cn\trunk\android\ks2>keytool -genkey -keystore ks2.keystor 
e -keyalg RSA -validity 10000 -alias ks2.keystore 
輸入keystore密碼: 
您的名字與姓氏是什嗎? 
  [Unknown]:  www.cybercare.cn 
您的組織單位名稱是什嗎? 
  [Unknown]:  Cybercare 
您的組織名稱是什嗎? 
  [Unknown]:  津馳速信 
您所在的城市或地區名稱是什嗎? 
  [Unknown]:  北京 
您所在的州或省份名稱是什嗎? 
  [Unknown]:  北京 
該單位的兩字母國家代碼是什麼 
  [Unknown]:  CN 
CN=www.cybercare.cn, OU=Cybercare, O=津馳速信, L=北京, ST=北京, C=CN 正確嗎? 
  [否]:  y

輸入<ks2.keystore>的主密碼 
        (如果和 keystore 密碼相同,按斷行符號): 
再次輸入新密碼:

E:\Projects\cybercare.cn\trunk\android\ks2>

命令參數說明:

-genkey    產生認證檔案 
-keystore  指定密鑰庫的.keystore檔案中 

-keyalg     指定密鑰的演算法

-validity    為認證有效天數,這裡我們寫的是10000天。 
-alias       產生別名 

在輸入密碼時沒有回顯,只管輸入就可以了,一般位元建議使用20位,切忌需要記下來後面還要用,

注意:

1、CN(Common Name - 名字與姓氏):其實這個“名字與姓氏”應該是網域名稱,比如說localhost或是blog.devep.net之類的。輸成了姓名,和真正啟動並執行時候網域名稱不符,會出問題。瀏覽器訪問時,彈出一個對話方塊,提示“安全性憑證上的名稱無效,或者與網站名稱不匹配”,使用者選擇繼續還是可以瀏覽網頁。但是用http client寫程式訪問的時候,會拋出類似於“javax.servlet.ServletException: HTTPS hostname wrong: should be ”的異常。

2、在用keytool產生數位憑證時必須保證:-keystore androidapp.keystore -alias androidapp.keystore 兩者名稱必須相同。否則下一步簽名時會出現錯誤:jarsigner: 找不到 androidapp.keystore 的憑證鏈結。androidapp.keystore 必須引用包含專用密鑰和相應的公用密鑰憑證鏈結的有效密鑰庫密鑰條目。

 

 

KeyTool的更多參數說明可以看這篇文章:

http://www.cnblogs.com/kungfupanda/archive/2010/09/01/1815047.html

 

步驟二:匯出未簽名的APK檔案

 

方法一:使用Eclipse

開啟Eclipse->選擇你要匯出的項目->右擊->android tools->Export Unsigned Application package

然後在選擇儲存檔案目錄和檔案名稱對話方塊中輸入你想儲存的地址,確認後匯出後提示資訊類似如下:

方法二:

使用Eclipse,在Package Explorer中選擇Androidmanifest.xml檔案,找到overview項中,單擊Export the unsigned apk,

注意:

http://www.android123.com.cn/kaifafaq/175.html 提供的方法二:

直接進入工程檔案夾的bin目錄,比如我們的為C:\Documents and Settings\Administrator\workspace\android123\bin\android123.apk,直接複製出來就是未簽名的APK檔案。

這個方法並不可取,這個方法取出來的是加了Debug簽名的APK檔案,而不是未簽名的APK檔案。

 

 

步驟三,使用產生認證檔案簽名

下面是我簽名我一個之前寫的示範程式的執行效果:

E:\Projects\cybercare.cn\trunk\android\ks2>jarsigner -verbose -keystore ks2.keystore -signedjar GasBuddy_signed_00.apk GasBuddy002.apk ks2.keystore 
輸入密鑰庫的口令短語: 
輸入 ks2.keystore 的密鑰口令: 
   正在添加: META-INF/MANIFEST.MF 
   正在添加: META-INF/KS2_KEYS.SF 
   正在添加: META-INF/KS2_KEYS.RSA 
  正在簽名: res/layout/active.xml 
  正在簽名: res/layout/businessmeninfo_activitylayout.xml 
  正在簽名: res/layout/businessmeninfo_commentinfo_layout.xml 
  正在簽名: res/layout/businessmeninfo_commentlist_layout.xml 
  正在簽名: res/layout/businessmeninfo_information_layout.xml 
  正在簽名: res/layout/businessmeninfo_pointcardinfo_layout.xml 
  正在簽名: res/layout/businessmeninfo_pointcardlist_layout.xml 
  正在簽名: res/layout/commen_publish.xml 
  正在簽名: res/layout/discount_gasstation_foot_layout.xml 
  正在簽名: res/layout/discount_gasstation_head_layout.xml 
  正在簽名: res/layout/discount_gasstation_layout.xml 
  正在簽名: res/layout/discount_gasstation_list_activitylayout.xml 
  正在簽名: res/layout/discount_gasstation_title_layout.xml 
  正在簽名: res/layout/login.xml 
  正在簽名: res/layout/main.xml 
  正在簽名: res/layout/menu_activitylayout.xml 
  正在簽名: res/layout/my_point_gasstation.xml 
  正在簽名: res/layout/my_point_gasstation_view.xml 
  正在簽名: res/layout/nearby_gasstation.xml 
  正在簽名: res/layout/overlay_pop.xml 
  正在簽名: res/layout/register.xml 
  正在簽名: res/layout/splash_layout.xml 
  正在簽名: AndroidManifest.xml 
  正在簽名: resources.arsc 
  正在簽名: res/drawable-hdpi/bubble_background.9.png 
  正在簽名: res/drawable-hdpi/icon.png 
  正在簽名: res/drawable-hdpi/marker.png 
  正在簽名: res/drawable-hdpi/u25.png 
  正在簽名: res/drawable-hdpi/u30.png 
  正在簽名: res/drawable-ldpi/icon.png 
  正在簽名: res/drawable-mdpi/icon.png 
  正在簽名: classes.dex

E:\Projects\cybercare.cn\trunk\android\ks2>

 

有關 jarsigner 參數的詳細資料可以參看 
http://www.android123.com.cn/androidkaifa/173.html

 

解決對android APK 項目進行簽名過程中遇到的問題 
http://zhangkun716717-126-com.iteye.com/blog/774382

參考資料

Android簽名用keytool和jarsigner製作apk檔案 
http://www.android123.com.cn/androidkaifa/173.html

如何匯出一個未簽名的APK檔案? 
http://www.android123.com.cn/kaifafaq/175.html

無法對jar進行簽名,Android jarsigner問題 
http://www.android123.com.cn/kaifafaq/183.html

有關Android簽名問題總結 
http://www.android123.com.cn/androidkaifa/272.html

Android 簽名詳解 
http://yangguangfu.iteye.com/blog/723182

android簽名apk批次檔 
http://phenix.blogbus.com/logs/60336413.html

android簽名與release 
http://my.chinaunix.net/space.php?uid=20665441&do=blog&id=377220

轉載:http://www.cnblogs.com/ghj1976/archive/2011/07/18/2109381.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.