【问题标题】:NoSuchMethodError: No virtual method decrementAndGetNoSuchMethodError: 没有虚方法 decrementAndGet
【发布时间】:2018-10-28 21:29:25
【问题描述】:

一些设备上我的应用崩溃

Exception java.lang.NoSuchMethodError: No virtual method decrementAndGet()I in class Lorg/apache/commons/lang3/mutable/MutableInt; or its super classes (declaration of 'org.apache.commons.lang3.mutable.MutableInt' appears in /system/framework/framework.jar:classes2.dex)

据我所知(我可能错了),Android 设备已经有 apache commons lang3 库。

我也将它包含在我的应用程序中(作为依赖项),但似乎实际加载到类路径中的不是我提供的,而是不存在该方法的旧版本。

有没有办法指示 gradle 强制使用我的 apk 中定义的 apache commons lang3 版本,而不是系统提供的版本?

【问题讨论】:

  • 您是否尝试将其加载为依赖项?类路径依赖项用于 build.gradle
  • @KostasDrak 你的意思是把依赖添加到dependencies 里面buildscript 并且它会强制加载正确的版本?
  • 将依赖项添加到 app 模块的 build.gradle 中。然后就会正常加载了
  • @KostasDrak 它已经作为依赖项添加到那里,但系统提供的依赖项首先加载,看起来如此。

标签: android apache-commons-lang3


【解决方案1】:

据我所知(我可能错了),Android 设备已经有 apache commons lang3 库

如果是,它是无证的。也可能是 only certain device manufacturers are loading it in the zygote(所有 Android SDK 应用程序的进程都从中分叉的进程),而在其他制造商的其他设备上则没有问题。

似乎实际加载到类路径上的不是我提供的那个,而是一个不存在该方法的旧版本

应用程序不能覆盖 zygote 中的内容。受精卵总是赢。

有没有办法指示 gradle 强制使用我的 apk 中定义的 apache commons lang3 版本,而不是系统提供的版本?

不,对不起。我建议不要使用那个库。

【讨论】:

  • 非常有用的博文,谢谢。你说你反对那个图书馆。你推荐什么包含许多实用方法/类,例如像我使用的MutableInt? (创建我自己的不是一种选择)
  • @MinasMina:“你推荐什么包含许多实用方法/类”——不要根据它们的广度和深度来选择库。如果有的话,请选择较小的库,而不是较大的库。我不知道MutableInt 为您提供了哪些其他解决方案(intIntegerAtomicIntegerObservableInt 等)已经成为 Android 生态系统一部分的解决方案。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多