Как экспортировать библиотеку в 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