2012-04-14 2 views
0

Я только начал в развитии Android, а также использовать Netbeans с NBAndroid и SDK 17.Sharing Java библиотека Apps Android

Я хотел бы использовать один и тот же исходный код Java в моем Java и Android приложения.

http://developer.android.com/guide/developing/projects/projects-eclipse.html говорит, как это сделать в Eclipse (хотя это отрывочно относится к соединению .JAR), но я не могу заставить его работать в NB.

Основываясь на этой ссылке, я понимаю, что правильная настройка для Android-приложения - это проект приложения для Android, который ссылается на проект библиотеки Android, который, в свою очередь, ссылается на библиотеку .JAR, созданную проектом Java Library. Тогда я мог бы также иметь проект Java-приложения, ссылающийся на тот же проект библиотеки Java.

Итак, я создал эту структуру проекта ... У меня есть проект AndroidApp, который является основной активностью HelloAndroid в пакете com.ex. Этот проект включает проект библиотеки AndroidLib в папке «Библиотеки». У меня также есть файл LibClass.java, который определяет простой класс LibClass, который имеет одну функцию getText(), которая просто возвращает строку, которая будет отображаться. MainActivity в AndroidApp вызывает это, чтобы вывести String.

Когда я положил LibClass.java прямо в проект AndroidLib, все в порядке.

Но я хочу, чтобы поделиться исходным кодом с Java.

Поэтому я хочу переместить LibClass.java в библиотеку JavaLib, чей файл .JAR включен в проект AndroidLib. Однако, когда я это пробовал, я получил ошибку в классе MainActivity, жалуясь, что не может найти LibClass. В окне «Проекты» я вижу LibClass.class внутри пакета com.ex в JavaLib.jar в папке «Библиотеки» проекта AndroidLib. И AndroidLib отображается в папке «Библиотеки» проекта AndroidApp, но там нет никаких пакетов или другого содержимого.

Таким образом, я чувствую, что я всего в одном шаге от выполнения этой работы. Нужно ли мне что-то делать с тем или иным файлом AndroidManifest? Или что-то делать с файлами build.xml? Или я вообще ошибаюсь?

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

ответ

0

Если я правильно понимаю вашу ситуацию, вы пытаетесь использовать пользовательскую java-библиотеку для ваших приложений для Android и Java.

Для этого сценария вы можете сначала создать библиотеку java. Вместо добавления java-библиотеки jar в качестве библиотеки Android вы можете отбросить банку непосредственно в папку libs проекта android и добавить ее в путь сборки проекта Android.

Если вы используете скрипты ANT для создания java-библиотеки jar, вы можете рассмотреть возможность добавления исходных файлов также как часть jar. Это поможет вам получить помощь по коду при разработке части Android. Но эта часть является чисто необязательной.

+0

Я ничего не знаю о сценариях ANT, но понимаю, что они где-то за Netbeans. Если я поместил JAR-библиотеку непосредственно в проект Android, он скомпилирует OK, но не будет запущен. Я подозреваю, что это связано с тем, что JAR каким-то образом зависит от платформы JDK, а не от платформы Android. Кажется, что нет возможности добавить платформу Android в проект, за исключением того, что вы создаете его как проект Android. – user998303

0

Проблема в том, что платформа Java в Android отличается от платформы JDK.

В частности, библиотека .JAR не может ссылаться на все, что не запрещено на платформе Android. Примером вещей, на которые вы не можете ссылаться, является java.awt. * (За исключением того, что вы можете иметь java.awt.fonts).

Существует также разница между JDK String и Android String - Android не реализует метод isEmpty().

+0

Эта строка «проблема» вызвана тем, что вы ориентируетесь на старую версию android, метод 'isEmpty()' был введен в Android Api 9, Gingerbread и JDK 6. При настройке на эти старые версии вы используете jdk 5 – brunodles

0

Я пытаюсь что-то подобное; У меня есть проекты Java EE, построенные с использованием Eclipse, и я пытаюсь использовать часть этого кода из своих проектов Android. Это должно дать мне общую кодовую базу, а не путаницу внешних строк SVN, которые мне пришлось перенести раньше.

Вместо того, чтобы создавать файлы JAR, я обнаружил, что работа с источником и зданием для платформы работает лучше всего (ну, она работает, но у меня есть проблема с ней в данный момент). Итак, что я делаю:

c:\MySvnFolderStructure\MyJavaProjectFolder\src\  (and then all the source under that) 
c:\MySvnFolderStructure\MyJavaProjectFolder\android\ (and all the Eclipse Android project gubbins) 
c:\MySvnFolderStructure\MyJavaProjectFolder\jee\  (and all the Eclipse JEE project gubbins) 

андроида и Java EE проекты не имеют свои собственные папки в исходные тексты, они оба ссылку в папку с исходниками их родительской папки. Это означает, что каждая из реализаций Java создает свою собственную версию байтового кода из источника и использует собственные внешние библиотеки (например, Apache HTTP).

Естественно, они не могут делиться такими вещами, как awt (как упоминалось в другом сообщении), но есть много вещей, которые перекрещиваются, особенно если это основные классы Java, которые используются.

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

Кроме того, см. this post about relative paths в Eclipse, что означает, что папки могут быть извлечены в разные места на разных компьютерах (например, мы все делаем с нашими контрольными контрольными версиями) и по-прежнему будем совместно использовать.

+0

Да, это то, что я хотел сделать. Я неправильно понял, как Java связывает/загружает JAR. По какой-то конкретной причине у меня возникла идея, что Java связана/загружена как C. Неразрешенные ссылки не будут препятствовать выполнению, если они не были разыменованы. Поэтому я мог бы импортировать awt. *, Но до тех пор, пока я не использовал awt. * Объекты в версии для Android все было бы хорошо. Это предположение оказывается очень неправильным. Спасибо за ваш полезный ответ. – user998303

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