Як уручную ўключыць знешні пакет AAR з выкарыстаннем новай сістэмы зборкі Gradle Android

Я эксперыментаваў з новай сістэмай зборкі Android і я сутыкнуўся з невялікай праблемай. Я склаў свой уласны AAR пакет ActionBarSherlock, які я назваў «actionbarsherlock.aar». Тое, што я спрабую зрабіць, гэта на самай справе выкарыстаць гэтую AAR, каб пабудаваць свой канчатковы APK. Калі б я ўключыў ўсю бібліятэку ActionBarSherlock як АНДРОІД-бібліятэчны модуль да майго асноўнаму праекту, выкарыстоўваючы праект кампіляцыі ( «: ActionBarSherlock») Я ў стане паспяхова будаваць без якіх-небудзь праблем.

Але мая праблема заключаецца ў тым, што я хачу, каб забяспечыць гэтую залежнасць у выглядзе пакета файлаў AAR ўручную толькі калі я баночка, то я не магу здацца, каб высветліць, як правільна ўключыць яго ў свой праект. Я спрабаваў выкарыстаць канфігурацыю кампіляцыі, але гэта не падобна на працу. Я працягваю атрымліваць не можа знайсці сімвал падчас кампіляцыі, які кажа мне, што classes.jar з пакета AAR не атрымлівае уключаны ў шляху да класаў.

Хто-небудзь ведае сінтаксіс ўручную ўключаць пакет AAR ў выглядзе файла?

build.gradle

buildscript {

 repositories {
     mavenCentral()
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:0.4'
  }
}
apply plugin: 'android'

repositories {
   mavenCentral()
}
dependencies {
    compile files('libs/actionbarsherlock.aar')
}

android {
    compileSdkVersion 15
    buildToolsVersion "17.0"
}

EDIT: Такім чынам, адказ у тым, што ён у цяперашні час не падтрымліваецца, вось пытанне калі вы хочаце адсочваць яго.

EDIT: У цяперашні час, як гэта да гэтага часу не падтрымліваецца непасрэдна лепшая альтэрнатыва, як уяўляецца, прапанаванае рашэнне ад @RanWakshlak

EDIT: Акрамя таго прасцей, выкарыстоўваючы сінтаксіс, прапанаваны @VipulShah

313
Калі вы выкарыстоўваеце Gradle 3.0.0 або вышэй, гэта простая ўстаноўка Gradle працаваў для мяне: stackoverflow.com/questions/29081429/…
дададзена аўтар user1506104, крыніца
Паглядзіце на маё пытанне і адказ тут stackoverflow.com/a/31662782/746347
дададзена аўтар mixel, крыніца
Разгледзім адказ Vipul шаха: ён, нарэшце, працаваў для мяне, без лакальнага рэпазітара Maven, а з Android Studio 0.5.8.
дададзена аўтар shkschneider, крыніца

17 адказы

<�Моцны> Калі ласка, прытрымлівайцеся ніжэй крокаў, каб прымусіць яго працаваць (я праверыў яго да Android Studio 2.2)

Дапусцім, вы захавалі файл AAR ў тэчцы Libs. (Выкажам здагадку, што імя файла cards.aar )

затым у дадатку build.gradle пазначыць наступную каманду і націсніце сінхранізацыі праекта з Gradle файламі. Адкрыць build.gradle і ўзровень праекта дадаць flatDir {DIRS '' LIBS} , як зрабіў ніжэй

allprojects {
   repositories {
      jcenter()
      flatDir {
        dirs 'libs'
      }
   }
}

і цяпер ўзровень адкрытага прыкладання build.grdle файл і дадаць .aar файл

    dependencies {
       compile(name:'cards', ext:'aar')
}

If everything goes well you will see library entry is made in build -> exploded-aar

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

558
дададзена
Можа быць, варта рэкамендаваць паставіць змены ў дадатак модуля «build.gradle», а не ў верхняй тэчцы «build.gradle».
дададзена аўтар loloof64, крыніца
@VipulShah, дзе знаходзіцца каталог ЛИЭС?
дададзена аўтар StuStirling, крыніца
знайшоў адказ на маё пытанне вышэй: замест кампіляцыі залежнасці дадаць два залежнасцяў debugCompile (імя: «карта-адладка», унутр: «ААР») і releaseCompile (назва: 'карта-рэліз', унутр: 'ААР')
дададзена аўтар Iftah, крыніца
Што мне рабіць, калі ў мяне ёсць два ААР: выпуск і адладкі? напрыклад. <�Код> карта-debug.aar і карта-release.aar ?
дададзена аўтар Iftah, крыніца
Я лічу, што каталог ЛИЭСА ідзе ў дырэкторыі прыкладання. Я атрымаў паведамленне пра памылку Не атрымалася дазволіць , калі я быў LIBS паралельна з каталогам прыкладанняў. Але пакласці ЛИЭС пад прыкладанне дазволіла мне скампіляваць.
дададзена аўтар Michael Osofsky, крыніца
Вялікі адказ! Хоць я аддаю перавагу афіцыйны шлях (імпарт .jar або .aar пакет), я знайшоў гэты метад з'яўляецца найбольш надзейным. Афіцыйны метад працуе з некаторымі пакетамі AAR, але не з іншымі, але гэта заўсёды працуе. Я выкарыстоўваю рэалізацыі дрэве файлаў (у тым ліку: «* .aar», рэж: «ЛИЭС») замест таго, каб рабіць гэта для кожнага AAR пакетаў.
дададзена аўтар Hong, крыніца
гэта працуе, але я думаю, што першая частка знаходзіцца на налады build.gradle , а ніжняя частка на дадатак <�б> build.gradle
дададзена аўтар Swarup Rajbhandari, крыніца
Ёсць рэкамендуемы падыход да размяркоўваючы бібліятэку, якая ўтрымлівае залежнасць AAR, як гэта? Калі я звязваўся мае бібліятэкі AAR, я хацеў бы, каб уключыць гэтую Lib залежнасці такі, што спажыўцам маёй бібліятэкі ня трэба спампоўваць тое, што яны маглі б разгледзець транзітыўнасць залежнасць.
дададзена аўтар atreat, крыніца
Не варта блытаць з кодам ўзору. Першы блок з allprojects {...} пераходзіць у «праект» Gradle файла ўзроўню, а другая частка з залежнасцямі {...} павінен ісці ў «прыкладанне» ўзровень Gradle файла.
дададзена аўтар Kirill Karmazin, крыніца
flatDir занадта павольна на Android Studio 2.2.3 !!
дададзена аўтар oyenigun, крыніца
Вялікі дзякуй! Гэта працуе.
дададзена аўтар Stoica Mircea, крыніца
  1. Пстрыкніце правай кнопкай мышы на праекце і абярыце <�моцны> "Адкрыць налады модуля" .

Open module settings

  1. Націсніце кнопку "+" ў верхнім левым куце акна, каб дадаць новы модуль.

Add new module

  1. Вылучыце <�моцны> "Імпарт .JAR або .AAR пакет" і націсніце кнопку "Далей" .

Import AAR

  1. Знайдзіце файл AAR, выкарыстоўваючы кнопку з шматкроп'ем <�моцны> "..." побач з полем "Назва".

Find AAR file

  1. Трымайце модуль у дадатку абраныя і націсніце на Залежнасці панэлі, каб дадаць новы модуль ў якасці залежнасці.

Dependencies pane

  1. Выкарыстоўвайце <�моцны> "+" Кнопка экрана залежнасцяў і абярыце <�моцны> "Модуль залежнасцяў" .

Add module dependency

  1. Вылучыце модуль і націсніце <�моцны> "OK" .

Choose module

183
дададзена
Ты найлепшы!
дададзена аўтар JasonStack, крыніца
крокі з 5 па 7 зрабіў трук :-)
дададзена аўтар Vitaliy A, крыніца
Лепшы адказ, майце на ўвазе, пасля гэтага макіяжам Alt + B </код >> чыстай і аднавіць праект. Android Студыя чаму вы балюча! Я хацеў бы мець IDE NetBeans, як платформы для распрацоўнікаў Android
дададзена аўтар java acm, крыніца
@Oliver Вы дзіўны!
дададзена аўтар ankit purwar, крыніца

Вы можаце спасылацца на файл AAR са сховішча. Maven з'яўляецца варыянтам, але ёсць больш простае рашэнне: змясціць AAR файл у дырэкторыі LIBS і дадайце рэпазітар каталогаў.

repositories {
  mavenCentral()
  flatDir {
    dirs 'libs'
  }
}

Затым спасылкі на бібліятэку ў раздзеле залежнасцяў:

dependencies {
  compile 'com.actionbarsherlock:actionbarsherlock:[email protected]'
}

Вы можаце праверыць Min'an блог для атрымання дадатковай інфармацыі.

94
дададзена
Працуе як шарм, дзякуй!
дададзена аўтар Karthik T, крыніца
Гэта выдатна працуе, і лепш, чым прынятыя/вышэй намінальных адказы, таму што гэта прасцей і я магу ўключыць яго ў сістэме кіравання версіямі без дадання файла на лакальны Maven РЭПО кожнага распрацоўніка (калі я павінен быў зрабіць гэта, навошта выкарыстоўваць Gradle у першую чаргу ?) Дзякуй!
дададзена аўтар ajpolt, крыніца
Самае галоўнае, каб адзначыць у гэтым адказе згадвае «@aar» у канцы залежнасці.
дададзена аўтар Atharva, крыніца
@ajpolt Верагодна, рэкамендуецца наладзіць сервер РЭПО замест (для ўласных DEPS), таму вам не прыйдзецца паставіць яго на Паннаў машынах або ў тэчцы Lib вашага праекта. Калі ёсць толькі адзін залежнасць, кінуць яго ў Maven структураваныя Google рэпазітар кода (як часовы РЭПО)
дададзена аўтар Lo-Tan, крыніца

The below approach works with latest Android studio (> v0.8.x):

  • Save the aar file under app module's libs folder (eg: //libs/myaar.aar)

  • Add the below to build.gradle of your "app" module folder (not your project root build.gradle). Note the name in compile line, it is [email protected] not myaar.aar.

    dependencies {
        compile 'package.name.of.your.aar:[email protected]'
    }
    
    repositories{
        flatDir{
            dirs 'libs'
        }
    }
    
  • Click Tools -> Android -> Sync Project with Gradle Files

41
дададзена
У выпадку, калі хто-то гэта трэба, калі Gradle працуе нармальна, але вы ўсё яшчэ не можаце ўбачыць класы, перазапусціць Android Studio ...
дададзена аўтар htafoya, крыніца
Яго праца для мяне
дададзена аўтар SIVAKUMAR.J, крыніца
Гэта рашэнне выдатна працуе ў AS2.2 - Gradle дзіўна прыдзірлівы на сінтаксісе AAR файлаў гэта здаецца.
дададзена аўтар Jim Andreas, крыніца
Працуе выдатна на AS 1.0
дададзена аўтар Pablo Johnson, крыніца

У цяперашні час спасылкі на лакальны файл .aar не падтрымліваецца (як пацверджана Xavier Ducrochet)

Што вы можаце зрабіць замест гэтага стварыць лакальны рэпазітар Maven (значна больш просты, чым гэта гучыць) і спасылкі на .aar адтуль.

Я напісаў BlogPost з падрабязным апісаннем, як атрымаць яго працу тут:

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

20
дададзена
Праверце гэтае пытанне stackoverflow.com/questions/20911665/… , калі пасля выканання навучальнага ваш лакальны файл .aar не знойдзены (на Gradle 1.9 або вышэй)
дададзена аўтар Maragues, крыніца
Thx гэта мне вельмі дапамагае
дададзена аўтар tbruyelle, крыніца
Я не змог прымусіць яго працаваць, калі артэфакт здымак, любая ідэя, чаму?
дададзена аўтар tbruyelle, крыніца
Thx Арцёму для агульнага блогу
дададзена аўтар Miguel Lavigne, крыніца
Ці атрымалі вы гэтую працу з Eclipse, ці толькі Android студыі? З зацьменнем, «Gradle зацьменне» дадае файл AAR да класаў, але зацьменне не прызнае класы ў ёй.
дададзена аўтар andrej_k, крыніца

Вы можаце дадаць некалькі AAR залежнасцямі з дапамогай усяго некалькіх радкоў кода.

Дадаць лакальны flatDir Рэпазітар:

repositories {
    flatDir {
        dirs 'libs'
    }
} 

Дадайце кожны AAR у LIBS каталог, кампіляцыі Канфігурацыя залежнасцяў:

fileTree(dir: 'libs', include: '**/*.aar')
        .each { File file ->
    dependencies.add("compile", [name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0..
16
дададзена
@mixel вы чалавек (Thumbsup).
дададзена аўтар Hazem Saleh, крыніца
Гэта працавала, але як можна паставіць галачку, калі залежнасць ўжо дададзеная ў Maven залежнасці, то я не хачу, што файл AAR павінен быць дададзены, PS: Im выкарыстоўваючы гэтую функцыю, каб напісаць убудова, які аўтаматычна дадае мой AAR да адроід праекта і дадае залежнасць у build.gradle
дададзена аўтар Adi, крыніца
Дзякуй за адказ, Як я ўжо казаў, дадаўшы AAR да LIBS аўтаматызавана з дапамогай Android студыі плагіна, які ў распрацоўцы, таму я хачу ведаць, ці з'яўляецца залежнасць якой убудова дадае да файла build.gradle ўжо дададзеная раней.
дададзена аўтар Adi, крыніца
@Adi Калі ў вас ужо ёсць Maven залежнасць, то не ставіць адпаведныя AAR ў LIBS тэчку.
дададзена аўтар mixel, крыніца
У мяне няма адказу прама цяпер. Я думаю, што лепш стварыць асобнае пытанне.
дададзена аўтар mixel, крыніца
Кропка для запісу прычыны flatDir
дададзена аўтар Jemshit Iskenderov, крыніца
Ён працаваў для мяне .... Дзякуй
дададзена аўтар M.Hefny, крыніца

Я толькі што ўдалося!

  1. Copy the mylib-0.1.aar file into the libs/ folder

  2. Add these lines to the bottom of build.gradle (should be app, not project):

    repositories {
       flatDir {
           dirs 'libs'
       }
    }
    dependencies {
        compile 'com.example.lib:mylib:[email protected]'
    }
    
  3. So far so good. Here comes the most important point:

Gradle неабходны доступ да сеткі залежнасцяў, калі аўтаномны рэжым не ўключаны.

Пераканайцеся, што вы ўключылі <�моцны> аўтаномнай працы з дапамогай сцяжка ў структурах Project/Gradle

- АБО -

Настройка наладжвання проксі-сервера для таго, каб атрымаць доступ да сеткі.

Каб наладзіць параметры проксі-сервера неабходна змяніць праекта <�моцны> gradle.properties <�моцны /> файл, налада HTTP і HTTPS асобна, як паказана ніжэй:

systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=user
systemProp.http.proxyPassword=pass
systemProp.http.nonProxyHosts=localhost
systemProp.http.auth.ntlm.domain=example 

systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=user
systemProp.https.proxyPassword=pass
systemProp.https.nonProxyHosts=localhost
systemProp.https.auth.ntlm.domain=example 

Спадзяюся, што гэта працуе.

16
дададзена

Unfortunately none of the solutions here worked for me (I get unresolved dependencies). What finally worked and is the easiest way IMHO is: Highlight the project name from Android Studio then File -> New Module -> Import JAR or AAR Package. Credit goes to the solution in this post

13
дададзена
Варта адзначыць, што Android-студыя выключна расплывіста ў іх майстру імпарту. Калі яны заяўляюць, «Імя файла» у адным з крокаў, што яны на самой справе просяць гэта шлях да файла ... Спадзяюся, гэта паведамленне ратуе іншых ад галаўнога болю.
дададзена аўтар Tukajo, крыніца

раней (па змаўчанні)

implementation fileTree(include: ['*.jar'], dir: 'libs')

проста дадайце '*. AAR' у ўключыць масіў.

implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')

ён добра працуе на Android студыі 3.x.

8
дададзена
У той час як гэты код можа адказаць на пытанне, забяспечваючы дадатковы кантэкст аб <�б> як і/або <�б> чаму вырашае праблему дазволіць палепшыць доўгатэрміновую каштоўнасць адказу на выклік ст.
дададзена аўтар Alexander, крыніца

Я таксама меў гэтую праблему. Гэтая справаздача аб выніках выпуску: https://code.google.com/p/android/пытанні/дэталі? ID = 55863 дазваляе выказаць здагадку, што непасрэдна спасылаецца файл .AAR не падтрымліваецца.

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

The syntax is defined here http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library

6
дададзена
Дзякуй за спасылку на пытанне. Ды я ведаю, як зрабіць гэтую працу з дапамогай Gradle Android Library, але гэты варыянт не вельмі аптымальны для праекта, я працую на але тнх!
дададзена аўтар Miguel Lavigne, крыніца

Я паспрабаваў усё рашэнні тут, але ніхто не працуе, то я разумею, што я зрабіў памылку, я паставіў .aar у той тэчцы, як вы можаце ўбачыць ніжэй, я думаў, што я павінен пакласці ў каранёвай тэчцы, так Я стварыў LIBS татка ёсць (1 на малюнку), але ўнутры тэчкі прыкладання, ёсць ужо LIBS , вы павінны змясціць у другой LIBS </код >, спадзяюся, што гэта дапаможа тым, хто мае такое ж пытанне, як у мяне:

enter image description here

3
дададзена

The standard way to import AAR file in an application is given in https://developer.android.com/studio/projects/android-library.html#AddDependency

Click File > New > New Module. Click Import .JAR/.AAR Package then click Next. Enter the location of the compiled AAR or JAR file then click Finish.

Калі ласка, звярніцеся па спасылцы вышэй для наступных крокаў.

3
дададзена

У маім выпадку ў мяне ёсць некаторыя depencies ў маёй бібліятэцы, і калі я ствараю AAR з яго мне не атрымалася, з-за прапушчаных depencies, таму маё рашэнне, каб дадаць ўсе depencies з маёй Lib з обр файл.

Так што мой узровень праекта build.gradle выглядае так:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
    }
}

allprojects {
    repositories {
        mavenCentral()
        //add it to be able to add depency to aar-files from libs folder in build.gradle(yoursAppModule)
        flatDir {
            dirs 'libs'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(modile app) so:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.example.sampleapp"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    //your project depencies
    ...
    //add lib via aar-depency
    compile(name: 'aarLibFileNameHere', ext: 'aar')
    //add all its internal depencies, as arr don't have it
    ...
}

і бібліятэка build.gradle :

apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    //here goes library projects dependencies, which you must include
    //in yours build.gradle(modile app) too
    ...
}
3
дададзена

Там ёсць 2 спосабу:

  • Першы спосаб

1:Open your Android Studio and navigate to the "Create New Module"window by File->New->New Module ...

enter image description here

2: Выберыце «Імпарт .JAR/.AAR Пакет» элемент і націсніце кнопку Далей

3: Дадаць залежнасць у build.gradle файл, які належыць вашаму Дадатак Modlue.

dependencies {
    ...

    implementation project(path: ':your aar lib name')

}

што ўсё.

  • другі шлях

1 Стварыце тэчку LIBS каталог, такія як AARS .

2 Змесціце AAR LIB ў тэчку AARS.

3 Дадайце фрагмент кода

<�Код> рэпазітар {     flatDir {         DIRS 'LIBS/Аарс'     } }

у ваш build.gradle файл належыць да дадатку модуль.

4 Дадаць у залежнасць build.gradle файл, які належыць вашаму Дадатак Modlue.

<�Код> залежнасці {     ...     кампіляцыі (імя: 'ваш AAR Lib імя', доб: 'AAR') }

што ўсе

if you can read Chinese, you can check the blog 什么是AAR文件以及如何在Android开发中使用

3
дададзена

Проста каб спрасціць адказ

Калі .aar файл лакальна прысутнічае, то ўключаюць
<�Код> кампіляцыі праекта ( ': project_directory') у залежнасці ад build.gradle вашага праекта.

Калі .aar файл прысутнічае на выдалены затым ўключыць <�Код> кампіляваць 'ком ********* SDK: .. Project_directory: [email protected] у залежнасці ад build.gradle вашага праекта.

2
дададзена

I found this workaround in the Android issue tracker: https://code.google.com/p/android/issues/detail?id=55863#c21

Хітрасць (не выправіць), каб ізаляваць вашыя .aar файлаў у подпроект і дадаць свае LIBS як артэфакты:

configurations.create("default")
artifacts.add("default", file('somelib.jar'))
artifacts.add("default", file('someaar.aar'))

More info: Handling-transitive-dependencies-for-local-artifacts-jars-and-aar

2
дададзена

У маім выпадку проста працаваць, калі я дадаць «праект» для кампіляцыі:

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}


dependencies {
   compile project('com.x.x:x:1.0.0')
}
0
дададзена