Android 映射异常 java.lang.NoClassDefFoundError : android. security.MessageDigest

标签 android google-maps noclassdeffounderror

我有一个使用 Google map (v1) 的应用程序,从崩溃报告中,我不时看到此异常:

java.lang.NoClassDefFoundError: android.security.MessageDigest
at com.google.android.maps.KeyHelper.getSignatureFingerprint(KeyHelper.java:60)
at com.google.android.maps.MapActivity.createMap(MapActivity.java:513)
at com.google.android.maps.MapActivity.onCreate(MapActivity.java:409)

我已经定义了

<uses-library
            android:name="com.google.android.maps"
            android:required="true" />

在应用程序标签内,我也在扩展 MapActivity。该应用程序在大多数设备上运行良好,但有一些不常见的设备报告此异常,通常在 Android 4.0.4 上,如 Woxter Tablet PC 90BL、TAB9008GBBK 和其他通用名称。

根据我在 Stackoverflow 中读到的内容,这是 ROM 中的一个问题,用户可以通过一些高级技巧来解决,但我想要的是防止这种崩溃,因为我认为它无法解决,我只想通知用户(并让他购买更好的设备 :) 并禁用 map 功能而不是崩溃。但是我找不到处理此错误的方法或使用我拥有的设备对其进行测试。

我的主要 Activity 也是基于 MapActivity,所以我不知道在打开它之前如何处理这个异常。

最佳答案

免责声明:我没有在我的任何应用/设备上遇到过这个错误,但我解决了一个类似的问题。也许同样的技术可以帮助您。

假设类是 unavailable或者在加载类时发生异常,为什么不在应用程序启动时尝试强制加载它呢? Class.forName("android.security.MessageDigest") 应该加载该类,您可以捕获从该调用中抛出的 Error。我知道它很脏,但它应该可以工作。您可以在 list 上声明自定义 Application 类来进行此检查。

类加载测试

    try
    {
        Class.forName("android.security.MessageDigest");
    }
    catch (Throwable e1)
    {
        e1.printStackTrace();
        //Bad device
    }

如果类加载成功,您还可以通过消化一个简单的 String 来执行石蕊测试并检查类的功能。

功能测试

    try
    {
        MessageDigest digester = MessageDigest.getInstance("MD5");
        digester.update("test".getBytes("UTF-8"));
        byte[] digest = digester.digest();
    }
    catch (Throwable e1)
    {
        e1.printStackTrace();
        // Class available but not functional
    }

如果类加载/石蕊测试失败,更新共享偏好标志并让用户知道他的设备很糟糕:)

关于Android 映射异常 java.lang.NoClassDefFoundError : android. security.MessageDigest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15807376/

相关文章:

android - TextView 无法正确分割线

java - 如何获得基于1小时的时间段间隔两次android

android - 如何停止/启动包含创建无限循环的服务

javascript - 谷歌地图 API v3 偏移量

java - 谷歌地图不会显示

android - NoClassDefFoundError:android.support.v4.content.LocalBroadcastManager

java - 为什么我在指向 ServletFileUpload 的 HttpServletRequest 上收到 NoClassDefFoundError?

android - 在通话android期间改变声音

ios - 谷歌地图打破业务逻辑单元测试

java.lang.NoClassDefFoundError : android. support.v4.app.NavUtilsJB 在Android Studio中添加新模块时出错