2010-12-31 4 views
16

У меня есть приложение для Android, которое использует другой проект в качестве ссылки на проект. я перешел в параметры приложения, построил путь, а затем выбрал проект в ссылках на проекты.Внешняя ссылка на проект в android

все строит и развертывает отлично, но когда я пытаюсь запустить приложение и создать экземпляр класса в этом проекте, я получаю java.lang.NoClassDefFoundError errrrrr.

Я не эксперт по проекту java, поэтому я предполагаю, что я поднял что-то простое. есть идеи?

+1

с некоторыми исследованиями, я считаю, что я должен отмечать проекты, на которые ссылаются, как «Является библиотекой» на вкладке Android в вариантах проекта, но каждый раз, когда я нажимаю на нее, это не сохраняется. если я снова открою параметры, он не будет проверен. –

+0

ОК, я проверил все дерево (TFS + eclipse, похоже, сложно) и, наконец, получил библиотеку Is, но все равно получает NoClassDefFoundError. :( –

ответ

0

Возможно, вам потребуется включить JAR скомпилированного источника вашего зависимого проекта вместе с родителем. Android должен будет иметь файлы классов, чтобы он мог перекомпилировать их в байт-код Dalvik, а затем сделать их доступными в classpath.

This video может Вам помочь, взято с this question.

+1

Проблема с добавлением файла .jar заключается в том, что он не обновляется автоматически при изменении проекта с ссылкой. Проект, на который ссылается, находится в активной разработке, и было бы ужасной болью в заднице, чтобы экспортировать его в файл jar каждый раз, когда я делаю изменения. Я думал, что это была цель ссылки на проект, а не на jar. Visual Studio справляется с этим с легкостью. –

+1

Затем введите в свои рабочие процессы правильную систему сборки, которая поддерживает разрешение зависимостей, такое как Maven, поэтому включенная JAR обновляется каждый раз при создании –

2

У меня такие же проблемы. У меня есть старый проект, который я использую в качестве пространства имен для некоторых математических и трехмерных функций. Я хотел бы поделиться этим между Android и другим кодом Java. Беда в том, что проклятая вещь падает, как только я запускаю даже тип POD из моей библиотеки. Мой внешний проект не создает файл jar; он используется только как пространство имен. Я предполагаю, что существует некоторая проблема со связями во время выполнения, которая вызывает это, но андроид, затмение и java все вместе дают мне ничего общего.

+1

С тех пор мне удалось заставить работать мой код, обменявшись кодом между существующими проектами. Android явно не любит ссылаться на другой проект извне, но если вы добрались до свойств проекта и связали исходный код своей библиотеки, он может делать все, что нужно для внутренних gubbins, чтобы заставить ваш код работать. -> properties-> Java Build Path-> source source ... и затем добавьте свою библиотеку из ее корневого каталога. – Luther

+0

Тим, когда ты это сделал, это испортило ваши пакеты? Я сделал это, и теперь он ожидает, что имена моих пакетов из ссылочных библиотек будут src.com ... а не ком ... потому что это обеспечивает соблюдение соглашения о папке/пакете. Я попробовал просмотр в папку/src и связал это, но он говорит, что «папка уже является исходной папкой», хотя я удалил все ссылки на этот проект. –

+0

Я не сталкивался с этой проблемой, хотя у меня были некоторые проблемы с некоторыми конфликтами конфигурационных файлов из нескольких включенных исходных каталогов, которые я не мог решить, независимо от того, что я пытался (есть возможность игнорировать некоторые файлы, которые не кажутся работать вообще). Мои проекты следуют за контентом пакета/папки внутри, поэтому, вероятно, я не вижу вашей проблемы. Несмотря на то, что Eclipse отлично работает, как только все настроено, начальная фаза установки может стать настоящей болью! – Luther

10

Существует несколько способов решения этой проблемы. Вы можете проверить свою библиотеку как библиотеку Android: Щелкните правой кнопкой мыши по проекту/свойствам/вкладке Android - «это библиотека».

А затем в вашем основном проекте: Щелкните правой кнопкой мыши по проекту/свойствам/вкладке Android -> Добавить (и добавить проект библиотеки).

Однако ваша библиотека должна быть сначала создана как проект Eclipse Android (так что раздел «Android» будет доступен в свойствах проекта).

Я сделал это, и у меня больше нет NoClassDefFoundError. Тем не менее это решение хорошо для раннего развития. Если библиотека стабильная, вы должны сделать банку и включить ее в основной проект (и удалить ссылки на Android-библиотеку).

0

Если ваш внешний проект зависит от других банок в своем пути к классам, убедитесь, что они экспортированы и нажмите их в верхней части списка экспорта в Eclipse. У меня была такая же ошибка NoClassDef, которая была брошена на класс, который был в проекте, но реальная проблема заключалась в том, что порядок экспорта банок зависел от него. Работала хорошо после того, как я исправил это.

23

На Eclipse перейдите к «Android-Project» -> Свойства -> Путь сборки Java -> Заказ и эксперт, затем выберите проект java, который вы хотите импортировать, и переместите его поверх всех записей.

+2

Обратите внимание, что «выберите проект Java» также означает, чтобы активировать этот флажок. – sjngm

+0

Эта странная вещь наконец-то сработала. Было важно перенести проект в начало списка. – JaakL

+0

:) Сэкономить время на этот комментарий. Такой простой надзор, спасибо! –

1

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

Он также не хочет иметь баночки на пути сборки, вам нужно экспортировать проекты, которые вы хотите включить в проект Android, и поместить их в папку/libs. Эта папка обычно создается, когда проект создается, если не просто сделать это самостоятельно, он входит в корень вашего проекта. Android автоматически подберет их, если они там.

Также очень важно, если ваш внешний проект также зависит от других проектов, вам также необходимо экспортировать эти другие проекты, а также разместить банки в папке/libs проекта Android.

Это относится к новейшей версии Android от 22/07/2012. Он может не применяться, если вы используете более старую версию Android.

2

У меня такая же проблема. Небольшие исследования привели меня к Проект библиотеки, упомянутый также в этом посте. Но помните об этом:

«Вы также можете обозначить проект Android как проект библиотеки, который позволяет ему делиться с другими проектами, которые зависят от него. Когда проект Android обозначается как проект библиотеки, он не может быть на устройство установлено. "

Вы можете найти более подробную информацию:

http://developer.android.com/tools/projects/projects-eclipse.html

, а также

https://groups.google.com/forum/?fromgroups#!topic/android-developers/C0pddRNGZVs

+0

Добавление библиотеки с вкладкой Android сделало трюк. Это такая боль, что на этой странице так много рецептов для той же самой вещи – Eric

0

Контекст: Разработка веб-сайта JSP, который взаимодействует с несколькими устройствами Android по всему Интернету. Требуется общий класс.

шаги:

Для Java проект, содержащий ваши общие классы:

1) (ничего не делать)

Для вашего проекта Android App:

1) Проект свойства-> Java Build Path-> Project tab-> Добавить ...

2) Свойства проекта-> Ссылки на проекты-> установите соответствующий флажок

3) [Как говорит Матфей выше (и это было именно то, что мне было нужно)] «Android-Project» -> Свойства -> Путь сборки Java -> Заказ и эксперт, затем выберите проект java, который вы хотите импортировать, и переместите его поверх всех записей.

Для вашего JSP-сайт проекта:

1) Проект свойства-> Java Build Path-> Проекты> Вкладка Добавить ...

2) Проект свойства-> Проект References-> набор регистрация по прибытии box соответственно

Смежные вопросы