高德地图AndroidSDK错误码返回值为32解决办法(暨如何获取SHA1值的正确方法)

高德地图整的我吐血,照着官方文档

开发模式使用 debug.keystore,命令为:keytool -list -v -keystore debug.keystore
发布模式使用 apk 对应的 keystore,命令为:keytool -list -v -keystore apk的keystore
如下所示:
高德地图AndroidSDK错误码返回值为32解决办法(暨如何获取SHA1值的正确方法)_第1张图片

提示输入密钥库密码,开发模式默认密码是 android,发布模式的密码是为 apk 的 keystore 设置的密码。输入密钥后回车(如果没设置密码,可直接回车),此时可在控制台显示的信息中获取 Sha1 值,如下图所示:


说明:keystore 文件为 Android 签名证书文件。


我输入keytool -list -v -keystore debug.keystore 获取SHA1后配置的Key,在自己的demo里运行没问题,结果整合到项目里错误码却总是返回 32,百思不得其解。

后来从网上找到了这个获取当前应用SHA1值得方法,得到的SHA1和我用以上方法得到的居然不一样!拿这个值去官网配置Key后定位就没问题了!

public static String sHA1(Context context) {
    try {
        PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);   byte[] cert = info.signatures[0].toByteArray();   MessageDigest md = MessageDigest.getInstance("SHA1");  byte[] publicKey = md.digest(cert);  StringBuffer hexString = new StringBuffer();  for (int i = 0; i < publicKey.length; i++) {
            String appendString = Integer.toHexString(0xFF & publicKey[i])
                    .toUpperCase(Locale.US);  if (appendString.length() == 1)
                hexString.append("0");  hexString.append(appendString);  hexString.append(":");  }
        return hexString.toString();  } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();  } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();  }
    return null; }


怎么 回事呢?

我之前用的是.android目录下的debug.keystore。这个是当你的项目中没有keystore时默认使用的签名,而当你项目里有了签名后就不能用那个,得用项目中的。

高德地图AndroidSDK错误码返回值为32解决办法(暨如何获取SHA1值的正确方法)_第2张图片

项目里也有个debug.keystore


我一直以为“发布模式”是发布的时候,直到我发现了项目的角落里的这两个文件:

高德地图AndroidSDK错误码返回值为32解决办法(暨如何获取SHA1值的正确方法)_第3张图片

项目里也有个debug.keystore

你可能感兴趣的:(高德地图AndroidSDK错误码返回值为32解决办法(暨如何获取SHA1值的正确方法))