多くの場合、Android SDK に依存しない互換性のない jar ファイルを参照することを示唆する java.lang.VerifyError を読んだことがあります。
私の質問は、インポートされたjarファイル内で特にどのメソッド呼び出しが互換性がないかを確認する方法があるかどうかです。競合をリストすることは可能ですか?
このように、既製の Java プログラムを Android 互換にするのに多大な労力がかかっているかどうかを確認したいと思いますか?
これまでのところ、VerifyError とそれを引き起こしたファイルのみを取得しています。しかし、それは他のものを参照し、いくつかのコードを持つファイルであるため、正確にどの場所にエラーがあるかを知りたい.
編集:
ここで、LogCat のログを確認できます。
09-21 11:10:03.080: W/dalvikvm(1988): VFY: unable to resolve exception class 427 (L/codec/ContentAccessException;)
09-21 11:10:03.080: W/dalvikvm(1988): VFY: unable to find exception handler at addr 0x16
09-21 11:10:03.080: W/dalvikvm(1988): VFY: rejected Lsmb/LPP_SM;.start ()[Ljava/lang/String;
09-21 11:10:03.080: W/dalvikvm(1988): VFY: rejecting opcode 0x0d at 0x0016
09-21 11:10:03.080: W/dalvikvm(1988): VFY: rejected Lsmb/LPP_SM;.start ()[Ljava/lang/String;
09-21 11:10:03.080: W/dalvikvm(1988): Verifier rejected class Lsmb/LPP_SM;
09-21 11:10:03.080: D/AndroidRuntime(1988): Shutting down VM
09-21 11:10:03.080: W/dalvikvm(1988): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
09-21 11:10:03.110: E/AndroidRuntime(1988): FATAL EXCEPTION: main
09-21 11:10:03.110: E/AndroidRuntime(1988): java.lang.VerifyError: smb/LPP_SM
09-21 11:10:03.110: E/AndroidRuntime(1988): at com.example.androidtest.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:109)
09-21 11:10:03.110: E/AndroidRuntime(1988): at android.app.Activity.performCreate(Activity.java:5008)
09-21 11:10:03.110: E/AndroidRuntime(1988): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
09-21 11:10:03.110: E/AndroidRuntime(1988): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
09-21 11:10:03.110: E/AndroidRuntime(1988): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
09-21 11:10:03.110: E/AndroidRuntime(1988): at android.app.ActivityThread.access$600(ActivityThread.java:130)
09-21 11:10:03.110: E/AndroidRuntime(1988): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
09-21 11:10:03.110: E/AndroidRuntime(1988): at android.os.Handler.dispatchMessage(Handler.java:99)
09-21 11:10:03.110: E/AndroidRuntime(1988): at android.os.Looper.loop(Looper.java:137)
09-21 11:10:03.110: E/AndroidRuntime(1988): at android.app.ActivityThread.main(ActivityThread.java:4745)
09-21 11:10:03.110: E/AndroidRuntime(1988): at java.lang.reflect.Method.invokeNative(Native Method)
09-21 11:10:03.110: E/AndroidRuntime(1988): at java.lang.reflect.Method.invoke(Method.java:511)
09-21 11:10:03.110: E/AndroidRuntime(1988): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
09-21 11:10:03.110: E/AndroidRuntime(1988): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-21 11:10:03.110: E/AndroidRuntime(1988): at dalvik.system.NativeStart.main(Native Method)
問題のあるクラスまたは関数呼び出しのリストを求めました。ここでは、ContentAccessException が Android と互換性のない唯一の問題であることがわかると思います。
少なくとも、たとえば LPP_SM 内でその部分にコメントすると、エラーは消えます。しかし、この例外は、私が使用したライブラリの 1 つからのものであり、変更できません。
これ以上の衝突が起こる可能性はありますか?