Як экспартаваць бібліятэку Jar ў Android Studio?

Я запампаваў некаторыя крыніцы бібліятэкі і хацеў бы экспартаваць яго ў файл Jar з дапамогай Android-студыя. Ці ёсць спосаб экспартаваць у файл JAR з дапамогай Android студыі?

рэдагаванне:

The library I want to export as jar is an Android library. It's called "StandOut" and can be downloaded from GitHub. https://github.com/pingpongboss/StandOut

80
Калі ласка, дайце больш падрабязную інфармацыю пра бібліятэку вы хочаце экспартаваць
дададзена аўтар gamag, крыніца
Я адрэдагаваў мой пытанне з дэталямі бібліятэкі Android.
дададзена аўтар Sage Pourpre, крыніца

7 адказы

Гэта не ўяўляецца магчымым экспартаваць Android бібліятэку ў выглядзе файла слоік. Можна, аднак, экспартаваць яго як AAR файл. <�Код> Аарэ файлаў, новы двайковы фармат для Android бібліятэк. Там жа інфармацыя пра іх у Google I/O, у New Build System відэа .

Па-першае, пабудаваць бібліятэку ў Android Studio або з каманднага радка выдачы Gradle зборкі з каранёвага каталога бібліятэкі.

This will result in /libs/build/yourlib.aar file.

Гэты файл AAR з'яўляецца двайковым прадстаўленнем вашай бібліятэкі і можа быць дададзены замест вашага праекта бібліятэкі як праект залежнасцяў.

Для таго, каб дадаць файл AAR як залежнасць вы павінны апублікаваць яго ў Maven цэнтральнага або лакальны рэпазітар Maven, а затым перадаць файл AAR ў вашым праект gradle.build файле.

Тым не менш, гэты крок з'яўляецца трохі заблытаным. Я знайшоў добрае тлумачэнне, як гэта зрабіць гэта тут:

http://www.flexlabs.org/2013/ 06/с выкарыстаннем-мясцовага AAR-андроіда-бібліятэка-пакеты-в-Gradle-будуе

79
дададзена
Я знайшоў мой AAR файл у гэтай спасылцы: Lib \ зборка \ выхады \ AAR
дададзена аўтар Simon, крыніца
таксама маючы АНДРОІД-бібліятэку ў залежнасці ад іншага андроіда-бібліятэкі можа зламацца рэчамі.
дададзена аўтар Loïc Faure-Lacroix, крыніца
дададзена аўтар TeeTracker, крыніца
ECLIPSE/мурашка карыстальнікі не могуць дадаваць .aar файлы ў свой праект у дадзены момант. Гэта не з'яўляецца аптымальным рашэннем для распрацоўшчыкаў бібліятэкі трэцяй боку. См адказ 7hny ніжэй дзеючай.
дададзена аўтар David, крыніца
Ці ёсць будзе ўключана папка Рэза ў AAR файл?
дададзена аўтар Zhou Hao, крыніца
см @ адказ Wallmart_Hobo ў ніжэй, магчыма, і я магу пацвердзіць, экспартуемая банку выдатна працуе ў зацьменні андроіда праекта прыкладання.
дададзена аўтар Pellet, крыніца

I was able to build a library source code to compiled .jar file, using approach from this solution: https://stackoverflow.com/a/19037807/1002054

Вось засмучэнне таго, што я зрабіў:

1. Аформіць сховішча бібліятэкі

У гэтым выпадку яна можа была бібліятэка Volley

2. Бібліятэка імпарту ў Android Studio.

Я выкарыстаў Android Studio 0.3.7. Я сутыкнуўся некаторыя праблемы падчас гэтага кроку, а менавіта я павінен быў капіяваць Gradle тэчкі з новага андроіда праекта, перш чым я змог імпартаваць 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 файлы з новага андроіда праекта ў мой каранёвай бібліятэкі праекта. Вы павінны знайсці скампіляваны файл бібліятэкі myCompiledLibrary.jar у пабудаваць \ LIBS Каталог.

Я спадзяюся, што хтосьці лічыць, што гэта карысна.

Edit:

перасцярога

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

In case where you need to use single library in more then one module, I would recommend using this approach: Android gradle build and the support library

43
дададзена
@bagusflyer, калі вы хочаце Рэз папка, файл AAR дакладна, што - гэта JAR-файл з кодам <> Рэз падтрымка тэчак.
дададзена аўтар Martin Konecny, крыніца
Хто-небудзь мне дапамагчы.
дададзена аўтар pyus13, крыніца
@GregEnnis я, але ў маім выпадку гэта стварае слоік з маім імем mobule і фактычная банка ляжыць ўнутры гэтай банкі. Я дастаў створаную слоічак з маім імем модуля, як module_name.jar.
дададзена аўтар pyus13, крыніца
У апошніх версіях Android студыі патрабуецца адно змяненне: радок павінна казаць `з (« зборкі/прамежкавыя/расслаення/выпуск/»)`
дададзена аўтар Greg Ennis, крыніца
як прымяніць ProGuard генераваць гэтую банку?
дададзена аўтар Amrut Bidri, крыніца
Я выявіў, што няма ніякага спосабу, каб уключыць Рэз ўнутры збана. Ці магчыма гэта?
дададзена аўтар Zhou Hao, крыніца
Дзякуючы @MartinKonecny, я ведаў, што ўжо.
дададзена аўтар Zhou Hao, крыніца
іншае рашэнне з скрыншоты quora.com/…
дададзена аўтар lasec0203, крыніца
ён працаваў на мяне. дзякуй.
дададзена аўтар chris, крыніца

Since Android Studio V1.0 the jar file is available inside the following project link:

адладкі версіі: "your_app" \ пабудаваць \ ідэалам \ пакеты \ Debug \ classes.jar

рэліз версіі: "your_app" \ пабудаваць \ прамежкавыя \ расслаення \ рэліз \ classes.jar

The JAR file is created on the build procedure, In Android Studio GUI it's from Build->Make Project and from CMD line it's "gradlew build".

35
дададзена
прывітаньне, дзякуй, не маглі б вы сказаць мне, які з'яўляецца правільным? Калі я павінен выкарыстоўваць адладку або вызваліць банку? Якія адрозненні?
дададзена аўтар user3290180, крыніца
ты павінен атрымаць усе мае інтэрнэце за гэты адказ
дададзена аўтар m02ph3u5, крыніца
@AparajithSairam як вы пабудавалі свой JAR, камандны радок або графічны інтэрфейс?
дададзена аўтар Avi Levin, крыніца
@AparajithSairam, я знайшоў што-то ў GUI, але гэта ставіцца толькі да APK файлаў зборкі. пасля выбару адпаведнага варыянту зборкі націсніце зялёны значок «гуляць». ён будзе працаваць Gradle каманды фону зборкі, які будзе ствараць файл. Для JAR-файла ў CMD, вам прыйдзецца запусціць gradlew assembleDebug або Release або любы густ у вас ёсць. Пасля гэтага JAR будзе даступна на наступным месцы: your_app «\ пабудаваць \ прамежкавыя \ расслаення \» falvor "\ classes.jar вы можаце ўбачыць усе вашыя каманды зборкі з дапамогай" gradlew задач "
дададзена аўтар Avi Levin, крыніца
@ User3290180, як выпуск і адладкі ўбудаваныя тыпы ўяўляюць сабой версію зборкі ўпакоўкі, згенераваную для кожнага пакета прыкладанняў, вы можаце рэдагаваць іх у вашым Gradle прыкладання сцэнара. Па змаўчанні, пры ўмове, што тыпы адладкі і выпуску зборкі. напрыклад, у выпуску вы можаце дадаць progroud ці нешта яшчэ, што вы б не дадаць у ваш адладкі прадукту. У дадатак да стварэння тыпаў вы можаце дадаць водары прадукту, напрыклад, «бясплатна» і «аплачаных» версіі. У гэтым прыкладзе, водары прадукту і тыпы будуюць стварыць наступныя варыянты пабудовы: freeDebug, freeRelease, payedDebug, payedRelease.
дададзена аўтар Avi Levin, крыніца
@ User3290180, у дадатак да таго, што я пісаў, у асноўным, калі вы не дадалі ні спецыяльны працэс сцэнарыяў для выпуску ў вашым Gradle сцэнары няма ніякай розніцы паміж вызваленнем і адладкавыя версій і вы можаце ўзяць адзін з двух слоікаў ..
дададзена аўтар Avi Levin, крыніца
Я upvoted яшчэ адзін адказ больш за год таму. Шруба гэтага бізнэсу. Гэта торт! Дзякуй !!
дададзена аўтар Kevin, крыніца
Знайшоў у зборкі Варыянтаў, мы павінны выбраць Пабудаваць Variant быць «рэліз». Але цяпер classes.jar няма ў тэчцы рэлізу!
дададзена аўтар Aparajith Sairam, крыніца
Праз графічны інтэрфейс. Але тады я стварыў адзін задачы makeJar як прапанавана ў іншых адказах і выкарыстоўваць камандную радок і працаваў. Ці ёсць спосаб, каб атрымаць яго праз сам GUI? Дзякуючы.
дададзена аўтар Aparajith Sairam, крыніца
Я бачу адладкі вер, але я не бачу тэчку выпуску ўнутры джгутоў, любыя ідэі, чаму?
дададзена аўтар Aparajith Sairam, крыніца

Ўключыць наступнае ў 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 чысты javadocRelease jarRelease , які будзе будаваць вам вашу Jar, а таксама JavaDoc банку ў пабудаваць/Libs/ тэчку.

EDIT: With android gradle tools 1.10.+ getting the android SDK dir is different than before. You have to change the following (thanks Vishal!):

android.sdkDirectory 

замест

android.plugin.sdkDirectory
30
дададзена
Чаму "новая" сістэма Android зборкі робяць гэты пачварны :(.
дададзена аўтар Martin Konecny, крыніца
Выдатнае рашэнне для стварэння файла JAR! Ці можна ўключаць рэсурсы, а?
дададзена аўтар Gaëtan, крыніца
Да гэтага часу гэта адзіны адказ, які працаваў. Вялікае вам дзякуй @Walmart_Hobo
дададзена аўтар Drew, крыніца
Абноўлены адказ, дзякуй!
дададзена аўтар Walmart_Hobo, крыніца
Нам трэба выкарыстоўваць «android.sdkDirectory» замест «android.plugin.sdkDirectory» stackoverflow.com/a/23604253/801437
дададзена аўтар Vishal Vyas, крыніца
Вялікі адказ, гэта працавала выдатна для мяне. Вы можаце таксама дадаць Gradle мэты ў андроіды студыі, каб запусціць задачу jarDebug, якая створыць карысную банку (я праверыў гэта ў праекце зацьмення, і ён таксама працуе выдатна).
дададзена аўтар Pellet, крыніца
Вялікі адказ, працаваў выдатна!
дададзена аўтар ddavtian, крыніца

Я быў у стане экспартаваць файл банкі ў Android Studio з дапамогай гэтага падручніка: https://www.youtube.com/watch?v=1i4I-Nph-Cw  «Як экспартаваць Jar з Android Studio»

Я абнавіў свой адказ, каб ўключыць усе крокі для экспарту JAR ў Android Studio:

1) Create Android application project, go to app->build.gradle

2) Зменіце наступныя ў гэтым файле:

  • змяніць прымяніць убудова: 'com.android.application' у <�моцны> прымяніць убудова: 'com.android.library'

  • <�Літый> <�р> выдаліць наступнае: <�моцны> ApplicationID, VersionCode і versionName </моцны> </р>
  • Дадайце наступны код:

<�Папярэдне> //Задача выдаліць старую банку Задача deleteOldJar (тып: Выдаліць) {    выдаліць «рэліз/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) Click on Gradle tab (usually middle right) and scroll down to exportjar

5) Пасля таго, як вы бачыце <�моцны> пабудаваць паспяховы <�моцны /> паведамленне ў акне запуску, выкарыстоўваючы звычайны кіраўнік файлаў перайсці да экспартуемай банку, выкарыстоўваючы шлях: <�моцны> C: \ Users \ імя \ AndroidStudioProjects \ ProjectName \ прыкладанне \ выпуск Вы павінны бачыць у гэтым каталогу файл пляшкі.

Поспехаў :)

10
дададзена
дзякуй за рэдагаванне :-)
дададзена аўтар kleopatra, крыніца
Хоць гэтая спасылка можа адказаць на гэтае пытанне, то лепш ўключыць асноўныя часткі адказу тут і даць спасылку для даведкі. Link толькі адказы могуць стаць несапраўднымі, калі звязанымі рэдагаваць старонкі. - З агляду
дададзена аўтар Bono, крыніца
@Bono я проста абнавіў свой адказ з усімі крокамі
дададзена аўтар RMDev, крыніца
@kleopatra я проста абнавіў свой адказ з усімі крокамі
дададзена аўтар RMDev, крыніца

Вось яшчэ адзін, трохі іншы адказ з некалькімі паляпшэннямі.

Гэты код бярэ .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 .

8
дададзена

Мы можам экспартаваць файл банкі для бібліятэкі праекта Android без файлаў рэсурсаў на Android студыі. Акрамя таго, патрабаванне, што я сустрэў нядаўна.

<�Моцны> 1. Config файл 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 пад корань праекта

Вы ўбачыце вашы LIBS пад рэжам, як зборкі/LIBS/калі вы, да шчасця.

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

Калі вы сустрэлі праблему, як «выключэнне тайм-аўту сокета» у камандным радку, як паказана ніжэй,

enter image description here

Вы можаце сачыць за гэтым крокі, каб адкрыць акно Gradle ў правай частцы і націсніце кнопку «makeJar» на Android студыі, як гэта,

enter image description here

enter image description here

Затым ідуць будаваць/ЛИЭС рэж, вы ўбачыце свой файл JAR.

Спадзяюся, што гэта карысна для і.

Поспехаў @[email protected]

Luna

3
дададзена