關於Android開發中的認證和密鑰等問題

來源:互聯網
上載者:User

標籤:android   style   blog   http   os   java   使用   io   strong   

關於Android開發中的認證和密鑰等問題 引言

除了Android發布應用簽名時需要用到認證外,在進行google Map Api開發和Facebook SDK API開發等時都需要申請API Key,在申請這些API Key的時候,也需要用到認證。

使用Eclipse和ADT開發的時候,認證都是自動產生的,可以在Eclipse裡Window->Preferneces -> Android -> Bulid Setting裡看到如下

也即這個開發Debug用的認證在C:\Users\Haihua\.android\debug.keystore中,在這個頁面我們還可以看到MD5和SHA1的指紋碼,這個SHA1指紋碼在google Map API Key申請時就需要使用的。

假如單人開發應用一般無所謂,但是團隊開發的時候,最好使用同一個debug.keystore,這樣手機間切換,可以無縫安裝,而且也可是使用同樣的API KEY,免得每台機子編譯時間都需要去申請各自不同的API Key。但是必須使用預設的別名和密碼(give alias name = androiddebugkey and password = android),否則添加自訂的認證會報失敗。只有別名不對時,在上述對話方塊的黑體Build位置會提示如下報錯

當別名和密碼都不對時,會報如下錯誤

當然還會有一些其它的報錯,諸如如下使用android studio的報錯

http://stackoverflow.com/questions/17189076/what-is-the-equivalent-of-eclipse-custom-debug-keystore-in-android-studio

假設設定了自訂的認證後,就會如所示

本以為用這個視覺化檢視可以查看release認證的SHA1等資訊,但是由於它使用預設密碼,所以也沒有辦法查看到。

設定完自訂認證後,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安裝包的製作過程圖解》

上述可視化方法的缺點就是必須要真的打一次包才能產生認證。

如何申請google map V2 Api KEY

關於這一步網上有一個很專門的文章,這裡先不做展開,照著做就行了,目前為上面的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的使用,這個還來不及做整理。

如何申請Facebook API Key

上面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,具體可以從如下連結下載一個安裝包

https://www.openssl.org/

當然如果不想這麼麻煩安裝這些工具的話,也可以用下面連結中的代碼方式擷取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

關於Android開發中的認證和密鑰等問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.