Почему я получаю NoClassDefFoundError на Android после добавления JAR через Eclipse?
Я пытаюсь включить ZXing в свое приложение для Android.
Поскольку ZXing предоставляет только исходный код Java, я сам создал файл jar из него.
Затем я добавил JAR, перетащив его в папку libs моего проекта Android в Eclipse.
Исследователь проекта выглядит так
Путь сборки выглядит следующим образом
В моем собственном коде я пытаюсь создать экземпляр класса из этого JAR:
IntentIntegratorV30 integrator = new IntentIntegratorV30(this);
Нет ошибок во время компиляции.
Но я получаю следующую ошибку во время выполнения на реальном устройстве:
06-09 21:06:32.050: E/AndroidRuntime(1656): java.lang.NoClassDefFoundError: com.google.zxing.integration.android.IntentIntegratorV30
Полный LogCat:
06-09 21:06:32.010: I/ApplicationPackageManager(1656): cscCountry is not German : XEO
06-09 21:06:32.010: I/dalvikvm(1656): Could not find method com.google.zxing.integration.android.IntentIntegratorV30.parseActivityResult, referenced from method de.fzi.guideme.fragments.scanner.ScannerFragment.onActivityResult
06-09 21:06:32.010: W/dalvikvm(1656): VFY: unable to resolve static method 181: Lcom/google/zxing/integration/android/IntentIntegratorV30;.parseActivityResult (IILandroid/content/Intent;)Lcom/google/zxing/integration/android/IntentResult;
06-09 21:06:32.010: D/dalvikvm(1656): VFY: replacing opcode 0x71 at 0x0003
06-09 21:06:32.020: E/dalvikvm(1656): Could not find class 'com.google.zxing.integration.android.IntentIntegratorV30', referenced from method de.fzi.guideme.fragments.scanner.ScannerFragment.onCreateView
06-09 21:06:32.020: W/dalvikvm(1656): VFY: unable to resolve new-instance 67 (Lcom/google/zxing/integration/android/IntentIntegratorV30;) in Lde/fzi/guideme/fragments/scanner/ScannerFragment;
06-09 21:06:32.020: D/dalvikvm(1656): VFY: replacing opcode 0x22 at 0x002d
06-09 21:06:32.020: I/GuideMe(1656): Fragment: class de.fzi.guideme.fragments.scanner.ScannerFragment, manual: null, function: null, step: null
06-09 21:06:32.040: D/AndroidRuntime(1656): Shutting down VM
06-09 21:06:32.040: W/dalvikvm(1656): threadid=1: thread exiting with uncaught exception (group=0x401d2760)
06-09 21:06:32.050: E/AndroidRuntime(1656): FATAL EXCEPTION: main
06-09 21:06:32.050: E/AndroidRuntime(1656): java.lang.NoClassDefFoundError: com.google.zxing.integration.android.IntentIntegratorV30
06-09 21:06:32.050: E/AndroidRuntime(1656): at de.fzi.guideme.fragments.scanner.ScannerFragment.onCreateView(ScannerFragment.java:47)
06-09 21:06:32.050: E/AndroidRuntime(1656): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:735)
06-09 21:06:32.050: E/AndroidRuntime(1656): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:926)
06-09 21:06:32.050: E/AndroidRuntime(1656): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:909)
06-09 21:06:32.050: E/AndroidRuntime(1656): at android.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:1584)
06-09 21:06:32.050: E/AndroidRuntime(1656): at android.app.Activity.performStart(Activity.java:4377)
06-09 21:06:32.050: E/AndroidRuntime(1656): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1724)
06-09 21:06:32.050: E/AndroidRuntime(1656): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1767)
06-09 21:06:32.050: E/AndroidRuntime(1656): at android.app.ActivityThread.access$1500(ActivityThread.java:122)
06-09 21:06:32.050: E/AndroidRuntime(1656): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1005)
06-09 21:06:32.050: E/AndroidRuntime(1656): at android.os.Handler.dispatchMessage(Handler.java:99)
06-09 21:06:32.050: E/AndroidRuntime(1656): at android.os.Looper.loop(Looper.java:132)
06-09 21:06:32.050: E/AndroidRuntime(1656): at android.app.ActivityThread.main(ActivityThread.java:4028)
06-09 21:06:32.050: E/AndroidRuntime(1656): at java.lang.reflect.Method.invokeNative(Native Method)
06-09 21:06:32.050: E/AndroidRuntime(1656): at java.lang.reflect.Method.invoke(Method.java:491)
06-09 21:06:32.050: E/AndroidRuntime(1656): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
06-09 21:06:32.050: E/AndroidRuntime(1656): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
06-09 21:06:32.050: E/AndroidRuntime(1656): at dalvik.system.NativeStart.main(Native Method)
Я использую Eclipse 3.7.2 с Android SDK Tools Rev. 19 и Samsung Galaxy Tab 10.1 под управлением Android 3.1.
Похоже, что JAR не включен в файл APK. Любые предложения о том, как решить эту проблему?
Изменить: Отвечая на мой собственный вопрос (в результате обсуждения в комментариях). JAR, который я пытался включить, должен быть как-то ошибочным. Правильное построение JAR будет обсуждаться в другом месте.
4 ответа
Это убивало меня вчера. У меня тоже не было ошибок при сборке, но ошибки работали. Я думаю, что это как-то связано с тем, как Android SDK компилирует путь сборки. Я наконец повторил эти шаги и перестал получать ошибку:
- Создайте в корневом каталоге вашего проекта Android папку с именем libs.
- Добавьте банку в эту папку.
- Щелкните правой кнопкой мыши по банке и нажмите, чтобы добавить путь сборки.
- Очистите свой проект.
- Построить проект.
- Запустить.
Щелкните правой кнопкой мыши на вашем проекте> свойства-> Путь сборки Java-> Порядок и экспорт-> проверьте ZXing.jar
затем очистите проект и соберите его снова
Android Studio не выполняет надлежащую очистку и сборку.
Вы должны следовать инструкциям Анны Биллстрем со следующим предостережением:
- Откройте вашу командную строку.
- Перейдите к корню вашего проекта.
- казнить
./gradle clean
- Вернитесь в Android Studio и запустите / отладьте ваш проект.
- ?
- Прибыль.
У меня тоже была эта ошибка.
Оказывается, я экспортировал банку из внешнего проекта. Однако, поскольку Eclipse не знал, что я собираюсь использовать его для своего проекта Android, он автоматически установил уровень компилятора на 1,7.
Android поддерживает только 1.6, поэтому решение было в проекте библиотеки перед экспортом:
Щелкните правой кнопкой мыши, Properties
-> Java compiler
-> Compiler compilance level
-> 1.6