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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

(转) Android 数字签名

發(fā)布時間:2025/3/14 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (转) Android 数字签名 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://xusaomaiss.iteye.com/blog/1396324??

Android 數(shù)字簽名

????? 在Android系統(tǒng)中,所有安裝到系統(tǒng)的應(yīng)用程序都必有一個數(shù)字證書,此數(shù)字證書用于 標(biāo)識應(yīng)用程序的作者和在應(yīng)用程序之間建立信任關(guān)系,如果一個permission的protectionLevel為signature,那么就只有那些 跟該permission所在的程序擁有同一個數(shù)字證書的應(yīng)用程序才能取得該權(quán)限。Android使用Java的數(shù)字證書相關(guān)的機(jī)制來給apk加蓋數(shù)字證 書,要理解android的數(shù)字證書,需要先了解以下數(shù)字證書的概念和java的數(shù)字證書機(jī)制。Android系統(tǒng)要求每一個安裝進(jìn)系統(tǒng)的應(yīng)用程序都是經(jīng) 過數(shù)字證書簽名的,數(shù)字證書的私鑰則保存在程序開發(fā)者的手中。Android將數(shù)字證書用來標(biāo)識應(yīng)用程序的作者和在應(yīng)用程序之間建立信任關(guān)系,不是用來決 定最終用戶可以安裝哪些應(yīng)用程序。這個數(shù)字證書并不需要權(quán)威的數(shù)字證書簽名機(jī)構(gòu)認(rèn)證,它只是用來讓應(yīng)用程序包自我認(rèn)證的。

同一個開發(fā)者的多個程序盡可能使用同一個數(shù)字證書,這可以帶來以下好處。

(1)有利于程序升級,當(dāng)新版程序和舊版程序的數(shù)字證書相同時,Android系統(tǒng)才會認(rèn)為這兩個程序是同一個程序的不同版本。如果新版程序和舊版程序的數(shù)字證書不相同,則Android系統(tǒng)認(rèn)為他們是不同的程序,并產(chǎn)生沖突,會要求新程序更改包名。

(2)有利于程序的模塊化設(shè)計和開發(fā)。Android系統(tǒng)允許擁有同一個數(shù)字簽名的程序運(yùn)行在一個進(jìn)程中,Android程序會將他們視為同一個程序。所以開發(fā)者可以將自己的程序分模塊開發(fā),而用戶只需要在需要的時候下載適當(dāng)?shù)哪K。

(3)可以通過權(quán)限(permission)的方式在多個程序間共享數(shù)據(jù)和代碼。Android提供了基于數(shù)字證書的權(quán)限賦予機(jī)制,應(yīng)用程序可以和其他的程序共 享概功能或者數(shù)據(jù)給那那些與自己擁有相同數(shù)字證書的程序。如果某個權(quán)限(permission)的protectionLevel是signature, 則這個權(quán)限就只能授予那些跟該權(quán)限所在的包擁有同一個數(shù)字證書的程序。

在簽名時,需要考慮數(shù)字證書的有效期:

(1)數(shù)字證書的有效期要包含程序的預(yù)計生命周期,一旦數(shù)字證書失效,持有改數(shù)字證書的程序?qū)⒉荒苷I墶?/p>

(2)如果多個程序使用同一個數(shù)字證書,則該數(shù)字證書的有效期要包含所有程序的預(yù)計生命周期。

(3)Android Market強(qiáng)制要求所有應(yīng)用程序數(shù)字證書的有效期要持續(xù)到2033年10月22日以后。

Android數(shù)字證書包含以下幾個要點(diǎn):

(1)所有的應(yīng)用程序都必須有數(shù)字證書,Android系統(tǒng)不會安裝一個沒有數(shù)字證書的應(yīng)用程序

(2)Android程序包使用的數(shù)字證書可以是自簽名的,不需要一個權(quán)威的數(shù)字證書機(jī)構(gòu)簽名認(rèn)證

(3)如果要正式發(fā)布一個Android ,必須使用一個合適的私鑰生成的數(shù)字證書來給程序簽名,而不能使用adt插件或者ant工具生成的調(diào)試證書來發(fā)布。

(4)數(shù)字證書都是有有效期的,Android只是在應(yīng)用程序安裝的時候才會檢查證書的有效期。如果程序已經(jīng)安裝在系統(tǒng)中,即使證書過期也不會影響程序的正常功能。

(5)Android使用標(biāo)準(zhǔn)的java工具 Keytool and Jarsigner 來生成數(shù)字證書,并給應(yīng)用程序包簽名。

(6)使用zipalign優(yōu)化程序。

Android系統(tǒng)不會安裝運(yùn)行任何一款未經(jīng)數(shù)字簽名的apk程序,無論是在模擬器上還是在實(shí)際的物理設(shè)備上。Android的開發(fā)工具(ADT插件和Ant)都可以協(xié) 助開發(fā)者給apk程序簽名,它們都有兩種模式:調(diào)試模式(debug mode)和發(fā)布模式(release mode)。

在調(diào)試模式下,android的開發(fā)工具會在每次編譯時使用調(diào)試用的數(shù)字證書給程序簽名,開發(fā)者無須關(guān)心。

當(dāng)要發(fā)布程序時,開發(fā)者就需要使用自己的數(shù)字證書給apk包簽名,可以有兩種方法。

(1)在命令行下使用JDK中的和Keytool(用于生成數(shù)字證書)和Jarsigner(用于使用數(shù)字證書簽名)來給apk包簽名。

(2)使用ADT Export Wizard進(jìn)行簽名(如果沒有數(shù)字證書可能需要生成數(shù)字證書)。

使用Keytool和Jarsigner給程序簽名

命令:keytool -genkey -v -keystore android.keystore -alias android -keyalg RSA -validity 20000

該 命令中,-keystore ophone.keystore 表示生成的證書,可以加上路徑(默認(rèn)在用戶主目錄下);-alias ophone 表示證書的別名是ophone;-keyalg RSA 表示采用的RSA算法;-validity 20000表示證書的有效期是20000天。

此時,我們會在互用主目錄下看到ophone.keystore,即我們剛剛創(chuàng)建的證書。

接著對程序進(jìn)行簽名:

jarsigner用法: [選項] jar 文件別名 jarsigner -verify [選項] jar 文件

執(zhí) 行:jarsigner -verbose -keystore android.keystore -signedjar? android123_signed.apk android123.apk android 就可以生成簽名的apk文件,這里輸入文件android123.apk,最終生成android123_signed.apk為Android簽名后的APK執(zhí)行文件。下面提示輸入的密碼和keytool輸入的一樣就行了。(不過在我的JDK目錄下沒有找到j(luò)arsigner這個程序,不知道是怎么回 事)

使用ADT Export Wizard進(jìn)行簽名

應(yīng)用程序(apk)簽名,在EC中,右鍵單擊應(yīng)用程序工程,如圖選擇

選擇證書的存放路徑,填寫相關(guān)資料,完成,即可生成被簽名的apk文件。如下圖所示:

如上圖所示,我們可以看到也可以在這里選擇”Create new keystore“來創(chuàng)建一個證書。輸入密碼,點(diǎn)擊下一步,填寫相關(guān)信息,如下圖所示。

使用zipalign優(yōu)化APK

根據(jù)官方文檔的描述,Android系統(tǒng)中Application的數(shù)據(jù)都保存在它的APK文件中,同時可以被多個進(jìn)程訪問,安裝的過程包括如下幾個步驟:

Installer通過每個apk的manifest文件獲取與當(dāng)前應(yīng)用程序相關(guān)聯(lián)的permissions信息

Home application讀取當(dāng)前APK的Name和Icon等信息。

System server將讀取一些與Application運(yùn)行相關(guān)信息,例如:獲取和處理Application的notifications請求等。

最后,APK所包含的內(nèi)容不僅限于當(dāng)前Application所使用,而且可以被其它的Application調(diào)用,提高系統(tǒng)資源的可復(fù)用性。

zipalign優(yōu)化的最根本目的是幫助操作系統(tǒng)更高效率的根據(jù)請求索引資源,將resource-handling code統(tǒng)一將Data structure? alignment(數(shù) 據(jù)結(jié)構(gòu)對齊標(biāo)準(zhǔn):DSA)限定為4-byte boundaries。如果不采取對齊的標(biāo)? 準(zhǔn),處理器無法準(zhǔn)確和快速的在內(nèi)存地址中定位相關(guān)資源。目前的系統(tǒng)中使用fallback? mechanism機(jī)制處理那些沒有應(yīng)用DSA標(biāo)準(zhǔn)的應(yīng)用程序,這的確大大的方便了普通開發(fā)者無需關(guān)注繁瑣的內(nèi)存操作問題。但是相反,對于這樣的應(yīng)用程序 將給普通用戶帶來一定的麻煩,不但影響程序的運(yùn)行的效率,而且使系統(tǒng)的整體執(zhí)行效率下降和占用大量不必要的內(nèi)存資源,甚至消耗一定的電池資源 (battery life)。

命令行方式手動優(yōu)化:

利用tools文件夾下的zipalign工具。首先調(diào)出cmd命令行,然后執(zhí)行:zipalign -v 4 source.apk androidres.apk。這個方法不受API Level的限制,可以對任何版本的APK執(zhí)行Align優(yōu)化。

同時可以利用zipalign工具檢查當(dāng)前APK是否已經(jīng)執(zhí)行過Align優(yōu)化。命令:zipalign -c -v 4 androidres.apk

使用ADT自動優(yōu)化:

從 ADT 0.9.3版本開始,可以通過export wizard自動對發(fā)布的application? packages執(zhí)行align操作。設(shè)置方法:鼠標(biāo)右鍵點(diǎn)擊Project,然后選擇”Android Tools” > “Export? Signed Application Package…”。

綜上所述,可以使用Keytool、Jarsigner、zipalign 給程序簽名并優(yōu)化程序,這樣就需要三個不同的工具:

keytool -genkey -v -keystore android.keystore -alias android -keyalg RSA -validity 20000

jarsigner -verbose -keystore android.keystore -signedjar android123_signed.apk android123.apk android

zipalign -v 4 android123_signed.apk android123_signed_aligned.apk

當(dāng)然,也可以通過ADT插件中Export Signed Application Package…來執(zhí)行,圖形界面更為簡單、形象、直觀。

參考:blog.csdn.net/zgfee/archive/2009/11/11/4796831.aspx

Android SDK:androidappdocs.appspot.com/guide/publishing/app-signing.html

android123.com.cn/androidkaifa/173.html

yarin.javaeye.com/blog/549280

androidres.com/index.php/2009/10/18/use-zipalign-to-optimize-your-application-packages/

轉(zhuǎn)載于:https://www.cnblogs.com/Jessy/archive/2012/02/08/2342770.html

總結(jié)

以上是生活随笔為你收集整理的(转) Android 数字签名的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。