除了Android發佈應用簽名時須要用到證書外,在進行google Map Api開發和Facebook SDK API開發等時都須要申請API Key,在申請這些API Key的時候,也須要用到證書。html
使用Eclipse和ADT開發的時候,證書都是自動生成的,能夠在Eclipse裏Window->Preferneces -> Android -> Bulid Setting裏看到以下截圖java
也即這個開發Debug用的證書在C:\Users\Haihua\.android\debug.keystore中,在這個頁面咱們還能夠看到MD5和SHA1的指紋碼,這個SHA1指紋碼在google Map API Key申請時就須要使用的。android
假如單人開發應用通常無所謂,可是團隊開發的時候,最好使用同一個debug.keystore,這樣手機間切換,能夠無縫安裝,並且也但是使用一樣的API KEY,省得每臺機子編譯時都須要去申請各自不一樣的API Key。可是必須使用默認的別名和密碼(give alias name = androiddebugkey and password = android),不然添加自定義的證書會報失敗。只有別名不對時,在上述對話框的黑體Build位置會提示以下報錯算法
當別名和密碼都不對時,會報以下錯誤api
固然還會有一些其它的報錯,諸如以下使用android studio的報錯android-studio
假設設置了自定義的證書後,就會以下圖所示ide
本覺得用這個可視化工具能夠查看release證書的SHA1等信息,可是因爲它使用默認密碼,因此也沒有辦法查看到。wordpress
設置完自定義證書後,clean一下,而後從新編譯運行就使用自定義證書了。我將打包的apk文件,重命名爲zip或rar以後,解壓縮,而後在解壓的\META-INF\CERT.RSA文件就是簽名的證書,對這個證書使用KeyTool以下操做工具
keytool -printcert –file \META-INF\CERT.RSA
就會拿到這個證書的一個詳細信息,下面截圖有兩個證書,前一個是自動生成的證書,後一個是我試驗作的一個證書。具體以下所示
生成證書使用的是JDK附帶的一個Keytool工具,像上面同樣在cmd中使用時,須要將相關的路徑設置到環境變量中,好比我本地的路徑名爲C:\Program Files\Java\jdk1.8.0_05\bin,就要將其加到Windows的環境變量中。
上述生成debug的證書可使用以下命令
keytool -genkey -alias androiddebugkey -keyalg RSA -keysize 1024 -keypass android -validity 365 -keystore c:\test\mozatdev.keystore -storepass android
至於具體的生成證書和Keytool工具能夠看下以下連接:
java keytool證書工具使用小結 http://www.micmiu.com/lang/java/keytool-start-guide/
Android簽名機制:生成keystore、簽名、查看簽名信息
http://www.ourunix.org/post/146.html
上述是使用命令行方式來生成證書,那麼有沒有可視化的生成證書方式呢?
目前我知道可使用Eclipse的ADT工具,即右鍵單擊項目名稱,選擇"Android Tools"->"Export Signed Application Package..."(輸出簽名的應用程序包)
有時候工程中有些Lint Error,點擊是會彈出以下對話框
這個時候咱們能夠先忽略掉錯誤檢查,具體以下圖所示,設置好以後,須要Clean一下再從新調用上述發佈包的工具,不然仍是沒辦法進行下一步。
下一步就給一個建立Key的截圖吧
具體建立的過程能夠參考網上的《android_apk安裝包的製做過程圖解》
上述可視化方法的缺點就是必需要真的打一次包才能生成證書。
關於這一步網上有一個很專門的帖子,這裏先不作展開,照着作就好了,目前爲上面的mozatdev.keystore申請了以下兩個API Key
具體參考連接
繁體版本(內含一個完整的goole map開發)
http://www.moke.tw/wordpress/computer/advanced/410 (推薦看這個,下面這個圖片過小了)
http://cheng-min-i-taiwan.blogspot.sg/2013/04/google-maps-android-api-v2-android.html
在這裏不作google map api的使用,這個還來不及作整理。
上面google map API Key的申請使用的是SHA1指紋,在申請Facebook SDK API時使用的相對來講複雜一點,由於他須要用到的KeyHash,具體命令相似以下:
keytool -exportcert -alias androiddebugkey -keystore C:\Users\Haihua\.android\debug.keystore | C:\OpenSSL\bin\openssl sha1 -binary | C:\OpenSSL\bin\openssl base64
運行結果相似以下,當密碼輸出的狀況下生成的hash是同樣的,直接用回車和輸入正確密碼時,結果也是同樣的,二者的區別就是前者不能用,後者能用,至於爲啥同樣,跟算法有關,我也沒去細究。
除了上面提到的keytool工具外,還須要安裝一個openSSL,具體能夠從以下連接下載一個安裝包
固然若是不想這麼麻煩安裝這些工具的話,也能夠用下面連接中的代碼方式獲取hash,只是我沒有嘗試過。
詳情還能夠參考Facebook相關官網
官網文檔
https://developers.facebook.com/docs/android/getting-started/
一個比較老的中文翻譯
http://www.cnblogs.com/tianjian/archive/2012/03/21/2410633.html
一個繁體版本的連接(我以爲挺有用的)
http://androchen.logdown.com/posts/2014/01/26/android-facebook-sdk-release-key-hash
在這裏也來不及作相關API使用的具體介紹,只是簡單介紹下申請API Key。
經過上面兩個具體API Key的申請,想必對Android的證書會有一個比較直觀的瞭解了。
下面再單獨將上述用到的幾個cmd命令抽出來一下
生成證書的命令
keytool -genkey -alias androiddebugkey -keyalg RSA -keysize 1024 -keypass android -validity 365 -keystore c:\test\mozatdev.keystore -storepass android
查看證書詳情的命令
keytool -list -v -keystore C:\Users\Haihua\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android
如何查看apk已簽名的證書詳情。因爲在apk安裝時我也不知道怎麼查看,只知道採起apk重命名後解壓縮,拿到\META-INF\CERT.RSA文件,而後執行以下命令查看。
keytool -printcert -file c:\test\ShellShabikDev\cert.rsa
網上還有一種方法,用jarsigner來查看,可是這會查看全部的文件,並且看不到SHA1等指紋,具體命令
jarsigner -verify -verbose -certs ShellShabik.rar
具體顯示
sm 3122 Mon Aug 25 15:51:26 SGT 2014 res/drawable-xxhdpi/common_signin_btn_text_pressed_dark.9.png
X.509, CN=FrankSun, OU=mozat.com, O=mozat, L=Singapore, ST=singapore, C=sg
[certificate is valid from 23/08/14 下午 10:07 to 23/08/15 下午 10:07]
[CertPath not validated: Path does not chain with any of the trust anchors]
導出證書的相關命令
keytool -exportcert -alias androiddebugkey -keystore C:\Users\Haihua\.android\debug.keystore | C:\OpenSSL\bin\openssl sha1 -binary | C:\OpenSSL\bin\openssl base64