文章

Link of class 'Lcom.....;' failed

文章目录

问题描述

导入同事修改的系统应用后编译成功,但运行起来后就异常了。

Link of class 'Lcom/.....;' failed

异常完整日志

W/dalvikvm( 5955): Link of class 'Lcom/la/music/PlayFragment;' failed
W/dalvikvm( 5955): Link of class 'Lcom/la/music/PlayFragment;' failed
E/dalvikvm( 5955): Could not find class 'com.la.music.PlayFragment', referenced from method com.la.music.MainActivity.onCreate
W/dalvikvm( 5955): VFY: unable to resolve new-instance 179 (Lcom/la/music/PlayFragment;) in Lcom/la/music/MainActivity;
W/dalvikvm( 5955): Link of class 'Lcom/la/music/PlayFragment;' failed
W/dalvikvm( 5955): VFY: Ljava/lang/Object; is not instance of Landroid/app/Fragment;
W/dalvikvm( 5955): VFY: bad arg 1 (into Landroid/app/Fragment;)
W/dalvikvm( 5955): VFY:  rejecting call to Lcom/la/music/MainActivity;.LoadFragment (Landroid/app/Fragment;)V
W/dalvikvm( 5955): VFY:  rejecting opcode 0x6e at 0x001c
W/dalvikvm( 5955): VFY:  rejected Lcom/la/music/MainActivity;.showFragment (Lcom/la/music/MainActivity$FRAGMENT_TYPE;)V
W/dalvikvm( 5955): Verifier rejected class Lcom/la/music/MainActivity;
W/dalvikvm( 5955): Class init failed in newInstance call (Lcom/la/music/MainActivity;)
W/dalvikvm( 5955): threadid=1: thread exiting with uncaught exception (group=0x41c95930)
E/AndroidRuntime( 5955): FATAL EXCEPTION: main
E/AndroidRuntime( 5955): java.lang.VerifyError: com/la/music/MainActivity
E/AndroidRuntime( 5955):        at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime( 5955):        at java.lang.Class.newInstance(Class.java:1319)
E/AndroidRuntime( 5955):        at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
E/AndroidRuntime( 5955):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2104)
E/AndroidRuntime( 5955):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2237)
E/AndroidRuntime( 5955):        at android.app.ActivityThread.access$600(ActivityThread.java:145)
E/AndroidRuntime( 5955):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
E/AndroidRuntime( 5955):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 5955):        at android.os.Looper.loop(Looper.java:138)
E/AndroidRuntime( 5955):        at android.app.ActivityThread.main(ActivityThread.java:5089)
E/AndroidRuntime( 5955):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 5955):        at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 5955):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
E/AndroidRuntime( 5955):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
E/AndroidRuntime( 5955):        at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager(  377):   Force finishing activity com.la.music/.MainActivity

日志中重点

W/dalvikvm( 5955): Link of class 'Lcom/la/music/PlayFragment;' failed

而PlayFragment中有使用

import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;

解决问题

这个是我在Android 4.2 项目中遇到的问题,大概的是没有导入如下jar

android-support-v4.jar

而是导入了系统编译生成的Android 4.2的android-support-v4_classes.jar(这个是编译系统时生成的),系统应用开发一般都会导入依赖的系统jar,因此顺手导入了。

我解决的方法是:

  1. 导入android-support-v4.jar
  2. 删除系统生成的android-support-v4_classes.jar

然后就没问题了。

这个我是当时浏览stackoverflow的Anonymous Me如下回答时突然想起的。

After spending 12 hours I was able to resolve the issue on my own. I am answering it here so that it can be useful to someone in the similar situation.

I was ignoring the following warning

Found 2 versions of android-support-v4.jar in the dependency list,
but not all the versions are identical (check is based on SHA-1 only at this time).
All versions of the libraries must be the same at this time.
Versions found are:
Path: /App/libs/android-support-v4.jar
    Length: 349252
    SHA-1: 612846c9857077a039b533718f72db3bc041d389
Path: /App Library/libs/android-support-v4.jar
    Length: 337562
    SHA-1: 27c24d26e4c5d57976e6926367985548678e913c
I just deleted android-support-v4.jar from app's lib folder and kept the one in library's lib folder and the error was gone.

参考文章

  1. Link of class failed dalvik
  2. java.lang.VerifyError 异常解决方法
1 0
发表评论