“FlatDirs” kullanarak Gradle derlemesine yerel .aar dosyaları eklemek çalışmıyor


159

Bu sorunun farkındayım: Gradle derlemime yerel .aar dosyaları eklemek ama çözüm benim için çalışmıyor.

Bu ifadeyi dosyamın en üst düzeyine eklemeyi denedim build.gradle:

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

Ben de içine slidingmenu.aardosya koymak /libsve başvuru dependenciesbölümünde başvurdum : compile 'com.slidingmenu.lib:slidingmenu:1.0.0@aar'ama hiç işe yaramadı.

Ben de denedim compile files('libs/slidingmenu.aar')ama şanssız.

Neyi kaçırıyorum? Herhangi bir fikir?

PS Android Studio 0.8.2


1
flatDirs + compile (name: 'libname', ext: 'aar') benim için Android Studio 8.2.0, + sürüm 1.12'de çalışır. Bu yüzden derleme dosyanızda yanlış bir şey olmalı. Bir kere daha kontrol edin veya daha fazla kod yayınlamak
Daha

Yanıtlar:


293

Josiah'ın cevabına dayanarak, işte böyle başardım.

Talimatlarını izleyerek (düzenleme altında) ( Dosya -> Yeni-> Yeni Modül -> İçe Aktar .JAR / .AAR ) ve .AAR'ınızı içe aktarın.

Sonra proje build.gradle (üst seviye bir değil, 'app' altındaki) aşağıdakileri ekleyin (bağımlılıklar bölümünde):

dependencies {
    compile project(':Name-Of-Your-Project')
}

Not Projenizin Adı, AAR dosyasını içe aktardıktan sonra eklenen klasörün adıyla eşleşmelidir (en app/.ideaüst düzey klasörün altındakiyle aynı düzeyde ). Ya da başka bir deyişle ...

MyApplication
  .idea
  Uygulamanın
  build.gradle (bağımlılık bölümüne derleme projesi (': ProjectName') nereye eklenir)
  ProjectName (içe aktardıktan sonra aar dosyanızın adıyla eşleşerek otomatik olarak eklenir)
  inşa etmek
  gradle
  vb

Bu benim için Android Studio 0.8.0 çalıştırdı. Bunu yaptıktan sonra dereceyi senkronize etmeyi (araç çubuğu düğmesini kullanarak veya Dosya-> Senkronize Et ) unutmayın.

(Josiah'a beni doğru yöne götürdüğü için teşekkürler)

(Not: Bundan önce libs klasörüne eklemeyi denedim, üst seviyeyi build.gradleve uygulama seviyesini değiştirmeye build.gradleçalıştım, ancak bunların hiçbiri aars dosyalarım için işe yaramadı - kavanozlar iyi çalışacak, ancak aar dosyaları işe yaramayacak)


1
Olmadı! Bu hile yaptı, ayrıntılı açıklama için teşekkür ederim. Kaput içe aktarma yöneticisi altında, Araçlar sitesinde açıklananla aynı işlemi yapar: "Başka bir seçenek de yeni bir Gradle alt projesi oluşturmak ve bu projenin yayınlanmış eserini yeniden kullanmak istediğiniz kavanoz veya aar dosyası haline getirmektir. diğer yeni Gradle alt projelerinin bu yeni alt projeye bağlı olmasını sağlayabilirsiniz.Bu yeni alt projede, aşağıdakileri içeren bir build.gradle oluşturun: configurations.create ("default") artifacts.add ("default", dosya ('somelib.aar')) "
Alexey Dmitriev

Hata alıyorum: Error:(25, 0) Required keys [path] are missing from map {name=mylibrary-debug}.kullanırsam compile project(name:'mylibrary-debug').. Ne eksik?
MysticMagicϡ

2
Son zamanlardaki gradle eklentisi bunu kırdı. Burada çözüm: stackoverflow.com/a/28816265/560600
Sky Kelsey

1
Lütfen yukarıdaki tüm adımlardan sonra Clean Build'ı da yapın.
Reklamlar

1
Satırda compile project(':Name-Of-Your-Project'), Name-Of-Your-Project.aar dosyamın adı ile değiştirdim ( .aaruzantı olmadan ). Ve işe yaradı.
Sufian

190

Güncelleme : As @ sözü amram99, mesele Android Studio v1.3 sürümü olarak düzeltilmiştir.

Aşağıdaki spesifikasyonlarla test edilmiş ve doğrulanmıştır

  • Android Studio v1.3
  • kepçe eklentisi v1.2.3
  • Gradle v2.4

Şimdi ne çalışıyor

  • Artık Android Studio v1.3'te Dosya> Yeni> Yeni Modül> .JAR / .AAR Paketini İçe Aktar seçeneğini kullanarak yerel bir aar dosyasını içe aktarabilirsiniz.

  • Bununla birlikte, aşağıdaki yanıt, gradle komut dosyasına dayalı olduğu için Android Studio değişikliklerinden bağımsız olarak doğru ve etkili bir şekilde geçerlidir.


Eski Cevap: Yakın zamanda yapılan bir güncellemede, android kullanıcıları Android Studio'nun yeni modül ekle menü seçeneği ile yerel aar dosyalarının eklenmesini kırdı. Burada listelenen Konuyu kontrol edin . IDE'nin özellik listesine giren ve çıkan her ne olursa olsun, aşağıdaki yöntem yerel aar dosyalarıyla çalışırken işe yarar. (Bugün test edildi):

Aar dosyasını libs dizinine koyun (gerekirse oluşturun), sonra build.gradle dosyasına şu kodu ekleyin:

dependencies {
   compile(name:'nameOfYourAARFileWithoutExtension', ext:'aar')
 }
repositories{
      flatDir{
              dirs 'libs'
       }
 }

1
Bu doğru cevap ve bunu yapmanın en yeni yoludur. Lütfen bu cevabı oylayın;)
lmo

Kodunuzu kopyaladım, ancak neden bu hatayla karşılaşmış olabileceğimi biliyor musunuz? "Hata: ': app' projesi yapılandırılırken bir sorun oluştu.> Artifact 'signalr-client-sdk-android-release.aar (: signalr-client-sdk-android-release :)' bulunamadı. Aşağıdaki konumlarda arandı: jitpack.io//signalr-client-sdk-android-release//… "
toddmo

10
repositoriesKısmı gider farklı build.gradle çalışmaları için - küresel bir. dependenciesBölüm modülü en gider build.gradle. Bu yüzden hatayı aldım.
toddmo

@toddmo Bu yüzden cevabım aslında yerel AAR dosyaları için geçerli. yani libs dizininizde bulunan bir .aar dosyası.
Nishant.

1
Teşekkürler. Eski versiyon benim için çalışmadı, yeni ithalat yolu harika çalıştı! Gradle 3.5, harika 2.4.10
Arnold Schrijver

26

Düzenleme: Yerel bir AAR dosyasını derleme bağımlılığı olarak kullanmanın doğru yolu (.aar'ı kitaplık modülü olarak otomatik olarak ekleyecek olan modül alma sihirbazını (Dosya | Yeni Modül | Alma .JAR veya .AAR paketi) kullanmaktır. projenizde.

Eski Cevap

Bunu dene:

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

...

compile(name:'slidingmenu', ext:'aar')

1
Ya da işe yaramadı ... Henüz düzeltilmemiş bilinen bir hata gibi görünüyor: code.google.com/p/android/issues/detail?id=55863
Alexey Dmitriev

Düzenlemede söylediğin gibi yaptım ama sonunda hiçbir şey eklenmedi. Sihirbazda, belirtilen modül adı olan AAR dosyasının yolunu seçtim. Son'u tıkladıktan sonra Gradle dosyalarını senkronize ediyordu, ancak build.gradle dosyasında yeni dosya veya herhangi bir satır görünmedi (Git'in çalışan kopyasında herhangi bir değişiklik olmadı). Aynı sonuç ile hem AAR hem de JAR dosyaları ile denedim. (Android Studio 0.8.1 kullanıyorum)
Alexey Dmitriev

3
Bu eski cevap aslında flatDir { dirs 'libs' }AS 8.13 / Gradle 2.1
qix 24:14

4
Yeni içe aktarma yöntemini kullanarak .aar dosyasını içe aktardım. Ancak yarım ad yazdığımda ve ctrl + boşluk tuşlarına bastığımda kitaplığın sınıf adını göremiyorum. Bu yüzden hala kütüphaneyi dikkate almıyor. Herhangi bir fikir?
MysticMagicϡ

1
Düzenlenen sürüm Android Studio 1.2.1.1 için iyi çalışıyor. Başka hiçbir aşamalı komut dosyası yapılmasına gerek yoktur. Yukarıda açıklandığı gibi yeni bir modül oluşturabilirsiniz. 'Yeni Model oluştur' iletişim kutusunda, kitaplığım aar dosyasının yolunu seçin, örneğin MyLib \ mylibrary \ build \ outputs \ aar. AS dosyayı yeni bir yerel klasöre kopyalar. Uygulama projenizi yeniden oluşturun ve yeni kütüphane modülü proje görünümünde gösterilecektir. Artık kütüphane modülünü proje yapısında uygulama modülünüze (örneğin 'uygulama') bağımlı olarak ekleyebilirsiniz: Proje Yapısı | modüller | uygulaması | bağımlılıklar | Ekle | Modül bağımlılığı.
Christian Schulzendorff

15

Android Studio 2.1 üzerinde çalıştım. Birden fazla projede paylaşılan "Native_Ads" adlı bir modül var.

İlk olarak, Native_ads modülümde 'aars' adında bir dizin oluşturdum ve aar dosyasını oraya koydum.

Dizin yapısı:

libs/
aars/    <-- newly created
src/
build.gradle
etc

Sonra, diğer değişiklikler:

Üst düzey Gradle dosyası:

allprojects {
    repositories {
        jcenter()
        // For module with aar file in it
        flatDir {
            dirs project(':Native_Ads').file('aars')
        }
    }
}

Uygulama modülünün build.gradle dosyası: - değişiklik yok

Settings.gradle dosyası (modülü dahil etmek için):

include ':app'
include 'Native_Ads'
project(':Native_Ads').projectDir = new File(rootProject.projectDir, '../path/to/Native_Ads')

Native_Ads modülü için not dosyası:

repositories {
    jcenter()
    flatDir {
        dirs 'aars'
    }
}
dependencies {
    compile(name:'aar_file_name_without_aar_extension', ext:'aar')
}

Bu kadar. Temizleyin ve inşa edin.


'Native_Ads' içindeki birden çok aar dosyası için de çalışır. Çok iyi bir çözüm!
Christian Schulzendorff

8

Şimdi en kolay yol onu bir modül olarak eklemektir

resim açıklamasını buraya girin

Bu, aar dosyasını içeren yeni bir modül oluşturacaktır, bu nedenle daha sonra bu modülü bir bağımlılık olarak eklemeniz gerekir


İçe Aktar'ı seçtikten sonra nextdüğmem neden Create New Moduleiletişim kutusunda gri görünüyor olabilir JAR/AAR Package?
Kevin Crain

1
.Aar dosyasını seçtiğim ve ona bir isim verdiğimi unutmayın
Kevin Crain

Nedeni öğrendim, IDE .aardosyanın bir proje dizininde olup olmadığını belirlemek için yolu kontrol ediyor , basitçe .aarmasaüstüme yerleştirdim ve tekrar denedim ve çalışıyor, çözümünüz için teşekkürler!
Kevin Crain

Belki aptalca bir soru, ama ilgili so you just need to include that module as a dependency afterwards- bunu nasıl yapıyorsun?
boltup_im_coding

1
@Marian Klühspies Şimdi anlıyorum, includeiçinde settings.gradleolması yeterli olup olmadığından emin değildim . Çalıştırdım. Teşekkürler!
boltup_im_coding

7

Bu benim yapım ve bunu nasıl çözdüğüm:

Projem / app / libs / mylib-1.0.0.aar

Projem / uygulama / myModulesFolder / myLibXYZ

Açık build.gradle

dan Projesi / app / myModulesFolder / myLibXYZ

Bunu koydum:

repositories {
   flatDir {
    dirs 'libs', '../../libs'
  }
}
compile (name: 'mylib-1.0.0', ext: 'aar')

Bitti ve iyi çalışıyor, XYZ alt modülüm ana modülden bazılarına bağlı.


5

Bunu bu şekilde yapabilirsiniz. Maaven formatında gitmesi gerekiyor:

repositories {
  maven { url uri('folderName')}
}

Ardından AAR'nızın "com.example" grup kimliği için bir klasör yapısına girmesi gerekir:

folderName/
  com/
    example/
       verion/
          myaar-version.aar

Sonra bağımlılık olarak referans alın:

compile 'com.example:myaar:version@aar'

versionAar dosyanızın sürümü nerede (ör. 3.0, vb.)


3

Android Studio 1.4'ten itibaren bu sorunu yaşayan herkes için, proje içinde 2 şey içeren bir modül oluşturarak işe aldım.

  1. build.gradle aşağıdaki içeriklerle:

    configurations.create("default")

    artifacts.add("default", file('facebook-android-sdk-4.7.0.aar'))

  2. aar dosyası (bu örnekte 'facebook-android-sdk-4.7.0.aar')

Ardından yeni kitaplığı modül bağımlılığı olarak ekleyin. Artık kaynakları projeye dahil etmeden inşa edilmiş bir aar kullanabilirsiniz.

Bu kesmek için Facebook'a teşekkür ederiz. Android SDK'yı bir projeye entegre ederken çözümü buldum.


Ne tür bir modül yarattınız? Dosya> Yeni> Yeni Modül>?
Al Lelopath

Bu durumda modül oluşturmak için GUI kullanıyorsanız modül türü "Android Library" dir. Modülün build.gradle değerini değiştirerek mevcut bir modülü Android kütüphanesine dönüştürebilirsiniz. değişim apply plugin: 'com.android.application'içinapply plugin: 'com.android.library'
Victor Ude

Bir modüle birden fazla aar´ eklemek mümkün müdür? Aksi takdirde sadece aar dosyalarımı dahil etmek için 10'dan fazla gradle modülü oluşturmam gerekecek
Marian Klühspies

@ MarianKlühspies başlangıçta bu cevabı yazdığımdan beri çok değişti. Projenize bir aar eklemek için resmi belgeleri denemenizi tavsiye ederim: developer.android.com/studio/projects/…
Victor Ude

3

Benim durumumda yukarıdaki cevapların hiçbiri işe yaramadı! Farklı ürünlerim olduğu içinrepositories{ flatDir{ dirs 'libs' } }

işe yaramadı! Ben libs dizininin tam yerini belirterek sona erdi :

repositories{
flatDir{
    dirs 'src/main/libs'
}

}

Sanırım farklı bir ürün olduğunda bunun gibi flatDirs'i tanıtmalıyız.


2

Benim durumumda, sadece aar dosyasını kütüphanelere koydum ve

dependencies { ... api fileTree(dir: 'libs', include: ['*.aar']) ... }

build.gradle ve çalışıyor. Ben varsayılan oluşturulan bağımlılık ile benzer olduğunu düşünüyorum:

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


"Api fileTree (dir: 'libs', şunları içerir: ['* .aar])" harika çalıştı. Eğer "api" yerine "uygulama" kullanırsam işe yaramadı. Victor Ude'nin çözümünü birden fazla aar ile çalışmak için asla alamadım. Bir ek fikir: kaynakları (mizanpajlar gibi) kullanıyorsanız, bağlandığınız aar (lar) ın apk'nizle aynı ada sahip bir kaynak içermediğinden emin olun. Düzende kimliğin birini bulamayacağına dair bir hata verebilir. Sorun, aar düzeninde kimlik için yanlış ad alanı kullanmasıdır.
Tom Rutchik

1

Bu satır klasördeki tüm dosyaları aarve jardosyaları içerir libs:

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

1

Bu çözüm Android Studio 4.0.1 ile çalışıyor.

Yukarıdaki çözümde önerildiği gibi yeni bir modül oluşturmanın yanı sıra, bu çözümü deneyebilirsiniz.

Uygulamanızda birden fazla modül varsa ve modüllerden sadece birine aar eklemek istiyorsanız, bu çözüm kullanışlı olur.

Kök projenizde build.gradle

Ekle

repositories {
flatDir {
    dirs 'libs'
}}

Ardından, .aar dosyasını yerel olarak eklemek istediğiniz modülde. Aşağıdaki kod satırlarını eklemeniz yeterlidir.

dependencies {
api fileTree(include: ['*.aar'], dir: 'libs')
implementation files('libs/<yourAarName>.aar')

}

Mutlu Kodlama :)


0

Uygulama derecelendirme dosyası uygulama projesine aşağıdakileri ekleyin (yol: ': proje adı')


0

Kotlin Gradle DSL'yi zaten kullanıyorsanız, bu şekilde kullanmanın alternatifi:

İşte benim proje yapım

|-root
|----- app
|--------- libs // I choose to store the aar here
|-------------- my-libs-01.aar
|-------------- my-libs-02.jar
|--------- build.gradle.kts // app module gradle
|----- common-libs // another aar folder/directory
|----------------- common-libs-01.aar
|----------------- common-libs-02.jar
|----- build.gradle.kts // root gradle

Benim app/build.gradle.kts

  1. İle basit bir yaklaşım kullanarak fileTree
// android related config above omitted...

dependencies {
    // you can do this to include everything in the both directory
    // Inside ./root/common-libs & ./root/app/libs
    implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar"))))
    implementation(fileTree(mapOf("dir" to "../common-libs", "include" to listOf("*.jar", "*.aar"))))
}
  1. Yerel / uzak maven deposundan getirme gibi aynı yaklaşımı kullanarak flatDirs
// android related config above omitted...

repositories {
    flatDir {
        dirs = mutableSetOf(File("libs"), File("../common-libs") 
    }
}

dependencies {
   implementation(group = "", name = "my-libs-01", ext = "aar")
   implementation(group = "", name = "my-libs-02", ext = "jar")

   implementation(group = "", name = "common-libs-01", ext = "aar")
   implementation(group = "", name = "common-libs-02", ext = "jar")
}

groupNedeniyle KOTLIN yılında zorunlu (varsayılan değere sahiptir değil opsiyonel / ') için, ihtiyaç vardı implementation, aşağıya bakınız:

// Filename: ReleaseImplementationConfigurationAccessors.kt
package org.gradle.kotlin.dsl

fun DependencyHandler.`releaseImplementation`(
    group: String,
    name: String,
    version: String? = null,
    configuration: String? = null,
    classifier: String? = null,
    ext: String? = null,
    dependencyConfiguration: Action<ExternalModuleDependency>? = null
)

Feragatname: No.1 ve flatDirsNo.2 yaklaşımını kullanan fark , hala çok şey bilmiyorum, bu cevabı düzenlemek / yorumlamak isteyebilirsiniz.

Referanslar:

  1. https://stackoverflow.com/a/56828958/3763032
  2. https://github.com/gradle/gradle/issues/9272

0

Bu çözüm Android Studio 4.0.1 ile çalışıyor.

Yukarıdaki çözümde önerildiği gibi yeni bir modül oluşturmanın yanı sıra, bu çözümü deneyebilirsiniz.

Uygulamanızda birden fazla modül varsa ve modüllerden sadece birine aar eklemek istiyorsanız, bu çözüm kullanışlı olur.

Kök projenizde build.gradle

Ekle

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

Ardından, .aar dosyasını yerel olarak eklemek istediğiniz modülde. Aşağıdaki kod satırlarını eklemeniz yeterlidir.

dependencies {
api fileTree(include: ['*.aar'], dir: 'libs')
implementation files('libs/<yourAarName>.aar')

}

Mutlu Kodlama :)

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.