如何在Android Studio中獲取SHA-1指紋證書以進行調試模式?


Answers

我的問題與我將Google Maps項目從Eclipse轉移到Android Studio的問題相同 。 我通過以下方式解決了我的問題:

通過以下命令轉到Java bin目錄:

C:\Program Files\Java\jdk1.7.0_71\bin>

現在在命令窗口(CMD.EXE)中輸入以下命令:

keytool -list -v -keystore c:\users\your_user_name\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android

例:

keytool -list -v -keystore c:\users\James\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android

或者,如果您不知道用戶名,則可以在cmd中編寫它:

keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

你會得到SHA1。

然後,我從https://code.google.com/apis/console創建了一個新密鑰,因為我的軟件包名稱已更改,然後在我的應用程序中使用此密鑰。 它工作正常。

確保你在jdkX.X.X_XX的 BIN文件夾(我的文件夾名是jdk1.7.0_71) ,否則如果你不知道你有什麼文件夾名,那麼通過打開Java文件夾找到它,你會看到什麼是文件夾名稱,但您必須在您的BIN文件夾中,然後運行此命令。 今天,我通過上述過程在cmd命令窗口中獲得了我的SHA1值。

快照:

Question

我已將自己從Eclipse轉移到Android Studio 。 現在我正試圖在我的地圖應用程序上工作。 所以我需要我的SHA-1指紋證書號碼。

當我使用Eclipse時,它正好在Windows - > Preferences - > Android - > Build下 。 但在Android Studio中,我找不到任何這樣的選項,以便我可以輕鬆找到指紋。 我正在使用Windows。 我已閱讀此link

當您從IDE運行或調試項目時,Android Studio會自動將您的應用程序以調試模式簽名。

所以我試圖在通過這個鏈接設置我的Java bin路徑後,在命令行中運行這個命令,並且很遺憾找不到我的指紋。 這是說這是一個非法的選擇

keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

有沒有辦法從Android Studio中找到SHA-1指紋,因為它在Eclipse中非常容易? 由於我在Android Studio中是新手,因此找到它的完整過程是什麼?

我想補充的另一件事是我的Eclipse產生了SHA-1指紋,並且之前我已經在Google開發者控制台中的該指紋上註冊了我的應用程序,並且我使用該API密鑰在Eclipse中處理了該應用程序。 在Android Studio中,我的項目是否可以使用相同的API密鑰?




對於Mac來說,這很好用:

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android



為獲取生產密鑰庫的SHA1:

  1. 構建 - >生成已簽名的APK ...

  2. 使用密碼創建密鑰庫並按照步驟操作

  3. 轉到Mac / Library / Java / JavaVirtualMachines / jdk1.8.0_20.jdk / Contents / Home / bin,然後在cd命令後將bin文件夾拖放到終端以指向它,以便您可以使用keytool工具。 所以,在終端中寫入cd (在這裡拖動bin)然後按回車。

  4. 然後,複製並粘貼到終端中:

    keytool -exportcert -alias Your_keystore_AliasName -keystore /Users/Home/Development/AndroidStudioProjects/YoutubeApp/app/YoutubeApp_keystore.jks -list -v
    

    擦除我的路徑,然後轉到存儲密鑰庫的位置,然後拖動keystone並將其放在命令行中的-keystore之後,以便創建路徑。

    另外,擦除Your_keystore_AliaseName以放置您在創建時使用的別名keystone名稱。

  5. Enter鍵並輸入密碼:)

  6. 當你輸入密碼時,終端不會顯示它接收到鍵盤輸入,但實際上它確實如此,因此, 輸入密碼並按回車,即使你沒有看到輸入密碼。




您可以使用以下命令並將您的系統名稱更改為AJAY SUNDRIYAL。這僅適用於您的debug.keystore.This將適用於您。

C:\Program Files\Java\jdk1.8.0_91\bin>keytool -list -v -keystore "c:\users\AJAY SUNDRIYAL\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android



簡單的說,在你的Splash Screen中調用這個方法:hash()和getCertificateSHA1Fingerprint(),然後按鍵在日誌中可見

private void hash() {


            PackageInfo info;
            try {

                info = getPackageManager().getPackageInfo(
                        this.getPackageName(), PackageManager.GET_SIGNATURES);

                for (android.content.pm.Signature signature : info.signatures) {
                    MessageDigest md;
                    md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());
                    Log.e("sagar sha key", md.toString());
                    String something = new String(Base64.encode(md.digest(), 0));
                    Log.e("sagar Hash key", something);
                    System.out.println("Hash key" + something);
                }

            } catch (PackageManager.NameNotFoundException e1) {
                Log.e("name not found", e1.toString());
            } catch (NoSuchAlgorithmException e) {
                Log.e("no such an algorithm", e.toString());
            } catch (Exception e) {
                Log.e("exception", e.toString());
            }
        }

        private void getCertificateSHA1Fingerprint() {
            PackageManager pm = this.getPackageManager();
            String packageName = this.getPackageName();
            int flags = PackageManager.GET_SIGNATURES;
            PackageInfo packageInfo = null;
            try {
                packageInfo = pm.getPackageInfo(packageName, flags);
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
            Signature[] signatures = packageInfo.signatures;
            byte[] cert = signatures[0].toByteArray();
            InputStream input = new ByteArrayInputStream(cert);
            CertificateFactory cf = null;
            try {
                cf = CertificateFactory.getInstance("X509");
            } catch (CertificateException e) {
                e.printStackTrace();
            }
            X509Certificate c = null;
            try {
                c = (X509Certificate) cf.generateCertificate(input);
            } catch (CertificateException e) {
                e.printStackTrace();
            }
            String hexString = "";
            try {
                MessageDigest md = MessageDigest.getInstance("SHA1");
                byte[] publicKey = md.digest(c.getEncoded());
                Log.e("sagar SHA",byte2HexFormatted(publicKey));
            } catch (NoSuchAlgorithmException e1) {
                e1.printStackTrace();
            } catch (CertificateEncodingException e) {
                e.printStackTrace();
            }
        }

        public static String byte2HexFormatted(byte[] arr) {
            StringBuilder str = new StringBuilder(arr.length * 2);
            for (int i = 0; i < arr.length; i++) {
                String h = Integer.toHexString(arr[i]);
                int l = h.length();
                if (l == 1) h = "0" + h;
                if (l > 2) h = h.substring(l - 2, l);
                str.append(h.toUpperCase());
                if (i < (arr.length - 1)) str.append(':');
            }
            return str.toString();
        }

謝謝。




如果你有Android Studio,那麼它非常非常簡單。 只需使用Android Studio創建MapActivity,並在創建之後進入google_maps_api.xml。 在那裡會有評論中的鏈接。 如果您將其粘貼到瀏覽器中,它會要求填寫一些細節,之後將生成API。 沒有必要使用keytool和全部。

屏幕截圖:




轉到文件>項目結構無論您在“模塊”中輸入名稱,請選擇“應用程序”或“移動”。選擇“簽名”選項卡。

點擊“+”按鈕即可添加證書。




使用keytool使用API​​管理器中的指示信息:

從您的AndroidManifest.xml文件中獲取軟件包名稱。 然後使用以下命令獲取指紋:

keytool -list -v -keystore mystore.keystore




對於Windows 10 ,從Android Studio終端:

keytool -exportcert -alias androiddebugkey -keystore %USER_PROFILE%"/.android/debug.keystore -list -v

注意:對於debug.keystore ,密碼是“android”。 調試密鑰庫通常位於"%USER_PROFILE%"/.android/debug.keystore




[更新2017年]

第1步:在Android Studio的右上角單擊On Gradle選項。

第2步:

- 點擊刷新(點擊從Gradle Bar刷新,你會看到你的項目的列表Gradle腳本)

- 點擊您的項目(您的項目名稱表單(根))

- 點擊任務

- 點擊Android

- 雙擊簽名報告(您將在Gradle Console / Run Bar中獲得SHA1和MD5)

第3步:單擊Android Studio底部的Gradle Console選項以查看您的SHA1密鑰。

第4步:現在你得到了SHA鍵,但你不能運行你的項目。這就是為什麼改變你的配置到應用程序模式。 見下圖。

喜歡這個。

第5步:快樂編碼!




我發現了一個非常簡單的過程,可以使用Android Studio找到MD5,SHA-1指紋。

  1. 運行你的項目
  2. 進入Gradle菜單(菜單:查看 - >工具窗口 - > Gradle)
  3. 在Gradle窗口中轉到'signingReport'。 (你的項目 - >任務 - > android - >簽名報告)
  4. 運行。 (使用雙擊或Ctrl + Shift + F10)
  5. 在運行窗口中,您可以找到所有信息。

它只適用於調試模式。 在釋放模式下,我看不到sha-1。 這裡是gradlew signingReport結果

Variant: release
Config: none
----------
Variant: releaseUnitTest
Config: none
----------
Variant: debug
Config: debug
Store: path\Android\avd\.android\debug.keystore
Alias: AndroidDebugKey
MD5: xx:xx:xx:62:86:B7:9C:BC:FB:AD:C8:C6:64:69:xx:xx
SHA1: xx:xx:xx:xx:0F:B0:82:86:1D:14:0D:AF:67:99:58:1A:01:xx:xx:xx
Valid until: Friday, July 19, 2047
----------

所以我必須使用keytool來獲取sha-1。 官方Firebase文檔:

Get_sha-1_for_release




使用簡單的命令:

keytool -exportcert -keystore-debug-or-production-keystore -list -v路徑

您將獲得SHA1密鑰。




這對我有效:

keytool -exportcert -alias androiddebugkey -keystore

將路徑至調試或生產密鑰庫放在這裡,如C:\ users \ youruser.android \ debug.keystore -list -v

確保您已經位於命令或終端窗口中的Java\jdk*\bin目錄中。

然後使用Android作為密碼。

有時候網絡資源可能會引起誤解。 這些是工作的:




對於Linux

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android 



這工作在我的情況:使用%USERPROFILE%,而不是給路徑.keystore文件存儲在此路徑自動C:用戶/用戶名/ .android

keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android



Links