마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

jar 파일 빌드시에 Dependecies 문제입니다!

0 추천
안드로이드 스튜디오에서 작성한 Android Library 모듈을 jar 플러그인으로 export 하려고 합니다.

찾아보니 두가지 방법이 있더군요.

build 태스크를 직/간접적으로 실행하거나,

Build 메뉴의 Make Module 기능을 실행하거나.

그 다음에 '모듈/build/intermediates/bundles/*' 하위에 생성된 classes.jar 파일을 취하면 되는건데,

의존하는 라이브러리 없이 아주 심플한 기능만 구현했을 때에는 괜찮습니다.

문제는 의존 라이브러리가 있는 경우,

즉 build.gradle 파일의 dependencies 항목에 정의한 내용이 있는 경우에는 해당 내용이 최종 jar 파일에

포함되지 않습니다.

혹시나 해서 dependencies 에 해당되는 jar 파일을 직접 사용처에 복사해놓고 실행해보았습니다만,

인식을 하지 못하더라고요.

아마도 제 JAR 플러그인 파일의 매니페스트에 제대로 등록이 안되어서 그런게 아닌가 짐작중입니다.

 

제가 예전에 IntelliJ 에서 Gradle 을 사용하여 자바 플러그인을 빌드 했을 때에는

build.gradle 의 dependencies 에 compile 키워드로 지정된 라이브러리들은 단순 참조가 아니라

최종 jar 파일 내에 포함되어 빌드 되었던 것으로 기억되는데 안드로이드 스튜디오에서는 아닌가 보네요..

그러고보니 빌드 파일이 저장되는 위치도 다르네요. IntelliJ + Gradle 의 자바 빌드에서는 output/libs 에 저장되었던 것 같은데.

 

아무튼 제가 원하는 결과물은 외부에서 dependencies 의 문제가 없는 jar 라이브러리 파일을 구하는 것입니다.

따라서 모든 의존 라이브러리들이 하나로 패키징된 jar 파일도 좋고요,

제가 의존 jar 파일들을 따로 복사해야하는 수고는 필요할지언정, 최소한 그들을 인식할 수 있는 jar 파일로 빌드 할 수 있더라도 좋겠네요.

제 개인적으로는 후자가 더 좋습니다.

그래야 외부에서 제 라이브러리를 사용할 때에 dependency 라이브러리들에 의한 충돌을 피하기 쉬우니까요.

google 라이브러리 같은, 타 라이브러리에서도 흔히 사용되는 것들을 사용중이거든요.

아무래도 이런 라이브러리는 외부 참조 형식으로 배포를 해야만 사용자가 중복 라이브러리를 쉽게 삭제할 수 있을테니 말이죠.

 

Android Gradle 시스템에 대해서는 잘 모르지만, 그래도 힌트를 주시면 스스로 노력은 해볼 수 있을만큼의

최소한의 Gradle, Groovy, IntelliJ 에 대한 상식 정도는 있습니다.

이 것 때문에 꼬박 이틀동안 고생중입니다.

저좀 도와주세요 ㅠㅠ

 

PS. 구글링도 해보고 stackoverflow 에서도 검색해 보았는데,

답변으로 올라온 task 스크립트들은 해결책이 아니더라고요.

몇가지는 아예 실행도 안되고, 나머지는 결과가 그대로거나 엉뚱한 내용이 빌드되었습니다.
신규개발자입니다 (120 포인트) 님이 2017년 11월 11일 질문
신규개발자입니다님이 2017년 11월 11일 수정

1개의 답변

0 추천
android 라이브러리는 aar로 사용해야 합니다.
익명사용자 님이 2017년 11월 13일 답변
aar 을 사용해야만 하는 것은 아니고 컴팩트함 때문에 때에 따라서는 권장되기는 하지요.
안드로이드 스튜디오에서는 aar 이든 jar 이든 둘다 가능합니다.
빌드 방식 자체가 바이너리 컴파일로 class 파일을 생성하고 jar 생성을 거쳐서
하나의 aar 로 패키징 하는 것이기 때문에 aar 로 가능하다면 jar 로도 가능하다는 뜻이기도 하고요.
또한 aar 로 모듈을 익스포트하면 aar 을 지원하지 않는 시스템에서는 해당 라이브러리를 사용하기에 번거로운 문제도 생기고, 일체형인 파일 구조탓에 maven 이나 gradle 이 아닌 ant 같은 빌드 시스템에서는 dependencies 충돌 문제로 상당히 귀찮아지지요.
저는 개인적으로 구글 이외에는 jar 가 아닌 aar 형태로 자사 라이브러리를 공개적으로 배급하는 경우를 못봤네요.
그리고 결정적으로, aar 자체에도 dependencies 가 포함이 안되고 있습니다.
만약 aar 에 문제가 없었다면 진작에 임시 방편으로 aar 의 압축을 풀어서 그 안에 있는 classes.jar 를 취했겠지요..
...