새로운 Gradle Android Build System을 사용하여 외부 AAR 패키지를 수동으로 포함하는 방법


406

나는 새로운 안드로이드 빌드 시스템을 실험하고 있었고 작은 문제에 부딪쳤다. 'actionbarsherlock.aar'라는 ActionBarSherlock 패키지를 컴파일했습니다. 내가하려는 것은 실제로이 aar를 사용하여 최종 APK를 작성하는 것입니다. 컴파일 프로젝트 ( ': actionbarsherlock')를 사용하여 전체 ActionBarSherlock 라이브러리를 기본 라이브러리에 안드로이드 라이브러리 모듈로 포함하면 문제없이 성공적으로 빌드 할 수 있습니다.

그러나 내 문제는 JAR를 원한다면 수동으로 aar 파일 패키지로 해당 종속성을 제공하고 싶습니다. 프로젝트에 올바르게 포함시키는 방법을 알 수없는 것 같습니다. 컴파일 구성을 사용하려고 시도했지만 작동하지 않는 것 같습니다. 컴파일하는 동안 기호를 찾을 수 없으므로 aar 패키지의 classes.jar이 클래스 경로에 포함되지 않습니다.

누구나 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"
}

편집 : 대답은 현재 지원되지 않는다는 것입니다. 추적하려는 경우 여기에 문제 가 있습니다.

편집 : 현재 이것은 여전히 ​​직접 지원되지 않으므로 최상의 대안은 @ RanWakshlak의 제안 된 솔루션 인 것 같습니다.

편집 : @VipulShah가 제안한 구문을 사용하여 더 간단합니다.


Vipul Shah의 답변을 고려해보십시오 .Android Studio 0.5.8부터 로컬 maven 저장소없이 마침내 효과가있었습니다.
shkschneider 13:15에

내 질문을보고 여기에 대답하십시오 stackoverflow.com/a/31662782/746347
mixel

당신이 Gradle을 3.0.0 이상을 사용하는 경우,이 간단한 Gradle을 설치는 나를 위해 일한 : stackoverflow.com/questions/29081429/...
user1506104을

답변:


670

작동하려면 아래 단계를 따르십시오 (Android Studio 2.2까지 테스트했습니다)

libs 폴더에 aar 파일을 보관했다고 가정 해 봅시다. (파일 이름이cards.aar )

그런 다음 앱에서 다음을 build.gradle지정하고 Gradle 파일과 프로젝트 동기화를 클릭하십시오. Project 레벨 build.gradle을 열고 flatDir{dirs 'libs'}아래와 같이 추가하십시오.

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

이제 앱 레벨 build.grdle 파일을 열고 파일을 추가 .aar하십시오.

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

모든 것이 잘되면 라이브러리 항목이 빌드-> exploded-aar에서 이루어집니다.

또한 의존성이있는 다른 프로젝트에서 .aar 파일을 가져 오는 경우 build.gradle에도 포함해야합니다.


5
@VipulShah libs 디렉토리는 어디에 있습니까?
StuStirling

2
상단 폴더 'build.gradle'이 아닌 앱 모듈 'build.gradle'에 수정 사항을 넣는 것이 좋습니다.
loloof64

3
위의 질문에 대한 답을 찾았습니다. compile종속성 대신 두 가지 종속성을 추가 debugCompile(name:'cards-debug', ext:'aar')하고releaseCompile(name:'cards-release', ext:'aar')
Iftah

2
샘플 코드와 혼동하지 마십시오. 첫 번째 블록 allprojects {...}은 "프로젝트"레벨 gradle 파일 dependencies {...}로 이동 하고 두 번째 부분 은 "app"레벨 gradle 파일로 이동해야합니다.
Kirill Karmazin 2016 년

8
경고 : 구성 '컴파일'은 더 이상 사용되지 않으며 '구현'및 'api'로 대체되었습니다. 그것은 자세한 내용은 2018 년의 끝에서 제거됩니다 볼 : d.android.com/r/tools/update-dependency-configurations.html
B-갱스터

248
  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "모듈 설정 열기"를 선택하십시오 .

열린 모듈 설정

  1. 창의 왼쪽 상단 모서리에 있는 "+" 버튼을 클릭하여 새 모듈을 추가하십시오.

새 모듈 추가

  1. ".JAR 또는 .AAR 패키지 가져 오기"를 선택 하고 "다음" 버튼을 클릭하십시오 .

수입 AAR

  1. "파일 이름"필드 옆에있는 줄임표 단추 "..."를 사용하여 AAR 파일을 찾으십시오 .

AAR 파일 찾기

  1. 앱 모듈을 선택된 상태로 유지하고 종속성 창을 클릭 하여 새 모듈을 종속성 으로 추가하십시오.

종속성 창

  1. 종속성 화면 의 "+" 단추를 사용하고 " 모듈 종속성"을 선택하십시오 .

모듈 의존성 추가

  1. 모듈을 선택하고 "확인"을 클릭하십시오 .

모듈을 선택하십시오


4
정답은 Alt+B프로젝트를 정리하고 재 구축 한 후에 명심하십시오 . 당신이 고통 왜 안드로이드 스튜디오! 나는 안드로이드 개발자 플랫폼으로 넷빈즈 IDE를 원하는
자바 ACM

@Oliver 당신은 굉장합니다!
ankit purwar

너는 최고야!
codezombie


당신은 내 친구 굉장합니다!! 건배.
Timothy Macharia

111

저장소에서 aar 파일을 참조 할 수 있습니다. maven은 옵션이지만 더 간단한 해결책이 있습니다. aar 파일을 libs 디렉토리에 넣고 디렉토리 저장소를 추가하십시오.

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

그런 다음 종속성 섹션에서 라이브러리를 참조하십시오.

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

자세한 내용은 Min'an 블로그 게시물 을 확인하십시오 .


1
이 방법은 효과가 뛰어나고 더 간단하고 승인 된 답변보다 우수합니다. 각 개발자의 로컬 maven 저장소에 파일을 추가하지 않고 버전 제어에 이것을 포함시킬 수 있습니다 (필요한 경우 Gradle을 처음 사용하는 이유) ?) 감사!
ajpolt

@ajpolt 아마도 repo 서버를 설정하는 것이 좋습니다 (전용 dep의 경우) dev 시스템이나 프로젝트의 lib 폴더에 넣지 않아도됩니다. 하나의 의존성이 있다면, 임시 저장소로 maven 구조의 Google 코드 저장소
Lo-Tan

4
이 답변에서 가장 주목할 점은 종속성이 끝날 때 '@aar'을 언급하는 것입니다.
Atharva

나는 이것이 최신 gradle 플러그인으로는 더 이상 작동하지 않는다고 생각합니다 : stackoverflow.com/questions/60878599/…
David

이것은 가장 현대적인 구문을 포함한 가장 간단한 형식을 포함하는 유일한 대답입니다 implementation. 이것은 솔루션을 복사하여 붙여 넣습니다. 안드로이드 빌드 Gradle을 플러그인 4.0.0 지금 대신 경로 .aar 깨진 무시의 오류가 발생하기 때문에 들어오는 새로운 upvotes 많은
패트릭

51

아래 접근법은 최신 Android 스튜디오 (> v0.8.x)에서 작동합니다.

  • 저장 aar응용 프로그램 모듈의 아래 파일 libs폴더 (예 : <project>/<app>/libs/myaar.aar)

  • 아래를 추가하여 "app"모듈 폴더의 build.gradle (프로젝트 루트 build.gradle이 아님)에 추가하십시오. 컴파일 라인에서 이름은 myaar.aar가 아니라 myaar @ aar입니다.

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


3
AS 1.0에서 완벽하게 작동
Pablo Johnson

1
누군가가 필요로하는 경우 gradle이 정상적으로 작동하지만 여전히 클래스를 볼 수
없다면

1
이 솔루션은 AS2.2에서 훌륭하게 작동합니다. gradle은 AAR 파일의 구문에 놀라 울 정도로 까다 롭습니다.
Jim Andreas

업데이트 또는 삭제하십시오, 컴파일은 더 이상 사용되지 않으며이 문제도 있습니다 : stackoverflow.com/questions/60878599/…
David

49

이전 (기본값)

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

단지 추가 '*.aar'include배열입니다.

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

Android Studio 3.x에서 잘 작동합니다.

도서관을 무시하고 싶다면? 이렇게하세요

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

1
이 코드는 질문에 대답 할 수 있지만 문제를 해결하는 방법 및 / 또는 이유 에 대한 추가 컨텍스트를 제공 하면 답변의 장기적인 가치가 향상됩니다.
Alexander

1
라이브러리가 단순하다면 잘 작동합니다. 그러나 그것들은 여기서 문제입니다 : aar 파일로 가져온 모든 라이브러리를 가져 와서 작동시켜야합니다. aar 파일에서 가져 오기는이 방법을 사용하여 전파되지 않습니다.
토블 리그

또는 더 간단합니다 :implementation fileTree(include: ['*.?ar'], dir: 'libs')
friederbluemle

@friederbluemle 이론적으로 더 짧고 짧고 동시에 구체적이지 않습니다.
David

21

방금 성공했습니다!

  1. 복사 MYLIB - 0.1.aar의 에 파일을 libs와 / 폴더

  2. build.gradle 의 맨 아래에 다음 줄을 추가하십시오 (프로젝트가 아닌 앱이어야 함).

    repositories {
       flatDir {
           dirs 'libs'
       }
    }
    dependencies {
        compile 'com.example.lib:mylib:0.1@aar'
    }
  3. 여태까지는 그런대로 잘됐다. 가장 중요한 점은 다음과 같습니다.

오프라인 모드가 활성화되어 있지 않으면 Gradle은 종속성을 위해 네트워크에 액세스해야합니다.

Project Structures / Gradle 의 체크 박스를 통해 오프라인 작업 을 활성화했는지 확인하십시오

-또는-

프록시 설정 구성네트워크에 액세스 을 .

프록시 설정을 구성하려면 프로젝트를 수정해야합니다 다음과 같이 http 및 https를 별도로 구성 gradle.properties 파일 합니다.

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>

이것이 효과가 있기를 바랍니다.


업데이트하거나 삭제하십시오. 컴파일은 더 이상 사용되지 않으며이 문제도 있습니다 : stackoverflow.com/questions/60878599/…
David

20

현재 로컬 .aar 파일을 참조하는 것은 지원되지 않습니다 (Xavier Ducrochet에 의해 확인 됨)

대신 할 수있는 것은 로컬 Maven 저장소 (소리보다 훨씬 간단 함)를 설정하고 .aar를 참조하는 것입니다.

여기에서 작동시키는 방법을 자세히 설명하는 블로그 게시물을 작성했습니다.

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


아티팩트가 스냅 샷일 때 작동하도록 만들지 못했습니다.
tbruyelle

Eclipse 또는 Android 스튜디오에서만 작동합니까? 이클립스를 사용하면 "gradle eclipse"는 aar 파일을 클래스 경로에 추가하지만 이클립스는 그 안의 클래스를 인식하지 못합니다.
andrej_k

이 질문을 확인하십시오. stackoverflow.com/questions/20911665/… 튜토리얼을 수행 한 후 로컬 .aar 파일을 찾을 수없는 경우 (
Graydle

업데이트 또는 삭제하십시오.이 답변은 더 이상 사용되지 않습니다.
David

18

여러 개를 추가 할 수 있습니다 aar몇 줄의 코드로 종속성을 .

로컬 flatDir저장소를 추가하십시오 .

repositories {
    flatDir {
        dirs 'libs'
    }
} 

디렉토리의 모든 항목 을 종속성 구성 aar에 추가하십시오 .libscompile

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

이것은 효과가 있었지만 의존성을 이미 maven 의존성으로 추가 한 경우 aar 파일을 추가하고 싶지는 않습니다 .PS :이를 사용하여 자동으로 안드로이드 프로젝트에 aar를 추가하는 플러그인을 작성합니다. build.gradle에 종속성을 추가
Adi

@Adi 이미 maven 의존성을 가지고 있다면 해당 aar를 libs폴더에 넣지 마십시오 .
mixel

응답에 감사드립니다. 언급했듯이 lib에 aar를 추가하는 것은 개발중인 Android 스튜디오 플러그인에 의해 자동화되므로 플러그인이 build.gradle 파일에 추가하는 종속성이 이미 추가되었는지 여부를 알고 싶습니다.
Adi

지금 답변이 없습니다. 별도의 질문을 작성하는 것이 좋습니다.
mixel

15

불행히도 여기서 해결책 중 어느 것도 나를 위해 일하지 않았습니다 (해결되지 않은 종속성이 나타납니다). 마지막으로 효과가 있었고 IMHO가 가장 쉬운 방법은 다음과 같습니다. Android Studio에서 프로젝트 이름을 강조 표시 한 다음 파일-> 새 모듈-> JAR 또는 AAR 패키지 가져 오기를 강조 표시하십시오. 크레딧은 이 게시물 의 솔루션으로갑니다


1
가져 오기 마법사에서 Android Studio는 매우 모호합니다. 그들이 단계 중 하나에서 "파일 이름"이라고 말할 때, 실제로 요청하는 것은 파일의 경로입니다 ...이 메시지는 다른 사람들을 두통으로부터 구해줍니다.
Tukajo

13

두 가지 방법이 있습니다 :

첫 번째 방법

  1. Android Studio를 열고 다음으로 Create New Module창을 탐색하십시오.File -> New -> New Module

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

  1. Import .JAR/.AAR Package항목을 선택하고 Next버튼을 클릭하십시오

  2. 모듈에 build.gradle속하는 파일에 종속성을 추가하십시오 app.

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

그게 다야.

두 번째 방법

  1. libs디렉토리에 폴더를 만듭니다 ( 예 :) aars.

  2. aar lib를 aars 폴더에 넣습니다.

  3. 코드 스 니펫 추가

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

당신에 build.gradle파일 응용 프로그램 모듈에 속한다.

  1. 모듈에 build.gradle속하는 파일에 종속성을 추가하십시오 app.
dependencies {
    ...
    implementation (name:'your aar lib name', ext:'aar')
}

그게 다야.

중국어를 읽을 수 있다면, 당신은 블로그를 확인하실 수 있습니다 什么是AAR文件以及如何在안드로이드开发中使用를


이 답변은 정말 도움이되었습니다
Csabi

첫 번째 방법을 따를 때 aar 파일 내부의 클래스는 기본 프로젝트에서 감지되지 않습니다. 추가 구성을 추가해야합니까?
Kiran

답변을 이미 게시했으며 두 번째 "컴파일"이 더 이상 사용되지 않습니다.
David

12

Android Studio 3.4 및 Gradle 5를 사용하면 다음과 같이 간단하게 수행 할 수 있습니다

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

1
이것이 가장 좋은 대답입니다. 종속성은 명시 적이며 매우 간단합니다.
Nikmoon

1
이것이 최선의 답변임을 동의했습니다. 즉시 작업했으며 React Native 라이브러리에 .aar 종속성을 추가하는 데 완벽했습니다.
Josh Baker

1
:이 Gradle을 플러그인 4로 시작하는 오류가 발생 stackoverflow.com/questions/60878599/...
데이비드

@David 보고서에 감사드립니다. 최대한 빨리 테스트하려고 노력할 것입니다.
m0skit0

10

안드로이드 스튜디오 3.4 업데이트

  1. 이동 파일 -> 프로젝트 구조

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

  1. 모듈 을 클릭하고 +를 클릭하십시오

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

  1. 가져 오기 .aar 패키지를 선택하십시오.

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

  1. .aar 경로 찾기

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

  1. 완료적용 후 패키지가 추가되었는지 확인

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

  1. 이제 앱 모듈에서 +모듈 종속성을 클릭하십시오.

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

  1. 라이브러리 패키지와 확인 확인을

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

  1. 추가 된 종속성 확인

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

  1. 그리고 이와 같은 프로젝트 구조

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


1
이 17 대답은 내가 그 마지막으로 추가 종속성 .. EEH 읽을 수 있습니다
타 라스 Matsyk

6

나는 또한이 문제가 있었다. 이 문제 보고서 : https://code.google.com/p/android/issues/detail?id=55863 .AAR 파일을 직접 참조하는 것은 지원되지 않는 것으로 보입니다.

아마도 현재 대안은 actionbarsherlock 라이브러리를 프로젝트의 상위 디렉토리 아래 Gradle 라이브러리로 정의하고 이에 따라 참조하는 것입니다.

구문은 여기에 정의되어 있습니다 http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library


문제를 참조 해 주셔서 감사합니다. 예 Gradle Android 라이브러리를 사용 하여이 작업을 수행하는 방법을 알고 있지만이 옵션은 실제로 작업중 인 프로젝트에 적합하지 않습니다.
Miguel Lavigne

3

안드로이드 문제 추적기 에서이 해결 방법을 찾았습니다 : https://code.google.com/p/android/issues/detail?id=55863#c21

트릭 (수정 아님)은 .aar 파일을 하위 프로젝트로 격리하고 라이브러리를 아티팩트로 추가하는 것입니다.

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

추가 정보 : 로컬 아티팩트에 대한 처리 전이 종속성


맞습니다. 여기 예제가 있습니다 : github.com/textileio/notes/commit/… , compile project(':mobile')android / app / build.gradle, configurations.maybeCreate("default")android / mobile / build.gradle, include ':mobile'android / settings.gradle
Li Zheng

3

내 경우에는 라이브러리에 일부 결함이 있으며 라이브러리 aar에서 생성 할 때 누락 된 결함으로 인해 실패 했으므로 내 솔루션은 라이브러리에서 모든 결함을 추가하는 것입니다.arr 파일 입니다.

내 프로젝트 수준 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) 그래서:

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

나는 여기에 모든 솔루션을 시도했지만 아무것도 작동하지 않는다는 것을 알고 실수했다는 것을 알았습니다. .aar아래에서 볼 수 있듯이 잘못된 폴더에 넣었습니다. 루트 폴더에 넣어야한다고 생각하여 libs폴더를 만들었 습니다 (그림 1) ), 그러나 앱 폴더 안에 이미가 libs있습니다. 두 번째로 넣어야합니다 libs.

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



2

답을 단순화하기 위해

.aar 파일이 로컬에 있으면 다음을 포함하십시오.
compile project(':project_directory') 에 있으면 프로젝트의 build.gradle의 종속성에 하십시오.

.aar 파일이 remote compile 'com.*********.sdk:project_directory:0.0.1@aar'에 있으면 프로젝트의 build.gradle의 종속성에 포함 하십시오.


0

필자의 경우 컴파일하기 위해 "프로젝트"를 추가하면 작동합니다.

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


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

0

당신은 이런 식으로 할 수 있습니다 :

  1. 로컬 라이브러리 (확장자 : .jar, .aar, ...)를 'libs'폴더 (또는 원하는 경우 다른 폴더)에 넣으십시오.

  2. build.gradle (앱 레벨)에서이 행을 종속성에 추가하십시오.

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

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