www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] 1. 為什么要簽名1) 發(fā)送者的身份認(rèn)證由于開(kāi)發(fā)商可能通過(guò)使用相同的Package Name來(lái)混淆替換已經(jīng)安裝的程序,以此保證簽名不同的包不被替換2) 保證信息傳輸?shù)耐暾院灻麑?duì)于

 1. 為什么要簽名

1) 發(fā)送者的身份認(rèn)證

由于開(kāi)發(fā)商可能通過(guò)使用相同的Package Name來(lái)混淆替換已經(jīng)安裝的程序,以此保證簽名不同的包不被替換

2) 保證信息傳輸?shù)耐暾?/p>

簽名對(duì)于包中的每個(gè)文件進(jìn)行處理,以此確保包中內(nèi)容不被替換

3) 防止交易中的抵賴(lài)發(fā)生,Market對(duì)軟件的要求

2. 簽名的說(shuō)明

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

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

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

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

5) 簽名后需使用zipalign優(yōu)化程序

6) Android將數(shù)字證書(shū)用來(lái)標(biāo)識(shí)應(yīng)用程序的作者和在應(yīng)用程序之間建立信任關(guān)系,而不是用來(lái)決定最終用戶(hù)可以安裝哪些應(yīng)用程序

3. 簽名的方法

有三種打包方式:命令行手動(dòng)打包、ant自動(dòng)編譯打包、eclipse+ADT編譯打包,打包步驟如下:

第一步 生成R.java類(lèi)文件:

Eclipse中會(huì)自動(dòng)生成R.java,ant和命令行使用android SDK提供的aapt.ext程序生成R.java。

第二步 將.aidl文件生成.java類(lèi)文件:

Eclipse中自動(dòng)生成,ant和命令行使用android SDK提供的aidl.exe生成.java文件。

第三步 編譯.java類(lèi)文件生成class文件:

Eclipse中自動(dòng)生成,ant和命令行使用jdk的javac編譯java類(lèi)文件生成class文件。

第四步 將class文件打包生成classes.dex文件:

Eclipse中自動(dòng)生成,ant和命令行使用android SDK提供的dx.bat命令行腳本生成classes.dex文件。

第五步 打包資源文件(包括res、assets、androidmanifest.xml等):

Eclipse中自動(dòng)生成,ant和命令行使用Android SDK提供的aapt.exe生成資源包文件。

第六步 生成未簽名的apk安裝文件:

Eclipse中自動(dòng)生成debug簽名文件存放在bin目錄中,ant和命令行使用android SDK提供的apkbuilder.bat命令腳本生成未簽名的apk安裝文件。

第七步 對(duì)未簽名的apk進(jìn)行簽名生成簽名后的android文件:

Eclipse中使用Android Tools進(jìn)行簽名,ant和命令行使用jdk的jarsigner對(duì)未簽名的包進(jìn)行apk簽名。

3.1 用eclipse+ADT方式簽名

詳見(jiàn):http://jojol-zhou.iteye.com/blog/719428

a) 調(diào)試簽名

eclipse插件默認(rèn)賦予程序一個(gè)DEBUG權(quán)限的簽名,此簽名的程序不能發(fā)布到market上,此簽名有效期為一年,如果過(guò)期則導(dǎo)致你無(wú)法生成apk文件,此時(shí)你只要?jiǎng)h除debug keystore即可,系統(tǒng)又會(huì)為你生成有效期為一年的新簽名

b) 開(kāi)發(fā)者生成密鑰并簽名

右鍵點(diǎn)擊項(xiàng)目名,在菜單中選擇Android Tools,然后選擇Export Signed Application Package,即可通過(guò)eclipse自定義證書(shū)并簽名

c) 開(kāi)發(fā)者導(dǎo)出未簽名的包

右鍵點(diǎn)擊項(xiàng)目名,在菜單中選擇Android Tools,然后選擇Export Signed Application Package…,即可導(dǎo)出未簽名的包,之后可通過(guò)命令行方式簽名

3.2 用命令行方式簽名

使用標(biāo)準(zhǔn)的java工具keytool和jarsigner來(lái)生成證書(shū)和給程序簽名。

詳見(jiàn):http://jojol-zhou.iteye.com/blog/729254

a) 生成簽名

$ keytool -genkey -keystore keyfile -keyalg RSA -validity 10000 -alias yan

注:validity為天數(shù),keyfile為生成key存放的文件,yan為私鑰,RSA為指定的加密算法(可用RSA或DSA)

b) 為apk文件簽名

$ jarsigner -verbose -keystore keyfile -signedjar signed.apk base.apk yan

注:keyfile為生成key存放的文件,signed.apk為簽名后的apk,base.apk 為未簽名的apk,yan為私鑰

c) 看某個(gè)apk是否經(jīng)過(guò)了簽名

$ jarsigner -verify my_application.apk

d) 優(yōu)化(簽名后需要做對(duì)齊優(yōu)化處理)

$ zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk

3.3 在源碼中編譯的簽名

a) 使用源碼中的默認(rèn)簽名

在源碼中編譯一般都使用默認(rèn)簽名的,在某源碼目錄中用運(yùn)行

$ mm showcommands能看到簽名命令

Android提供了簽名的程序signapk.jar,用法如下:

$ signapk publickey.x509[.pem] privatekey.pk8 input.jar output.jar

*.x509.pem為x509格式公鑰,pk8為私鑰

build/target/product/security目錄中有四組默認(rèn)簽名可選:testkey platform shared media(具體見(jiàn)README.txt),應(yīng)用程序中Android.mk中有一個(gè)LOCAL_CERTIFICATE字段,由它指定用哪個(gè)key簽名,未指定的默認(rèn)用testkey.

b) 在源碼中自簽名

Android提供了一個(gè)腳本mkkey.sh(build/target/product/security/mkkey.sh),用于生成密鑰,生成后在應(yīng)用程序中通過(guò)Android.mk中的LOCAL_CERTIFICATE字段指名用哪個(gè)簽名

c) mkkey.sh介紹

i. 生成公鑰

openssl genrsa -3 -out testkey.pem 2048

其中-3是算法的參數(shù),2048是密鑰長(zhǎng)度,testkey.pem是輸出的文件

ii. 轉(zhuǎn)成x509格式(含作者有效期等)

openssl req -new -x509 -key testkey.pem -out testkey.x509.pem -days 10000 -subj ‘/C=US/ST=California/L=MountainView/O=Android/OU=Android/CN=Android/emailAddress=android@android.com’

iii. 生成私鑰

openssl pkcs8 -in testkey.pem -topk8 -outform DER -out testkey.pk8 -nocrypt

把的格式轉(zhuǎn)換成PKCS #8,這里指定了-nocryp,表示不加密,所以簽名時(shí)不用輸入密碼[!--empirenews.page--]

4. 簽名的相關(guān)文件

1) apk包中簽名相關(guān)的文件在meta_INF目錄下

CERT.SF:生成每個(gè)文件相對(duì)的密鑰

MANIFEST.MF:數(shù)字簽名信息

xxx.SF:這是JAR文件的簽名文件,占位符xxx標(biāo)識(shí)了簽名者

xxx.DSA:對(duì)輸出文件的簽名和公鑰

2) 相關(guān)源碼

development/tools/jarutils/src/com.anroid.jarutils/SignedJarBuilder.java

frameworks/base/services/java/com/android/server/PackageManagerService.java

frameworks/base/core/java/android/content/pm/PackageManager.java

frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java

dalvik/libcore/security/src/main/java/java/security/Sign*

build/target/product/security/platform.*

build/tools/signapk/*

5. 簽名的相關(guān)問(wèn)題

一般在安裝時(shí)提示出錯(cuò):INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES

1) 兩個(gè)應(yīng)用,名字相同,簽名不同

2) 升級(jí)時(shí)前一版本簽名,后一版本沒(méi)簽名

3) 升級(jí)時(shí)前一版本為DEBUG簽名,后一個(gè)為自定義簽名

4) 升級(jí)時(shí)前一版本為Android源碼中的簽

5.1 查看默認(rèn)簽名

不同的機(jī)子上或不同的設(shè)備上,利用eclipse編譯出的apk簽名是不一樣的。eclipse都有一個(gè)默認(rèn)的簽名。查看簽名路徑:

1)打開(kāi)EclipseàWindowàAndoridàBuild,在這個(gè)Build界面,找到Default debug keysore這個(gè)編輯框,里面的值則為本臺(tái)設(shè)備中Eclipse的keystore的默認(rèn)路徑。

2)如果出現(xiàn)因簽名不同而導(dǎo)致應(yīng)用程序未安裝,可以將原先的keystore替換掉當(dāng)前設(shè)備上的keystore。并重新啟動(dòng)Eclipse。否則只能完全卸載掉移動(dòng)設(shè)備上的apk,重新安裝了。

5.2 無(wú)法覆蓋安裝

1、通過(guò)簽名的方式生成你的APK,而不是直接從Bin目錄底下去拷貝,每個(gè)Android可執(zhí)行程序的APK都有自己的簽名,只要簽名一致,就可以覆蓋安裝,而不需要卸載;

2、數(shù)據(jù)庫(kù)表結(jié)構(gòu)的變化(增加一個(gè)字段,減少一個(gè)字段,新表的建立)。正常升級(jí)數(shù)據(jù)庫(kù)的方法 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

3、sharepreferences的數(shù)據(jù)有改變,這個(gè)跟數(shù)據(jù)庫(kù)差不多,比如原來(lái)的sharepreferences保存的一數(shù)據(jù)是boolean,在后一版本把保存的數(shù)據(jù)改為string,問(wèn)題就出現(xiàn)了。

5.3 導(dǎo)出簽名

1)打開(kāi)cmd控制臺(tái),輸入命令:keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore,按照提示依次填寫(xiě)內(nèi)容,并記住密碼,后面會(huì)用到;

2)生成好keystore后,就可以導(dǎo)出簽名apk了。Eclipse中,右擊需要簽名的工程àandroid toolsàexport signed application package,location為生成的keystore所在的位置,密碼為創(chuàng)建keystore時(shí)設(shè)置的密碼,然后按照提示,next,最后finish,成功導(dǎo)出簽名apk。

詳見(jiàn):http://blog.csdn.net/yiwanxinyuefml/article/details/6765129

5.4 debug簽名和release簽名的區(qū)別

1)debug簽名的應(yīng)用程序不能在Android Market上架銷(xiāo)售,它會(huì)強(qiáng)制你使用自己的簽名;Debug模式下簽名用的證書(shū)(默認(rèn)是Eclipse/ADT和Ant編譯)自從它創(chuàng)建之日起,1年后就會(huì)失效。

2)debug.keystore在不同的機(jī)器上所生成的可能都不一樣,就意味著如果你換了機(jī)器進(jìn)行apk版本升級(jí),那么將會(huì)出現(xiàn)上面那種程序不能覆蓋安裝的問(wèn)題,相當(dāng)于軟件不具備升級(jí)功能!

6. Zipalign簡(jiǎn)單優(yōu)化

6.1 為什么要優(yōu)化

Android SDK中包含一個(gè)“zipalign”的工具,它能夠?qū)Υ虬膽?yīng)用程序進(jìn)行優(yōu)化。在你的應(yīng)用程序上運(yùn)行zipalign,使得在運(yùn)行時(shí)Android與應(yīng)用程序間的交互更加有效率。因此,這種方式能夠讓?xiě)?yīng)用程序和整個(gè)系統(tǒng)運(yùn)行得更快。我們強(qiáng)烈推薦在新的和已經(jīng)發(fā)布的程序上使用zipalign工具來(lái)得到優(yōu)化后的版本——即使你的程序是在老版本的Android平臺(tái)下開(kāi)發(fā)的。

6.2 如何有助于性能改善

在Android中,每個(gè)應(yīng)用程序中儲(chǔ)存的數(shù)據(jù)文件都會(huì)被多個(gè)進(jìn)程訪問(wèn);安裝程序會(huì)讀取應(yīng)用程序的manifest文件來(lái)處理與之相關(guān)的權(quán)限問(wèn)題;Home應(yīng)用程序會(huì)讀取資源文件來(lái)獲取應(yīng)用程序的名和圖標(biāo);系統(tǒng)服務(wù)會(huì)因?yàn)楹芏喾N原因讀取資源(例如,顯示應(yīng)用程序的Notification);此外,就是應(yīng)用程序自身用到資源文件。

在Android中,當(dāng)資源文件通過(guò)內(nèi)存映射對(duì)齊到4字節(jié)邊界時(shí),訪問(wèn)資源文件的代碼才是有效率的。但是,如果資源本身沒(méi)有進(jìn)行對(duì)齊處理(未使用zipalign工具),它就必須回到老路上,顯式地讀取它們——這個(gè)過(guò)程將會(huì)比較緩慢且會(huì)花費(fèi)額外的內(nèi)存。

對(duì)于應(yīng)用程序開(kāi)發(fā)者來(lái)說(shuō),這種顯式讀取方式是相當(dāng)便利的。它允許使用一些不同的開(kāi)發(fā)方法,包括正常流程中不包含對(duì)齊的資源,因此,這種讀取方式具有很大的便利性(本段的原始意思請(qǐng)參考原文)。

遺憾的是,對(duì)于用戶(hù)來(lái)說(shuō),這個(gè)情況恰恰是相反的——從未對(duì)齊的apk中讀取資源比較慢且花費(fèi)較多內(nèi)存。最好的情況是,Home程序和未對(duì)齊的程序啟動(dòng)得比對(duì)齊后的慢(這也是唯一可見(jiàn)的效果)。最壞的情況是,安裝一些未對(duì)齊資源的應(yīng)用程序會(huì)增加內(nèi)存壓力,并因此造成系統(tǒng)反復(fù)地啟動(dòng)和殺死進(jìn)程。最終,用戶(hù)放棄使用如此慢又耗電的設(shè)備。

6.3 如何優(yōu)化

1)使用ADT:

如果你使用導(dǎo)出向?qū)У脑?huà),Eclipse中的ADT插件(從Ver.0.9.3開(kāi)始)就能自動(dòng)對(duì)齊Release程序包。

使用向?qū)В覔艄こ虒傩?,選擇Android ToolsàExport Signed Application Package。當(dāng)然,你還可以通過(guò)AndroidManifest.xml編輯器的第一頁(yè)做到。

2)使用Ant:

Ant編譯腳本(從Android 1.6開(kāi)始)可以對(duì)齊程序包。老平臺(tái)的版本不能通過(guò)Ant編譯腳本進(jìn)行對(duì)齊,必須手動(dòng)對(duì)齊。

從Android 1.6開(kāi)始,Debug模式下編譯時(shí),Ant自動(dòng)對(duì)齊和簽名程序包。

Release模式下,如果有足夠的信息簽名程序包的話(huà),Ant才會(huì)執(zhí)行對(duì)齊操作,因?yàn)閷?duì)齊處理發(fā)生在簽名之后。為了能夠簽名程序包,進(jìn)而執(zhí)行對(duì)齊操作,Ant必須知道keystore的位置以及build.properties中key的名字。相應(yīng)的屬性名為key.store和key.alias。如果這些屬性為空,簽名工具會(huì)在編譯過(guò)程中提示輸入store/key的密碼,然后腳本會(huì)執(zhí)行簽名及apk文件的對(duì)齊。如果這些屬性都沒(méi)有,Release程序包不會(huì)進(jìn)行簽名,自然也就不會(huì)進(jìn)行對(duì)齊了。[!--empirenews.page--]

3)手動(dòng):

為了能夠手動(dòng)對(duì)齊程序包,Android 1.6及以后的SDK的tools/文件夾下都有zipalign工具。你可以使用它來(lái)對(duì)齊任何版本下的程序包。你必須在簽名apk文件后進(jìn)行,使用以下命令:zipalign -v 4 source.apk destination.apk

4)驗(yàn)證對(duì)齊:

zipalign -c -v 4 application.apk

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

多數(shù)受訪粉絲認(rèn)為,AI驅(qū)動(dòng)的功能會(huì)對(duì)他們觀看體育賽事的方式產(chǎn)生重大影響 超過(guò)半數(shù)的受訪者希望通過(guò)AI技術(shù)獲得對(duì)過(guò)去、現(xiàn)在和未來(lái)體育賽事的評(píng)論和分析 移動(dòng)體育應(yīng)用...

關(guān)鍵字: IBM AI 應(yīng)用程序 移動(dòng)

其他電腦(比如安卓手機(jī)/平板電腦)的屏幕壞了,你可能想在安排維修之前緊急訪問(wèn)一些東西。你可以使用android的USB OTG功能(是的,幾乎每個(gè)android都支持這個(gè)功能,你可以將鼠標(biāo)和鍵盤(pán)連接到它)。

關(guān)鍵字: USB 鼠標(biāo) Android 樹(shù)莓派

青島 2025年5月23日 /美通社/ -- 全球領(lǐng)先的消費(fèi)電子和家電品牌海信今天宣布將谷歌全新Home API集成至其ConnectLife應(yīng)用程序。今年秋季前,用戶(hù)可通過(guò)該應(yīng)用程序?qū)⒌谌街悄芗揖釉O(shè)備接入Conne...

關(guān)鍵字: API NEC 海信 應(yīng)用程序

Google 宣布與中國(guó) AR 科技公司 XREAL 達(dá)成深度戰(zhàn)略合作,聯(lián)合推出全球首款專(zhuān)為 Android XR 平臺(tái)打造的旗艦級(jí) AR 眼鏡 Project Aura。

關(guān)鍵字: Google XREAL Android XR眼鏡 AR

-Arya.ai推出MCP應(yīng)用程序,將通用LLM轉(zhuǎn)化為特定領(lǐng)域?qū)<? 印度孟買(mǎi)和紐約 2025年5月13日 /美通社/ -- Arya.ai今天宣布推出APEX MCP(模...

關(guān)鍵字: MCP 應(yīng)用程序 AI 人工智能

繼停止維護(hù)AOSP開(kāi)源項(xiàng)目后,谷歌母公司Alphabet近日被曝在其安卓系統(tǒng)(Android)、Pixel手機(jī)以及Chrome瀏覽器等部門(mén)裁員數(shù)百人。這一舉措引發(fā)了業(yè)界的廣泛關(guān)注,也引發(fā)了對(duì)谷歌未來(lái)業(yè)務(wù)布局的諸多猜測(cè)。

關(guān)鍵字: 谷歌 AOSP Android 裁員

在本教程中,我們將使用Capacitor 6、Angular和TypeScript構(gòu)建一個(gè)Android應(yīng)用程序,該應(yīng)用程序通過(guò)串行端口連接到BleuIO USB加密狗。該應(yīng)用程序允許用戶(hù)直接從Android設(shè)備發(fā)送和接...

關(guān)鍵字: Android USB 電容器 BLE設(shè)備

早前媒體報(bào)道谷歌將停止維護(hù)Android開(kāi)源項(xiàng)目(AOSP),將Android開(kāi)發(fā)全面轉(zhuǎn)向內(nèi)部閉源分支,目前這一消息已經(jīng)得到谷歌官方確認(rèn)。

關(guān)鍵字: 谷歌 Android 開(kāi)源

本項(xiàng)目演示了如何通過(guò)OTG (on - go) USB在Android設(shè)備上使用BleuIO USB加密狗作為串行端口。使用電容器6和@adeunis/電容器-串行插件,我們建立串行連接,發(fā)送AT命令,并實(shí)時(shí)讀取響應(yīng)。該...

關(guān)鍵字: 電容器 Android 傳感器 微控制器 嵌入式系統(tǒng)
關(guān)閉