Android2015. 5. 29. 11:21


사내에서 공통으로 작성된 라이브러리들을 안드로이드 스튜디오에서 임포트하여 사용하고자 하는 경우가 있을 것이다. 이 경우에 대한 가이드이다.

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과 함께 리소스파일을 배포했던 불편함을 해소할 수 있다.




Posted by 삼스