목록Library (1)

JitPack.io 와 Github 를 이용한 안드로이드 오픈소스 라이브러리 배포하기

안드로이드 앱 개발을 하다보면 특정 작업을 수행하기 위한 코드가 반복되는 경향이 있다. 너무나도 간단하거나 일반화하기 힘든 경우엔 어쩔 수 없이 매번 코딩을 하지만, 그 반대의 경우에는 해당 코드들을 갈무리 해뒀다가 재사용한다. 하지만 재사용도 한 두번이지 그 횟수가 늘어나면 귀찮아진다. 가장 중요한 것은 귀찮다는 것. 또한 해당 코드에 유지보수가 필요하다면 그러한 귀찮음은 배가된다. 처음에는 문제가 없었는데 다른 프로젝트를 진행하다보면 이 부분은 이렇게 바꾸면 더 좋을 것 같고, 이건 어떻게 바꾸고. 매번 클래스를 복붙하는 것에 스트레스를 받기 시작한다. 안드로이드에서 가장 많이 사용되는 통신 및 데이터 파싱 라이브러리인 레트로핏을 이런 식으로 사용해야 한다면 그 고통은 더욱 더 커질 것이다. 클래스가 한 두가지도 아니고... 다행스럽게도 이러한 고통에서 벗어나기 위한 방법이 있다. [JitPack.io](https://jitpack.io/) 와 GitHub 를 이용하여 내가 자주 사용하는 코드들을 라이브러리화 하는 것이다. 이 포스트의 방법을 이용하면 아래와 같은 방식으로 내 프로젝트에서 모듈을 사용할 수 있다. ```gradle compile or implementation 'com.github.깃허브사용자이름:레포지터리이름:버전' ``` ## 1. GitHub Public Repository 생성하기 가장 중요한 것은 이름이다. 저장소를 생성했다면 1단계는 끝이다. ## 2. Android Project 생성하기 보통 GitHub 에서 볼 수 있는 오픈소스 라이브러리의 구조는 다음과 같다. * ... * app or sample * library * ... ![repository tree](/images/gallery/1512968473907_repository_tree.png) app 또는 sample 폴더에는 이 라이브러리를 사용하기 위한 방법이 담겨있는 샘플 프로젝트 코드가 담겨있고, library 폴더에는 이 라이브러리를 구성하는 코드가 담겨있다. 우선은 안드로이드 프로젝트를 생성하는데, 앱 개발을 위해 프로젝트를 생성하는 것처럼 동일한 방법으로 진행한다. 이 부분에서 생성되는 부분이 바로 이 라이브러리의 샘플 코드 역할을 수행하는 모듈이다. ![make project](/images/gallery/1512968497276_make_project_1.png) 개인적으로 여기서의 패키지 네임은 다음과 같이 지정한다. com.xxx.example.라이브러리 이름 ## 3. 생성한 Project 에 모듈 추가하기 ![make module 1](/images/gallery/1512968576799_new_module_1.png) ![make module 2](/images/gallery/1512968587219_new_module_2.png) ![make module 3](/images/gallery/1512968597202_new_module_3.png) 개인적으로 패키지 네임은 다음과 같이 지정한다. com.xxx.라이브러리 이름 ## 4. Project Level gradle 설정하기 JitPack.io 와 GitHub 를 통하여 라이브러리를 배포하려면 다음과 같은 코드를 추가해줘야 한다. ```gradle buildscript { ... dependencies { ... classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' } } allprojects { repositories { ... maven { url "https://jitpack.io" } } } ``` ## 5. App Level Gradle 설정하기 (라이브러리 모듈) ```gradle ... dependencies { ... } apply plugin: 'com.github.dcendents.android-maven' group='com.github.깃허브 사용자 이름' ``` dependencies 내부에는 내가 배포할 라이브러리에서 사용할 종속성을 지정한다. 예를들어 RecyclerView 관련 라이브러리를 배포할 것이라면 dependencies 내부에 해당 내용을 적어줘야 한다. (라이브러리에서 관련 클래스를 사용할 것이므로) 또한 이렇게 배포할 라이브러리 모듈에 종속성을 쭉쭉 추가해주면, 나중에 이 라이브러리를 다른 프로젝트에서 사용할 때 app 모듈에서도 그대로 이용할 수 있다. 즉, 예를들어 Glide 라이브러리를 배포할 라이브러리의 종속성으로 추가하면 굳이 Glide 를 App Level 종속성에 추가하지 않아도 Glide 를 이용할 수 있다는 것이다. 만약 App Level 에 Glide 를 추가했는데, App Level 에서도 Glide 를 추가하여 빌드하면 문제의 소지가 있을 수 있다. 지금까지 경험상 버전이 동일하다면 문제가 발생하지 않았지만, 그렇지 않다면 Gradle 관련 에러메세지가 출력되었다. ## 6. App Level Gradle 설정하기 (샘플 프로젝트 모듈) ```gradle ... dependencies { ... compile project(':library') ... } ``` 샘플 프로젝트 모듈의 Gradle 설정에 위의 코드를 넣어준다. 싱크하게 되면 library 모듈에 정의된 코드를 이용할 수 있다. 어차피 동일한 프로젝트에 앱 모듈과 라이브러리 모듈이 포함되어 있으므로, 샘플 앱을 작성할 때 굳이 외부에서 종속성을 땡겨올 필요는 없다. ## 7. 코드 작성 및 push 라이브러리 코드를 작성하고 샘플 프로젝트에서 해당 코드를 테스트 한 뒤 이상이 없으면 1번에서 생성한 저장소에 코드를 push 해야 한다. push 할 때 스테이지에 add 할 파일들은 이것저것 따지지도 말고 다음과 같이 지정한다. ![git add](/images/gallery/1512968649360_git_add.png) Android Studio 오래된 버전에서는 별도의 플러그인을 통하여 .gitignore 파일을 작성하거나 추가해야 했는데 최근부터는 기본적으로 쓸모없는 파일이 걸러지기 때문에 위의 이미지처럼 모든 파일을 add 하면 된다. 보통 왼쪽 탐색기에서 빨간색으로 출력되는 파일들이 모두 추가될 것이다. ## 8. GitHub 에서 Release Tag 지정하기 ![release tag 1](/images/gallery/1512968677259_github_release_tag_1.png) ![release tag 2](/images/gallery/1512968692071_github_release_tag_2.png) ![release tag 3](/images/gallery/1512968703433_github_release_tag_3.png) JitPack.io 를 통하여 라이브러리를 배포하려면 JitPack 에서 라이브러리를 원격 빌드해야 하는데, 여기서 버전을 인식할 수 있는 부분이 GitHub 저장소의 Release Tag 이다. 처음은 물론이고 추후 라이브러리의 코드가 변경되어 업데이트가 필요할 때도 Release Tag 를 갱신해야 한다. ## 9. [JitPack.io](https://jitpack.io/) 에서 GitHub 레포지터리 검색 및 빌드 ![jitpack search result](/images/gallery/1512968724566_jitpack_search_result.png) 위의 순서대로 모든 작업을 진행했다면 JitPack 에서 깃허브 사용자 이름/배포할 라이브러리의 저장소 이름으로 검색했을 경우 위와 같은 화면을 볼 수 있다. Status 탭의 Get it 버튼을 누르면 원격 빌드가 진행되는데 빌드 종료까지 다소 시간이 걸릴 수 있다. 빌드가 종료되었고, 에러가 있다면 Log 탭의 아이콘이 빨간색으로 나오고 에러가 없다면 초록색으로 나온다. 이때 해당 페이지의 하단을 보면 다음과 같은 화면을 확인 할 수 있다. ![jitpack how to](/images/gallery/1512968740154_jitpack_how_to.png) JitPack 을 이용하여 배포한 라이브러리를 사용하려면 Project Level 에 jitpack 저장소를 추가하고 App Level 에서 종속성 부분에 기존 라이브러리를 이용하던 것 처럼 추가하여 사용할 수 있다. ## 10. 기타 9번까지의 작업이 정상적으로 완료되었다면 그때부터 라이브러리를 이용할 수 있다. 추가적으로 해당 라이브러리 저장소의 ReadMe.md 를 작성하여 라이브러리 추가 방법과 JitPack 배지를 넣어줄 수 있다.

Android 2017.12.11 5:16