Isa*_*ler 98 java android gdata verifyerror
在我的Android应用程序中,我总是得到VerifyErrors!我无法弄清楚原因.每当我包含一个外部JAR时,我总是在尝试启动我的应用程序时获得VerifyErrors(除了一次,当我包含Apache Log4j时).
我通常通过获取库的源代码并将其添加到我的项目来解决这个问题,但我正在尝试放置GData客户端库.
我可以在源代码中获取它,但它的依赖项(mail.jar,activation.jar,servlet-api.jar)我不能,所以我得到验证错误.我想一劳永逸地找到这个问题的根源.我在互联网上看了一下,但他们似乎都在谈论不完整的类文件?我不知道.
小智 118
查看LogCat,看看是什么导致了verifyerror.它可能是java.lang类中的一些方法,在您正在使用的android SDK级别上不受支持(例如,String.isEmpty()).
ADB*_*ADB 56
"adb logcat"的输出表示无法找到的类以及具有错误引用的类.该位置被识别为特定的Dalvik指令.诀窍是查看异常上方的日志.
Tof*_*eer 35
Android使用不同的类文件格式.您是否通过Android SDK附带的"dx"工具运行第三方JAR文件?
Mak*_*kin 14
要使其工作,您需要将库的jar添加到其中一个源文件夹(即使您已将其添加为eclipse库,您仍需要将其添加为源代码).
它现在发生在我身上.导致该错误是因为我使用的是我的设备所具有的较新SDK中的方法.
Android 1.5设备安装了一个apk使用此:
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"/>
Run Code Online (Sandbox Code Playgroud)
我发现了一个有趣的案例.我用:
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="18" />
Run Code Online (Sandbox Code Playgroud)
因此,一些新的Android 4功能并未在Android 2.3中实现ImageView.setLayerType.要简单地避免运行时错误:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
Run Code Online (Sandbox Code Playgroud)
这种方法也应该用于异常处理:
} catch (NetworkOnMainThreadException nomte) {
// log this exception
} catch (SocketTimeoutException socketTimeoutException) {
// log this exception
}
Run Code Online (Sandbox Code Playgroud)
NetworkOnMainThreadException在Android 2.3中没有实现,因此当加载类(而不是之前!)时,java.lang.VerifyError会发生异常.
这也可能是因为在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
Run Code Online (Sandbox Code Playgroud)
第3步:覆盖attachBaseContext
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
Run Code Online (Sandbox Code Playgroud)
Step4:下一步是将以下内容添加到应用程序build.gradle的android部分
dexOptions {
preDexLibraries = false
}
Run Code Online (Sandbox Code Playgroud)
第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'
}
}
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请结帐
https://developer.android.com/tools/building/multidex.html
| 归档时间: |
|
| 查看次数: |
89905 次 |
| 最近记录: |