我试图在Android工作室,在Windows上做一个地图应用程序。如何查询SHA-1指纹证书编号?

当我使用Eclipse时,它就在Windows ->首选项-> Android ->构建下。但在Android Studio中,我找不到类似的选项。

我在文档里看到

Android Studio自动在调试模式下签署应用程序 从IDE运行或调试项目。

所以我试着设置我的Java bin路径,并运行以下命令,从这里取:

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

然而,我得到了一个错误消息,说它是一个非法选项。

一步一步地,我如何在Android Studio中获得这些信息?

作为解决方案:我之前使用Eclipse生成的SHA-1指纹注册了我的应用程序。我可以使用相同的API键工作在我的项目在Android工作室?


当前回答

我想在Softcoder给出的答案中添加一件事。我见过一些人不能给他们的调试。在命令行上正确地打开密钥存储库路径。他们看到他们正在做上面所接受的确切过程,但它不起作用。此时尝试拖动调试。并将其放到命令行上。如果公认的答案不适合你,它会有所帮助。毫不犹豫地完成整个过程。这是一个很好的答案。

其他回答

最简单的方法:

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

有两种方法。

1. 更快的方式:

Open Android Studio 打开你的项目 点击Gradle(从右侧面板,你会看到Gradle条) 点击刷新(从Gradle栏点击刷新,你会看到项目的Gradle脚本列表) 点击你的项目(你的项目名称表单列表(根)) 点击任务 点击Android 双击signingReport(你会在运行栏中得到SHA1和MD5(有时会在Gradle控制台中)) 从模块选择下拉菜单中选择应用程序模块以运行或调试应用程序

请看下面的截图:

2. 工作与谷歌地图活动:

Open Android Studio 打开你的项目 单击文件菜单->选择新建->单击谷歌->选择谷歌地图活动 将出现一个对话框->单击Finish Android Studio会自动生成一个名为google_maps_api.xml的XML文件 您将在这里获得调试SHA1密钥(在XML文件的第10行)

请看下面的截图:

Android Studio V 2.2更新

在执行方面有一个问题。

解决方案:

从运行栏点击切换任务执行/文本模式

请看下面的截图:

完成了。

我发现了一个非常简单的过程来找到你的MD5, SHA-1指纹使用 Android工作室。 运行你的项目 转到Gradle菜单(菜单:视图->工具窗口-> Gradle) 转到Gradle窗口的signingReport。(你的项目->任务-> android -> signingReport) 运行它。(使用双击或Ctrl + Shift + F10) 在运行窗口,你会发现所有的信息。

它只适用于调试模式。在释放模式下,我看不到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

简单,在你的启动屏幕中调用这个方法: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();
        }

谢谢你!

点击左下角的终端图标

CD到android文件夹并运行

gradlew signingreport

一旦完成,它将打印SHA-1、MD5和SHA-256密钥

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

从AndroidManifest.xml文件中获取包名。然后使用 获取指纹的命令如下: Keytool -list -v -keystore mystore.keystore