2

在一个 Android 应用程序中,我最近开始使用 Apache 的UrlValidator类来验证 Urls。一切都很好!然而,一旦第一轮 beta 测试开始,我就收到了一些用户的崩溃:

致命异常:java.lang.NoClassDefFoundError:org.apache.commons.validator.routines.UrlValidator

UrlValidator通常包含在build.gradle

compile 'commons-validator:commons-validator:1.5.0'

这里发生了什么?这在我拥有的所有 nexus 设备上都可以正常工作。Beta 测试人员的崩溃来自 Droid Razr HD、galaxy Tab 2 和 Galaxy S4,均运行 Android 4.x。

我的预感是三星/摩托罗拉在操作系统中定制了一些与公共库有关的东西。任何帮助深表感谢。

4

1 回答 1

0

发生这种NoClassDefFoundError情况是因为 multidex 仅在此应用程序中部分实现 - 出于某种原因,这在 Android 5/6 上运行良好,但在 Android 4.x 上它会使您的应用程序NoClassDefFoundError在随机位置崩溃。在我看来,Android Studio 应该检测到这种情况,并且应该警告您未正确实现 multidex 支持。

要修复它,请确保您的项目满足以下条件:

  1. multiDexEnabled = truedefaultConfig您的应用程序级 build.gradle 部分

  2. compile 'com.android.support:multidex:1.0.0'在您的项目级 build.gradle

  3. 调用您MultiDex.install()attachBaseContext()应用程序类。

可以在此处找到有关 multidex 的更多详细信息。

于 2016-01-25T20:15:52.387 回答