Jak ręcznie dołączyć zewnętrzny pakiet aar za pomocą nowego systemu Gradle Android Build

Eksperymentowałem z nowym systemem Android i napotkałem mały problem. Skompilowałem własny pakiet Aar ActionBarSherlock, który nazwałem ' actionbarsherlock.aar". To, co próbuję zrobić, to użyć tego aar do zbudowania ostatecznego pliku APK. Jeśli dołączę całą bibliotekę ActionBarSherlock jako moduł biblioteki Androida do mojego głównego projektu za pomocą kompilacji projektu ( ': actionbarsherlock'), jestem w stanie zbudować z powodzeniem bez żadnych problemów.

Ale mój problem polega na tym, że Chcę dostarczyć tę zależność jako pakiet plików aar ręcznie, tylko jeśli chciałbym JAR to nie mogę się domyślić, jak poprawnie włączyć go do mojego projektu. Próbowałem użyć konfiguracji kompilacji, ale to chyba nie działa. Ciągle się nie mogę znaleźć symbolu podczas kompilacji, co mówi mi, że klasy.jar z pakietu aar nie jest dołączany do ścieżki klasowej.

Czy ktoś zna składnię ręcznego dołączania pakietu aar jako akta?

Zbuduj.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: więc odpowiedź jest taka, że nie jest obecnie obsługiwany, oto problem jeśli chcesz go śledzić.

EDIT: obecnie, ponieważ nadal nie jest to bezpośrednio obsługiwane, najlepszą alternatywą wydaje się być proponowane rozwiązanie z @RanWakshlak

EDIT: także prostsze dzięki składni zaproponowanej przez @VipulShah

Author: Miguel Lavigne, 2013-05-22

17 answers

Wykonaj poniższe kroki, aby go uruchomić ( Przetestowałem go w Android Studio 2.2)

Powiedzmy, że przechowałeś plik AAR w folderze libs. (Załóżmy, że nazwa pliku to cards.aar)

Następnie w aplikacji build.gradle Określ następujące i kliknij Synchronizuj projekt z plikami Gradle. Open project level build.gradle i dodaj flatDir{dirs 'libs'} Jak poniżej

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

I teraz otwórz build poziomu aplikacji.plik grdle i dodaj .aar plik

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

Jeśli wszystko pójdzie dobrze, zobaczysz, że wpis do biblioteki jest made in build- > exploded-AAR

Należy również pamiętać, że jeśli importujesz a .plik aar z innego projektu, który ma zależności, musisz uwzględnić je w swojej kompilacji.gradle też.

 569
Author: Vipul Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-07 11:25:57
  1. Kliknij prawym przyciskiem myszy projekt i wybierz "Otwórz Ustawienia modułu" .

Otwórz Ustawienia modułu

  1. Kliknij "+" Przycisk w lewym górnym rogu okna, aby dodać nowy moduł.

Dodaj nowy moduł

  1. Select " Import .Słoik lub .Pakiet AAR" i kliknij przycisk "Dalej".

Import AAR

  1. Znajdź plik AAR za pomocą przycisku elipsa "..." obok " nazwa pliku" pole.

Znajdź plik AAR

  1. pozostaw wybrany moduł aplikacji i kliknij na panelu zależności , aby dodać nowy moduł jako zależność.

Panel zależności

  1. Użyj "+" Przycisk na ekranie zależności i wybierz "zależność modułu" .

Dodaj zależność modułu

  1. Wybierz moduł i kliknij " OK " .

Wybierz moduł

 188
Author: Oliver Kranz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-15 09:39:41

Możesz odwołać się do pliku aar z repozytorium. Maven jest opcją, ale jest prostsze rozwiązanie: umieść plik aar w katalogu libs i dodaj repozytorium katalogów.

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

Następnie odwołaj się do biblioteki w sekcji zależności:

dependencies {
  compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
}
Możesz sprawdzić Min ' an blog post aby uzyskać więcej informacji.
 96
Author: Ran Wakshlak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-23 04:11:45

Poniższe podejście działa z najnowszym Android studio (>v0. 8.x):

  • Zapisz plik aar w folderze libs modułu aplikacji (np.: <project>/<app>/libs/myaar.aar)

  • Dodaj poniżej, aby zbudować.gradle z folderu modułu " app " (nie twój projekt root build.gradle). Zwróć uwagę na nazwę w linii kompilacji, to myaar@AAR nie myaar.aar.

    dependencies {
        compile 'package.name.of.your.aar:myaar@aar'
    }
    
    repositories{
        flatDir{
            dirs 'libs'
        }
    }
    
  • Klik Tools -> Android -> Sync Project with Gradle Files

 41
Author: ashoke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-09 19:58:11

Obecnie odwołuje się do lokalnego .plik aar nie jest obsługiwany (co potwierdził Xavier Ducrochet)

Zamiast tego możesz skonfigurować lokalne repozytorium Mavena (znacznie prostsze niż się wydaje) i odwołać się do .aar stamtąd.

Napisałem blogpost szczegółowo opisujący jak to działa tutaj:

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

 20
Author: Artiom Chilaru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-27 12:34:08

Możesz dodać wiele zależności aar za pomocą kilku linijek kodu.

Dodaj lokalne flatDir repozytorium:

repositories {
    flatDir {
        dirs 'libs'
    }
} 

Dodaj każde aar w katalogu libs do compile Konfiguracja zależności:

fileTree(dir: 'libs', include: '**/*.aar')
        .each { File file ->
    dependencies.add("compile", [name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0..<it] : file.name }, ext: 'aar'])
}
 16
Author: mixel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-27 19:52:38

Udało mi się!

  1. Skopiuj mylib-0.1.aar plik do folderulibs/

  2. Dodaj te linie na dole budowania.gradle (powinna być aplikacja, nie projekt):

    repositories {
       flatDir {
           dirs 'libs'
       }
    }
    dependencies {
        compile 'com.example.lib:mylib:0.1@aar'
    }
    
  3. Jak na razie dobrze. Oto najważniejszy punkt:

Gradle musi uzyskać dostęp do sieci Dla zależności, chyba że włączony jest tryb offline.

Upewnij się, że włączyłeś pracę Offline poprzez checkbox in Project Structures / Gradle

-- lub --

Skonfiguruj ustawienia serwera proxy w celu uzyskania dostępu do sieci.

Aby skonfigurować ustawienia proxy musisz zmodyfikować gradle projektu.właściwości pliku , konfigurowanie http i https oddzielnie, jak poniżej:

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 <for NT auth>

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 <for NT auth>
Mam nadzieję, że to zadziała.
 16
Author: Orhun D.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-22 22:40:44

Niestety żadne z rozwiązań tutaj nie zadziałało dla mnie (dostaję nierozwiązane zależności). Co w końcu zadziałało i jest najprostszym sposobem IMHO jest: Podświetl nazwę projektu z Android Studio, a następnie Plik - > Nowy Moduł - > Importuj pakiet JAR lub Aar. Kredyt idzie na rozwiązanie w Ten post

 13
Author: Nonos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-08 15:44:57

Before (default)

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

Wystarczy dodać '*.aar' w include tablicy.

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

To działa dobrze na Android Studio 3.x.

 9
Author: susemi99,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-05 09:00:33

Ja też miałem ten problem. Ten raport: https://code.google.com/p/android/issues/detail?id=55863 wydaje się sugerować, że bezpośrednio odwołując się do .Plik AAR nie jest obsługiwany.

Być może alternatywą na razie jest zdefiniowanie biblioteki actionbarsherlock jako biblioteki Gradle w katalogu nadrzędnym twojego projektu i odpowiednie odniesienie.

Składnia jest zdefiniowana tutaj http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library

 6
Author: manyobject,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-29 23:07:34

W moim przypadku mam kilka depenencji w mojej bibliotece i kiedy tworzę aar z niej nie udało mi się, z powodu brakujących depenencji, więc moim rozwiązaniem jest dodanie wszystkich depenencji z mojej biblioteki za pomocą pliku arr.

Więc mój poziom projektu build.gradle wygląda tak:

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) więc:

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
    ...
}

I biblioteka 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
Author: mohax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-26 18:12:10

Próbowałem wszystkie rozwiązania tutaj, ale żaden nie działa, a następnie zdaję sobie sprawę, że popełniłem błąd, i umieścić .aar w niewłaściwym folderze, jak widać poniżej, pomyślałem, że należy umieścić w folderze głównym, więc utworzyłem libs folder tam (1 Na zdjęciu), ale wewnątrz folderu aplikacji, jest już libs, należy umieścić w drugim libs, nadzieję, że to pomoże tym, którzy mają ten sam problem jak mój:

Tutaj wpisz opis obrazka

 3
Author: GMsoF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-01 02:59:49

Standardowy sposób importowania pliku AAR w aplikacji jest podany w https://developer.android.com/studio/projects/android-library.html#AddDependency

Kliknij Plik > Nowy > Nowy Moduł. Kliknij Importuj .JAR/Pakiet AAR, a następnie kliknij Dalej. Wprowadź lokalizację skompilowanego pliku AAR lub jar, a następnie kliknij przycisk Zakończ.

Prosimy o zapoznanie się z powyższym linkiem, aby zapoznać się z kolejnymi krokami.

 3
Author: garnet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-29 14:49:10

Istnieją 2 sposoby:

  • pierwsza droga

1: Otwórz Android Studio i przejdź do okna "Utwórz nowy moduł" przez Plik->Nowy->Nowy Moduł ...

Tutaj wpisz opis obrazka

2: wybierz " Import .JAR/Pakiet AAR " i kliknij przycisk Dalej

3: Dodaj zależność w build.gradle pliku, który należy do Twojego app Modlue.

dependencies {
    ...

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

}
To wszystko.
  • druga droga

1 Utwórz folder w katalogu libs, takim jak aars.

2 Umieść aar lib w folderze aars.

3 Dodaj fragment kodu

repositories { flatDir { dirs 'libs/aars' } }

Do pliku build.gradle należy app module.

4 Dodaj zależność w build.gradle pliku, który należy do Twojego app Modlue.

dependencies { ... compile(name:'your aar lib name', ext:'aar') }

To wszystko

Jeśli umiesz czytać po chińsku, możesz sprawdzić blog 什么是aar文and在在android中中使用

 3
Author: shusheng007,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-27 01:50:54

Znalazłem to obejście w śledzeniu problemów z Androidem: https://code.google.com/p/android/issues/detail?id=55863#c21

[[1]}sztuczka (nie fix) polega na izolowaniu swojego .pliki aar do podprojektu i dodawanie bibliotek jako artefaktów:
configurations.create("default")
artifacts.add("default", file('somelib.jar'))
artifacts.add("default", file('someaar.aar'))

Więcej informacji: Handling-transitive-dependencies-for-local-artefacts-jars-and-aar

 2
Author: jiparis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-14 15:26:02

Just to simplify the answer

Jeśli .plik aar jest lokalnie obecny, a następnie dołącz
compile project(':project_directory') w zależności od budowy.gradle twojego projektu.

Jeśli .plik AAR obecny w zdalnym następnie zawierać compile 'com.*********.sdk:project_directory:0.0.1@aar' in dependencies of build.gradle twojego projektu.

 2
Author: anupam_kamble,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-09 08:53:29

W moim przypadku po prostu działa, gdy dodam "projekt" do kompilacji:

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


dependencies {
   compile project('com.x.x:x:1.0.0')
}
 0
Author: josedlujan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 20:21:19