无法在运行4.0.3 ICS的Android设备上使用地图执行应用程序

时间:2012-07-17 07:04:42

标签: android google-maps

刚刚完成了一个具有一些基本地图功能的应用程序。正在跨多个sdk进行测试以确保正确执行和支持。

发现它不会在我在<4.0>在Android 4.0.3 ICS上运行的平板电脑上执行。 (注意:标准MAPS和NAVIGATION应用程序运行正常)。

为模拟器执行相同操作不会引发任何异常并且运行正常。试图谷歌周围,发现异常:java.lang.NoClassDefFoundError:android.security.MessageDigest 是由于某些固件兼容性/与Google MAPS API / SDK不匹配造成的。

某些其他人suggest to use java.security.MessageDigest但在这种情况下我/我们将无法自行编辑com.google.maps.jar 。你能否建议一个解决方法或一些技巧,以确保它适用于Android 4.0.3 ICS设备

2 个答案:

答案 0 :(得分:0)

找到了解决方法。有一件事是确保运行Android 4.0.3 ICS的设备在使用Google Maps API时遇到了一些问题。所以尝试使用Google专用于Android 4.0.3 ICS的任何库。找到了这个gapps-ics-20120429-signed.zip [mediafire.com/?owj7hj310var5rq]。已下载并通过设备连接到我的计算机。用于安装库1. adb remount 2. adb push system / etc / permissions / com.google.android.maps.xml / system / etc / permissions 3. adb push system / framework / com.google.android.maps .jar / system / framework 4. adb reboot,让一切工作正常。希望这有帮助

答案 1 :(得分:0)

我已经支持了很长时间。并管理来解决这个问题。我想解释这里的问题和最简单的解决方法。

错误在这里......

  

错误是设备制造商或ROM创建者使用的结果   带有新版Android的旧版地图库。通常,这   是孤立的模糊片剂,但理论上可以出现在   其他情况。 (explained here

android.security.MessageDigest已在Honeycomb中删除。这是导致问题的原因。

您的代码很容易修复:

只需在android \ security包下的src目录下创建MessageDigest.java,然后将代码放在里面。

这种解决方法实际上是有效的,并且是我发现的最具侵入性的。我还没有看到任何副作用。

package android.security;

import java.security.NoSuchAlgorithmException;

public class MessageDigest
{
    private java.security.MessageDigest instance;

    public MessageDigest() {}

    private MessageDigest(java.security.MessageDigest instance)
    {
        this.instance = instance;
    }

    public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
    {
        if (algorithm == null) return null;

        try
        {
            if (algorithm.equals("SHA-1"))
                return (MessageDigest) Class.forName("android.security.Sha1MessageDigest").newInstance();
            else if (algorithm.equals("MD5"))
                return (MessageDigest) Class.forName("android.security.Md5MessageDigest").newInstance();
        }
        catch (Exception e) {}

        return new MessageDigest(java.security.MessageDigest.getInstance(algorithm));
    }

    public void update(byte[] input)
    {
        instance.update(input);
    }

    public byte[] digest()
    {
        return instance.digest();
    }

    public byte[] digest(byte[] input)
    {
        return instance.digest(input);
    }
}