"flatDirs"를 사용하여 로컬 .aar 파일을 Gradle 빌드에 추가 할 수 없습니다


159

이 질문에 대해 알고 있습니다 : gradle 빌드에 로컬 .aar 파일 추가 하지만 솔루션이 작동하지 않습니다.

이 문장을 build.gradle파일 의 최상위 레벨에 추가하려고했습니다 .

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

또한 slidingmenu.aar파일을 넣고 섹션 /libs에서 참조 했지만 전혀 작동하지 않았습니다.dependenciescompile 'com.slidingmenu.lib:slidingmenu:1.0.0@aar'

나도 노력했지만 compile files('libs/slidingmenu.aar')운이 없다.

내가 무엇을 놓치고 있습니까? 어떤 아이디어?

PS 안드로이드 스튜디오 0.8.2


1
flatDirs + compile (name : 'libname', ext : 'aar')은 Android Studio 8.2.0, + gradle 1.12에서 작동합니다. 따라서 빌드 파일에 문제가 있어야합니다. 그것은 한 번 더 확인하거나 더 많은 코드 게시
보다

답변:


293

요시야의 대답을 바탕으로 내가 어떻게 작동하는지 설명합니다.

그의 지침 (편집 중) ( File-> New-> New Module-> Import .JAR / .AAR )을 따르고 .AAR 을 가져옵니다.

그런 다음 프로젝트 build.gradle (최상위 단계가 아니라 'app'아래에있는 단계)에서 다음을 추가하십시오 (종속성 섹션에 있음).

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

참고 프로젝트 이름은 AAR 파일을 가져온 후 추가 한 폴더 이름과 일치해야합니다 ( app/.idea 최상위 레벨 폴더 ). 아니면 다른 방법으로 말하면 ...

내 응용 프로그램
  .생각
  앱
  build.gradle (여기서 컴파일 프로젝트 ( ': ProjectName')을 종속성 섹션에 추가 할 위치)
  ProjectName (가져 오기 후 자동으로 추가되어 aar 파일 이름과 일치)
  짓다
  Gradle
  기타

이것은 Android Studio 0.8.0을 실행하는 데 효과적이었습니다. 이 작업 을 수행 한 후 gradle을 동기화하는 것을 잊지 마십시오 (툴바 버튼 사용 또는 File-> Synchronize ).

(내가 올바른 방향으로 나아가게 해주신 Josiah에게 감사드립니다)

(참고 :이 전에 libs 폴더에 추가하여 최상위 레벨 build.gradle과 앱 레벨 을 조작하려고 시도 build.gradle했지만 aars 파일에는 효과가 없었습니다 .jar은 정상적으로 작동하지만 aar 파일은 아닙니다)


1
이케! 이것은 트릭을 수행했습니다. 자세한 설명에 감사드립니다. 후드 가져 오기 마스터에서 도구 사이트에 설명 된 것과 동일한 작업을 수행합니다. "또 다른 옵션은 새 Gradle 하위 프로젝트를 만들고이 프로젝트의 게시 된 아티팩트를 재사용하려는 jar 또는 aar 파일로 만드는 것입니다. 다른 새로운 Gradle 하위 프로젝트가이 새로운 하위 프로젝트에 의존하도록 할 수 있습니다.이 새로운 하위 프로젝트에서 간단히 다음과 같이 build.gradle을 만드십시오 : configuration.create ( "default") artifacts.add ( "default", file ( 'somelib.aar')) "
Alexey Dmitriev

오류가 발생합니다.을 (를) Error:(25, 0) Required keys [path] are missing from map {name=mylibrary-debug}.사용하는 경우 compile project(name:'mylibrary-debug'). 무엇을 놓치고 있습니까?
MysticMagicϡ

2
최근 gradle 플러그인이이를 중단했습니다. 여기 해결책 : stackoverflow.com/a/28816265/560600
Sky Kelsey

1
위의 모든 단계 후에 Clean Build를 수행하십시오.
광고

1
compile project(':Name-Of-Your-Project')에서 Name-Of-Your-Project.aar 파일 이름 ( .aar확장자 없음)으로 바꿨습니다 . 그리고 효과가있었습니다.
Sufian

190

업데이트 : @ amram99가 언급 했듯이이 문제 는 Android Studio v1.3 릴리스부터 수정되었습니다.

아래 사양으로 테스트 및 검증

  • 안드로이드 스튜디오 v1.3
  • gradle 플러그인 v1.2.3
  • 그래들 v2.4

지금 작동하는 것

  • 이제 Android Studio v1.3 의 File> New> New Module> Import .JAR / .AAR Package 옵션을 통해 로컬 aar 파일을 가져올 수 있습니다

  • 그러나 아래 답변은 gradle 스크립팅을 기반으로하기 때문에 Android Studio 변경 사항에 관계없이 진실하고 효과적입니다.


이전 답변 : 최근 업데이트에서 Android 사용자는 Android Studio의 새 모듈 추가 메뉴 옵션을 통해 로컬 aar 파일을 포함시키지 못했습니다. 여기에 나열된 문제를 확인 하십시오. IDE의 기능 목록에 들어오고 나가는 것과 관계없이 아래 방법은 로컬 aar 파일 작업과 관련하여 작동합니다 (오늘 테스트).

aar 파일을 libs 디렉토리에 넣고 (필요한 경우 작성) build.gradle에 다음 코드를 추가하십시오.

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

1
이것이 정답이며이를 수행하는 최신 방법입니다. 이 답변을 찬성하십시오;)
lmo

코드를 복사했지만이 오류가 발생한 이유를 알고 있습니까? "오류 : 프로젝트 ': app'를 구성하는 동안 문제가 발생했습니다.> 아티팩트 'signalr-client-sdk-android-release.aar (: signalr-client-sdk-android-release :)'를 찾을 수 없습니다. 다음 위치에서 검색했습니다 : jitpack.io//signalr-client-sdk-android-release//… "
toddmo

10
repositories부분은 간다 다른 build.gradle 작업을 위해 - 세계를. dependencies부분은 모듈의 간다 build.gradle. 그래서 오류가 발생했습니다.
toddmo

@toddmo 내 대답은 실제로 로컬 AAR 파일에 적용됩니다. 즉, libs 디렉토리 안에있는 .aar 파일입니다.
Nishant.

1
감사. 이전 버전은 저에게 효과적이지 않았습니다. 새로운 가져 오기 방법이 훌륭했습니다! Gradle 3.5, 그루비 2.4.10
Arnold Schrijver

26

편집 : 현재 AAR 파일을 빌드 종속성으로 사용하는 올바른 방법은 .aar를 라이브러리 모듈로 자동 추가하는 모듈 가져 오기 마법사 (File | New Module | Import .JAR 또는 .AAR 패키지)를 사용하는 것입니다. 프로젝트에서.

기존 답변

이 시도:

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

...

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

1
작동하지 않았습니다 ... 아직 해결되지 않은 알려진 버그 인 것 같습니다 : code.google.com/p/android/issues/detail?id=55863
Alexey Dmitriev

나는 당신이 편집에서 말한 것처럼했지만 결국에는 아무것도 추가되지 않았습니다. 마법사에서 AAR 파일의 경로, 지정된 모듈 이름을 선택했습니다. Finish를 클릭하면 Gradle 파일과 동기화되었지만 build.gradle에 새 파일이나 줄이 나타나지 않았습니다 (Git의 작업 사본에는 변경 사항이 없음). 동일한 결과로 AAR 및 JAR 파일을 모두 사용해 보았습니다. (Android Studio 0.8.1을 사용하고 있습니다)
Alexey Dmitriev

3
이 오래된 대답은 실제로 오랫동안 나는 포함 나를 위해 작업을 수행 flatDir { dirs 'libs' }8.13 / Gradle을 2.1 AS 사용하여 OP에서 언급 한 바와 같이 블록
qix

4
새로운 가져 오기 방법을 사용하여 .aar 파일을 가져 왔습니다. 그러나 반 이름을 입력하고 ctrl + space를 누르면 라이브러리의 클래스 이름을 볼 수 없습니다. 따라서 여전히 라이브러리를 고려하지 않습니다. 어떤 생각?
MysticMagicϡ

1
편집 된 버전은 Android Studio 1.2.1.1에 적합합니다. 다른 등급의 스크립팅은 수행 할 필요가 없습니다. 위와 같이 새 모듈을 만들 수 있습니다. '새 모델 작성'대화 상자에서 라이브러리 aar 파일의 경로를 선택하십시오 (예 : MyLib \ mylibrary \ build \ outputs \ aar). AS는 파일을 새 로컬 폴더로 복사합니다. 응용 프로그램 프로젝트를 다시 빌드하면 새 라이브러리 모듈이 프로젝트보기에 표시됩니다. 이제 프로젝트 구조에서 라이브러리 모듈을 애플리케이션 모듈 (예 : 'app')에 대한 종속성으로 추가 할 수 있습니다. Project Structure | 모듈 | 앱 | 의존성 | 추가 | 모듈 의존성.
Christian Schulzendorff

15

Android Studio 2.1 에서이 작업을 수행했습니다. 여러 프로젝트에서 공유되는 "Native_Ads"라는 모듈이 있습니다.

먼저 Native_ads 모듈에 'aars'라는 이름으로 디렉토리를 만든 다음 aar 파일을 거기에 넣었습니다.

디렉토리 구조 :

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

그런 다음 다른 변경 사항이 있습니다.

최상위 Gradle 파일 :

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

앱 모듈의 build.gradle 파일 :-변경 사항 없음

Settings.gradle 파일 (모듈 포함) :

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

Native_Ads 모듈의 Gradle 파일 :

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

그게 다야. 청소하고 건설하십시오.


'Native_Ads'의 여러 aar 파일에도 작동합니다. 아주 좋은 해결책!
Christian Schulzendorff

8

가장 쉬운 방법은 모듈로 추가하는 것입니다

여기에 이미지 설명을 입력하십시오

그러면 aar 파일이 포함 된 새 모듈이 생성되므로 나중에 해당 모듈을 종속성으로 포함하면됩니다.


가져 오기를 선택한 후 대화 상자 next에서 내 버튼이 회색으로 표시 되는 이유 에 대해 알고 있습니까? Create New ModuleJAR/AAR Package
Kevin Crain

1
.aar 파일을 선택하고 파일 이름을 지정했습니다.
Kevin Crain

IDE가 .aar파일이 프로젝트 디렉토리 내에 있는지 확인하기 위해 경로를 확인하는 이유를 알았습니다. 단지 .aar내 데스크탑에 배치 하고 재 시도했으며 솔루션 덕분에 작동합니다!
Kevin Crain

어리석은 질문 일 수도 있지만 so you just need to include that module as a dependency afterwards어떻게해야합니까?
boltup_im_coding

1
@Marian Klühspies 내가 지금 보았을 때, includein을 갖는 settings.gradle것이 충분하다고 확신하지 못했습니다 . 나는 그것을 작동시켰다. 감사!
boltup_im_coding

7

이것은 내 구조이며 이것을 어떻게 해결합니까?

MyProject / app / libs / mylib-1.0.0.aar

MyProject / 앱 / myModulesFolder / myLibXYZ

build.gradle

에서 프로젝트 / 응용 프로그램 / myModulesFolder / myLibXYZ

나는 이것을 넣었다.

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

내 하위 모듈 XYZ는 메인 모듈의 라이브러리에 의존합니다.


5

이런 식으로 할 수 있습니다. maven 형식으로 이동해야합니다.

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

그런 다음 AAR은 그룹 ID "com.example"의 폴더 구조로 이동해야합니다.

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

그런 다음 종속성으로 참조하십시오.

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

versionaar 파일의 버전은 어디에 있습니까 (예 : 3.0 등)


3

Android Studio 1.4 에서이 문제가있는 사람은 프로젝트 내에 2 가지가 포함 된 모듈을 작성하여 작동하도록했습니다.

  1. 다음 내용으로 build.gradle :

    configurations.create("default")

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

  2. aar 파일 (이 예에서는 'facebook-android-sdk-4.7.0.aar')

그런 다음 새 라이브러리를 모듈 종속성으로 포함하십시오. 이제 프로젝트 내에 소스를 포함시키지 않고 내장형을 사용할 수 있습니다.

이 핵에 대한 페이스 북의 신용. Android SDK를 프로젝트에 통합하는 동안 솔루션을 찾았습니다.


어떤 종류의 모듈을 만들었습니까? 파일> 새로 만들기> 새 모듈>?
Al Lelopath

이 경우 GUI를 사용하여 모듈을 작성하는 경우 모듈 유형은 "Android 라이브러리"입니다. 모듈의 build.gradle을 수정하여 기존 모듈을 Android 라이브러리로 만들 수 있습니다. 다음 apply plugin: 'com.android.application'으로 변경 apply plugin: 'com.android.library'
Victor Ude

하나의 모듈에 여러 개의 aar를 추가 할 수 있습니까? 그렇지 않으면 나는 나의 aar 파일을 포함하기 위해 10 개 이상의 gradle 모듈을 만들어야합니다
Marian Klühspies

@ MarianKlühspies 내가 처음 에이 답변을 쓴 이후 많은 변화가있었습니다. 프로젝트에 aar를 포함시키기위한 공식 문서를 사용해 보는 것이 좋습니다 : developer.android.com/studio/projects/…
Victor Ude

3

제 경우에는 위의 답변 중 어느 것도 효과가 없었습니다! 다른 productFlavors를 추가했기 때문에repositories{ flatDir{ dirs 'libs' } }

작동하지 않았다! libs 디렉토리의 정확한 위치를 지정하는 것으로 끝났습니다 .

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

}

build.gradle에 다른 productFlavors 가있을 때 이와 같은 flatDirs를 소개해야한다고 생각합니다.


2

제 경우에는 aar 파일을 libs에 넣고 추가하십시오.

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

build.gradle에서 작동합니다. 기본 생성 된 종속성과 비슷하다고 생각합니다.

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


"api fileTree (dir : 'libs', include : [ '* .aar])"는 훌륭했습니다. "api"대신 "implementation"을 사용하면 작동하지 않습니다. Victor Ude의 솔루션을 여러 대의 장비와 함께 사용할 수 없었습니다. 추가 통찰력 : 레이아웃 (예 : 레이아웃)과 같은 리소스를 사용하는 경우 연결된 aar (들)에 apk와 이름이 같은 리소스가 포함되어 있지 않은지 확인하십시오. 레이아웃에서 ID 중 하나를 찾을 수 없다는 오류가 발생할 수 있습니다. 문제는 aar 레이아웃에서 id에 잘못된 네임 스페이스를 사용한다는 것입니다.
Tom Rutchik

1

이 줄에는 폴더의 모든 파일 aarjar파일 이 포함됩니다 libs.

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

1

이 솔루션은 Android Studio 4.0.1에서 작동합니다.

위의 솔루션에서 제안한대로 새 모듈을 만드는 것 외에도이 솔루션을 사용해 볼 수 있습니다.

응용 프로그램에 여러 모듈이 있고 모듈 중 하나에 만 추가하려면이 솔루션이 유용합니다.

루트 프로젝트에서 build.gradle

더하다

repositories {
flatDir {
    dirs 'libs'
}}

그런 다음 .aar 파일을 로컬로 추가하려는 모듈에서. 아래 코드 줄을 추가하십시오.

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

}

행복한 코딩 :)


0

앱 gradle 파일 구현 프로젝트에서 아래에 추가하십시오 (경로 : ': project name')


0

Kotlin Gradle DSL을 이미 사용하고 있다면 다음과 같이 사용할 수 있습니다.

내 프로젝트 구조는 다음과 같습니다

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

나의 app/build.gradle.kts

  1. 간단한 접근 방식으로 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. 로컬 / 원격 maven 저장소에서 가져 오기와 같은 접근 방식 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")
}

group때문에 코 틀린 년 필수 (기본 값을 가지고되지 않는 옵션 /)에 필요했다 implementation, 아래 참조 :

// 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
)

면책 조항 : No.1 & flatDirsNo.2 접근 방식을 사용하는 차이점 , 나는 여전히 모르고 있습니다.이 답변에 대한 편집 / 의견을 원할 수 있습니다.

참고 문헌 :

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

0

이 솔루션은 Android Studio 4.0.1에서 작동합니다.

위의 솔루션에서 제안한대로 새 모듈을 만드는 것 외에도이 솔루션을 사용해 볼 수 있습니다.

응용 프로그램에 여러 모듈이 있고 모듈 중 하나에 만 추가하려면이 솔루션이 유용합니다.

루트 프로젝트에서 build.gradle

더하다

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

그런 다음 .aar 파일을 로컬로 추가하려는 모듈에서. 아래 코드 줄을 추가하십시오.

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

}

행복한 코딩 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.