본문 바로가기

안드로이드/Android Studio

[ Android ] JAR 와 AAR(feat. 이클립스에서 안드로이드 스튜디오로)

TMI

회사에서 저에게 주어진 첫 미션은 이클립스로 구현되어있던 안드로이드 프로젝트를 안드로이드 스튜디오로 마이그레이션 하는 작업이었어요.

(바쁘신 분은 아래로 쭉 내리시면 됩니다!)

 

너무너무너무 고단했습니다...

( 마이그레이션하고는 그닥 상관없지만,,,한 클래스 파일에 6천줄!!!!!!!!!!!!!!!!!!!!!!!!! 어질어질..)

 

이클립스로는 한 번도 안드로이드를 개발해본 경험이 없었거니와 안드로이드 실력도 아직은 베이비 개발자 수준인지라

자바와 xml 코드는 상관없었지만 gradle에서 본 적도 없는 코드들과 알아들을 수 없는 주석들이 상당했거든요.

 

그래도 여차저차해서 마이그레이션에 성공했습니다!

이 과정에서 가장 기억에 남는것이 있었는데요. 바로 JAR와 AAR의 차이로 생긴 이슈입니다! 이것이 글을 쓰게 된 계기이기도 하구요.

 

과정

A프로젝트를 마이그레이션하는 과정에서 A프로젝트 안에 있는 여러 JAR 파일 중 하나(B프로젝트)도 안드로이드 스튜디오 프로젝트 구조에 맞게 마이그레이션을 해야 했습니다.

기존 B프로젝트는 레이아웃이 xml로 짜여져있지 않았고 모든 뷰의 구성이 자바 코드로 짜여져 있었고 추후 B프로젝트의 리소스 파일들이 필요해보였습니다. 그래서 공유 리소스들도 구성할 수 있는 AAR로 만들자라고 건의를 했고 받아들여졌습니다.

 

이슈

기존 B프로젝트가 JAR파일로 돼 있었을 때 그 안에는 A프로젝트에 있는 다른 JAR파일과 중복되는 라이브러리 파일들이 있었지만 빌드에 아무런 문제가 없었습니다.

왜냐하면 JAR파일은 Java 클래스 파일과 MANIFEST와 같은 파일들을 제외하고는 다루지 않기 때문이죠

하지만 AAR 파일은 다른 리소스 파일들도 포함하고 있었기에 중복된 클래스라는 이유로 빌드 단계에서 오류가 났습니다.

 

해결

이를 해결하는 것은 간단했지만 AAR과 JAR에 대해서 잘 알지 못하였기에 원인을 찾는데 꽤나 고생을 했습니다.

서로 중복되는 라이브러리 파일들을 체크하여 A프로젝트에서 라이브러리를 삭제했습니다.

A프로젝트가 타겟 프로젝트인데도 불구하고 B프로젝트에 있는 라이브러리들을 살려둔 이유는 

그 중복된 라이브러리들을 B프로젝트의 코드에서도 import하고 있었는데 B프로젝트에서 삭제를 하게 돼 버리면 빌드 단계에서 이슈가 발생하여 AAR 파일로 만들 수가 없었기 때문이죠.

 

 

JAR(Java Archive)


- jar는 해당 플랫폼에서 JAVA 응용 프로그램을 배포하기 위해 고안된 패키지 파일 형식이다.

- 컴파일 된 Java 클래스 파일과 MANIFEST와 같은 파일들이 포함됩니다. 기본적으로 ZIP Archive 형태를 갖고 있습니다.

* Archive: 개인 및 단체가 활동하며, 남기는 수많은 기록물[1] 중 가치가 있는 것[2]을 선별하여 보관하는 장소, 또는 그 기록물 자체를 이르는 용어.
라고 위키백과에 나와있는데요

그냥 간단히 말해서 뭔가를 저장해서 보관한다는 거구나 라고 알고 계셔도 무방할 것 같아요


AAR(Android Archive)


- Android 라이브러리 프로젝트의 바이너리 배포판

- 주로 Java클래스 파일들만 포함하는 Jar와 달리 리소스 파일들도 포함하고 있다.

- 필수적으로 있어야 하는 건
res
AndroidManifest.xml
classes/jar
R.txt
입니다.


즉, 둘의 차이점은 JAR은 java 소스만 포함 할 수 있지만 AAR 에는 레이아웃, 이미지 등 각종 Resource도 같이 넣을 수 있는 장점이 있다.

반응형