首页 文章

如何在Android Studio中获取SHA-1指纹证书以获得调试模式?

提问于
浏览
380

我已将自己从_95544改为Android Studio . 现在我正在尝试使用我的 Map 应用程序 . 所以我需要我的SHA-1指纹证书号码 .

当我使用Eclipse时,它正好在 Windows -> Preferences -> Android -> Build 下 . 但是在Android Studio中我找不到这样的选项,以便我可以轻松找到指纹 . 我正在使用Windows . 我从这个link读到:

当您从IDE运行或调试项目时,Android Studio会自动在调试模式下签署您的应用程序 .

所以我尝试在从this link设置我的Java bin路径后在命令行中运行它,但遗憾的是找不到我的指纹 . It is saying that it is an illegal option .

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密钥?

30 回答

  • 6

    Gnu/Linux - Mac - Windows 非常容易

    First: - 复制此命令

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

    Second: 现在将命令复制并粘贴到Android Studio的终端中

    Result!

    Good Luck!!

  • 0

    我想用Softcoder给出的答案添加一个东西 . 我看到有些人无法在 command line 上正确提供 debug.keystore 路径 . 他们看到他们正在做上面接受的确切过程,但它没有用 . 此时尝试拖动debug.keystore并将其放在命令行上 . 如果接受的答案不适合您,这将有所帮助 . 毫不犹豫地完成整个过程 . 这是一个很好的答案 .

  • 4

    对于Mac,这非常有效:

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

    For Linux & Mac

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

    要获取 生产环境 密钥库的SHA1:

    • 构建 - >生成签名APK ...

    • 使用密码创建密钥库并按照步骤操作

    • 转到Mac / Library / Java / JavaVirtualMachines / jdk1.8.0_20.jdk / Contents / Home / bin并在cd命令指向后将bin文件夹拖到终端,这样就可以使用keytool工具了 . 所以,在终端写入 cd (在这里拖动bin)然后按回车键 .

    • 然后,将其复制并粘贴到终端中:

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

    擦除我的路径并转到存储密钥库的位置并拖动梯形图并在命令行中将其放在 -keystore 之后,以便创建路径 .

    另外,擦除Your_keystore_AliaseName以放置您在创建时使用的别名keystone名称 .

    • 按Enter键输入密码:)

    • 当您输入密码时,终端不会显示它接收键盘输入,但实际上确实如此,所以即使您没有看到输入密码,也要输入密码并按Enter键 .

  • 34

    为Android生成SHA-1密钥的最佳解决方案是Android Studio .

    点击最右侧的Gradle:

    单击刷新图标,您将看到应用程序的名称:

    单击任务 - >报告 - >签名报告:

    在控制台的底部找到SHA-1键:

  • 0
    • 单击右窗格中的Gradle图标 .

    • 单击根项目名称 .

    • 单击“任务”

    • 点击Android

    • 单击signingReport
      在底部窗格中

    • ,您可以在其中看到“运行报告”

    • 点击"Toggle Tasks Execytions/text mode"

    • 你可以看到sha-1

  • 8

    我刚刚在Android Studio中找到了获得SHA-1的案例:

    • 点击您的包裹,然后选择新建 - > Google - > Google Map 活动

    • Android Studio会将您重定向到google_maps_api.xml

    你会看到所有你需要的 google_maps_key .

    Image

  • 22

    单击右侧面板上的Gradle图标,然后单击(根) .

    任务> android> signingReport

    然后Gradle脚本将执行,您将看到您的密钥 .

  • 6

    转到文件>项目结构选择“app”或“mobile”,无论您从“模块”中选择名称,都可以选择“签名”选项卡 .

    您可以单击“”按钮添加证书 .

  • 1

    使用keytool使用API Manager中的说明:

    从AndroidManifest.xml文件中获取包名称 . 然后使用以下命令获取指纹:keytool -list -v -keystore mystore.keystore

  • 999

    [Updated 2017]

    Step 1: On Top Right side of Android Studio Click On Gradle option.

    Step 2:

    • 单击Refresh(单击Refresh from Gradle Bar,您将看到项目的List Gradle脚本)

    • 单击您的项目(您的项目名称表单列表(根))

    • 单击“任务”

    • 点击Android

    • 双击signedReport(您将在Gradle控制台/运行栏中获得SHA1和MD5)

    Step 3: Click on the Gradle Console option present bottom of Android Studio to see your SHA1 Key.

    Step 4: 现在您已获得SHA密钥但无法运行项目 . 这就是为什么将配置更改为应用程序模式的原因 . 见下图 .

    像这样 .

    Step 5: Happy Coding!!

  • 8

    我使用终端从Mac直接使用了以下命令 . 我有SHA1手指 . 这是命令:

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

    对于Windows 10,来自Android Studio终端:

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

    注意:对于 debug.keystore ,密码为"android" . 调试密钥库通常位于 "%USER_PROFILE%"/.android/debug.keystore .

  • 112

    在Android Studio V 1.5.1中创建新的"Google Maps Project"时,最后一个屏幕将打开 google_maps_api.xml 文件并显示屏幕,其中包含如下说明:

    资源:

    TODO:在运行应用程序之前,您需要一个Google Maps API密钥 . 要获得一个,请点击此链接,按照说明操作并在结尾处按“创建”:https://console.developers.google.com/flows/enableapi?apiid = maps_android_backend&keyType = CLINENT_SIDE_ANDROID&r =您的SHA-1您的包裹名称您还可以使用以下行将您的凭据添加到现有密钥:您的SHA-1:您的包裹名称或者,按照此处的说明操作:https://developers.google.com/maps/documentation/android/start#get-key获得密钥后(以“AIza”开头),替换此文件中的“google_maps_key”字符串 . <string name =“google_maps_key”templateMergeStrategy =“preserve”translatable =“false”>您的GOOGLE Map 密钥</ string>

    要获得 GOOGLE MAPS KEY ,只需剪切并粘贴您在浏览器中提供的URL链接,并在创建新应用程序时按照上述说明操作 . SHA-1Package names 已经在给定的链接中,因此您无需了解它们 . 但是,当您按照创建项目的说明完成时,它们将位于 resources>Values>google_maps_api.xml 文件中的项目中 .

  • 37

    Simple, Call this methods in your Splash Screen: hash() and getCertificateSHA1Fingerprint(), and then then keys would be visible in log

    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();
            }
    

    谢谢 .

  • 12

    您可以使用以下命令并使用您的系统名称更改AJAY SUNDRIYAL . 这仅适用于您的debug.keystore . 这将适合您 .

    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
    
  • 9

    我将与@Hiren Patel一起回答,但在 android studio 2.2 稍有变化

  • 9

    这对我有用:

    keytool -exportcert -alias androiddebugkey -keystore
    

    将path-to-debug-or-production-keystore放在此处,如C:\ users \ youruser.android \ debug.keystore -list -v

    确保您已在命令或终端窗口中的 Java\jdk*\bin 目录中 .

    然后使用Android作为密码 .

    有时网络资源可能会产生误导 . 这些是工作的:

  • 7

    这适用于我的情况:使用 %USERPROFILE% 而不是自动提供存储在此路径中的路径.keystore文件 C:Users/user name/.android

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

    如果Google Maps需要SHA1,您可以在LogCat中看到错误日志 .

  • 6

    如果你有Android Studio那么它非常简单 . 只需使用Android Studio创建MapActivity,创建后即可进入google_maps_api.xml . 在那里,评论中会给出一个链接 . 如果您将其粘贴到浏览器中,它会询问一些细节,然后生成您的API . 不需要使用keytool和all .

    截屏:

    Enter image description here

  • 3

    密钥库的路径是双引号 . 它工作正常 .

    keytool -list -v -keystore "C:\Users\App innovation\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
    
  • 2

    我的问题与我将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 (my folder name is jdk1.7.0_71)BIN 文件夹中,否则如果你不知道你有什么文件夹名称,那么打开Java文件夹找到它,你会看到文件夹名称是什么,但你必须在你的BIN文件夹中然后运行此命令 . 今天我通过上面的过程在cmd命令窗口中得到了我的SHA1值 .

    SNAPSHOT:

    Enter image description here

  • 1

    我是这样做的:

    第1步:转到此文件夹

    在Mac上:/Users//.android/

    在Windows上:C:\ Documents and Settings \ .android \

    在Linux上:〜/ .android /

    第2步:运行此命令行:

    keytool -list -v -keystore debug.keystore -storepass android
    

    您将看到SHA-1密钥 .

  • 1

    获取指纹的最简单方法是通过单击下拉菜单并单击构建,从应用程序切换到已签名的报告 .

    然后,您将能够在底部窗格中看到sha1指纹,您可以在其中看到调试报告和堆栈跟踪 . N.B记得在想要在设备或模拟器上运行应用程序时切换回应用程序 .

  • 1

    Easiest ways ever:

    在上一步中为Android Studio V 2.2添加了更新

    有两种方法可以做到这一点 .

    1. Faster way

    • 打开Android Studio

    • 打开您的项目

    • 点击Gradle(从右侧面板,你会看到 Gradle Bar

    • 单击刷新(单击从 Gradle Bar 刷新,您将看到项目的 List Gradle脚本)

    • 单击您的项目(您的项目名称表单 List (根))

    • 单击“任务”

    • 点击Android

    • 双击signedReport(您将在 Run Bar 中获得 SHA1MD5 (有时它将在Gradle控制台中))

    • module selection dropdown 中选择 app 模块以运行或调试您的应用程序

    Check the screenshot below:

    2. Work with Google Maps Activity

    • 打开Android Studio

    • 打开您的项目

    • 点击 File 菜单 - >选择 New - >点击 Google - >选择 Google Maps Activity

    • 将出现一个对话框 - >单击 Finish

    • Android Studio会自动生成带有 google_maps_api.xmlXML 文件 named

    • 你会在这里获得 debug SHA1 键(在XML文件的 line number 10 处)

    Check Screenshot below:

    Android Studio V 2.2更新

    Execution 存在问题 .

    Solution:

    • 点击 Toggle tasks execution/text modeRun bar

    Check Screenshot below:

    Done.

  • 109

    使用简单的命令:

    keytool -exportcert -keystore path-to-debug-or-production-keystore -list -v

    你将获得SHA1密钥 .

  • 6

    我找到了一个使用Android Studio找到MD5,SHA-1指纹的简单过程 . 运行项目转到Gradle菜单(菜单:查看 - >工具窗口 - > Gradle)转到Gradle窗口中的'signingReport' . (您的项目 - >任务 - > android - > signingReport)运行它 . (使用双击或Ctrl Shift F10)在“运行”窗口中,您将找到所有信息 .

    它仅适用于调试模式 . 在realease模式中,我看不到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

  • 0

    如果您使用的是Android Studio,则可以通过 Gradle Tasks 快速获取 SHA-1 and MD5 certificate 指纹(debug,release ... all Build Types !!):

    签署报告

    SHA-1和MD5证书显示在 Messages Logs 中 .

    Android插件(在Gradle应用程序中配置)创建默认的调试模式 .

    com.android.application

    到密钥库的文件路由:

    HOME/.android/debug.keystore
    

    我建议 attach debug.keystorebuild.gradle . 要执行此操作,请将文件 debug.keystore 放在app文件夹中,然后在Gradle app中添加SigningConfigs:

    apply plugin: 'com.android.application'
    
        android {
            ................
            signingConfigs {
                debug {
                    storeFile file("../app/debug.keystore")
                    storePassword "android"
                    keyAlias "androiddebugkey"
                    keyPassword "android"
                }
                release {
                    storeFile file("../app/debug.keystore")
                    storePassword "android"
                    keyAlias "androiddebugkey"
                    keyPassword "android"
                }
            }
            ........
        }
    

    额外:如果要创建发布,请将文件 release.keystore 放在应用程序文件夹中 . (此示例使用相同的 debug.keystore . )

相关问题