2017-09-15 7 views
0

3 개의 모듈이있는 Android Studio 프로젝트가 있습니다. A, B, C. A는 C에 의존하고 B는 C에 달려있다.나는 빌드 시간을 단축하려고하는데, 내가 assembleRelease/assemblyeDebug 태스크를 실행할 때마다 모든 모듈을 빌드한다는 것을 깨달았다. B는 모듈 A를 빌드 할 때마다 A와 C 만 빌드해야합니다. B는 해당 타스크에 종속성이 없기 때.입니다. 모듈 A를 빌드 할 때마다 모듈 B가 빌드되지 않도록하려면 어떻게해야합니까?Android Studio 빌드 모듈 제외

모듈 A 종속성 :

dependencies { 
    compile project(path: ':c', configuration: 'release') 
    provided files('libs/some-lib.jar') 
} 

모듈 B 종속성 :

dependencies { 
    compile project(path: ':c', configuration: 'debug') 
} 

모듈 C 의존성 : 당신은 Gradle을이 작업을 실행하기 위해 대화 상자 프로젝트 사용하는 경우

dependencies { 
    compile files('libs/other-lib.jar') 
} 
+0

작업을 어떻게 실행하고 있습니까? 명령 줄이나 Android Studio의 Gradle 대화 상자를 통해? – jdv

+0

내가 gradle 대화 상자에서 작업을 실행하고 있었어. 지금은 명령 줄에서 작업을 실행하고 빌드 시간이 많이 줄어 들었습니다. 분명히 gradle 대화 상자는 빌드하려고하는 모든 모듈을 빌드합니다. –

+0

무슨 일이 일어나고 있는지 신중하게) Android Studio에서 서브 모듈 작업을 실행하면 실제로 프로젝트의 루트에서 작업을 호출합니다. root는 일반적으로 모든 ref를 포함하기 때문에, 구성된 build tree에는 모든 모듈이 포함됩니다. 하위 모듈 태스크를 실행하는 Android Studio의 두 번째 인스턴스/창을 시작하면 해당 모듈과 종속성을 기반으로 빌드 트리가 작성됩니다. 이것은 Gradle 로그에서 쉽게 볼 수 있습니다. – jdv

답변

0

There is a bug in Android Studio, 이러한 작업은 루트 컨텍스트에서 실행됩니다. 즉,주의 깊게 보면 서브 모듈 작업조차도 루트 수준에서 동일한 작업을 실행 한 것처럼 실행됩니다.

솔루션 :

  1. 명령 줄 Gradle을 또는 Gradle을 래퍼를 사용합니다.
  2. 항상 안드로이드 스튜디오의 두 인스턴스를 실행 (즉, 열려있는 여러 프로젝트가) 건물에서 안드로이드 스튜디오를 중단해야 루트 settings.gradle 파일 내에서 간단하게 (이 경우 B) 관련 모듈의 include 문을 제거
+0

다음과 같은 명령을 사용하여 콘솔에서 건물을 시작했습니다 : ** gradlew a : assembleDebug ** .. 빌드 시간이 많이 줄어 들었습니다! 감사합니다. –

-1

을 B는 전체 Gradle 프로젝트에서 제외하므로 모듈은 그대로 유지되지만 코드를 수정하려는 경우 include 문을 다시 추가해야합니다. settings.gradle 파일을 수정하려면 Android Studio에서 제대로 수행하려면 Gradle Sync가 필요합니다.

+0

이것은 모듈 B가 프로젝트의 일부가되는 것을 원하지 않는다는 것과 같습니다. 이는 우리가 여기서하고 싶은 것이 아닐 수도 있습니다. – jdv

+0

그것은 정말로 사물이 실제로 어떻게 구조화되어 있는지에 달려 있습니다. 저에게 모듈 디렉토리가 프로젝트 루트 내에 있다면,'''include'' 문이 제거 되었더라도 여전히 그 프로젝트에서 제거되는 것을 고려하지 않을 것입니다. 그 문은 여전히 ​​존재하지만 활성화되어 있지 않습니다. OP의 핵심 포인트 인 적은 빌드로 가능합니다. – ahasbini

+0

네,하지만 적어도 2.x는 안드로이드 스튜디오가 _ 제거했습니다 ._ 심지어 모듈 목록에서 제거할지 묻는 메시지가 표시되며 UI에서 굵은 글꼴 대신 일반 글꼴로 렌더링됩니다. 모듈을 "제거"하지 않고 모듈 목록에 보관하지만 주 프로젝트에 연결되지 않은 경우에도 모든 종류의 문제가 발생합니다.커맨드 라인의 Gradle은 여전히 ​​작동하지만 Android Studio의 동기화 및 기타 UI 활동에는 해당 모듈이 표시되지 않습니다. 또한 팀 설정에서이 파일을 공유하고 조정하면 모든 종류의 불필요한 혼란이 야기됩니다. – jdv