日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android签名总结

發布時間:2023/12/9 Android 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android签名总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、為什么要簽名

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

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

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

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

二、簽名的注意事項

?????? Android系統要求所有的程序經過數字簽名才能安裝,如果沒有可用的數字簽名,系統將不許安裝運行此程序。不管是模擬器還是真實手機。因此,在設備或者是模擬器上運行調試程序之前,必須為應用程序設置數字簽名。

?????? Android簽名的數字證書不需要權威機構來認證,是開發者自己產生的數字證書,即所謂的自簽名。數字證書用來標識應用程序的作者和在應用程序之間建立信任關系,而不是用來決定最終用戶可以安裝哪些應用程序。

?????? 系統僅僅會在安裝的時候測試簽名證書的有效期,如果應用程序的簽名是在安裝之后才到期,那么應用程序仍然可以正常啟用。

?????? 可以使用標準工具-Keytool and Jarsigner-生成密鑰,來簽名應用程序的.apk文件。

?????? 簽名后需使用zipalign優化程序。

?????? 模擬器開發環境,開發時通過ADB接口上傳的程序會先自動被簽有Debug權限,然后才傳遞到模擬器。Eclipse菜單的Window -> Preferences -> Android –> Build 下顯示的是我們默認的調試用的簽名數字證書。

?????? 正式發布一個Android應用時,必須使用一個合適的私鑰生成的數字證書來給程序簽名,不能使用ADT插件或者ANT工具生成的調試證書來發布。

?

三、簽名方法:

1.使用Keytool jarsigner工具簽名(在jdk/bin目錄下)

1.生成簽名keystore

確保電腦上安裝了JDK,因為我們將使用JDK自帶的創建和管理數字證書的工具Keytool。在命令行下輸入如下命令:

keytool -genkey -v -keystore app.keystore -alias alias_name -keyalg RSA -validity?????? 20000

-alias 后面跟的是別名這里是alias_name
-keyalg
是加密方式這里是RSA
-validity
是有效期這里是20000
-keystore
就是要生成的keystore的名稱這里是app.keystore??????????
然后按回車鍵
按回車后首先會提示你輸入的密碼:這個在簽名時要用的,要記住
然后會再確認你的密碼。
之后會依次叫你輸入姓名、組織單位、組織名稱、城市區域、省份名稱、國家代碼(CN)等。

Keytool的詳細參數請參考:

http://www.android123.com.cn/androidkaifa/173.html

2.簽名:

jarsigner -verbose -keystore app.keystore -signedjar app_signed.apk app.apk alias_name
-keystore: keystore的名稱
-signedjar? app_signed.apk: 指定簽名后生成的APK名稱
app.apk: 目標APK
然后按回車:會要求輸入剛才設置的密碼,輸入后按回車就開始簽名了。

?

3.查看簽名:

jarsigner -verify app_signed.apk??? ??????????????????????????????

查看是否簽名,如果已經簽名會打印 "jar verified".

jarsigner -verify -verbose -certs app_signed.apk? ????

查看簽名詳細信息。

?

4.通過zipalign工具進行優化apk(android自帶的工具,./build/tools/zipalign)

zipalign -v 4? app_signed.apk androidres.apk?? apk優化

zipalign -c -v 4? androidres.apk ????????????????查看apk是否經過優化

?

?2.使用eclipse ADT工具簽名
Package Explorer 窗口,右鍵,選擇Android Tools--->Export Signed Application Package 然后按照提示一步一步,生成已簽名的apk。通過eclipse也可以導出未簽名的APK文件。

注:需要輸入兩次密碼,第一次是私鑰密碼,第二次時私鑰別名的密碼。

?

? 3.eclipsedebug模式下自動簽名(無須手動配置):?

?????? debug模式下用eclipse ADTandroid簽名,只要應用程序在eclipse下開發,系統就會自動給apk簽名和優化。

?????? EclipseWindows > Preferences > Android? > Build可以看到你keysotre的位置;

四、生成Android系統簽名

?????? 上面講的Android數字簽名大多是與Android APK相關,做CTS 認證時,需要用到Android系統簽名。為什么需要給Android系統簽個名才能進行CTS認證呢?原來我們通過make -j4編譯出來的system.img使用的是test key,這種類型的key只適用于開發階段,而且這種秘鑰是公開的,誰都可以使用。當發布一款android產品,就需要另外給整個系統簽個名,防止被別人盜用。這種系統就是release版本的Android系統。

1、生成加密key文件

要對Android系統進行簽名,需要生成四種類型的key文件。

a)releasekey testkey

b)media

c)shared

d)platform

1)進入/android_src/development/tools目錄。

2)使用make_key工具生成簽名文件。需要分別生成 releasekeymediasharedplatform

./make_key releasekey '/C=CN/ST=JiangSu/L=NanJing/O=Company/OU=Department/CN=Your Name/emailAddress=YourE-mailAddress' ??(系統將會提示輸入針對各種key的密碼,按照提示輸入即可)

將會生成 releasekey.pk8 releasekey.x509.pem文件,其中 *.pk8是生成的私鑰,而*.x509.pem是公鑰,生成時兩者是成對出現的.

注:如果出現 openssl : relocation error :openssl : symbol ...嘗試用 sudo 執行命令,問題解決了!

2.回到根目錄android_src

命令執行的時候都最好在工程的根目錄下執行,要不然腳本用到的某些文件找不到的。

3.編譯系統

?? make -j4 PRODUCT-generic-user dist??

其中generic 表示生成的TARGET_PRODUCT類型為generic

???? user代表TARGET_BUILD_VARIANTuser版本。

編譯完成之后回在android_src/dist/目錄內生成個product_generic-user_files開頭的zip文件.這就是我們需要進行簽名的文件系統.

4.開始簽名

./build/tools/releasetools/sign_target_files_apks -d key_directory/ out/dist/product_modul-target_files.zip?? out/dist/signed_target_files.zip?

通過sign_target_files_apks 腳本,完成android系統的簽名工作.

key_directory/ 表示key所在的目錄。

out/dist/product_modul-target_files.zip?? 源文件。

out/dist/signed_target_files.zip?? 生成簽名的目標文件。

可能會出現:

ERROR: no key specified for:
? CalendarWidget.apk
? Contacts_yellowpage.apk
? SnsAppMain.apk

這表示,簽名并沒有成功,原因是由于有些apk程序已經簽過名了或者找不到對應的key. 這需要我們對apk設置過濾,不對上面的應用進行簽名.方法如下:

通過參數"-e <apkname>=" 來過濾這些應用.

./build/tools/releasetools/sign_target_files_apks -d key_directory/? -e? CalendarWidget.apk= -e Contacts_yellowpage.apk= -e SnsAppMain.apk= -e ? out/dist/product_modul-target_files.zip? out/dist/signed_target_files.zip

輸入該命令時會提示輸入key的密碼,會出現四次密碼輸入提示。分別為四種類型的key的密碼。

5.生成image文件

./build/tools/releasetools/img_from_target_files? out/dist/signed-target-files.zip? signed-img.zip

img_from_target_files 命令對生成的igned-target-files.zip文件進行打包,signed-img.zip包含了boot.img,userdate.img,system.img文件等.

6.通過fastboot下載signed-img.zip文件

fastboot update signed-img.zip

通過fastboot就可以把簽了名的系統文件燒到手機上了。

五、幾個問題:

1.make_key Keytool兩種方式生成的key有何區別:

?????? Keytool 位于%JAVA_HOME%/bin目錄下,用于管理密鑰、證書和證書鏈。JavaSE6中的Keytool已經改變,還可以用來管理對稱加密算法中的密鑰。它生成的mykey.keystore包括公鑰、私鑰和證書。

make_key 位于source_src/development/tools 目錄下,通過調用openssh生成公鑰和私鑰,所以生成*.x509.pem*.pk8的密鑰對。

2.make_key生成的密鑰對,對apk進行手動簽名:

通過signapk.jar 工具對apk簽名,用法:signapk [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar

java -jar out/host/linux-x86/framework/signapk.jar? releasekey.x509.pem releasekey.pk8??? source.zip? source-signed.zip??

signapk.jar可以自己編譯,源碼在build/tools/signapk目錄下。

3.android源碼編譯make 時,對所有應用簽名規則:

系統在編譯的時候,讀取build/core/package.mk文件,根據LOCAL_CERTIFICATE的值在build/target/product/security/目錄下選擇相應的簽名。LOCAL_CERTIFICATE值從各應用的Android.mk文件中讀取,如果Android.mk文件中沒有該屬性,則默認為testkey

六、常見異常:

1.如果遇到了ZipException invalid entry compressed size的錯誤方法

主要原因是平時Eclipse使用的ADT插件已經賦予了DEBUG權限的數字簽名,我們可以通過導出一個未簽名的APK文件就可以解決。

2.使用jarsigner工具來簽名,出現無法對jar 進行簽名:java.util.zip.ZipException: invalid entry compressed size (expected?xxx but got?xxx bytes)這樣的提示。

這些問題主要是由于資源文件造成的,對于android開發來說應該檢查res文件夾中的文件,逐個排查。這個問題可以通過升級系統的JDKJRE版本來解決。

3.安裝apk過程中出現:INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES

這樣的問題主要是簽名沖突造成的,比如你使用了ADBdebug權限簽名,但后來使用標準sign簽名后再安裝同一個文件會出現這樣的錯誤提示,解決的方法只有先老老實實從手機上卸載原有版本再進行安裝,而adb install -r參數也無法解決這個問題。adb uninstall 卸載原來的應用。

?

參考資料:1. eclipse+ADT 進行android應用簽名詳解

2.?????? 生成release版本的Android系統簽名

3.Android 簽名機制-官網對apk簽名的介紹

?

總結

以上是生活随笔為你收集整理的Android签名总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。