Как создать банку для Android Library Project

Мне нужно создать библиотеку, которую я собираюсь экспортировать клиенту в файл JAR. Есть ли способ создать банку с ресурсами в ней?

У Google AdMob есть такой jar, который включает в себя файл ресурсов, такой как R $ layout.class.Эта страница описывает какой-то способ сделать это, но я не могу точно понять, как я должен импортировать проект библиотеки в приложение, используя метод выше.

Ответы на вопрос(8)

Решение Вопроса

Это самое близкое, что вы можете получить:

Шаг № 1: Создайте обычный проект библиотеки Android и запустите его.

Шаг № 2: Скопируйте этот проект библиотеки Android в другой каталог.

Шаг № 3: Создайте JAR из скомпилированных классов Java из исходного проекта библиотеки Android и поместите этот JAR вlibs/ каталог копии, которую вы сделали в шаге # 2. Вы должны иметь возможность запускать ProGuard на этом JAR вручную, хотя я неЯ попробовал это.

Шаг № 4: Удалить все внутриsrc/ каталог скопированного библиотечного проекта, оставленный позади и пустойsrc/ каталог.

Шаг № 5: Загрузите или распакуйте скопированный проект библиотеки Android.

Это даст вам проект библиотеки Android, подобный проекту Play Services, где ресурсы доступны, а исходный код - нет.

ОБНОВИТЬ: Еще лучший подход в настоящее время состоит в том, чтобы упаковать ваш библиотечный проект как AAR, то есть Android 'родной способ создания повторно используемого артефакта из скомпилированного кода плюс необходимые ресурсы. В настоящее время (июль 2014 года), Gradle для Android, Android Studio иandroid-maven-plugin может создавать и потреблять AAR.

 Hunt17 мар. 2016 г., 09:13
Можем ли мы объединить внешние библиотеки, как,retrofitrealm и т. д. в наш проект библиотеки и распространять
 Mahmoud Abou-Eita01 янв. 2014 г., 11:07
@CommonsWare Используя этот подход, какие ресурсы я должен исключить из мастера экспорта JAR eclipse. В том числе все вызывает проблемы со сборкой. (Дубликаты Drawables и Manifest)
 Pacerier14 нояб. 2014 г., 06:13
@schwiz, если AAR работает, почему страницаdeveloper.android.com/tools/projects/index.html#LibraryProjects государство "вы должны скомпилировать библиотеку косвенно, ссылаясь на библиотеку в зависимом приложении и создавая это приложение "?
 CommonsWare01 янв. 2014 г., 13:53
@ MahmoudAbou-Eita: Я никогда не пользуюсь мастером экспорта Eclipse JAR, и это никак не связано с созданием артефакта AAR.
 Mahmoud Abou-Eita29 дек. 2013 г., 13:00
пока на той же странице:Вы не можете экспортировать проект библиотеки в файл JAR. Библиотека не может распространяться как двоичный файл (например, файл JAR). Это будет добавлено в будущей версии SDK Tools.
 user227314630 дек. 2014 г., 11:45
Как создать JAR-файл из скомпилированных классов Java из исходного проекта библиотеки Android, не могли бы вы подсказать, что означает это утверждение.
 CommonsWare30 дек. 2013 г., 22:39
@ MahmoudAbou-Eita: теперь усилия сосредоточены на артефактах AAR из новой системы сборки на основе Gradle.
 Vetalll28 нояб. 2014 г., 15:57
Теперь я использую gradle, и я должен предоставить клиенту банку с ресурсами. Я сделал банку и поместил ресурсы в папку res. Но проект, который использует эту библиотеку, генерирует исключение как ResourceNotFound с идентификатором. В чем проблема? Пожалуйста, не'не могу сказать о модуле и обр. Я должен дать банку
 stumpped31 июл. 2013 г., 02:29
@CommonsWare Ваша схема работает очень хорошо, если ProGuardне запустить на банку. Если вы примените ProGuard (вручную) к JAR, то все зависимые проекты будут жаловаться на все ссылочные символы "не может быть решен", Я только что попробовал и этоС того, что я получил. Я что-то пропустил?
 Muneeb Mirza01 дек. 2014 г., 13:27
Я так долго искал это решение. Перепробовал так много вещей и вот самый лучший и постился из них всех. Есть ли способ, которым я могу проголосовать за этот ответ, 100 раз ???
 Mahmoud Abou-Eita28 дек. 2013 г., 23:55
@CommonsWare цитируя официальное руководство:Примечание: вам нужен SDK Tools r14 или новее, чтобы использовать новую функцию проекта библиотеки, которая генерирует каждый проект библиотеки в свой собственный файл JAR. developer.android.com/tools/projects/index.html#LibraryProjects
 Mahmoud Abou-Eita01 янв. 2014 г., 14:18
@CommonsWare Я имел в виду подход к проекту библиотеки без исходного кода, упомянутый в основном ответе. Моя проблема решена в любом случае. Благодарю.
 CommonsWare14 нояб. 2014 г., 13:08
@Pacerier: эта документация предназначена для обычного проекта библиотеки Android, а не для пакета AAR. AAR поддерживается только Android Studio (и Gradle для Android), и небольшая документация по этому вопросу была объединена вdeveloper.android.com в это время.
 CommonsWare31 июл. 2013 г., 02:38
@stumpped: вам нужно настроить файл конфигурации ProGuard, чтобы не запутывать имена общедоступных материалов, которые нужны зависимым проектам.
 png21 мая 2015 г., 15:55
Я получаю Невозможно выполнить dex: несколько файлов dex определяют ... / Manifest $ разрешение; Как создать файл JAR без этих классов манифеста
 schwiz04 июл. 2014 г., 22:14
Немного опоздал на вечеринку теперь, когда у нас есть AAR, но если вы все еще строите с муравьем, как я, это сделает шаги 1-3 для вас.stackoverflow.com/a/24580308/384306
 Raghunandan12 июн. 2013 г., 13:16
Проект библиотеки отличается от стандартного проекта приложения Android тем, чтовы не можете скомпилировать его непосредственно в свой собственный .apk и запустить его на устройстве Android, Точно так же вы не можете экспортировать проект библиотеки в автономный файл JAR, как это было бы сделано для настоящей библиотеки. Вместо этого вы должны скомпилировать библиотеку косвенно, ссылаясь на библиотеку в зависимом приложении и создавая это приложение. эта цитата из документа doc подтверждает ваш ответ
 CommonsWare28 нояб. 2014 г., 17:47
@Vetalll: "я должен дать клиенту банку с ресурсами " - Там действительно нетт такая концепция. Вы можете попытаться создать бинарный Android-проект, но я неУ меня нет текущих рецептов для этого. Или вы можете распаковать реальный AAR для эффективного "инженер-реверс бинарный проект Android-библиотеки:commonsware.com/blog/2014/07/03/consuming-aars-eclipse.html

Это работает!

Сделайте ваш проект библиотеки нормальным, сняв флажок IsLibrary.Выполните ваш проект как приложение для Android. (Это не покажет никакой ошибки)Вы'Я найду файл .jar в папке bin вместе с .apk.Дайте вам .jar, кто хочет использовать вашу библиотеку.Скажите им, чтобы просто импортировать внешний JAR-файл в путь сборки.

Это будет хорошо работать со всеми ресурсами. Благодарю всех вас. за ваш ответ

 Mr_and_Mrs_D27 сент. 2013 г., 21:56
Смотри мой ответВот для более простого пути - кстати ваш ответ поставил меня на правильный путь;)
 David Doria09 сент. 2013 г., 17:41
Я только получаю .jar, когда у меня есть "Библиотека " проверено. Однако, когда я добавляю это в свой зависимый проект, ресурсы нет работа.
 Aayush Rana10 сент. 2013 г., 08:23
если вы хотите, чтобы ресурсы работали, проверьте это:stackoverflow.com/a/17064024/1779907, Метод, который я объяснил в ответе, работает, если у вас есть библиотека, у которой нет ресурсов. Если вы хотите обезопасить свои ресурсы, пожалуйста, жестко закодируйте их в java (как я использовал base64-кодирование для сохранения моих изображений непосредственно в интерфейсе java), а затем вы можете использовать метод, описанный в моем ответе (лучше работать, если у вас меньше ресурсов) ,
 David Doria09 сент. 2013 г., 17:27
Когда я делаю это, я не получаю файл .jar, сгенерированный в моем каталоге bin /?
 TacB0sS24 дек. 2013 г., 11:13
Это не будет работать с ресурсами! эта банкав ней даже нет библиотеки res,Мы, вероятно, упустили из виду свойства проекта с помощью библиотеки !.

Вы не можете упаковать файлы ресурсов в jar. Вы можете экспортировать свой проект как проект библиотеки.

Вы экспортируете свои служебные классы, которые не ссылаются на ресурсы в Android, то есть чистые классы Java, как файл JAR.

Проверьте ссылку ниже

http://developer.android.com/tools/projects/index.html

Сделать ваш проект библиотечным проектом

Щелкните правой кнопкой мыши по вашему проекту. Перейти к свойствам. Выберите Android. Убедитесь, что библиотека проверена.

Для ссылки на проект библиотеки в вашем проекте Android

Щелкните правой кнопкой мыши по вашему проекту. Перейти к свойствам. Выберите Android. Нажмите Добавить. Просмотрите и проект библиотеки.

Цитирование из документов

Проект библиотеки отличается от стандартного проекта приложения Android тем, что вы не можете скомпилировать его непосредственно в свой собственный файл .apk и запустить его на устройстве Android. Точно так же вы не можете экспортировать проект библиотеки в автономный файл JAR, как это было бы сделано для настоящей библиотеки. Вместо этого вы должны скомпилировать библиотеку косвенно, ссылаясь на библиотеку в зависимом приложении и создавая это приложение.

 Raghunandan12 июн. 2013 г., 13:20
@TimRoes звучит хорошо для меня убежищехотя попробовал.
 ripopenid06 дек. 2013 г., 02:11
Я не'Я не думаю, что вместо ответаКак Чтобы создать банку для Android Library Project, вы ответили, что это невозможно. Все остальные ответы на самом деле показывают (рабочий) способ создания такой банки.
 Raghunandan28 июл. 2013 г., 04:26
почему это понижено?
 Tim Roes12 июн. 2013 г., 13:19
Int он новыйСистема сборки Gradleу вас будет возможность создать так называемый aar-файл (Android Archive), это именно то, что вы хотите. Это в основном похоже на APK (содержащий ресурсы, манифест и т. Д.) Только для библиотек. Так что переключитесь на Gradle, если вам нужна надлежащая поддержка для этого.
 Raghunandan12 июн. 2013 г., 13:11
Библиотека не может распространяться как двоичный файл (такой как файл JAR). Это будет добавлено в будущей версии SDK Tools. Цитировать изdeveloper.android.com/tools/projects/index.html

Выполните следующие шаги, чтобы получить распространяемый jar вашей библиотеки (проверено для библиотечного проекта без внешних зависимостей):

Создайте свой библиотечный проект. Убери это. Вы получите файл libraryProjectName.jar в папке bin. (Удостовериться "Библиотека являетсявыбранный в проекте библиотеки.Скопируйте файл .jar вЛИЭС папка вашегоцелевое приложениеОбновите рабочее пространство и нажмитеCtr+Shift+O (на Windwows / Linux) илиCmd+Shift+O (на Mac), чтобы разрешить любые зависимости импорта из библиотеки добавлены.

Комментарий в случае возникновения каких-либо проблем.

 caw08 нояб. 2014 г., 15:40
@ripopenid Это не может быть в банке. Тот'Это то, что вам нужно для ссылки на библиотечные проекты.
 caw14 нояб. 2014 г., 06:21
Тот'верно. JAR дает вамsrc каталог. Проект библиотеки поможет вамres к тому же. Больше не возможно.
 Pacerier14 нояб. 2014 г., 06:17
@ MarcoW., Толькоres Возможно, даже ссылка не делаетне позволяет нам использоватьassets, Увидетьdeveloper.android.com/tools/projects/index.html#LibraryProjects: "Любые ресурсы ресурсов, используемые приложением, должны храниться в каталоге assets / самого проекта приложения ".
 ripopenid06 дек. 2013 г., 01:45
Это, безусловно, самый простой способ создать JAR из библиотечного проекта, но ... это не такт содержитres иassets папки. Я что-то пропустил?

Протестировано с ADT 22.2.1

Создайте свой библиотечный проектСоздать пустой проектДобавить проект библиотеки в ваш пустой проектПостроить проектВ папке / gen вы найдете класс для вашего библиотечного проекта, который будет содержать ваши ресурсы для проекта lib.Экспорт JAR (выберите только этот класс ... из папки / gen)Экспортируйте JAR из вашего проекта libПереименуйте экспортированные файлы в zip и объедините контентПереименуйте окончательный файл в JAR и добавьте его в проект.
 ripopenid04 дек. 2013 г., 04:30
Вы пытались применить Proguard к JAR? Если да, то как это работает? Были ли трудности или осложнения?
 CommonsWare04 июл. 2014 г., 21:24
Сюда не входят ресурсы, которые обычно стоят за проектом библиотеки Android.
 ripopenid06 дек. 2013 г., 02:47
Шаг № 6 сделал бы ваш подход более новой альтернативой @CommonsWare 'с подходом, кроме того, что это неЭто действительно работает, если пользователь (то есть проект приложения) этой библиотеки определяет свои собственные ресурсы. Так выглядит CommonsWare 'Метод все еще лучший.

Вот простой способ сделать это с помощью муравья, найденный в исходном коде Volley. Добавьте приведенный ниже код в custom_rules.xml и затем выполните сборку сant jar




  
  
    
  

С Eclipse ADT v22.6.2 вы можете просто экспортировать jar, нажав File->Экспорт->Java->Файл Jar, выберите каталоги и место назначения, где сохранить.

 CommonsWare04 июл. 2014 г., 21:23
Сюда не входят ресурсы, которые обычно стоят за проектом библиотеки Android.

Согласно последней версии Android Studio v1.2, это так же просто, как выпить торт. Уже ответил на полное решение со скриншотами наэта ссылка

Ваш ответ на вопрос