Как экспортировать библиотеку в Jar в Android Studio?

Я скачал некоторые библиотечные исходники и хотел бы экспортировать их в виде файла Jar с помощью Android Studio. Есть ли способ экспортировать в файл JAR с помощью Android Studio?

редактировать:

Библиотека, которую я хочу экспортировать как jar - это библиотека Android. Это'называется "Выделяться" и может быть загружен с GitHub.https://github.com/pingpongboss/StandOut

 Sage Pourpre27 мая 2013 г., 00:39
Я отредактировал свой вопрос с подробностями библиотеки Android.
 gamag26 мая 2013 г., 22:06
Пожалуйста, дайте больше информации о библиотеке, которую вы хотите экспортировать

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

Этот код выводит .jar прямо из .aar. Лично это дает мне больше уверенности в том, что биты, отправляемые через .jar, такие же, как биты, отправляемые через .aar. Это также означает, что если выПри использовании ProGuard выходной jar будет запутан по желанию.

Я тоже добавил супер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Вот.

о.jar файл, используя подход из этого решения:https://stackoverflow.com/a/19037807/1002054

Вот разбивка того, что я сделал:

1. Оформить заказ хранилища библиотеки

В случае, если это была библиотека залпа

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 https://stackoverflow.com/a/19037807/1002054
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 файлы из нового проекта Android в корне проекта моей библиотеки. Вы должны найти файл скомпилированной библиотекиmyCompiledLibrary.jar вbuild\libs каталог.

Я надеюсь, что кто-то найдет это полезным.

Редактировать:

Предостережение

Хотя это работает, вы столкнетесь с дублированием библиотеки исключение при компиляции проекта с несколькими модулями, где более одного модуля (включая модуль приложения) зависит от одного и того жеjar файл (например, модули имеют собственный каталог библиотеки, на который ссылаются вbuild.gradle данного модуля).

В случае, если вам нужно использовать одну библиотеку в более чем одном модуле, я бы рекомендовал использовать этот подход:Android gradle build и поддержка библиотеки

 Bagusflyer02 авг. 2014 г., 07:13
Спасибо @MartinKonecny, я это уже знал.
 Amrut Bidri21 апр. 2015 г., 12:02
Как применить Proguard для создания этой банки?
 lasec020321 окт. 2017 г., 02:36
другое решение сскриншоты quora.com/...
 Bagusflyer27 мар. 2014 г., 03:59
Я обнаружил, что нет способа включить res в банку. Это возможно?
 Greg Ennis28 июн. 2014 г., 04:46
В последних версиях Android студии требуется одно изменение: строка должна читать `from ('построить / промежуточные / пучки / выпуск /») `
 Martin Konecny01 авг. 2014 г., 06:58
@bagusflyer, если хочешьres папка, файл AAR это именно то - файл JAR сres поддержка папок.
 pyus1325 июл. 2014 г., 14:19
@GregEnnis Да, но в моем случае он создает банку с моим именем мобулы, и настоящая банка лежит внутри этой банки. Я распаковал созданный jar с именем моего модуля, например module_name.jar.
 chris20 мая 2014 г., 09:31
это сработало для меня. Благодарю.
 pyus1325 июл. 2014 г., 14:20
Кто-нибудь, помогите мне.

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. + Получение каталога Android SDK отличается от предыдущего. Вы должны изменить следующее (спасибо Vishal!):

android.sdkDirectory 

вместо

android.plugin.sdkDirectory
 Vishal Vyas14 июл. 2014 г., 16:03
Нам нужно использоватьandroid.sdkDirectory» вместо "android.plugin.sdkDirectory»   stackoverflow.com/a/23604253/801437
 Martin Konecny01 авг. 2014 г., 06:56
Почему "новый» Система сборки Android делает это уродливым :(.
 Drew25 нояб. 2014 г., 09:15
Пока что это единственный ответ, который сработал. Большое спасибо @Walmart_Hobo
 Pellet27 мая 2014 г., 04:27
Отличный ответ, это отлично сработало для меня. Вы также можете добавить цель gradle в android studio для запуска задачи jarDebug, которая создаст пригодный для использования jar (я проверил это в проекте eclipse, и он также отлично работает).
 Gaëtan04 дек. 2014 г., 17:07
Отличное решение для создания файла JAR! Можно ли также включить ресурсы?
 ddavtian10 янв. 2015 г., 00:59
Отличный ответ, работал отлично!
 Andrey16 июл. 2014 г., 21:07
Обновленный ответ, спасибо!

используя этот учебник:https://www.youtube.com/watch?v=1i4I-Nph-Cw "Как экспортировать банку из 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) Как только вы увидитепостроить успешно сообщение в окне запуска, используя обычный файловый менеджер, перейдите в экспортированный jar-файл, используя путь:C: \ Users \ имя \ AndroidStudioProjects \ ProjectName \ приложение \ выпуск Вы должны увидеть в этом каталоге свой JAR-файл.

Удачи :)

 kleopatra29 нояб. 2015 г., 17:54
спасибо за редактирование :-)
 RMDev29 нояб. 2015 г., 17:25
@kleopatra Я только что обновил свой ответ со всеми шагами
 RMDev29 нояб. 2015 г., 17:25
@ Боно Я только что обновил свой ответ со всеми шагами
 Bono29 нояб. 2015 г., 16:22
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. -Из обзора

йлов ресурсов от студии 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 /.

================================================== ==========

Если вы встретили вопрос как "Исключение тайм-аута сокета в командной строке, как показано ниже,

Вы можете выполнить следующие действия, чтобы открыть окно Gradle в правой части и нажать «makeJar» на Android студии, как это,

Затем перейдите в каталог / libs dir, вы увидите файл JAR.

Надеюсь, что это полезно для вас.

Удачи @[email protected]

Luna

Начиная с Android Studio V1.0 файл jar доступен внутри следующей ссылки проекта:

отладочная версия: "your_app»\ Сборка \ промежуточные \ пакеты \ Debug \ classes.jar

выпустить версию: "your_app»\ Построить \ промежуточные \ расслоения \ релиз \ classes.jar

Файл JAR создается в процедуре сборки, в графическом интерфейсе Android Studio это 's от Build->Сделать проект и из линейки CMD это "gradlew build ".

 user329018019 февр. 2016 г., 12:04
привет, спасибо, не могли бы вы сказать мне, какой из них правильный? Когда я должен использовать отладочный или релизный jar? Какие есть отличия?
 Kevin16 дек. 2015 г., 00:42
Я проголосовал за другой ответ более года назад. Винт это дело. Это торт! Спасибо!!
 Aparajith Sairam18 июн. 2015 г., 21:24
Я вижу отладочную версию, но я нене вижу папку релиза внутри связок, есть идеи почему?
 Avi Levin27 июн. 2015 г., 10:59
@AparajithSairam, я нашел что-то в GUI, но это относится только к сборкам APK-файлов. после выбора соответствующего варианта сборки нажмите зеленуюиграть" значок. он запустит команду gradle фоновой сборки, которая создаст файл. Для файла JAR в CMD вам нужно будет запустить gradlew assemblyDebug или Release или любой другой вариант, который у вас есть. После этого JAR будет доступен по следующему адресу: your_app "\ Сборка \ промежуточные \ расслоения \»falvor»\ classes.jar вы можете увидеть все ваши команды сборки, используя "Gradlew задачи "
 Aparajith Sairam22 июн. 2015 г., 16:24
Через графический интерфейс Но затем я создал одну задачу makeJar, как было предложено в других ответах, и использовал командную строку, и это сработало. Есть ли способ получить его через сам графический интерфейс? Благодарю.
 Aparajith Sairam18 июн. 2015 г., 21:34
Найдя его в Build Variants, мы должны выбрать Build Variant, чтобырелиз', Но теперь файла classes.jar нет в папке релиза!
 Avi Levin21 июн. 2015 г., 23:21
@AparajithSairam, как вы создали свой JAR, командную строку или графический интерфейс?
 m02ph3u502 июн. 2015 г., 15:45
за этот ответ ты получишь все мои интернеты
 Avi Levin20 февр. 2016 г., 19:08
@ user3290180, в дополнение к тому, что я написал, в основном, если вы не сделалиВ ваш gradle-скрипт не добавлен какой-либо специальный процесс сценария для выпуска, нет разницы между выпуском и отладкой версий, и вы можете взять один из двух jar-файлов.
 Avi Levin20 февр. 2016 г., 15:21
@ user3290180, как release, так и debug являются типами сборки, представляющими версии пакета сборки, сгенерированные для каждого пакета приложения, вы можете редактировать их в своем скрипте приложения gradle. По умолчанию предоставляются типы сборки отладки и выпуска. например, в релизе вы можете добавить progroud или что-то еще, чтот добавить в ваш продукт отладки. В дополнение к типам сборки, вы можете добавить, например, вкусы продукта "свободно" а также "оплачены» версии. В этом примере варианты продукта и типы сборки создают следующие варианты сборки: freeDebug, freeRelease, payedDebug, payedRelease.
Решение Вопроса

возможно экспортировать его какaar файл.Aar файлы, являющиеся новым двоичным форматом для библиотек Android. Там'Информация о них в Google I / O,Новая система сборки видео.

Сначала соберите библиотеку в Android Studio или из командной строки.gradle build из вашей библиотекикорневой каталог.

Это приведет к/libs/build/yourlib.aar файл.

Этот aar-файл представляет собой двоичное представление вашей библиотеки и может быть добавлен в ваш проект вместо библиотеки как проект зависимостей.

Чтобы добавить AAR-файл в качестве зависимости, вы должны опубликовать его в Maven Central или в локальном репозитории Maven, а затем сослаться на AAR-файл в вашем проекте.gradle.build файл.

Однако этот шаг немного запутан. Я'Мы нашли хорошее объяснение, как это сделать здесь:

http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds

 Loïc Faure-Lacroix16 июн. 2013 г., 12:24
также наличие android-библиотеки в зависимости от других android-библиотеки может привести к поломке.
 Bagusflyer27 мар. 2014 г., 03:59
Будет ли папка res включена в файл aar?
 Pellet27 мая 2014 г., 04:28
увидеть @Wallmart_Hobo 's ответ ниже, это возможно, и я могу подтвердить, что экспортированный jar отлично работает в проекте приложения для Android Eclipse.
 TeeTracker20 янв. 2015 г., 12:33
 Simon02 нояб. 2014 г., 13:46
Я нашел мой aar-файл, включенный в эту ссылку: lib \ build \ output \ aar
 David22 янв. 2015 г., 17:43
Пользователи Eclipse / ant не могут добавлять файлы .aar в свой проект в данный момент. Это не оптимальное решение для сторонних разработчиков библиотек. Смотри 7hny 'ответ ниже.

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