Как работают многоразовые библиотеки Android (разработка, развертывание и т. Д.) - PullRequest
2 голосов
/ 28 мая 2011

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

Справочник по Android просто говорит о том, как настроить проект Eclipse и проект Ant. Я использую Maven и IntelliJ. И я бы подумал, как их настроить, если бы смог найти подходящее описание того, как все части работают вместе.

Так что мне интересно, хочет ли кто-нибудь сделать выбор и попытаться объяснить это. И вот некоторые из моих открытых вопросов.

Допустим, у меня есть проект AndroidApp, который имеет AndroidManifest.xml с пакетом app.foo и производит AndroidApp.apk.

У меня также есть проект AndroidLib с пакетом app.bar. Что мне нужно в AndroidManifest.xml для AndroidLib? Достаточно ли просто объявить пакет или должно быть что-то еще?

Теперь я хочу иметь ресурсы в обоих и ссылаться на ресурсы в AndroidLib из AndroidApp. Мне просто позвонить lib.bar.R? Некоторые сообщения предполагают, что не будет никаких конфликтов идентификаторов. Правда или ложь?

Что такое доставляемый артефакт для AndroidLib? Это тоже apk? Как мне развернуть оба? Или, что более важно, я могу создать один apk, который будет включать AndroidApp и AndroidLib?

Как проекты связаны друг с другом в среде разработки? Например, в IntelliJ я пытался просто включить модуль с AndroidLib в AndroidApp, но он просто скомпилировал ресурсы в AndroidApp. (Возможно я пропустил uses-libary). Если бы я использовал инструменты javac и Android, какая была бы последовательность?

Что-нибудь еще стоит знать?

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

Ответы [ 3 ]

5 голосов
/ 28 мая 2011

Я написал подробный пост об этом: Приложение для Android, библиотеки Android и библиотеки Jar .

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

ant debug -d

в проекте, который использует библиотеку Android (или библиотеки Android).

Это даст вам все командные строки, которые ant запускает для создания R.java файлов, компиляции кода и упаковки окончательного файла .apk.Это в основном лучшая ссылка, которую вы можете найти прямо сейчас.Обратите внимание, что система сборки Android развивается, и вам необходимо синхронизировать систему сборки с исходной.

1 голос
/ 28 мая 2011

Хорошо, я не эксперт в этом, но это мои мысли (которые могут быть неправильными):

Насколько я могу сказать, строго говоря, в Android нет такой вещи, как "Библиотеки". Есть в основном три варианта:

  1. Пусть проект "Lib" будет "нормальным" Java-проектом и добавит этот проект в путь сборки проекта "App". В этом случае «Lib» может содержать только код Java, который компилируется и обычно добавляется в APK «App». Поскольку приложение, работающее на устройстве, не может получить доступ к коду другого приложения, если вы хотите повторно использовать «Lib» во втором приложении Android, ему нужно будет включить копию (скомпилированного) кода lib в свой APK. Это также означает, что библиотека не может содержать никаких ресурсов, потому что они должны находиться в соответствующих каталогах в проекте «App».

  2. Аналогично # 1, но у вас есть код Lib, скомпилированный в обычную библиотеку Java (jar), которую вы копируете / компилируете в каталог lib проекта "App". Кроме этого, он будет иметь те же ограничения, что и # 1, так что любое приложение, которое вы используете, должно будет включать копию JAR в свой APK.

  3. Пусть проект "Lib" будет полноценным автономным приложением и определит API с помощью пользовательских Intents, чтобы все коммуникации между "Lib" и "App" проходили через них. Для этого требуется, чтобы «Lib» и «App» распространялись отдельно, поэтому пользователю потребуется вручную установить оба варианта. Однако это позволяет создавать дополнительные приложения, которые могут повторно использовать функциональные возможности приложения "Lib" без включения дублирующего кода.

0 голосов
/ 30 мая 2011

Я недавно объединился в поддержку проектов библиотеки в проекте примеров для плагина Maven Android. Просто посмотрите, как все это работает, проверив, как они настроены.

https://github.com/jayway/maven-android-plugin-samples

...