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


489

我已经从Eclipse转移到Android Studio。现在,我正在尝试在我的地图应用程序上工作。所以我需要我的SHA-1指纹证书编号。

当我使用Eclipse时,它就在Windows-> Preferences-> Android-> Build下。但是在Android Studio中,我找不到类似的任何选项,因此我可以轻松找到指纹。我正在使用Windows。我从此链接中了解到:

从IDE运行或调试项目时,Android Studio会自动以调试模式对应用程序进行签名。

因此,从该链接设置了Java bin路径后,我尝试在命令行中运行此命令,很遗憾找不到指纹。据说这是非法的选择

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

有没有办法像在Eclipse中一样轻松地从Android Studio查找SHA-1指纹?由于我是Android Studio的新手,因此找到它的完整过程是什么?

我要补充的另一件事是,我让Eclipse生成SHA-1指纹,并且以前我已在Google开发者控制台中将我的应用程序注册在该指纹上,并且使用该API密钥在Eclipse中对该应用程序进行了处理。我可以在Android Studio中对此项目使用相同的API密钥吗?


1
获取SHA-1发行版和调试模式android studio gradle的最简单方法。检查此内容
Naeem Ibrahim

Answers:


1251

最简单的方法:

最后一步为Android Studio V 2.2添加了更新

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

1.更快的方法

  1. 开启Android Studio
  2. 打开你的项目
  3. 单击Gradle(在右侧面板中,您将看到Gradle Bar
  4. 单击刷新(从Gradle Bar单击刷新,您将看到列出项目的Gradle脚本)
  5. 单击您的项目(您的项目名称表单列表(根))
  6. 点击任务
  7. 点击Android
  8. 双击signingReport(在运行栏中您将获得SHA1MD5(有时将在Gradle控制台中))
  9. 模块选择下拉列表中选择应用程序模块以运行或调试您的应用程序

检查以下屏幕截图:

在此处输入图片说明

2.使用Google Maps Activity

  1. 开启Android Studio
  2. 打开你的项目
  3. 单击文件菜单->选择新建 ->单击Google- >选择Google Maps Activity
  4. 将出现一个对话框->单击“ 完成”。
  5. Android Studio中会自动生成一个XML文件命名google_maps_api.xml
  6. 您将在此处获得调试SHA1密钥(在XML文件的第10行

检查以下屏幕截图:

在此处输入图片说明

Android Studio V 2.2更新

执行存在问题。

解:

  • 点击切换任务的执行/文本模式运行酒吧

检查以下屏幕截图:

在此处输入图片说明

做完了


6
太好了:),但是我可以在Google Developer Console中使用此SHA1(按您的描述生产)为我的应用程序创建凭据吗?因为它在(Signing Report)窗口中说(config:debug)不是发布模式?
阿什拉夫·阿尔沙哈威

2
很高兴找到不涉及命令行的方法。
Androidcoder

2
你是狗屎家伙,这很不错,因为我无法在我的.android文件夹@HirenPatel中找到debug.keystore
Manny265

2
有关密钥库的SHA1版本,请访问stackoverflow.com/questions/15727912/…一个
Hiren Patel

12
由于Android Studio 2.2中的它摇篮控制台显示了不能运行
adsamcik

296

我的问题与我将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值。

快照:

在此处输入图片说明


1
keytool -list -v -keystore“%USERPROFILE%\。android \ debug.keystore” -alias androiddebugkey -storepass android -keypass android不用键入您自己的用户名

是的,但是在堆栈溢出的许多示例中已经显示了“ keytool -list -v -keystore“%USERPROFILE%\。android \ debug.keystore” -alias androiddebugkey -storepass android -keypass android”。我只想再举一个例子。
贾米尔

1
我无法从CMD复制SHA1,因此通过> output.txt在命令后面添加:将给定命令的整个输出移至文件。您也可以| clip在命令后面添加。您将在Windows剪贴板中获得命令的输出。我希望它也可以为其他人节省时间。 有关使用|的更多信息 剪辑
Sjoerd Pottuit 2016年

1
@SPottuit:有趣的提示clip.exe,不知道它的存在,谢谢。另外,删除-v会给你SHA1只能作为输出,或在Windows中可以管从-v输出通过| find "SHA1" | clip
丹Dar3

131

对于Mac,这非常有效:

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

对我也很好
Ranjith Kumar

112

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

  1. 单击您的包裹,然后选择新建 -> Google- > Google Maps Activity
  2. Android Studio将您重定向到google_maps_api.xml

然后您将看到所需的全部内容google_maps_key

图片


1
我找到了Sha1,但它使我搞砸了项目,它说“ Error:使用外部系统时发生异常:”并更改了项目中的所有结构...。谢谢!!!不求回报!!!我认为没有办法找回。
user3050757 2015年

41

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

单击最右侧的Gradle:

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

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

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


这次真是万分感谢!其他替代方法均无效,而且实际上实际上更简单。
Kebman

谢谢你这么多哥们!
Hanish Sharma's

在Android 3.1.4:任务- > Android的- > signingReport
丈量

最佳答案
Nurseyit Tursunkulov,

36

[2017年更新]

步骤1:在Android Studio的右上角,单击Gradle选项。

Android Studio单击On Gradle选项

第2步:

-单击刷新(在Gradle Bar中单击Refresh,您将看到列出项目的Gradle脚本)

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

-单击任务

-点击Android

-双击signingReport(您将在Gradle Console / Run Bar中获得SHA1和MD5)

在此处输入图片说明

步骤3:点击Android Studio底部的Gradle Console选项,以查看您的SHA1密钥。

在此处输入图片说明

步骤4:现在您获得了SHA键,但是您无法运行项目,这就是为什么将配置更改为应用程序模式的原因。参见下图。

在此处输入图片说明

像这样。

在此处输入图片说明

步骤5:快乐编码!



20

对于Linux和Mac

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

@vicky示例,请.. /home/desktop/././。,abc.jks,所有密码为n,我们是否需要所有这些详细信息?
Prabs 2015年

@prabs,我无法理解你。你能解释更多吗?
Vicky

@vicky我们需要在执行命令之前对其进行编辑。如果是,那么我们应该提供哪些详细信息。那是我的查询。
Prabs 2015年

1
@prabs,您不需要为调试键提供任何其他信息,只需在Linux终端中执行上述命令即可。
Vicky

14
  1. 单击右窗格中的Gradle图标。
  2. 单击根项目名称。
  3. 单击任务
  4. 点击Android
  5. 点击签名报告
  6. 在底部窗格中,您会看到运行报告
  7. 单击“切换任务执行/文本模式”
  8. 你可以看到sha-1

Android Studio SHA-1


1
谢谢。很棒。/ i不知道我必须切换它。
拉尔

12

我这样做:

步骤1:前往这个资料夹

On Mac: /Users/<username>/.android/

On Windows: C:\Documents and Settings\<username>\.android\

On Linux: ~/.android/

步骤2:运行以下命令行:

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

您将看到SHA-1键。


/Users/<username>Mac是用户的主文件夹,因此~可以使用快捷方式,就像Linux
user28434

谢谢你的协助。
Aoun

11

我使用终端从Mac直接使用了以下命令。我有SHA1 Finger。这是命令:

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

它也将适用于Windows,而且cmd是:keytool -list -v -keystore%USERPROFILE%\。android \ debug.keystore -alias androiddebugkey -storepass android -keypass android
Hanuman

9

要获得用于生产密钥库的SHA1:

  1. 构建->生成签名的APK ...

  2. 使用密码创建密钥库,然后按照以下步骤操作

  3. 转到Mac / Library / Java / JavaVirtualMachines / jdk1.8.0_20.jdk / Contents / Home / bin,然后将cd文件夹中的bin文件夹拖到终端上以指向它,以便可以使用keytool工具。因此,在终端写入cd(在此处拖动箱),然后按Enter。

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

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

    清除我的路径,然后转到存储密钥库的位置,然后将其拖到-keystore命令行中,然后将其拖放到keystone中,以便创建路径。

    另外,擦除Your_keystore_AliaseName以放置创建别名时使用的别名梯形失真名称。

  5. 按下Enter并输入密码:)

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


你获得了我的THANK SO MUCH奖励When you enter the password, the terminal won't show that it receives keyboard entries, but it actually does
Farid

7

这是非常非常容易 的GNU / Linux - 苹果 - 视窗

首先: -复制此命令

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

第二:现在将命令复制并粘贴到Android Studio终端中 在此处输入图片说明

结果!

在此处输入图片说明

祝好运!!


7

如果您使用的是Android Studio,则可以通过Gradle Tasks快速获取SHA-1和MD5证书指纹(调试,发布... 所有构建类型 !!):

签署报告

SHA-1和MD5证书显示在“ 消息日志”中

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

com.android.application

到密钥库的文件路由:

HOME/.android/debug.keystore

我建议附加 debug.keystorebuild.gradle。为此,将文件放入debug.keystore应用程序文件夹中,然后在Gradle应用程序中添加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。)


1
我做了您上面所说的,但没有得到SHA1版本,因为它返回了我:变体:版本配置:无
Ashraf Alshahawy

菜单AndroidStudio:构建/生成已签名的apk并创建新文件。更改后signingConfig> release在build.gradle上发布(上)
SergioLucas

6

如果您拥有Android Studio,那么它非常非常简单。只需使用Android Studio创建MapActivity,然后在创建后进入google_maps_api.xml。在其中将有评论中给出的链接。如果将其粘贴到浏览器中,它将要求您填写一些详细信息,然后将生成您的API。无需使用keytool和所有工具。

屏幕截图:

在此处输入图片说明


但这仅适用于调试。您必须手动确定释放密钥指纹。
Hyndrix 2015年

@Hyndrix您如何手动确定释放键指纹?

这是完全不必要的步骤。无需为此专门创建MapActivity。您只需要在Gradle项目>应用>任务> android> signingReports中查看,并在Gradle控制台的SHA1下查看结果。
Kebman

5

这在我的情况下有效:使用%USERPROFILE%而不是自动给出存储在此路径中的路径.keystore文件C:Users / user name / .android

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

5

使用简单的命令:

keytool -exportcert -keystore调试或生产密钥库的路径-list -v

然后您将获得SHA1密钥。


4

对于Windows 10,从Android Studio终端:

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

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


4

我想用Softcoder给出的答案添加一件事。我已经看到有些人无法在上正确给出其debug.keystore路径command line。他们看到他们正在执行上面所接受的确切过程,但是没有用。此时,请尝试将debug.keystore拖放到命令行上。如果接受的答案对您不起作用,它将有所帮助。毫不犹豫地完成整个过程。这是一个很好的答案。


4

我发现使用Android Studio查找MD5 SHA-1指纹非常简单。

  1. 运行你的项目
  2. 转到Gradle菜单(菜单:视图->工具窗口-> Gradle)
  3. 转到Gradle窗口中的“ signingReport”。(您的项目->任务-> android-> signingReport)
  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



3

很简单,在启动画面中调用以下方法: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();
        }

谢谢。


2

使用keytool使用API​​管理器中的说明:

从您的AndroidManifest.xml文件获取包名称。然后使用以下命令获取指纹:

keytool -list -v -keystore mystore.keystore


1

您可以使用以下命令并使用系统名称更改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

1

这为我工作:

keytool -exportcert -alias androiddebugkey -keystore

将调试或生产密钥库的路径放在此处,例如C:\ users \ youruser.android \ debug.keystore -list -v

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

然后使用Android作为密码。

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


1

密钥库的路径用双引号引起来。一切正常。

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


1

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

资源:

待办事项:在运行应用程序之前,您需要一个Google Maps API密钥。

要获取一个,请点击此链接,按照说明进行操作,然后按“创建”。

https://console.developers.google.com/flows/enableapi?apiid=maps_android_backend&keyType=CLIENT_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">YOUR GOOGLE MAPS KEY</string>

要获取您的GOOGLE MAPS KEY,只需将给出的URL链接粘贴并粘贴到您的浏览器中,并在创建新应用程序时遵循上述说明。将SHA-1Package names已经在给定的链接,这样你就不需要知道他们。但是,它们将在您的项目中的resources>Values>google_maps_api.xml文件中,当您按照创建项目的说明进行操作时,文件已完成。


1
  • 转到“文件”>“项目结构选择”,appmobile从中输入名称Modules

  • 选择Signing标签。

  • 您可以单击+按钮添加证书。


您能举个例子给我看看详细的步骤吗?
Setu Kumar Basak 2014年

0

获得指纹的最简单方法是通过单击下拉列表并单击构建,从应用程序切换到签名报告。

在此处输入图片说明

然后,您将可以在底部的窗格中看到sha1指纹,在其中可以看到调试报告和堆栈跟踪。注意:当您想在设备或仿真器上运行应用程序时,请记住切换回应用程序。


这可能是一个很好的观点,但请您理​​解我的意思。
nyxee
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.