Указание зависимостей Android проекта (в Eclipse)

голоса
21

У меня есть два Android проектов, а «проект библиотеки», содержащий пользовательский макет, и «проект приложения», содержащее приложение, которое использует макет.

Все, кажется, строить и выполнять хорошо, за исключением того, что визуальный редактор макета бросает ClassNotFoundException (который я предполагаю, это ошибка в плагине), но когда я пытаюсь начать использовать атрибуты я определил для пользовательского макета в XML-я больше не могу строить. То есть; это работает:

<?xml version=1.0 encoding=utf-8?>
<se.fnord.android.layout.PredicateLayout
    xmlns:android=http://schemas.android.com/apk/res/android
    android:layout_width=fill_parent 
    android:layout_height=fill_parent> 
  <TextView
    android:layout_width=wrap_content 
    android:layout_height=wrap_content 
    android:text=asdfasdf
    />
</se.fnord.android.layout.PredicateLayout>

В то время как это не делает:

<?xml version=1.0 encoding=utf-8?>
<se.fnord.android.layout.PredicateLayout
    xmlns:android=http://schemas.android.com/apk/res/android
    xmlns:fnord=http://schemas.android.com/apk/res/se.fnord.android
    android:layout_width=fill_parent 
    android:layout_height=fill_parent> 
  <TextView
    fnord:layout_horizontalSpacing=1px
    android:layout_width=wrap_content 
    android:layout_height=wrap_content 
    android:text=asdfasdf
    />
</se.fnord.android.layout.PredicateLayout>

Сборки завершается с сообщением от AAPT:

ERROR Нет идентификатор ресурса найдено для атрибута «layout_horizontalSpacing» в пакете «не se.fnord.android»

Идентификатор ресурса существует в R-файл и attrs.xml содержится проект библиотеки, и если я ставлю код макета и ресурсы непосредственно в проекте приложения все работает отлично. Атрибут layout_horizontalSpacing (и layout_verticalSpacing) является пользовательским атрибутом, используемым в классе PredicateLayout.LayoutParam указать расстояние до следующего виджета.

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

Итак, что же мне нужно сделать для ссылки в XML-файл для работы?

Я не знаю, если это уместно, но проявляется в «библиотеке» выглядит следующим образом:

<?xml version=1.0 encoding=utf-8?>
<manifest xmlns:android=http://schemas.android.com/apk/res/android
      package=se.fnord.android
      android:versionCode=1 android:versionName=1.0.0>
</manifest>

«Приложение» манифест нравится:

<?xml version=1.0 encoding=utf-8?>
<manifest xmlns:android=http://schemas.android.com/apk/res/android
      package=se.fnord.appname
      android:versionCode=1 android:versionName=1.0.0>
    <application android:icon=@drawable/icon android:label=@string/app_name>
        <activity android:name=.AppName
                  android:label=@string/app_name>
            <intent-filter>
                <action android:name=android.intent.action.MAIN />
                <category android:name=android.intent.category.LAUNCHER />
            </intent-filter>
        </activity>
    </application>
</manifest>

(The «PredicateLayout», кстати, является очищенной до версии этого ).

Задан 21/02/2009 в 20:11
источник пользователем
На других языках...                            


5 ответов

голоса
19

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

Затем в мае 2010 года, Android введен механизм библиотеки проекта. Проект библиотеки структурирован очень похож на обычный проект Android, но вместо того, чтобы использовать для получения APK, он служит только предоставить код и ресурсы для других проектов. Как и обычный проект, проект библиотеки обычно содержит в исходные тексты и Рез папки вместе с файлом AndroidManifest.xml; Однако манифест должен быть в основном пусто, за исключением явного элемента и атрибут пакета (больше не верно - теперь вы можете объявить деятельности и другие компоненты в манифесте вашей библиотеки проект). Кроме того, файл project.properties для проекта библиотеки должен содержать свойство:

"android.library=true"

Для того, чтобы сделать ссылку из обычного (APK-продуцирующих) проекта к проекту библиотеки, вам нужно добавить строку «android.library.reference.N» в файл project.properties обычного проекта. Например, если мой основной проект хочет указать на два проекта библиотеки, подаст project.properties для основного проекта будет включать в себя следующее:

android.library.reference.1=../LibraryA
android.library.reference.2=../../LibraryB

где ../ и ../../ являются соответствующими путями от основного проекта к проектам библиотеки (это просто пример). Обратите внимание, этот список ссылок является 1 на основе и не должно содержать пробелов или дубликаты. Google хорошо знает, что это не идеальная система, но это было разумное решение, которое было совместимо с Ant и Eclipse. Вообще говоря, ваш IDE будет пытаться сохранить эти файлы для вас, но иногда вам может понадобиться отредактировать их вручную.

На первые проекты Библиотека не поддерживает следующее:

  1. Библиотечные проекты, указывающие на другие проекты библиотеки
  2. Проекты библиотеки, содержащие файлы aidl
  3. Проекты библиотеки, содержащие папку активов

Однако последующие выпуски SDK решить все эти проблемы.

Для получения более подробной информации о библиотечных проектах см официальную документацию .

Ответил 21/05/2010 d 01:26
источник пользователем

голоса
12

Экспортируйте проект как JAR не правильный путь, чтобы связать проект библиотеки вашего приложения проекта через Properties -> Java Build Path -> Библиотека. Также он не должен связать проект в качестве необходимого проекта через Properties -> Java Build Path -> Projects.

Прежде всего, прочитайте тему Библиотечные проекты на разработчиков Android -> Разработка -> Управление проектами: http://developer.android.com/guide/developing/projects/index.html#LibraryProjects После этого, прочитайте Настройка библиотеки Проект и ссылающегося на темы проекта библиотеки снова на разработчиков Android -> Разработка -> Управление проектами -> Из Затмения С помощью ADT

Итак ... следующие шаги:

  1. Создать свой проект библиотеки нормально, как проект Android;
  2. Комплект «является библиотекой» в свойствах проекта -> Android Создайте свой проект App нормально;
  3. Добавить ссылку на вашу библиотеку в свойствах проекта -> Android -> Добавить.

После этого вы можете использовать все классы, компоненты (виды деятельности, услуги, провайдеры, приемники), ресурсы и т.д.

Напр .: ссылаться на какие-либо ресурсы в макете XML, например, вы должны использовать @mylib: идентификатор / my_id или @mylib: макет / my_lib_layout

Найд .: Если вы используете компоненты вашей библиотеки в приложении проекте, вы должны повторить их в своем приложении манифеста.

Ответил 26/09/2011 d 21:20
источник пользователем

голоса
8

Кроме того, я получил атрибуты работает, но не так, как она должна работать, я думаю.

Вы должны использовать в качестве пространства имен в элементе, который использует пользовательские атрибуты, пространство имен вашего основного приложения, не то, что из проекта библиотеки. Таким образом, в вашем примере, если вы укажете для значения «Xmlns: Fnord» пространство имен вашего приложения проекта, он работает.

Кроме того , при чтении пользовательских атрибутов пользовательского PredicateLayout(Context,AttributeSet)конструктора, необходимо указать пространство имен приложения , а также в вызовах attributes.getAttributeValue().

Какая боль, так что код находится в вашей библиотеке приложение, которое не работает / не должен знать о проекте приложения оно используется. Я работал вокруг, что, имея приложение вызвать статический метод ViewUtil.setAttributeNamespace (appNamespace) в мое приложение в OnCreate (), и пользовательские представления библиотеки использовать это пространство имен для извлечения пользовательских атрибутов. Файл attrs.xml затем может оставаться в проекте библиотеки, а также. Теперь только некрасиво то, что макет XML должен использовать пространство имен приложения на пользовательских представлениях, так что вы не можете поместить эти разметки XML в проекте библиотеки.

Ответил 26/10/2010 d 08:28
источник пользователем

голоса
3

«Экспорт библиотеки в банке» решение»работает только, если ваш проект библиотеки содержит только исходный код. В этом случае вопрос Ора упоминает, что его проект библиотеки содержит щий связанные вещи.

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

Ответил 20/05/2010 d 23:43
источник пользователем

голоса
3

Экспорт проекта библиотеки в качестве JAR и ссылаться на него в «Java Build Path» проект приложения как JAR.

Ответил 18/03/2010 d 07:23
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more