<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Android簽名詳解(debug和release)

          Android簽名詳解(debug和release)

          作者: 時(shí)間:2016-09-12 來源:網(wǎng)絡(luò) 收藏

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

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

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

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

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

          xxx.DSA:對輸出文件的簽名和公鑰

          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)問題

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

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

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

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

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

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

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

          1)打開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 無法覆蓋安裝

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

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

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

          5.3 導(dǎo)出簽名

          1)打開cmd控制臺(tái),輸入命令:keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore,按照提示依次填寫內(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。

          詳見:http://blog.csdn.net/yiwanxinyuefml/article/details/6765129

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

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

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

          6. Zipalign簡單優(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)用程序間的交互更加有效率。因此,這種方式能夠讓應(yīng)用程序和整個(gè)系統(tǒng)運(yùn)行得更快。我們強(qiáng)烈推薦在新的和已經(jīng)發(fā)布的程序上使用zipalign工具來得到優(yōu)化后的版本——即使你的程序是在老版本的Android平臺(tái)下開發(fā)的。

          6.2 如何有助于性能改善

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

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

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

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

          6.3 如何優(yōu)化

          1)使用ADT:

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

          使用向?qū)?,右擊工程屬性,選擇Android ToolsàExport Signed Application Package。當(dāng)然,你還可以通過AndroidManifest.xml編輯器的第一頁做到。

          2)使用Ant:

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

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

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



          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();