VerifyError при использовании jCIFS в Android
Я пытаюсь использовать JAR-файл jCIFS версии 1.3.17 в своем приложении для Android. Приложение правильно компилируется и развертывается на моем телефоне. Когда мое приложение пытается использовать библиотеку jCIFS, я получаю следующее сообщение об ошибке:
E/dalvikvm( 3176): Could not find class 'jcifs.smb.SmbFile', referenced from method com.test.androidapp.service.BackgroundService.copyFiles
W/dalvikvm( 3176): VFY: unable to resolve new-instance 94 (Ljcifs/smb/SmbFile;) in Lcom/test/androidapp/service/BackgroundService;
D/dalvikvm( 3176): VFY: replacing opcode 0x22 at 0x0001
W/dalvikvm( 3176): VFY: unable to resolve exception class 93 (Ljcifs/smb/SmbException;)
W/dalvikvm( 3176): VFY: unable to find exception handler at addr 0x6c
W/dalvikvm( 3176): VFY: rejected Lcom/test/androidapp/service/BackgroundService;.copyFiles ()Z
W/dalvikvm( 3176): VFY: rejecting opcode 0x0d at 0x006c
W/dalvikvm( 3176): VFY: rejected Lcom/test/androidapp/service/BackgroundService;.copyFiles ()Z
W/dalvikvm( 3176): Verifier rejected class Lcom/test/androidapp/service/BackgroundService;
W/dalvikvm( 3176): Class init failed in newInstance call (Lcom/test/androidapp/service/BackgroundService;)
D/AndroidRuntime( 3176): Shutting down VM
W/dalvikvm( 3176): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0)
E/AndroidRuntime( 3176): FATAL EXCEPTION: main
E/AndroidRuntime( 3176): java.lang.VerifyError: com.test.androidapp.service.BackgroundService
E/AndroidRuntime( 3176): at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime( 3176): at java.lang.Class.newInstance(Class.java:1409)
E/AndroidRuntime( 3176): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2174)
E/AndroidRuntime( 3176): at android.app.ActivityThread.access$2500(ActivityThread.java:132)
E/AndroidRuntime( 3176): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1102)
E/AndroidRuntime( 3176): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 3176): at android.os.Looper.loop(Looper.java:150)
E/AndroidRuntime( 3176): at android.app.ActivityThread.main(ActivityThread.java:4263)
E/AndroidRuntime( 3176): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 3176): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 3176): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
E/AndroidRuntime( 3176): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E/AndroidRuntime( 3176): at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager( 129): Force finishing activity com.test.androidapp/.activity.MainActivity
Может кто-нибудь объяснить, почему Android не находит jCIFS?
1 ответ
Предполагая, что вы используете последнюю версию инструментов Android SDK (и, если применимо, плагин ADT для Eclipse), правильная процедура добавления стороннего JAR:
Шаг № 1: Создать libs/
каталог в вашем проекте
Шаг № 2: Поместите банку в libs/
каталог
Обратите внимание, что вам не нужно связываться с путями сборки или чем-то еще - это теперь обрабатывается автоматически в Eclipse, так же, как это было для сборок командной строки с самого начала.
Эта ошибка означает, что ваш JAR-файл доступен во время компиляции, но не упаковывается в ваш APK, например, Eclipse знает о JAR (например, с помощью ручных настроек пути сборки), но инструменты Android не знают о JAR.