NoClassDefFoundError для кода в библиотеке Java на Android - PullRequest
75 голосов
/ 30 декабря 2011

Я часто сталкиваюсь с ошибкой среди моих пользователей.Приложение вылетает при запуске.Когда предполагается, что MainActivity загружена, виртуальная машина не может найти класс.Я не могу понять, почему.Архитектура приложения такова, что существует общий проект, который используют и моя бесплатная, и профессиональная версия.Не знаю, актуально ли это.Смотрите трассировку стека ниже.Есть мысли?

java.lang.NoClassDefFoundError: com.android.common.MainActivity
at com.mycompany.myapp.Splash.onCreate(Splash.java:23)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.android.common.MainActivity in loader     dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.android.pro-1.apk]

Редактировать: Спасибо за комментарий ниже, Ричард.Теперь я изменил com.android.Splash на что-то другое.Во всяком случае, это было не настоящее имя класса.Мой плохой ...!

Ответы [ 24 ]

2 голосов
/ 27 июня 2015

Я встретил NoClassDefFoundError для класса, который существует в моем проекте (не класс библиотеки). Класс существует, но я получил NoClassDefFoundError. В моем случае проблема была в поддержке мультидекса. Проблема и решение здесь: Android Multidex и библиотеки поддержки

Вы получаете эту ошибку для версий Android ниже 5.0.

2 голосов
/ 05 мая 2016

Вкл. Android Studio:

1) Добавить multiDexEnabled = true в конфигурацию по умолчанию

2) Добавить компиляцию com.android.support: multidex: 1.0.0 в ваших зависимостях

3) Application classрасширить MultiDexApplication вместо Application

1 голос
/ 25 июня 2013

Другая идея.Например, у вас есть класс, производный от «android.support.v4.app.Fragment».

Однако вы допустили ошибку и унаследовали ее от «android.app.Fragment».Тогда у вас будет эта ошибка на устройствах Android 2.

1 голос
/ 30 июля 2013

Я только что разобрался с этой ошибкой.

Просто убедитесь, что файл jar библиотеки содержит скомпилированный класс R в пакете android.support.v7.appcompat, и скопируйте все остальные в appcompat v7.Поддержка "проекта" в папке ANDROID_SDK_HOME / extras / android / support / v7 / appcompat.

Я использую Netbeans с плагином Android, и это решило мою проблему.

1 голос
/ 10 декабря 2013

Я предполагаю, что вы не указываете цель javac при создании общей библиотеки, поэтому javac автоматически использует последнюю доступную цель, которая, вероятно, составляет 1,7 (Java7) или 1,8 (Java8).

Уже говорилось, что

Android требуется уровень соответствия компилятора 5.0 или 6.0

dx инструментов сборки Android <19.0.0 не может преобразовать байт-код Java7 (или выше) в байт-код Dalvik. </strong>

Так что или используйте версию инструментов сборки> = 19.0.0 или используйте javac с -target 6 , изменив, например, свой муравей build.xml следующим образом:

<javac
srcdir="src/"
destdir="build/"
target="6"
/>
0 голосов
/ 14 октября 2016

Решения:

  1. Элемент списка
  2. Проверка порядка экспорта
  3. Включить Multi Dex
  4. Проверка уровня API представлений в макете.Я столкнулся с той же проблемой с searchView.У меня есть проверка уровня API при добавлении searchview, но я добавил реализации SearchView.OnQueryTextListener в файл класса.
0 голосов
/ 12 марта 2013

Я исправил эту проблему, добавив путь к проекту библиотеки в project.propertied вручную. некоторые как eclipse не добавили эту запись автоматически вместе с «добавить проект». поэтому точка, в которой приложение пыталось сослаться на любой компонент внутри проекта lib, вылетала.

Вы также можете попробовать то же самое. зависимость приложения в projec.properties, например

android.library.reference.1 = .... \ андроид-SDKs \ Extras \ Google \ google_play_services \ libproject / Google-плей-services_lib

и беги.

0 голосов
/ 30 декабря 2011

1) В файле манифеста укажите название вашей деятельности и действия для нее и также категория. 2) В своей деятельности упомяните свой начальный контент-просмотр. и упомяните ваши идентификаторы в действии.

0 голосов
/ 25 марта 2015

Попробуйте перейти к

  • Проект правой кнопкой мыши
  • Путь сборки Java
  • Источник
  • правая сторона -> кнопка Добавить папку
  • выбранная папка libs и OK

Надеюсь, это поможет.

0 голосов
/ 18 ноября 2014

Активность снова добавлена ​​в манифест. Я попытался в моем манифесте, затем приложение заработало.

 <activity
        android:name="com.xxx.xxx.MainActivity"
...