Как экспортировать библиотеку в Jar в Android Studio?
Я загрузил некоторые источники библиотеки и хотел бы экспортировать его в виде файла Jar с помощью Android Studio. Есть ли способ экспортировать в jar-файл с помощью студии Android?
редактировать:
Библиотека, которую я хочу экспортировать в качестве jar, представляет собой библиотеку Android. Он называется «StandOut» и может быть загружен с GitHub. https://github.com/pingpongboss/StandOut
- Ожидание до завершения асинхронной задачи
- Android двойной SIM-карты API
- Проверьте, присутствует ли SDCard, логическое значение всегда верно
- Как я могу получить доступ к getSupportFragmentManager () в fragmentе?
- Требуется объяснение процедуры запуска Geofence?
- Разрешение на запись на SD-карту
- Как контролировать изменение состояния SIM-карты
- Является ли способ, с помощью которого быстро запускается протокол Firebase, считается безопасным?
- Как получить количество строк TextView?
- Android. Можно ли программно установить дистрибутив install?
- Вам нужно сохранить высокий балл для Android-игры
- Разница между add (), replace () и addToBackStack ()
- как получить изображения с устройства в приложении для Android android
Невозможно экспортировать библиотеку Android в виде файла jar. Можно, однако, экспортировать его как файл aar
. Файлы Aar
являются новым бинарным форматом для Android-библиотек. В них есть информация о них в Google I / O, видеоролике New Build System .
Во-первых, создайте библиотеку в Android Studio или из командной строки, выпускающей gradle build
из корневого каталога вашей библиотеки.
Это приведет к
.
Этот файл 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