Как преобразовать проект библиотеки Android во внешний JAR?

У меня есть проект библиотеки Android, который у меня работает очень хорошо, но теперь я заинтересован в том, чтобы «преобразовать» его во внешний JAR.

Как я могу это сделать?

Можно ли преобразовать любой проект библиотеки Android во внешний JAR? Если нет, то каковы ограничения или ограничения?


person uTubeFan    schedule 01.11.2011    source источник


Ответы (2)


Можно ли преобразовать любой проект библиотеки Android во внешний JAR?

Не сейчас.

Если нет, то каковы ограничения или ограничения?

Если ваша библиотека представляет собой чистый код Java без ресурсов, вы можете создать JAR из файлов .class, как и в случае с обычной Java.

Если ваша библиотека использует ресурсы, вы все равно можете создать JAR, как указано выше. Однако вам нужно будет найти значения R (например, R.layout.main) с помощью отражения или getIdentifier(), и ваши ресурсы не будут упакованы в JAR, а должны будут распространяться отдельно.

В будущем инструменты сборки должны поддерживать создание распространяемых файлов JAR из проектов библиотек вместе с ресурсами. Текущие инструменты сборки действительно создают JAR-файлы, но они не предназначены для распространения, а скорее являются внутренними артефактами сборки на данный момент.

person CommonsWare    schedule 01.11.2011
comment
Спасибо. Правильно ли я понимаю, что создать JAR из файлов .class так же просто, как jar cf файлы ввода jar-файлов? Кроме того, не могли бы вы подробнее рассказать о том, как ресурсы, доступ к которым осуществляется через getIdentifier(), распределяются отдельно? - person uTubeFan; 02.11.2011
comment
@uTubeFan: Правильно ли я понимаю, что создание JAR из файлов .class так же просто, как входные файлы jar cf jar-file? -- предположительно. Я сам использую задачу Ant <jar>. Кроме того, не могли бы вы подробнее рассказать о том, как ресурсы, доступ к которым осуществляется через getIdentifier(), распределяются отдельно? -- гм, ну, если их нет в JAR-файле, а повторному пользователю JAR нужны файлы, повторному пользователю нужно каким-то образом получить эти файлы. Я бы порекомендовал ZIP-архив, содержащий JAR и дерево res/. - person CommonsWare; 02.11.2011
comment
Привет @uTubeFan Предположим, рассмотрим проект MyTranslator, в котором я перевожу некоторый текст, для этого я импортировал файл jar xyztranslator.jar. Теперь я хочу преобразовать проект MyTranslator в файл .jar, чтобы я мог использовать все классы в проекте MyTranslator, а также все классы в xyztranslator.jar. Просто мой вопрос: Как я могу экспортировать приложение Android в файл .jar, который уже импортировал файлы jar - person KK_07k11A0585; 15.12.2011
comment
У меня был экспорт Android-библиотеки в банку, как ее защитить? - person Crossle Song; 14.06.2013
comment
@Hades: сейчас основное внимание уделяется AAR для библиотечных проектов в рамках инициативы Gradle для Android. Чтобы создать JAR для проекта библиотеки, который не использует ресурсы, вам нужно добавить собственную задачу Gradle. - person CommonsWare; 20.06.2014

http://developer.android.com/guide/developing/projects/index.html#LibraryProjects утверждает, что вы не можете экспортировать их во внешний JAR. Конкретная цитата:

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

person Sinjo    schedule 01.11.2011
comment
Спасибо. На той же странице также есть пункт, в котором говорится: вам нужен SDK Tools r14 или новее, чтобы использовать новую функцию библиотечного проекта, которая генерирует каждый библиотечный проект в свой собственный файл JAR. Означает ли это, что если я использую SDK r14 (или новее), указанное вами ограничение больше не существует? - person uTubeFan; 02.11.2011
comment
Честно говоря, я не уверен. Эта формулировка, кажется, противоречит той части, которую я цитировал ниже, хотя это может быть просто неудачная формулировка. - person Sinjo; 02.11.2011
comment
r14 переделал то, как они обрабатывают проект библиотеки, чтобы иметь возможность экспортировать банки, но я до сих пор не могу понять, как это сделать, сохраняя при этом сгенерированные ресурсы. - person Nathan Schwermann; 03.02.2013
comment
У меня был пакет Anroid Libary Project для jar, как его защитить? - person Crossle Song; 14.06.2013