Yeni Gradle Android Build Sistemi kullanılarak harici aar paketini manuel olarak ekleme


406

Yeni android derleme sistemini deniyorum ve küçük bir sorunla karşılaştım. 'Actionbarsherlock.aar' adını verdiğim kendi aar ActionBarSherlock paketimi derledim. Yapmaya çalıştığım şey aslında son APK'mı oluşturmak için bu aar'ı kullanmak. Tüm ActionBarSherlock kütüphanesini derleme projesi (': actionbarsherlock') kullanarak ana projeme bir android-kütüphane modülü olarak eklersem, sorunsuz bir şekilde başarılı bir şekilde oluşturabilirim.

Ama benim sorunum ben bir AAR dosya paketi olarak bu bağımlılığı MANUALLY sadece bir JAR olurdu eğer o zaman benim projeye düzgün dahil etmek nasıl anlamaya görünmüyor istiyorum. Derleme yapılandırmasını kullanmaya çalıştım ama bu işe yaramıyor. Ben aar paketinden classes.jar sınıf yoluna dahil olmadığını söyler derleme sırasında sembolü bulamıyorum devam.

Bir sözdizimini aar paketini el ile dosya olarak eklemek bilen var mı?

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

DÜZENLEME: Yani cevap şu anda desteklenmiyor, izlemek istiyorsanız sorun İşte .

EDIT: Şu anda bu hala doğrudan desteklenmediği için en iyi alternatif @RanWakshlak önerilen çözüm gibi görünüyor

EDIT: @VipulShah tarafından önerilen sözdizimini kullanarak da daha basit


Vipul Shah'ın cevabını düşünün: nihayet Android Studio 0.5.8'den itibaren yerel maven deposu olmadan benim için çalıştı.
shkschneider

Soruma bir bakın ve buraya cevap verin stackoverflow.com/a/31662782/746347
mixel

Gradle 3.0.0 veya üstünü kullanıyorsanız, bu basit Gradle kurulumu benim için çalıştı: stackoverflow.com/questions/29081429/…
user1506104

Yanıtlar:


670

Çalıştırmak için lütfen aşağıdaki adımları izleyin (Android Studio 2.2'ye kadar test ettim)

Diyelim ki aar dosyasını libs klasöründe tuttunuz. (dosya adının olduğunu varsayalım cards.aar)

daha sonra uygulamada build.gradleaşağıdaki belirtin ve projeyi Gradle dosyalarıyla senkronize et seçeneğini tıklatın. Project level build.gradle dosyasını açın ve flatDir{dirs 'libs'}aşağıdaki gibi ekleyin

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

ve şimdi uygulama düzeyinde build.grdle dosyasını açın ve .aardosya ekleyin

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

Her şey yolunda giderse kütüphane girişinin derleme yapıldığını göreceksiniz -> patladı

Ayrıca, bağımlılıkları olan başka bir projeden bir .aar dosyasını içe aktarıyorsanız, bunları build.gradle dosyasına da eklemeniz gerektiğini unutmayın.


5
@VipulShah libs dizini nerede bulunur?
StuStirling

2
Belki de modifikasyonları 'build.gradle' değil, 'build.gradle' uygulama modülüne koymanız tavsiye edilir.
loloof64

3
yukarıdaki soruma cevap bulundu: compilebağımlılık yerine iki bağımlılık ekleyin debugCompile(name:'cards-debug', ext:'aar')vereleaseCompile(name:'cards-release', ext:'aar')
Iftah

2
Örnek kod ile karıştırılmamalıdır. allprojects {...}İle ilk blok "proje" seviye sınıflandırma dosyasına gider ve ikinci bölüm ile dependencies {...}"app" seviye sınıflandırma dosyasına gitmek gerekir.
Kirill Karmazin

8
Lütfen yanıtınızı güncelleyin: UYARI: 'Derleme' yapılandırması geçersiz ve yerine 'uygulama' ve 'api' getirildi. 2018'in
B-GangsteR

248
  1. Projenize sağ tıklayın ve "Modül Ayarlarını Aç" ı seçin .

Modül ayarlarını aç

  1. Click "+" yeni bir modül eklemek için pencerenin sol üst köşesindeki düğmesini.

Yeni modül ekle

  1. ".JAR veya .AAR Paketini İçe Aktar" ı seçin ve "İleri" düğmesine tıklayın.

AAR'ı İçe Aktar

  1. "Dosya adı" alanının yanındaki üç nokta düğmesini "..." kullanarak AAR dosyasını bulun .

AAR dosyasını bul

  1. Uygulamanın modülünü seçili tutun ve yeni modülü bağımlılık olarak eklemek için Bağımlılıklar bölmesini tıklayın .

Bağımlılıklar bölmesi

  1. Bağımlılıklar ekranının "+" düğmesini kullanın ve "Modül bağımlılığı" nı seçin .

Modül bağımlılığı ekle

  1. Modülü seçin ve "Tamam" ı tıklayın .

Modül seç


4
En İyi Yanıt, bundan sonra aklınızda bulundurun Alt+B> projeyi temizleyin ve yeniden oluşturun. Android Studio neden acı veriyorsun! NetBeans IDE'nin Android Geliştirici Platformu olmasını istiyorum
java acm

@Oliver Harikasın!
ankit purwar

Sen en iyisin!
codezombie

2
aarProjenize biraz lib eklemek istediğinizde yeni bir modül oluşturmak iyi bir fikir değil
Kirill Karmazin

Harikasın arkadaşım. !! Şerefe.
Timothy Macharia

112

Bir depodan aar dosyasına başvurabilirsiniz. Maven bir seçenektir, ancak daha basit bir çözüm vardır: aar dosyasını libs dizininize koyun ve bir dizin deposu ekleyin.

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

Sonra bağımlılık bölümündeki kütüphaneye bakın:

  dependencies {
        implementation 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
}

Daha fazla bilgi için Min'an blog yazısına göz atabilirsiniz .


1
Bu harika çalışıyor ve kabul edilen / daha yüksek puanlı cevaplardan daha iyi çünkü daha basit ve bunu her geliştiricinin yerel maven deposuna dosya eklemeden sürüm kontrolüne dahil edebilirim (bunu yapmak zorundaysam, neden Gradle'ı ilk etapta kullanmalıyım? ?) Teşekkürler!
ajpolt

@ajpolt Muhtemelen bunun yerine bir repo sunucusu kurmanız tavsiye edilir (özel mülkler için), böylece onu dev makinelere veya projenizin lib klasörüne koymanıza gerek kalmaz. Sadece bir bağımlılığınız varsa, bunu maven yapılandırılmış bir Google kod deposuna atın (geçici bir repo olarak)
Lo-Tan

4
Bu cevapta dikkat edilmesi gereken en önemli nokta bağımlılığın sonunda '@aar' den bahsetmektir.
Atharva

Sanırım bu artık en yeni gradle eklentisi ile çalışmayacak: stackoverflow.com/questions/60878599/…
David

Bu, tüm modern sözdizimi implementationvb. Dahil en basit formu içeren tek cevaptır . Bu, çözümü kopyalayıp yapıştırır. Android Build Gradle Plugin 4.0.0 artık yeni upvotes geliyor, şimdi kırık .aar yollarını görmezden gelmek yerine bir hata atıyor
Patrick

51

Aşağıdaki yaklaşım en son Android stüdyosu (> v0.8.x) ile çalışır:

  • Kaydet aaruygulama modülünün altında dosyanın libsklasörüne (örn: <project>/<app>/libs/myaar.aar)

  • "App" modül klasörünüzün build.gradle öğesini ekleyin (proje kökü build.gradle değil). Derleme satırındaki adı not edin, myaar @ aar değil myaar.aar.

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


3
AS 1.0'da mükemmel çalışıyor
Pablo Johnson

1
Birinin ihtiyaç duyması durumunda, sınıfta işe yararsa ancak yine de sınıfları göremiyorsanız, Android Studio'yu yeniden başlatın ...
htafoya

1
Bu çözüm AS2.2'de harika çalışıyor - gradle, AAR dosyalarının sözdiziminde inanılmaz derecede seçici.
Jim Andreas

Lütfen güncelleyin veya silin, derleme kullanımdan kaldırılmıştır ve bu sorun da vardır: stackoverflow.com/questions/60878599/…
David

49

önce (varsayılan)

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

Sadece eklemek '*.aar'de includedizide.

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

Android Studio 3.x üzerinde iyi çalışır.

Biraz kütüphane yoksaymak ister misiniz? bunu beğendim.

implementation fileTree(include: ['*.jar', '*.aar'], exclude: 'test_aar*', dir: 'libs')
debugImplementation files('libs/test_aar-debug.aar')
releaseImplementation files('libs/test_aar-release.aar')

2
Bu kod soruyu cevaplayabilirken, sorunun nasıl ve / veya neden çözüldüğüne dair ek bağlam sağlamak yanıtlayıcının uzun vadeli değerini artıracaktır.
Alexander

1
İyi çalışıyor, kütüphane basitse gitmenin yolu budur. Ancak burada bir sorun var: Çalışması için aar dosyanıza içe aktarılan tüm kütüphaneyi içe aktarmanız gerekir. Aar dosyasından içe aktarma bu yöntem kullanılarak yayılmaz.
Tobliug

Veya, daha basit:implementation fileTree(include: ['*.?ar'], dir: 'libs')
friederbluemle

@friederbluemle Basit olmaktan ziyade teorik olarak daha kısa ve aynı zamanda anlamsız diyebilirim.
David

21

Sadece başardım!

  1. Kopya MyLib-0.1.aar dosyayı kütüphaneleri / klasörüne

  2. Bu satırları build.gradle komutunun altına ekleyin (proje değil uygulama olmalıdır):

    repositories {
       flatDir {
           dirs 'libs'
       }
    }
    dependencies {
        compile 'com.example.lib:mylib:0.1@aar'
    }
  3. Çok uzak çok iyi. İşte en önemli nokta:

Çevrimdışı mod etkinleştirilmediği sürece Gradle'ın bağımlılıklar için ağa erişmesi gerekir.

Proje Yapıları / Gradle'daki onay kutusu aracılığıyla Çevrimdışı çalışmayı etkinleştirdiğinizden emin olun

- VEYA -

Ağa erişmek için proxy ayarlarını yapılandırın .

Proxy ayarlarını yapılandırmak için http ve https'yi aşağıdaki gibi ayrı ayrı yapılandırarak projenin gradle.properties dosyasını değiştirmeniz gerekir :

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>

Umarım bu işe yarar.


Lütfen güncelleyin veya silin, derleme kullanımdan kaldırılmıştır ve bu sorun da vardır: stackoverflow.com/questions/60878599/…
David

20

Şu anda yerel bir .aar dosyasına başvurma desteklenmiyor (Xavier Ducrochet tarafından onaylandığı gibi)

Bunun yerine yapabileceğiniz bir yerel Maven deposu (göründüğünden çok daha basit) oluşturmak ve oradan .aar'a başvurmaktır.

Burada nasıl çalıştıracağını açıklayan bir blog yazısı yazdım:

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


Eser bir enstantane olduğunda işe yaramadı, neden herhangi bir fikir?
tbruyelle

Bunu sadece Eclipse veya Android studio ile mi çalıştınız? Tutulma ile, "gradle eclipse" aar dosyasını sınıf yoluna ekler, ancak eclipse içindeki sınıfları tanımaz.
andrej_k

Eğiticiyi izledikten sonra yerel .aar dosyanız bulunmazsa (Gradle 1.9 veya üzeri)
Maragues

Lütfen güncelleyin veya silin, bu cevap eski.
David

19

Birden fazla ekleyebilirsiniz aarYalnızca birkaç satır kodla bağımlılık .

Yerel flatDirdepo ekle :

repositories {
    flatDir {
        dirs 'libs'
    }
} 

Her ekleyin aariçinde libsdizinden compilebağımlılık yapılandırması:

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'])
}

Bu işe yaradı, ama bağımlılık zaten bir maven bağımlılığı olarak eklenmişse, nasıl kontrol edebilirim, o zaman aar dosyasının eklenmesi gerektiğini istemiyorum, PS: Android projesine otomatik olarak aar'ımı ekleyen bir eklenti yazmak için bunu kullanıyorum ve build.gradle'a bağımlılık ekler
Adi

@Adi Zaten bağımlılığınız varsa, ilgili aar'ı libsklasöre koymayın .
mixel

Yanıt için teşekkürler, Bahsettiğim gibi, lib'lere aar eklemek bir Android stüdyo eklentisi tarafından otomatikleştiriliyor, bu da gelişmekte, Bu yüzden eklentinin build.gradle dosyasına eklediği bağımlılığın önceden eklenmiş olup olmadığını bilmek istiyorum.
Adi

Şu anda cevabım yok. Bence ayrı bir soru oluşturmak daha iyi.
mixel

15

Ne yazık ki buradaki çözümlerin hiçbiri benim için işe yaramadı (çözülmemiş bağımlılıklar alıyorum). Sonunda işe yarayan ve IMHO'nun en kolay yolu: Android Studio'dan proje adını vurgulayın, ardından Dosya -> Yeni Modül -> JAR veya AAR Paketini İçe Aktar. Kredi bu yazıda çözüme gidiyor


1
Android Studio'nun içe aktarma sihirbazında son derece belirsiz olduğu belirtilmelidir. Adımlardan birinde "Dosya Adı" nı belirttiklerinde, aslında istedikleri dosyanın yolu ... Umarım bu mesaj başkalarını baş ağrısından kurtarır.
Tukajo

13

2 yol vardır:

İlk yol

  1. Android Studio'nuzu açın ve Create New Moduletarafından pencereye gidin.File -> New -> New Module

resim açıklamasını buraya girin

  1. Import .JAR/.AAR PackageÖğeyi seçin ve Nextdüğmesini tıklayın

  2. Modülünüze build.gradleait dosyaya bir bağımlılık ekleyin app.

    dependencies {
        ...
        implementation project(path: ':your aar lib name')
    }

Bu kadar.

İkinci yol

  1. Bir klasör oluşturun libs, dizinin, aars.

  2. Aar lib'nizi aars klasörüne koyun.

  3. Kod snippet'ini ekleyin

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

içine build.gradleuygulama modülüne aittir.

  1. Modülünüze build.gradleait dosyaya bir bağımlılık ekleyin app.
dependencies {
    ...
    implementation (name:'your aar lib name', ext:'aar')
}

Bu kadar.

Çince okuyabiliyorsanız, bloğu kontrol edebilirsiniz 什么 是 AAR 文件 以及 如何 在 Android 开发 中 使用


bu cevap benim için gerçekten yararlı oldu
Csabi

İlk yoldan takip edildiğinde, ana projede aar dosyası içindeki sınıflar algılanmaz, herhangi bir ekstra yapılandırma eklememiz gerekir mi?
Kiran

Lütfen güncelleyin veya silin, yanıtlar zaten gönderilir ve ikinci "derleme" kullanımdan kaldırılır.
David

12

Android Studio 3.4 ve Gradle 5 ile bunu kolayca yapabilirsiniz

dependencies {
    implementation files('libs/actionbarsherlock.aar')
}

1
Bu en iyi cevap. Bağımlılık açık ve çok basittir.
Nikmoon

1
Bunun en iyi cevap olduğu konusunda anlaştılar. Anında çalıştı, React Native kütüphanesine .aar bağımlılıkları eklemek için mükemmeldi.
Josh Baker

1
Bu, gradle eklentisi 4 ile başlayan bir hata atar: stackoverflow.com/questions/60878599/…
David

@David Rapor için teşekkürler, en kısa zamanda test etmeye çalışacağım.
m0skit0

10

GÜNCELLEME ANDROID STUDIO 3.4

  1. Git Dosya -> Proje Yapısı

resim açıklamasını buraya girin

  1. Modüller ve +

resim açıklamasını buraya girin

  1. .Aar Paketini İçe Aktar'ı seçin

resim açıklamasını buraya girin

  1. .Aar rotasını bulun

resim açıklamasını buraya girin

  1. Bitir ve Uygula , ardından paketin eklenip eklenmediğini doğrula

resim açıklamasını buraya girin

  1. Şimdi uygulama modülünde + ve Modül Bağımlılığı'nı tıklayın

resim açıklamasını buraya girin

  1. Kütüphane paketini kontrol edin ve Tamam

resim açıklamasını buraya girin

  1. Eklenen bağımlılığı doğrulayın

resim açıklamasını buraya girin

  1. Ve bunun gibi proje yapısı

resim açıklamasını buraya girin


1
Bu 17. cevap sonunda nihayet bağımlılık okudum .. eeh
Taras Matsyk

6

Ben de bu sorunu yaşadım. Bu sorun raporu: https://code.google.com/p/android/issues/detail?id=55863 .AAR dosyasına doğrudan başvurmanın desteklenmediğini öne sürüyor.

Belki de şimdilik alternatif, actionbarsherlock kütüphanesini projenizin üst dizini altındaki bir Gradle kütüphanesi olarak tanımlamak ve buna göre başvurmaktır.

Sözdizimi burada tanımlanmıştır http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library


Soruna referansınız için teşekkür ederiz. Evet, Gradle Android Library'yi kullanarak bu çalışmayı nasıl yapacağımı biliyorum ama bu seçenek üzerinde çalıştığım proje için gerçekten ideal değil, thx!
Miguel Lavigne

3

Bu sorunu Android sorun izleyicide buldum: https://code.google.com/p/android/issues/detail?id=55863#c21

Hile (bir düzeltme değil) .aar dosyalarınızı bir alt projeye ayırmak ve kütüphanelerinizi yapay olarak eklemektir:

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

Daha fazla bilgi: Yerel-eserler-kavanozlar ve aar için işleme-geçişli bağımlılıklar


Bu doğru ve işte örnek: github.com/textileio/notes/commit/… , compile project(':mobile')android / app / build.gradle, configurations.maybeCreate("default")android / mobile / build.gradle, include ':mobile'android / settings.gradle'da
Li Zheng

3

Benim durumumda kütüphanemde bazı bağımlılıklar var ve aarondan bir oluşturduğumda , eksik bağımlılıklar nedeniyle başarısız oldum, bu yüzden çözümüm lib'imdeki tüm bağımlılıkları bir arrdosyaya eklemektir .

Proje seviyem build.gradleşöyle görünüyor:

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) yani:

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

ve kütüphane 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

Burada tüm çözümü denedim ama hiçbiri çalışmıyor, sonra bir hata yaptığımı fark ettim, .aaraşağıda gördüğünüz gibi yanlış klasöre koydum, kök klasöre koymam gerektiğini düşündüm, bu yüzden libsorada bir klasör oluşturdum (resimde 1 tane) ), ancak uygulama klasörü içinde zaten var, libsikinci olarak koymalısınız libs, umarım bu benimkiyle aynı sorunu olanlar için yardımcı olur:

resim açıklamasını buraya girin



2

Sadece cevabı basitleştirmek için

.Aar dosyası yerel olarak mevcutsa
compile project(':project_directory'), projenizin build.gradle bağımlılığına ekleyin.

Uzakta bulunan .aar dosyası compile 'com.*********.sdk:project_directory:0.0.1@aar'projenizin build.gradle bağımlılığını içerir.


0

Benim durumumda sadece derlemek için "proje" eklediğinizde çalışır:

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


dependencies {
   compile project('com.x.x:x:1.0.0')
}

0

böyle bir şey yapabilirsiniz:

  1. Yerel kütüphanelerinizi (.jar, .aar, ... uzantılı) 'libs' Klasörüne (veya isterseniz başka bir kütüphaneye) koyun.

  2. Build.gradle'da (uygulama düzeyi) bu satırı bağımlılıklara ekleyin

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.