当前位置:  开发笔记 > 编程语言 > 正文

Android java.lang.VerifyError?

如何解决《Androidjava.lang.VerifyError?》经验,为你挑选了8个好方法。

在我的Android应用程序中,我总是得到VerifyErrors!我无法弄清楚原因.每当我包含一个外部JAR时,我总是在尝试启动我的应用程序时获得VerifyErrors(除了一次,当我包含Apache Log4j时).

我通常通过获取库的源代码并将其添加到我的项目来解决这个问题,但我正在尝试放置GData客户端库.

我可以在源代码中获取它,但它的依赖项(mail.jar,activation.jar,servlet-api.jar)我不能,所以我得到验证错误.我想一劳永逸地找到这个问题的根源.我在互联网上看了一下,但他们似乎都在谈论不完整的类文件?我不知道.



1> 小智..:

查看LogCat,看看是什么导致了verifyerror.它可能是java.lang类中的一些方法,在您正在使用的android SDK级别上不受支持(例如,String.isEmpty()).


这应该标记为真实的答案.至少在我的情况下是什么,因为我从我的用户那里得到了零星的错误,并且我将它追溯到了API的第3版中不支持的View.getTag(int)调用

2> ADB..:

来自android-developers:

"adb logcat"的输出表示无法找到的类以及具有错误引用的类.该位置被识别为特定的Dalvik指令.诀窍是查看异常上方的日志.


查看异常上方也帮助我确定导致错误的方法.对我来说,这是表达式Build.VERSION.SDK_INT> = Build.VERSION_CODES.ECLAIR,这有点显而易见,最后,如果你在Cupcake上尝试...
谢谢!这是我得到的问题......有用的日志就在异常之上:`WARN/dalvikvm(1052):VFY:无法解析静态方法475:Ljavax/xml/datatype/DatatypeFactory; .newInstance()Ljavax/xml/datatype/DatatypeFactory;`(现在要弄清楚如何在没有DatatypeFactory的情况下做)

3> TofuBeer..:

Android使用不同的类文件格式.您是否通过Android SDK附带的"dx"工具运行第三方JAR文件?


有关"dx"工具的更多信息会很棒.
查看Android项目首选项的"库"部分,在SDK版本列表下方.您在构建中依赖的外部项目是否显示在那里,旁边有绿色勾号?

4> Maksim Goliv..:

要使其工作,您需要将库的jar添加到其中一个源文件夹(即使您已将其添加为eclipse库,您仍需要将其添加为源代码).

    在项目中创建一个目录(例如"libs")并将库jar放在那里.

    将目录添加到构建类路径中(单击文件夹上的右键并选择"构建路径" - >"用作源文件夹").

    重建您的项目.



5> Macarse..:

它现在发生在我身上.导致该错误是因为我使用的是我的设备所具有的较新SDK中的方法.

Android 1.5设备安装了一个apk使用此:




6> Seraphim's..:

我发现了一个有趣的案例.我用:


因此,一些新的Android 4功能并未在Android 2.3中实现ImageView.setLayerType.要简单地避免运行时错误:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
   setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

这种方法也应该用于异常处理:

} catch (NetworkOnMainThreadException nomte) {
   // log this exception
} catch (SocketTimeoutException socketTimeoutException) {
   // log this exception
}

NetworkOnMainThreadException在Android 2.3中没有实现,因此当加载类(而不是之前!)时,java.lang.VerifyError会发生异常.



7> Takhion..:

如果您正在使用Retrolambda,则可能已向接口添加了静态方法(仅在Java 8中允许).



8> Pawan Mahesh..:

这也可能是因为在Lollypop下面的版本引用了限制错误,它被限制到最大65K大小

上述问题的可能解决方案

步骤1: Add android-support-multidex.jar to your project. The jar can be found in your Android SDK folder /sdk/extras/android/support/multidex/library/libs

第2步:使用MultiDexApplication扩展您的应用程序,例如

public class MyApplication extends MultiDexApplication

第3步:覆盖attachBaseContext

protected void attachBaseContext(Context base) {
 super.attachBaseContext(base);
 MultiDex.install(this);
}

Step4:下一步是将以下内容添加到应用程序build.gradle的android部分

 dexOptions {
      preDexLibraries = false
   }

第5步:最后,关注应用build.gradle的一般部分

afterEvaluate {
   tasks.matching {
      it.name.startsWith('dex')
   }.each { dx ->
      if (dx.additionalParameters == null) {
         dx.additionalParameters = ['--multi-dex']
      } else {
         dx.additionalParameters += '--multi-dex'
      }
   }
}

有关详细信息,请结帐

https://developer.android.com/tools/building/multidex.html

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有