Как включить проект Java в проект Android?
Я использую Eclipse для разработки настольной игры для Android.
Я разработал интерфейс в проекте Android.
С другой стороны, я разработал AI в регулярном проекте Java, потому что я хотел иметь возможность протестировать его без ограничений на эмулятор Android (я не нашел другого способа запустить код, используя мой Windows JVM).
Теперь наступает время, когда я хочу "присоединиться" к обоим проектам (которые работают нормально независимо), то есть использовать классы Java Java из пользовательского интерфейса.
Вот что я пробовал:
В моем проекте Android Properties > Projects References я пометил проект Java.
Это позволяет мне без ошибок запускать проект Android (который создает экземпляр объекта AI).
Но он не работает во время выполнения с этой ошибкой:
Could not find class 'my.package.AI', referenced from method my.otherpackage.UI.onStart
Каким будет правильный способ включить проект AI Java в мой Android-проект?
(NB: Я все еще хочу иметь возможность разрабатывать и тестировать AI как обычное Java-приложение, поэтому я думаю, что использование фляги или копирование всех источников в проект Android не соответствовало бы моим потребностям)
EDIT:
Я надеялся, что новый ADT v17 решит проблему, но этого не произошло. Я пробовал практически каждый вариант, чтобы включить проект в свой проект Android:
- Добавление или связывание исходной папки
- Добавление проекта (вкладка "Путь сборки Java" > "Проекты" )
- Добавление папки класса или библиотеки (вкладка "Путь Java" > вкладка "Библиотека" )
- Включение всех ранее импортированных проектов/библиотек в качестве экспортированных
Единственный способ, который позволяет компилировать и запускать без ошибок, - это добавить JAR проекта Java к пути создания проекта Android.
Ответы
Ответ 1
Референции проектов добавляют только исходный код зависимого проекта (ваш проект AI) в качестве мягкой (возможно, слабой, более точной слова) ссылки, ваш проект AI не добавлен в ваш путь к проекту Android Project. поэтому фактический файл ai.jar не экспортируется в окончательный apk, когда Eclipse создает ваше приложение.
Вы должны добавить проект AI в путь построения проекта Android:
- Щелкните правой кнопкой мыши на проекте Android, выберите "Путь сборки - настройка пути сборки" на вкладке "Проекты" (требуемые проекты на пути сборки), добавьте здесь проект AI.
- Затем в закладке "Заказ и экспорт" (порядок пути сборки и экспортированные записи) отметьте новый добавленный проект AI в списке.
Шаг 2, вероятно, необязателен, это должно добавить проект AI в качестве ссылки в проекте Android и экспортировать файл ai.jar в final.apk, когда Eclipse создаст ваш проект Android.
Обновление с ADT 17.0.0:
Android Dev Team просто выпустит SDK r17 с ADT 17.0.0, который утверждает, что теперь правильно обрабатывает эти варианты использования:
Изменения в Eclipse
Контейнер динамических классов классов, называемый "Библиотечные проекты", был переименован в "Android Dependencies", поскольку теперь он содержит больше, чем только проекты библиотеки.
Теперь контейнер будет также заполнен проектами только для Java, на которые ссылаются проекты библиотек. Если эти Java-проекты также ссылаются на другие Java-проекты и/или файлы jar, они будут добавляться автоматически (также поддерживаются файлы jar, на которые ссылаются пользовательские библиотеки).
Важно: это происходит только в том случае, если ссылки заданы для экспорта в проект ссылки. Обратите внимание, что это не значение по умолчанию при добавлении проекта или файла jar в путь сборки проекта. Библиотечные проекты (и содержимое их файлов libs/*. Jar) всегда экспортируются. Это изменение влияет только на проекты только для Java и их собственные файлы jar.
Опять же, дубликаты (оба проекта и файлы jar) обнаруживаются и удаляются.
Подробнее в этой ссылке.
Ответ 2
Изменить: После долгих испытаний, чтения и поиска моего решения. Проблема заключается в том, что вы не можете ссылаться на другой проект из проекта Android, хотя он отлично подходит для обычного Java-приложения.
Обходной путь для меня (Windows с файловой системой NTFS):
В командной строке (права администратора) создайте ссылку символической папки, используя команду mklink /D
, указывающую на папки исходного проекта, и обновите ее в Eclipse по мере необходимости.
Очевидным ограничением является то, что вы не можете использовать те же имена пакетов в исходном проекте и целевом проекте, а затем возникает проблема с libs в общем проекте.
Пример:
cd \java\workspace\AndroidProject\src\your\package
mklink /D common c:\java\workspace\CommonProject\src\your\package\common
Уточнение: Вы можете ссылаться на другой проект из проекта Android, чтобы его скомпилировать, однако при запуске ссылочные классы из включенного проекта не помещаются в apk classes.dex
(проверяется с помощью dex decompiler).
Ответ 3
Использование ADT 21.0.0 64 бит на Windows 7 64bit. Я попытался добавить проект для создания пути. Отметен в заказе и экспорте, сыграл с заказом. Я прочитал официальное решение , подробное объяснение этого решения, экспортированный как JAR, добавленный в libs. Не работал, в то время как источник был без ошибок. Читайте в комментариях, что решение не работает для всех.
Ему надоело и попробовало простое, но несколько более грязное решение: связал источник проекта Java с проектом Android. Это сделал трюк. Надеюсь, что это тоже поможет другим.
Ответ 4
Не добавляйте его в область ссылок проекта, а затем переходите в панель Android (в свойствах проекта), прокрутите вниз донизу и добавьте его в Библиотеки.
Это иногда работает, но иногда вызывает странные проблемы Eclipse (не уверен, почему), и в этом случае копирование jar непосредственно в проект, кажется, работает лучше всего.