【问题标题】:Get Maps API Key :Android获取地图 API 密钥:Android
【发布时间】:2011-12-30 10:26:07
【问题描述】:

我正在点击此链接http://eagle.phys.utk.edu/guidry/android/apiKey.html 来生成证书的 MD5 指纹。

我也看到了以下主题:

Google maps error when trying to get my API Key for android

How to find the MD5 fingerprint of my Android App

我使用的是 Windows xp 操作系统。debug.keystore 位于 C:\Documents and Settings\Admin.android\debug.keystore。

但在 cmd 提示符下,它给出了未找到的响应网络路径。

  1. 请指导我如何生成 MD5 摘要。

  2. 我也想知道调试键有什么区别 并释放

    键??这是两个不同的键吗??如果是的话 如何 我可以生成它们吗??

  3. 有没有什么办法可以采用相同的调试和发布 不同机器上的密钥。

【问题讨论】:

  • @Padma Kumar:是的,我生成了 md5 证书,但我仍然在调试密钥和发布密钥之间存在疑问..
  • 发布密钥是用于签署应用程序的密钥,允许您将应用程序上传到 Android Market。调试密钥用于在测试您的设备/模拟器时“推送”您的应用程序。为了获得 MD5 证书,您需要使用调试密钥而不是发布密钥。
  • @SiddharthLele:感谢您的回复:好的,所以我可以使用其他密钥来签署和导出我的应用程序??请给我一些关于我的第三个问题的指导
  • 我不确定在不同的机器上为 Maps API 使用不同的调试密钥。但是您当然不需要使用不同的发布密钥。事实上,建议您将发布密钥存储在安全的地方。使用特定发布密钥签署应用程序后,只有该密钥可用于为您的应用程序提供后续更新。同样,关于调试密钥,我真的不知道它是如何工作的。

标签: android google-maps


【解决方案1】:
  • 在您的系统上找到 debug.keystore。它通常在 Windows 上的USER_HOME\Local Settings\Application Data\.android 文件夹中。

  • 使用 keytool 实用程序生成证书指纹 (MD5)。 JDK 安装自带的 keytool 实用程序。

    C:>keytool -list -alias androiddebugkey -keystore .android\debug.keystore -storepass android -keypass android

您可以根据调试证书获取临时 Maps API 密钥,但在发布应用程序之前,您必须根据发布证书注册新密钥并相应更新 MapViews 中的引用

如果您的应用程序访问服务或使用要求您使用基于您的私钥的密钥的第三方库,您可能还需要获取其他发布密钥。例如,如果您的应用程序使用 MapView 类,它是 Google Maps 外部库的一部分,您将需要向 Google Maps 服务注册您的应用程序并获取 Maps API 密钥。有关获取 Maps API 密钥的信息,请参阅获取 Maps API 密钥。

refer this:

【讨论】:

    【解决方案2】:

    如下所述获取您的调试签名

    $ keytool -list -keystore ~/.android/debug.keystore
    ...
    Certificate fingerprint (MD5): 94:1E:43:49:87:73:BB:E6:A6:88:D7:20:F1:8E:B5:98
    

    或者更好地使用你从sigs[i].hashCode()得到的那个
    那么这个 util func 也可能有帮助

    static final int DEBUG_SIGNATURE_HASH = 695334320;// value shpuld be the one you get above
        public static boolean isDebugBuild(Context context) {
    
                boolean _isDebugBuild = false;
                try {
                    Signature [] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;
    
                    Log.d(TAG, "DEBUG_SIGNATURE_HASH->"+DEBUG_SIGNATURE_HASH);
                    for (int i = 0; i < sigs.length; i++) {
                        Log.d(TAG, i+"->"+sigs[i].hashCode());
                        if ( sigs[i].hashCode() == DEBUG_SIGNATURE_HASH ) {
                            Log.d(TAG, "This is a debug build!");
                            _isDebugBuild = true;
                            break;
                        }
                    }
                } catch (NameNotFoundException e) {
                    e.printStackTrace();
                }      
    
                return _isDebugBuild;
            }
    

    【讨论】:

    • 谢谢@WareNinja:请回答我的第三个问题
    • 当然欢迎。不幸的是,我对第三个问题没有明确的答案,据我所知让我试试;每台机器仅调试密钥更改,签名应用程序的发布密钥相同。这就是为什么我会更新每台机器的调试密钥并相应地检查 isDebugBuild。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多