사내에서 공통으로 작성된 라이브러리들을 안드로이드 스튜디오에서 임포트하여 사용하고자 하는 경우가 있을 것이다. 이 경우에 대한 가이드이다.
nexus repository가 구축되어 있다고 가정한다.
절차는 다음과 같다.
1. 라이브러리 프로젝트에서 라이브러리를 사내 메이븐레포지트리에 등록한다.
uploadArchives { repositories { apply plugin: 'maven' mavenDeployer { repository(url: "http://localhost:8000/nexus/content/repositories/snapshots") { authentication(userName: "userid", password:"userpassword") } pom.version = "1.0-SNAPSHOT" pom.artifactId = "mylib" pom.groupId = "com.t5online" } } } |
2. 라이브러리를 사용할 프로젝트에서 사내 레포지트리를 추가한다.
buildscript { repositories { jcenter() maven { url "http://localhost:8000/nexus/content/groups/public" credentials { username 'userid' password 'userpassword' } } } dependencies { classpath 'com.android.tools.build:gradle:1.1.0' } } allprojects { repositories { jcenter() maven { url "http://localhost:8000/nexus/content/groups/public" } } } |
3. 라이브러리를 사용할 프로젝트에서 등록한 라이브러리의 디펜던시를 추가한다.
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.0.0' compile 'com.t5online:mylib:1.0-SNAPSHOT@aar' } |
위와 같이 진행하면 내부적으로 관리되는 메이븐 저장소의 라이브러리를 등록하고 다른 프로젝트에서 스크립트 수정만으로 라이브러리 디펜던시를 해결할 수 있다.
안드로이드 스튜디오에서 다른 라이브러리를 모듈로 임포트를 하면 소스까지 프로젝트로 추가되어 버리는 바람에 라이브러리 수정시 원에 위치의 소스가 관리가 안되는 문제가 있는데 이렇게 하면 원래의 라이브러리는 그 위치에 두고 관리가 되기 때문에 편리한것 같다. 다만 라이브러리 디버깅시가 문제인데 이는 라이브러리를 제작하는 측에서 알아서 지원해주어야 할 문제인 걸로...
* aar은 Android Stdio가 만들어내는 라이브러리형식인데 기존의 ADT에서 생성하는 jar과 다른 점은 resource파일들을 함께 포함한다는것이다. 기존에 jar로 만든 라이브러리가 참조하는 resource가 있는 경우 배포시 jar과 함께 리소스파일을 배포했던 불편함을 해소할 수 있다.