JAR 파일과 AAR 파일을 종속성으로 포함하는 프로젝트 (아래 참고 참조)가있는 경우 JAR 파일은 Android API의 클래스에 의존하는 종속성으로 종속 특정 JAR을 가질 수 있습니다 이미 알고있는 Android 리소스가 포함되어 있어야합니다. Android 클래스에 따라 다르므로 AAR로 패키지화해야한다는 의미는 아닙니다.
여기서는 JAR 및 AAR 종속성을 많이 포함하는 단일 모듈 프로젝트에 대해 이야기합니다. JAR 파일은 클래스 파일 (및 Android 이외의 리소스 및 기타 파일)의 모음이며 종속성을 갖지 않으므로 아무 것도 깨뜨릴 수 없습니다. 빌드를 할 시간이되면 빌더는 모든 것을 함께 묶어 패키지화하고 JAR에 다른 클래스에 대한 해석 할 수없는 종속성이 있는지 확인하지 않습니다. 런타임시 클래스 로더 예외를 통해 알 수 있습니다.
IDE의 멀티 모듈 프로젝트에서 라이브러리 에 대해 이야기하는 경우에는 다른 문제입니다. 일반 JAR로 컴파일 할 수있는 모듈 A (빌드 파일에서 apply plugin: 'java'
문 사용)가 있으면 AAR로 컴파일되는 Android 모듈 (apply plugin: 'android-library'
)에 의존 할 수 없습니다. Android 모듈의 소스 폴더가 훨씬 더 복잡하고 Gradle의 Java 플러그인이 Android의 소스 세트를 이해할 수 없기 때문에 예측할 수없는 미래에는 해결되지 않을 것입니다.
반대의 경우도 마찬가지입니다. - Android 모듈 은 일반 Java 모듈에 의존합니다. 때문에 아직 Gradle을 빌더에서 해결되지 제한
참고
, 당신은 (compile files(...)
문을 통해이를 참조하여) 당신이 당신의 빌드 파일에서 JAR 파일과 같이 동일한 방법으로 지역 Aars의 액세스 할 수 없습니다; Gradle을 속여서 Maven 저장소에 있다고 생각하도록 만들어야합니다. 아마도 실제 Maven 저장소에 넣을 수 있습니다. 로컬 저장소 일 수 있습니다. 필요한 경우 해결 방법은 Adding local .aar files to my gradle build을 참조하십시오.
JAR이 어떻게 "의존"할 수 있습니까? 클래스를위한 컨테이너 일뿐입니다. –
어쩌면 나는 그것을 표현해야만합니다. "JAR로 패키징 될 수있는 Android 라이브러리 프로젝트는 리소스를 사용하여 (따라서 AAR로 패키징 된) 다른 JAR 파일로 계속 패키징 될 수 있습니까?"나는 대답이 '아니오'라고 생각하지만, 단지 확인하고 싶습니다. – Matthew