我试图在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工作室?


当前回答

当创建一个新的“谷歌地图项目”时,在Android Studio V 1.5.1中,最后一个屏幕会打开google_maps_api.xml文件,并显示如下说明的屏幕:

资源:

TODO: Before you run your application, you need a Google Maps API key. To get one, follow this link, follow the directions and press "Create" at the end: https://console.developers.google.com/flows/enableapi?apiid=maps_android_backend&keyType=CLIENT_SIDE_ANDROID&r= YOUR SHA-1 + YOUR PACKAGE NAME You can also add your credentials to an existing key, using this line: YOUR SHA-1:YOUR PACKAGE NAME Alternatively, follow the directions here: https://developers.google.com/maps/documentation/android/start#get-key Once you have your key (it starts with "AIza"), replace the "google_maps_key" string in this file. <string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">YOUR GOOGLE MAPS KEY</string>

要获得您的谷歌MAPS KEY,只需剪切并粘贴URL链接到您的浏览器中,并在创建新应用程序时遵循上面的说明。SHA-1和Package名称已经在给出的链接中,所以您不需要知道它们。然而,它们将在您的项目中的资源>Values>google_maps_api.xml文件中,当您按照创建项目的说明完成时。

其他回答

许多用户给出了他们的答案,在Android Studio 4.2以下的版本中运行良好。但对于Android Studio 4.2和更新版本,遵循以下步骤生成SHA密钥。步骤在这些图片中给出。

步骤:

1)点击gradle。Android Studio的右上角。正如你在这张照片上看到的。

2)现在点击图标如下图所示。一个新的可搜索窗口/屏幕将打开。

3)现在输入gradle signingreport,按Enter键开始生成SHA KEY,如下图所示。

4)您的SHA密钥将生成如图所示。使用这些步骤,你可以在Android Studio 4.2中生成SHA KEY。

注意:-如果您无法获得SHA密钥,则按照本回答中给出的说明进行操作。(颤振/反应本机…)

链接:-SHA颤振/反应本机键

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

谢谢你!

最简单的方法是

在安卓工作室转到

然后右键单击gradlew,选择在终端中打开 粘贴到terminal ./gradlew signingReport 良好的限度

如果您正在使用Android Studio,您可以获得SHA-1和MD5证书指纹(debug, release…所有构建类型!!)快速通过Gradle任务:

签名报告

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

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

com.android.application

到密钥库的文件路由:

HOME/.android/debug.keystore

我建议附加调试。要构建的Keystore。gradle。为此放一个文件,调试。然后在Gradle app中添加signingconfigurations:

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"
            }
        }
        ........
    }

额外:如果你想要创建发布,放一个文件,发布。Keystore,在应用程序文件夹中。(本例使用相同的debug.keystore。)

Linux和Mac

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