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

#java #android #jar #library-project

#java #Android #jar #библиотека-проект

Вопрос:

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

Как мне это сделать?

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

Ответ №1:

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

Не сейчас.

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

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

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

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

Комментарии:

1. Спасибо. Правильно ли я понимаю, что создание JAR из файлов .class так же просто, как jar cf jar-file input-files ? Кроме того, не могли бы вы подробнее рассказать о том, как ресурсы, к которым осуществляется доступ getIdentifier() , распределяются отдельно?

2. @uTubeFan: «Правильно ли я понимаю, что создание JAR из файлов .class так же просто, как jar cf jar-file input-files?» — предположительно. Я <jar> сам использую задачу Ant. «Кроме того, не могли бы вы подробнее рассказать о том, как ресурсы, доступные через getIdentifier(), распределяются отдельно?» — хм, ну, если их нет в файле JAR, и повторному пользователю JAR нужны файлы, повторному пользователю нужно как-то получить эти файлы. Я бы рекомендовал ZIP-архив, содержащий JAR и res/ дерево.

3. Привет @uTubeFan Предположим, рассмотрим проект MyTranslator , в котором я перевожу некоторый текст, для этого я импортировал файл jar xyztranslator.jar . Теперь я хочу преобразовать проект MyTranslator в файл .jar , чтобы я мог использовать все классы в проекте MyTranslator, а также все классы в xyztranslator.jar . Просто мой вопрос в том, как я могу экспортировать приложение Android в файл .jar, в который уже были импортированы файлы jar

4. Я экспортировал библиотеку Android в jar, как ее защитить?

5. @Hades: Сейчас основное внимание уделяется AARs для библиотечных проектов в рамках инициативы Gradle для Android. Чтобы создать JAR для проекта библиотеки, который не использует ресурсы, вам нужно добавить свою собственную задачу Gradle.

Ответ №2:

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

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

Комментарии:

1. Спасибо. На той же странице также есть предложение, в котором говорится: «Вам нужны SDK Tools r14 или новее, чтобы использовать новую функцию проекта библиотеки, которая генерирует каждый проект библиотеки в свой собственный файл JAR». Означает ли это, что если я использую SDK r14 (или новее), цитируемая вами ссылка больше не существует?

2. Честно говоря, я не уверен. Эта формулировка, похоже, противоречит части, которую я процитировал ниже, хотя это может быть просто плохая формулировка.

3. r14 переделал, как они обрабатывают проект библиотеки, чтобы иметь возможность экспортировать jar, но я все еще не могу понять, как это сделать, сохраняя сгенерированные ресурсы.

4. У меня был пакет проекта библиотеки Android для jar, как его защитить?