NoClassDefFoundError происходит во время выполнения, когда я использую несколько пакетов Java в одном проекте Android - PullRequest
3 голосов
/ 27 ноября 2010

Я сделал следующее:

  1. Создайте рабочий проект Android (не библиотечный или тестовый проект) в Eclipse. У него есть один пакет с именем X с активностью X.A.
  2. Создайте новый Java-пакет Y в вышеупомянутом проекте с хотя бы одним классом Y.C.
  3. Позвоните Y.C изнутри X.A (то есть вызовите что-то в новом пакете из исходного пакета, который ранее работал).
  4. Сборка и запуск проекта Android.

Он прекрасно собирается, но выдает NoClassDefFoundError в первой строке, используя Y.C, говоря, что не может найти Y.C. Когда я Refactor -> Переместить Y.C в пакет X (так что теперь это X.C), исключение времени выполнения больше не выдается. Что не так?

Неясный намек: я читал, что подобные проблемы могут возникать, когда пути к классам во время сборки и во время выполнения каким-то образом не синхронизируются, но я пока не нашел, как устранить неполадки или устранить проблему.

1 Ответ

2 голосов
/ 27 ноября 2010

В вашем AndroidManifest.xml при определении ваших действий вы должны установить полное имя класса для действий, находящихся в подпакете или даже в другом пакете.

Полное имя класса будет похоже на com.example.my.cool.app.Activity. В качестве альтернативы, когда вы работаете только с подпакетами, вы можете установить его так: android:name=".app1.AnotherActivity", когда ваш базовый пакет выглядит так

...