【问题标题】:How to get Map on signed Android application?如何在已签名的 Android 应用程序上获取地图?
【发布时间】:2011-07-10 04:23:37
【问题描述】:

我创建了一个地图应用程序。它在没有签署 APK 的情况下显示地图,但是当我尝试签署并稍后在设备中安装该 APK 时,地图不再显示。

【问题讨论】:

  • 聘请声乐教练?但说真的,你遵循了什么步骤?,你的问题是vague
  • 很确定你是想唱歌的same guy。向同一个问题发送垃圾邮件也无济于事。
  • 如果您可以与您的同事交谈,这样你们就不会同时问同样的问题,那将不胜感激......

标签: android map


【解决方案1】:

您需要一个单独的 Google Maps API 密钥才能发布。您说您在 APK 工作时没有对其进行签名,但应用程序实际上是由您的 SDK 使用调试密钥自动签名的。这可能也是您拥有有效 Google Maps API 密钥的那个。

来自https://code.google.com/android/add-ons/google-apis/mapkey.html的文档:

在开发和调试时 您的申请,您可能会 在调试中为您的应用程序签名 模式——即 SDK 构建工具 将自动签署您的 使用调试的应用程序 证书。让您的 MapView 元素正确显示地图数据 在此期间,您应该获得 注册到的临时 Maps API 密钥 调试证书。为此,您 首先需要获取MD5指纹 的调试证书。当你在 准备发布你的应用程序,你 必须注册您的发布证书 使用谷歌地图服务和 获取新的 Maps API 密钥。你必须 然后更改 MapView 元素 您的申请以引用新的 API 密钥。

【讨论】:

  • 如果这不是问题所在,我还遇到了其他一些可能相关的奇怪行为,在 kind-kristiansen.no/2010/… 中进行了描述
  • 我已经使用了this.beu,即使我无法获取地图。
  • logct 中没有错误,但我们看不到地图...如果我们使用未签名的 apk,那么它确实可以正常工作...
  • 如果地图图块没有加载,我敢打赌日志中会有一些提示。也许您可以发布日志的相关部分以供人们查看。如果您不提供更多信息,我怀疑您的问题会得到解答。
【解决方案2】:

您是否在两个地方使用了相同的 api 密钥?因为每个服务器上的 api key 需要是唯一的。

http://code.google.com/apis/maps/signup.html

【讨论】:

  • 请为其他服务器创建一个新的 api 密钥。您不能在每个上使用相同的 api 密钥。
【解决方案3】:

您应该使用将在签名时生成的 releasekey 文件生成另一个 apiKey。 您将使用以下方法获得新的 MD5 密钥
keytool -list -keystore c:\Users\Sudheesh\releasekey 其中 relesekey 是包含签名释放密钥的文件。 通过使用这个 MD5 密钥,您可以从http://www.mobisoftinfotech.com/blog/android/android-mapview-generate-api-key-using-java-keytool/ 生成 api 密钥 在您的应用程序中使用此 apikey。

【讨论】:

    【解决方案4】:

    这样比较好

    Select the project in workspace-->rightclick---> click export--->export android apps-->next-->next--->enter keystore file name--->next--->enter key alis--->finish
    

    (请看这个here

    【讨论】:

      【解决方案5】:

      就像 RogerKK 所说的那样,您的测试/部署如何? 如果您最初针对已连接的 Android 设备调试应用程序,则很可能是使用调试证书 SHA-1 生成的密钥。如果您尝试进行发布构建,则需要完全不同的密钥。

      这是我所经历的,但使用调试证书进行签名。

      http://www.digitalopium.com/android-google-maps-api-tutorial/

      【讨论】:

        【解决方案6】:

        对于所有面临与 nirav patel 相同问题的朋友。

        您可以使用以下代码查找已签名和未签名的哈希密钥

        public class MainActivity extends Activity {
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
        
                try
        
                {
        
                    PackageInfo info = getPackageManager().getPackageInfo("Your package name here",PackageManager.GET_SIGNATURE);
        
                    for (Signature signature : info.signatures)
                    {
                        MessageDigest md = MessageDigest.getInstance("SHA");
                        md.update(signature.toByteArray());
                        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                    }
                } 
                catch (NameNotFoundException e)
                {
                    System.out.println("name not found...."+e);
                } catch (NoSuchAlgorithmException e) 
                {
                    System.out.println("NoSuchAlgorithmException...."+e);
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-26
          相关资源
          最近更新 更多