2017-03-09 3 views
8

프로젝트에서 하나의 라이브러리를 만들고 싶습니다. 프로젝트는 많은 의존성과 리소스를 사용합니다. cardview를 jar로 가져 오면 해당 태그와 함께 리소스가 없지만 aar로 추가되면 다른 모듈로 추가됩니다. 그래서 그것을 하나의 aar 라이브러리에 결합 할 수는 없습니다. 내 프로젝트를 저장소에 제출하고 싶지 않습니다. 미리 라이브러리를 구축 할 수 있습니까?어떻게 서로 다른 모듈을 결합하여 단일 라이브러리를 만들 수 있습니까?

+0

현재 구성 파일을 게시 할 수 있습니까? – Adonis

+0

왜 Jar 또는 Aar를 사용하지 않고 com.android.support : cardview-v7 : 25.2.0 '을 컴파일 할 수 있습니까? –

답변

0

android-fat-aar이이 문제를 처리해야합니다.

당신은 GitHub의 저장소에서

apply from: 'fat-aar.gradle' 

해야하고 다음 포함 의존하여 컴파일 종속성을 대체합니다. 당신이 가진 것 때문에 그래서 그 대신

dependencies { 
    compile project(':otherModule') 
} 

같은 모듈 otherModule 의존성을 definining의 경우에만 구성이 포함 구성에 따라 컴파일

dependencies { 
    embedded project(':otherModule') 
} 

로 정의해야 할 것 같은 행동은 이전처럼 지역적으로 비슷합니다.

그러나 이것은 특히 Android 지원 라이브러리를 사용하려는 경우 문제가되는 구성입니다. 중복 문제가 발생할 가능성이 큽니다. 더 나은 사용하는 데 필요한 라이브러리 아티팩트의 사본과 함께 Local Maven repository

repositories { 
    mavenLocal() 
} 

를 사용하는 것을 고려

오프라인 작업이 설정을 만드는 경우

. 또는 자신과 다른 사람이 필요로하는 개인 관리 저장소 일 수도 있습니다.

0

모듈을 라이브러리 (소스, AAR을 컴파일하지 않음)로 사용할 수 있다는 것을 알고 있습니까? 이것은 라이브러리 프로젝트가 모든 gradle 종속성을 사용할 수 있음을 의미합니다. 다음은 'MyApiLibrary'라는 라이브러리 프로젝트의 예이며 'api'라는 독립 실행 형 모듈입니다.

먼저 라이브러리를 새 프로젝트로 만듭니다 (이 예에서는 모듈 이름이 'api'이지만 이름은 당신이 좋아하는 것이 무엇이든지). 해당 라이브러리 모듈에 대한 Gradle을 파일에서 는 일반적으로 또한 라이브러리 모듈은 Gradle을 파일의 defaultConfigapplicationId를 선언하지 않도록 응용 프로그램 플러그인을

apply plugin: 'com.android.library' //not apply plugin: 'com.android.application' 

을 사용 라이브러리 플러그인을 사용합니다. 그런 다음 평상시처럼 모든 라이브러리 종속성을 선언하십시오.

그런 다음 소비 프로젝트에서 설정에 다음을 포함하여 라이브러리를 가져옵니다.Gradle을는 :

당신의 소비 모듈의 Gradle을 파일에서
//this first line declares a pseudonym to refer to the library module 
include ':api' 
//this second line explains where the pseudonym links to 
//(the path to the module directory of the library project, relative to the root dir of the current project) 
project(':api').projectDir = new File('../MyApiLibrary/api/') 

, 종속성으로 프로젝트를 참조 :

dependencies { 
    ... 
    compile project(':api') 
} 

주요 프로젝트 라이브러리 프로젝트의 모든 클래스 및 수입 의존성에 액세스 할 수 있습니다 내부에 이제 모든

0

맞다면 여러 개의 라이브러리 프로젝트가있는 다중 모듈 프로젝트가 있고 모듈과 그 종속성을 포함하는 단일 aar를 컴파일하려고합니다. 일치하는 경우 :

- 설치. - 모듈에 gradle maven 플러그인 (https://github.com/dcendents/android-maven-gradle-plugin)을 적용하십시오. 설치 태스크를 사용하여 모듈을 단일 라이브러리로 설치하십시오.

- 설치된 단일 라이브러리의 모든 버전과 해당 종속성을 가져 오는 새 모듈을 만듭니다. android shade plugin (https://github.com/zawn/android-shade-plugin, documentation here : http://imperceptiblethoughts.com/shadow/)을이 모듈에 적용하십시오. 그 출력은 라이브러리 모듈과 그 종속성을 포함하는 uber-aar 및 aar가됩니다. 이것을 로컬 Maven 인스턴스에 설치할 수도 있고, 응용 프로그램의 libs 디렉토리에 aar 파일을 넣을 수도 있습니다.