내 안드로이드 라이브러리 프로젝트를 jCenter에 배포해 보기

ft

ft

1. 개요

안드로이드 앱을 개발하면서 반복적으로 재 사용되는 모듈이 존재 했었다. 간단한 “Util”메소드를 모아놓은 static class부터 테스트를 위한 모듈들과 머티리얼 디자인을 지원하는  커스터마이징 된 위젯 등 이다. 이러한 재사용 모듈들을 일일히 java파일을 복사 하거나 jar파일을 만들어서 사용 했어야 했다.

이러한 방법은 매우 불편했었다. 매번 java소스 파일의 버전관리 도 힘들었으며 유지-보수또한 귀찮음을 동반 하고 있었다. 얼마전 Android Studio로 넘어가게 되면서 gradle환경에서 jCenter에 공유된 라이브러리 모듈을 아주 쉽게 가져오는 방법을 알게 되었다

 이 문서에서는 프로젝트의 “build.gradle”파일의 의존 프로젝트에 위와 같은 한 라인을 추가 함으로서 내가 만든 어떠한 라이브러리 모듈을 가져와 사용 하고 다른 사람들도 쉽게 사용 할 수 있도록 배포 하는 방법을 정리하려고 한다.

 

2. jCenter, Maven

Android Studio 에서는 일반적으로 Maven의 저장소 서버와 jCenter에서 라이브러리 모듈을 가져온다.

  • jCenter
    • bintray에서 운영하는 maven 저장소 이다. jCenter를 사용하기 위해서는 build.gradle에 jcenter()이 정의 되어 있어야 한다. 보통 프로젝트를 생성하면 build.gradle의 allprojects 내부에 jcenter()가 정의 되어 있다.
  • Maven Central
    • sonatype.org에서 운영하는 maven 저장소 이다. jCenter와 동일하게 build.gradle의 allprojects 내부에 mavenCentral()이 정의 되어 있어야 한다.

두 저장소는 동일한 표준 안드로이드 저장소 이지만, 완전히 다른 곳에 저장되어 있다. 또한 둘 다 서로 딱히 연관은 없다.

이 두 저장소외에 다른 저장소를 사용하게 된다면 다음과 같이 저장소의 위치를 지정해 주어야 한다.

두 저장소중에서 어떤 저장소가 더 좋다 이런한 것은 없다. 다만 자신이 편하거나 맘에 드는 곳에 내 라이브러리 모듈을 배포 하면 된다. 이 문서에서는 jcenter를 기반으로 배포하는 것에 대해서 정리 할 것이다.

 초기 Android Studio에서는 maven center을 표준 기본 저장소로 사용 했었다. 구 버전의 Android Studio내 build.gradle에서는 그래서 mavenCenteral()만 명시 되어 있다.

 하지만 maven의 큰 단점이 있었는데 라이브러리의 업로드 및 배포가 너무 어렵고 복잡 했던 것이다. 그래서 현재로서는 간편하고 쉬운 jCenter 저장소로의 배포 및 라이브러리 모듈 로드가 기본적인 설정이 된거 같다.

 그외 jCenter로 변경한 다른 이유에 대해 조사한 바는 다음과 같다.

1. CDN을 통해서 배포 하기 때문에 모듈 로딩 속도가 빠르다.

2. 세계에서 가장 큰 java 저장소 이다.

3. 저장소에 라이브러리 모듈을 업로드 하는것이 maven에 비해서 쉽다.

4. jcenter에서 maven에도 배포 하고 싶다면 설정 한번으로 배포 할 수 있다.

steps_1
이미지출처 : http://inthecheesefactory.com/blog/how-to-upload-library-to-jcenter-maven-central-as-dependency/en

정리하면 다음과 같다.

 1. Android Studio에서 aar, pom 파일을 빌드 한다.

 2. Bintray로 빌드한 파일들을 업로드 한다.

 3. jCenter에서 동기화 한뒤 배포 한다.

 4. 필요에 따라 maven central에 업로드 하고 배포 한다.

 

 

3. Bintray를 이용한 퍼블리싱

1. Bintray 가입 및 패키지 생성

A. bintray.com에 계정을 만들고 등록한다.

B. 계정 생성 및 등록이 끝났다면 maven을 클릭한다.

jc_step1

C. 라이브러리 패키지를 새로 만든다.

jc_step2

D. 입력해야 하는 정보들을 모두 입력한다.

jc_step3

    – Name : 배포할 패키지의 이름 (모든문자는 소문자에 -을 붙인다)

    – Description : 패키지에 대한 설명.

    – Licenses : 배포되는 라이브러리의 라이센스

    – Tags : 라이브러리 태그

     – WebSite : 프로젝트의 웹 페이지. Github가 있다면 Github로 설정.

     – Issues tracker : 라이브러리의 이슈 트래커. Github로 설정.

     – Version control : url 형태로 입력.

   * 모두 작성 후 Crate Package를 눌러 패키지를 생성 하자.

E. 완료

jc_step4

최초 패키지 생성한 이후, 우측 중간의 ‘Versions’에는 아무것도 없어야 정상이다. 이 스크린샷은 이미 배포된 패키지의 스크린샷이기 때문에 0.1.2 버전까지의 버전 관리가 되어 있다.

 

2. Android Studio 에 라이브러리 프로젝트 만들기

A. Android Studio에서 라이브러리 모듈로 사용될 프로젝트를 만든다. 방법은 일반 프로젝트 만드는 방법과 같지만 Activity를 추가 하지 않는다.

B. 상단 File – New – New Module을 통해서 라이브러리 모듈을 생성한다.

jc_gradle_newm

jc_gradle_newm2

C. 프로젝트를 만들면 다음과 같은 프로젝트 구조가 완성

– app  (기존 앱 프로젝트 / build.gradle 포함 – Sample 프로젝트 같은 개념으로 써도 무방)

– … (.gradle, .idea, build, gradle, build.gradle, iml…)

– 생성한 라이브러리 모듈 이름 (B단계에서 생성한 라이브러리 모듈 / build.gradle, libs, src 포함)

app(어플리케이션) 모듈은 배포하지 않고 ‘생성한 라이브러리 모듈 이름’의 모듈만 저장소에 업로드 후 배포 할 것이다. 더 쉽고 간단한 배포를 위해서 novoda를 이용한다.

D. 어플리케이션 프로젝트의(app) build.gradle에 다음을 추가 한다.

E. 라이브러리 모듈의 (app/라이브러리_모듈_이름/)build.gradle에 다음을 추가한다.

 

3. Bintray에 라이브러리 배포

A. bintray.com 에 배포 하기.

– novoda를 이용하여 bintrayUpload를 실행해서 배포를 할 수 있다.

$ ./gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY -PdryRun=false

– osx, 우분투 등에서는 위의 command를 이용하여 배포 할 수 있다.

– BINTRAY_USERNAME : bintray가입시 사용자 id

– BINTRAY_KEY : bintray profile edit페이지에서 ‘API KEY’메뉴를 클릭하면 키를 확인 할 수 있다.

하지만 윈도우 환경에서는 문자 인코딩(javadoc) 문제가 발생했었다. 구글 검색 하여 모든 방법을 취했지만 모두 다 실패했었다. 결국 vmware와 맥북의 osx환경에서 Github에 올라가 있던 라이브러리 소스를 checkout한 뒤 sync하고 난 뒤에 저 명령어를 이용하여 배포 했더니 문제 없이 잘 되었었다.

B. 배포가 성공 하고 제대로 업로드가 되어 있다면 maven내에 Version에 내가 명시한 배포 버전이 업로드 되어 있다. 또한 해당 버전의 Files탭에 들어가보면 다음과 같이 업로드한 aar과 jar, pom이 정상적으로 올라와 있는것을 확인 할 수 있다.

jc_files

C. 이제 정상적으로 maven에 내 라이브러리가 올라가 있음을 확인 할 수 있다. 이 라이브러리는 아직 jCenter에 연동되지 않았기 때문에 아래와 같이 build.gradle에 저장소의 url을 직접적으로 명시 해 주어야 한다.

D. jCenter에 연동 한다.

Bintray 내 프로젝트의 메인 화면에서 우측 하단에 ‘Add to JCenter’가 있다. 이버튼을 클릭하면 jCenter에 배포 등록 요청 팝업이 뜨는데 코멘츠를 적어도 되고 안적어도 상관 없다. Send버튼을 누르고 어느정도의 시간이 지나면 메일로 jCenter로 배포 되었음을 알려주는 메일로 올 것이다.

addtojcenter
이미지출처 : http://inthecheesefactory.com/blog/how-to-upload-library-to-jcenter-maven-central-as-dependency/en

만약 jCenter로 연동이 되었다면 아래와 같은 이미지 배너가 생길 것이다.

jc_lkd_jcenter

이제 이 프로젝트는 jCenter에 연동 되었다. 라이브러리 모듈을 사용 하기 위해서 아래와 같은 라인을 사용해서 추가 할 수있다. 다른 오픈소스 라이브러리를 사용 하듯이 사용 하면 된다.

 

이 얼마나 간단하고 간편한가.

 

 

 

You may also like

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.