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

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

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

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

Невозможно экспортировать библиотеку Android в виде файла jar. Можно, однако, экспортировать его как файл aar . Файлы Aar являются новым бинарным форматом для Android-библиотек. В них есть информация о них в Google I / O, видеоролике New Build System .

Во-первых, создайте библиотеку в Android Studio или из командной строки, выпускающей gradle build из корневого каталога вашей библиотеки.

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

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

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

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

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

Я смог создать исходный код библиотеки для скомпилированного файла .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) в // 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 в myCompiledLibrary.jar build\libs .

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

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

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

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

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

Начиная с 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».

Включите в 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/ .

EDIT: с помощью инструментов android gradle 1.10. + Получение SDK android SDK отличается от предыдущего. Вы должны изменить следующее (спасибо Vishal!):

 android.sdkDirectory 

вместо

 android.plugin.sdkDirectory 

Я смог экспортировать файл jar в Android Studio с помощью этого руководства: https://www.youtube.com/watch?v=1i4I-Nph-Cw «Как экспортировать Jar из Android Studio»

Я обновил свой ответ, чтобы включить все шаги для экспорта JAR в Android Studio:

1) Создайте проект приложения для Android, перейдите в app-> build.gradle

2) Измените следующее в этом файле:

  • modify apply plugin: ‘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) Нажмите вкладку «Грейдл» (обычно средний справа) и прокрутите вниз до экспорта

5) После того, как вы увидите сообщение об успешном построении в окне запуска, обычным файловым проводником перейдите на экспортированную банку, используя путь: C: \ Users \ name \ AndroidStudioProjects \ ProjectName \ app \ release вы должны увидеть в этом каталоге ваш файл jar.

Удачи 🙂

Вот еще один, немного другой ответ с некоторыми улучшениями.

Этот код принимает .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] } в 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 для проекта библиотеки 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 dir, вы увидите свой файл jar.

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

Удачи @[email protected]

Luna

  • Как измерить угол наклона телефона в плоскости XY с помощью акселерометра в Android
  • Ошибка конструктора списка Firebase
  • findViewById () возвращает null, когда я вызываю его в onCreate ()
  • Заполненная активность ADT, созданная с использованием fragmentов.
  • НЕОПРЕДЕЛЕННОЕ ТОП-УРОВЕННОЕ ИСКЛЮЧЕНИЕ: com.android.dex.DexException: несколько файлов dex определяют
  • Фрагменты Android. Сохранение AsyncTask во время поворота экрана или изменения конфигурации
  • как возобновить прерванную загрузку - часть 2
  • Убить другое приложение на Android?
  • Непрокручиваемый ListView внутри ScrollView
  • Вызов метода fragmentа из родительской активности
  • Фрагмент MyFragment не привязан к действию
  • Interesting Posts

    NullPointerException в invokeLater при запуске через Java Webstart

    Получение a.ref не является функциональной ошибкой при обновлении до углового огня 1.2

    Долгосрочный токен доступа FB для сервера, чтобы вывести информацию о странице FB

    Как установить маржу ImageView с помощью кода, а не xml

    Как отключить определенное правило checkstyle для определенной строки кода?

    Создайте эскиз или изображение AVPlayer в текущее время

    Программное обеспечение для управления автономными задачами

    используя $ slice operator для получения последнего элемента массива в mongodb

    Выпадающее меню Страна / Штат / Город внутри встроенного администратора Django

    Какова функция sum (), но для умножения? продукт()?

    Как включить! Важно в jquery

    Заполнение DataSet или DataTable из набора результатов запроса LINQ

    C # “как” cast vs classic cast

    Как запустить командный файл без запуска «командного окна»?

    Каков наилучший способ получить объект classа для типа массива?

    Давайте будем гением компьютера.