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

          新聞中心

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

          Android簽名詳解(debug和release)

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

          1. 為什么要簽名

          本文引用地址:http://www.ex-cimer.com/article/201609/304715.htm

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

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

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

          簽名對于包中的每個文件進行處理,以此確保包中內容不被替換

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

          2. 簽名的說明

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

          2) Android程序包使用的數(shù)字證書可以是自簽名的,不需要一個權威的數(shù)字證書機構簽名認證

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

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

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

          6) Android將數(shù)字證書用來標識應用程序的作者和在應用程序之間建立信任關系,而不是用來決定最終用戶可以安裝哪些應用程序

          3. 簽名的方法

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

          第一步 生成R.java類文件:

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

          第二步 將.aidl文件生成.java類文件:

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

          第三步 編譯.java類文件生成class文件:

          Eclipse中自動生成,ant和命令行使用jdk的javac編譯java類文件生成class文件。

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

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

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

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

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

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

          第七步 對未簽名的apk進行簽名生成簽名后的android文件:

          Eclipse中使用Android Tools進行簽名,ant和命令行使用jdk的jarsigner對未簽名的包進行apk簽名。

          3.1 用eclipse+ADT方式簽名

          詳見:http://jojol-zhou.iteye.com/blog/719428

          a) 調試簽名

          eclipse插件默認賦予程序一個DEBUG權限的簽名,此簽名的程序不能發(fā)布到market上,此簽名有效期為一年,如果過期則導致你無法生成apk文件,此時你只要刪除debug keystore即可,系統(tǒng)又會為你生成有效期為一年的新簽名

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

          右鍵點擊項目名,在菜單中選擇Android Tools,然后選擇Export Signed Application Package,即可通過eclipse自定義證書并簽名

          c) 開發(fā)者導出未簽名的包

          右鍵點擊項目名,在菜單中選擇Android Tools,然后選擇Export Signed Application Package…,即可導出未簽名的包,之后可通過命令行方式簽名

          3.2 用命令行方式簽名

          使用標準的java工具keytool和jarsigner來生成證書和給程序簽名。

          詳見: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) 看某個apk是否經(jīng)過了簽名

          $ jarsigner -verify my_application.apk

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

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

          3.3 在源碼中編譯的簽名

          a) 使用源碼中的默認簽名

          在源碼中編譯一般都使用默認簽名的,在某源碼目錄中用運行

          $ mm showcommands能看到簽名命令

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

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

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

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

          b) 在源碼中自簽名

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

          c) mkkey.sh介紹

          i. 生成公鑰

          openssl genrsa -3 -out testkey.pem 2048

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

          ii. 轉成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

          把的格式轉換成PKCS #8,這里指定了-nocryp,表示不加密,所以簽名時不用輸入密碼


          上一頁 1 2 3 下一頁

          關鍵詞:

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();