Как экспортировать библиотеку в Jar в Android Studio?
Я загрузил некоторые источники библиотеки и хотел бы экспортировать их как файл Jar, используя
Android Studio. Есть ли способ экспортировать в jar файл с помощью студии Android?
изменить:
Библиотека, которую я хочу экспортировать в качестве jar, представляет собой библиотеку Android.
Он называется "StandOut" и может быть загружен с GitHub.
https://github.com/pingpongboss/StandOut
Ответы
Ответ 1
Невозможно экспортировать библиотеку Android в виде файла jar. Однако можно экспортировать его как aar
файл. aar
- новый бинарный формат для Android-библиотек. Там информация о них в Google I/O, Новое видео системы сборки.
Сначала создайте библиотеку в Android Studio или из командной строки, выпускающей gradle build
из корневого каталога библиотеки.
Это приведет к файлу <yourlibroot>/libs/build/yourlib.aar
.
Этот файл aar представляет собой двоичное представление вашей библиотеки и может быть добавлен в ваш проект вместо библиотеки в качестве проекта зависимости.
Чтобы добавить файл aar в качестве зависимости, вы должны опубликовать его в центральной части maven или в локальном репозитории maven, а затем передать файл aar в файл проекта gradle.build
.
Однако этот шаг немного запутан. Я нашел хорошее объяснение, как это сделать здесь:
http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds
Ответ 2
Мне удалось собрать исходный код библиотеки для скомпилированного файла .jar
, используя подход из этого решения:
fooobar.com/questions/27854/...
Вот разбивка того, что я сделал:
1. Репозиторий библиотеки заказов
В этом случае это была библиотека Volley
2. Импорт библиотеки в Android Studio.
Я использовал Android Studio 0.3.7. На этом этапе я столкнулся с некоторыми проблемами: мне пришлось скопировать папку gradle
из нового проекта Android, прежде чем я смог импортировать исходный код библиотеки Volley, это может различаться в зависимости от используемого вами исходного кода.
3. Измените файл build.gradle
// If your module is a library project, this is needed
//to properly recognize 'android-library' plugin
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.3'
}
}
apply plugin: 'android-library'
android {
compileSdkVersion 17
buildToolsVersion = 17
sourceSets {
main {
// Here is the path to your source code
java {
srcDir 'src'
}
}
}
}
// This is the actual solution, as in /questions/27854/how-to-create-an-android-library-jar-with-gradle-without-publicly-revealing-source-code/204145#204145
task clearJar(type: Delete) {
delete 'build/libs/myCompiledLibrary.jar'
}
task makeJar(type: Copy) {
from('build/bundles/release/')
into('build/libs/')
include('classes.jar')
rename ('classes.jar', 'myCompiledLibrary.jar')
}
makeJar.dependsOn(clearJar, build)
4. Запустите команду gradlew makeJar
из корня проекта.
В моем случае мне пришлось скопировать файлы gradlew.bat
и gradle
из нового проекта андроида в мой корневой проект библиотеки.
Вы должны найти файл скомпилированной библиотеки myCompiledLibrary.jar
в каталоге build\libs
.
Я надеюсь, что кто-то найдет это полезным.
Edit:
Caveat
Несмотря на то, что это сработает, вы столкнетесь с дублируемым исключением библиотеки при компиляции проекта с несколькими модулями, где более одного модуля (включая модуль приложения) зависит от того же файла jar
(например, у модулей есть собственный каталог библиотеки, то есть ссылка на build.gradle
данного модуля).
Если вам нужно использовать единую библиотеку в более чем одном модуле, я бы рекомендовал использовать этот подход:
Android gradle сборка и библиотека поддержки
Ответ 3
Так как Android Studio V1.0 файл jar доступен в следующей ссылке проекта:
debug ver: "your_app" \build\intermediates\bundles\debug\classes.jar
release ver: "your_app" \build\intermediates\bundles\release\classes.jar
Файл JAR создается в процедуре сборки,
В графическом интерфейсе Android Studio от Build- > Make Project и от линии CMD это "gradlew build".
Ответ 4
Включите следующее в build.gradle:
android.libraryVariants.all { variant ->
task("generate${variant.name}Javadoc", type: Javadoc) {
description "Generates Javadoc for $variant.name."
source = variant.javaCompile.source
ext.androidJar = "${android.plugin.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
}
task("javadoc${variant.name}", type: Jar) {
classifier = "javadoc"
description "Bundles Javadoc into a JAR file for $variant.name."
from tasks["generate${variant.name}Javadoc"]
}
task("jar${variant.name}", type: Jar) {
description "Bundles compiled .class files into a JAR file for $variant.name."
dependsOn variant.javaCompile
from variant.javaCompile.destinationDir
exclude '**/R.class', '**/R$*.class', '**/R.html', '**/R.*.html'
}
}
Затем вы можете выполнить gradle с помощью: ./gradlew clean javadocRelease jarRelease
, который построит вам ваш Jar, а также javadoc jar в папку build/libs/
.
РЕДАКТИРОВАТЬ: С инструментами android gradle 1.10. + получение файла SDK android отличается от предыдущего. Вы должны изменить следующее (спасибо Vishal!):
android.sdkDirectory
вместо
android.plugin.sdkDirectory
Ответ 5
Мне удалось экспортировать файл jar в Android Studio, используя этот учебник:
https://www.youtube.com/watch?v=1i4I-Nph-Cw
"Как экспортировать Jar из Android Studio"
Я обновил свой ответ, чтобы включить все шаги для экспорта JAR в Android Studio:
1) Создайте проект приложения для Android, перейдите в app- > build.gradle
2) Измените следующее в этом файле:
-
изменить применить плагин: 'com.android.application' к применить плагин: 'com.android.library'
-
удалите следующее: applicationId, versionCode и versionName
-
Добавьте следующий код:
// Task to delete old jar
task deleteOldJar(type: Delete){
delete 'release/AndroidPlugin2.jar'
}
// task to export contents as jar
task exportJar(type: Copy) {
from ('build/intermediates/bundles/release/')
into ('release/')
include ('classes.jar')
rename('classes.jar', 'AndroidPlugin2.jar')
}
exportJar.dependsOn(deleteOldJar, build)
3) Не забудьте нажать синхронизация сейчас в этом файле (в правом верхнем углу или с помощью кнопки синхронизации).
4) Перейдите на вкладку Gradle (обычно в середине справа) и прокрутите вниз до exportjar
5) Когда вы увидите сообщение построить успешное в окне запуска, используя обычный проводник файлов, перейдите на экспортированную банку, используя путь: C:\Users\name\AndroidStudioProjects\ProjectName\приложение\релиз
вы должны увидеть в этом каталоге свой файл jar.
Удачи:)
Ответ 6
Вот еще один, немного другой ответ с несколькими улучшениями.
Этот код принимает .jar прямо из .aar. Лично это дает мне немного больше уверенности в том, что бит, отправляемый через .jar, те же, что и отправленные через .aar. Это также означает, что если вы используете ProGuard, выходной бачок будет запутан по желанию.
Я также добавил супер-makeJar задачу, которая делает банки для всех вариантов сборки.
task(makeJar) << {
// Empty. We'll add dependencies for this task below
}
// Generate jar creation tasks for all build variants
android.libraryVariants.all { variant ->
String taskName = "makeJar${variant.name.capitalize()}"
// Create a jar by extracting it from the assembled .aar
// This ensures that products distributed via .aar and .jar exactly the same bits
task (taskName, type: Copy) {
String archiveName = "${project.name}-${variant.name}"
String outputDir = "${buildDir.getPath()}/outputs"
dependsOn "assemble${variant.name.capitalize()}"
from(zipTree("${outputDir}/aar/${archiveName}.aar"))
into("${outputDir}/jar/")
include('classes.jar')
rename ('classes.jar', "${archiveName}-${variant.mergedFlavor.versionName}.jar")
}
makeJar.dependsOn tasks[taskName]
}
Для любопытного читателя я изо всех сил пытался определить правильные переменные и параметры, которые использует плагин com.android.library для обозначения файлов .aar. Я наконец нашел их в Android Open Source Project здесь.
Ответ 7
Мы можем экспортировать файл jar для проекта библиотеки Android без файлов ресурсов в студии Android. Это также требование, которое я недавно встретил.
1. Конфигурируйте файл build.gradle
// Task to delete old jar
task clearJar(type: Delete){
delete 'release/lunademo.jar'
}
// task to export contents as jar
task makeJar(type: Copy) {
from ('build/intermediates/bundles/release/')
into ('build/libs/')
include ('classes.jar')
rename('classes.jar', 'lunademo.jar')
}
makeJar.dependsOn(clearJar, build)
2. Запустите gradlew makeJar под вашим корнем проекта
Вы увидите свои библиотеки под dir как build/libs/, если вам повезет.
=============================================== =============
Если вы встретили проблему как "Исключение таймаута Socket" в командной строке, как показано ниже,
![введите описание изображения здесь]()
Вы можете выполнить следующие шаги, чтобы открыть окно Gradle в правой части и нажать "makeJar" в студии Android, например,
![введите описание изображения здесь]()
![введите описание изображения здесь]()
Затем перейдите в файл build/libs, вы увидите свой файл jar.
Надеюсь, что это полезно для u.
Удачи @. @
Luna