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

那么刚刚完成了一些基本的地图function的应用程序。 正在跨多个sdk进行testing,以确保正确的执行和支持。

发现它不会在Android 4.0.3 ICS上运行的平板电脑上执行。 (注:标准地图和导航应用程序工作正常)。

执行相同的模拟器不会引发任何exception,并运行良好。 试了一下Google,发现这个exception:java.lang.NoClassDefFoundError:android.security.MessageDigest是由于某些固件与Google MAPS API / SDK的兼容性/不匹配造成的。

某些其他人build议使用java.security.MessageDigest,但在这种情况下,我/我们将无法自行编辑com.google.maps.jar 。 你可以请build议一个工作或一些窍门,以确保它适用于Android 4.0.3 ICS设备

Solutions Collecting From Web of "无法在运行4.0.3 ICS的Android设备上使用地图执行应用程序"

find了一个工作。 有一件事是确定运行Android 4.0.3 ICS的设备在使用Google Maps API时遇到了一些问题。 所以试图谷歌任何特定于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,让一切工作正常。 希望这可以帮助

我已经很久了。 并设法解决这个问题。 我想解释这里的问题和最简单的解决方法。

错误在这里是…

错误是由设备制造商或ROM创build者在较新的Android版本中使用较旧的地图库的结果。 通常情况下,这是孤立的模糊片,但理论上可以出现在其他情况。 ( 在这里解释 )

android.security.MessageDigest在Honeycomb及其后的版本中被删除。 这是造成问题的原因。

从您的代码轻松修复:

只需在android \ security下的src目录下创buildMessageDigest.java,然后在里面input下面的代码。

这个解决方法实际上是有效的,并且是我发现的最不干扰的。 我还没有看到任何副作用。

 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); } }