在我的Android应用程序中,我总是得到VerifyErrors!我无法弄清楚原因.每当我包含一个外部JAR时,我总是在尝试启动我的应用程序时获得VerifyErrors(除了一次,当我包含Apache Log4j时).
我通常通过获取库的源代码并将其添加到我的项目来解决这个问题,但我正在尝试放置GData客户端库.
我可以在源代码中获取它,但它的依赖项(mail.jar,activation.jar,servlet-api.jar)我不能,所以我得到验证错误.我想一劳永逸地找到这个问题的根源.我在互联网上看了一下,但他们似乎都在谈论不完整的类文件?我不知道.
查看LogCat,看看是什么导致了verifyerror.它可能是java.lang类中的一些方法,在您正在使用的android SDK级别上不受支持(例如,String.isEmpty()).
来自android-developers:
"adb logcat"的输出表示无法找到的类以及具有错误引用的类.该位置被识别为特定的Dalvik指令.诀窍是查看异常上方的日志.
Android使用不同的类文件格式.您是否通过Android SDK附带的"dx"工具运行第三方JAR文件?
要使其工作,您需要将库的jar添加到其中一个源文件夹(即使您已将其添加为eclipse库,您仍需要将其添加为源代码).
在项目中创建一个目录(例如"libs")并将库jar放在那里.
将目录添加到构建类路径中(单击文件夹上的右键并选择"构建路径" - >"用作源文件夹").
重建您的项目.
它现在发生在我身上.导致该错误是因为我使用的是我的设备所具有的较新SDK中的方法.
Android 1.5设备安装了一个apk使用此:
我发现了一个有趣的案例.我用:
因此,一些新的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
会发生异常.
如果您正在使用Retrolambda,则可能已向接口添加了静态方法(仅在Java 8中允许).
这也可能是因为在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