프로그래밍/Android

Github Package를 이용한 라이브러리 배포방법

Lou Park 2024. 11. 4. 17:02

Github Package?
Github Package는 Github에서 출시한 소프트웨어 패키지 호스팅 서비스로, 이를 이용하면 프라이빗 라이브러리를 jitpack이나 jcenter 등 다른 서비스에 의존하지 않고 호스팅 할 수 있다. 원래는 MyMavenRepository를 이용하고 있었지만, 소스코드와 다소 떨어져있기도 하고 회사에서 사용하려니 계정 정보 공유 시에도 불편함이 있어서 Github Package로 옮기게 되었다.

 

요금은 퍼블릭은 무료, 프라이빗인 경우에는 스토리지와 월별데이터 전송량에 따라 부과된다.

https://docs.github.com/en/billing/managing-billing-for-your-products/managing-billing-for-github-packages/about-billing-for-github-packages

# 배포 방법

1. Personal Access Token 생성

https://github.com/settings/personal-access-tokens/new
Tokens (Classic) 기준으로 아래 권한들을 부여한 Personal Access Token을 생성한다.

 

2. Token 적용

라이브러리 프로젝트에 github.properties 파일을 생성하고 다음 정보를 넣습니다. local.properties와 마찬가지로 설정 정보이므로 .gititnore에 추가해두었습니다.

url=https://maven.pkg.github.com/<repo owner>/<repo name>
username=<username>  
token=<github personal access token>

3. 배포 설정

Github Package를 통해 만들어진 Maven Repository 주소는 다음 패턴을 가지게 된다.

https://maven.pkg.github.com/<repository owner>/<repository>

 

따라서 build.gradle 설정도 다음과 같이 해준다.

afterEvaluate {
    publishing {
        repositories {
            maven {
                val props = Properties()
                props.load(rootProject.file("github.properties").inputStream())
                url = uri(props.getProperty("url"))
                credentials {
                    username = props.getProperty("username")
                    password = props.getProperty("token")
                }
            }
        }
        publications {
            create<MavenPublication>("release") {
                groupId = "com.your.library"
                artifactId = "awesome"
                version = libs.versions.sdk.version.get().toString()
                from(components["release"])
            }
        }
    }
}

4. 빌드

./gradlew clean assembleRelease
./gradlew publish


아티팩트를 빌드하고 publish까지 하게되면 Github Repository 화면 오른쪽에 Package가 업데이트 된 것을 볼 수 있다.

 

# 라이브러리 사용 방법

이제 사용하려는 안드로이드 프로젝트 측면에서 설정이 필요하다.

1. local.properties 설정

퍼블릭 라이브러리의 경우 username과 token이 필요하지 않으므로 1번 과정을 스킵하고, URL만 제대로 적어주면된다. 배포 과정에서 구성했었던 github.properties를 그대로 가져다 써도 된다.

url=https://maven.pkg.github.com/<repo owner>/<repo name>
username=<my github id>
token=ghp_xxxxxxxxxxxxxxxxxxxxxxxxxx

 

2. repository URL 설정

설정한 속성값을 바탕으로 Maven Repository를 추가시켜 준다.

repositories {
    google()
    mavenCentral()
    jcenter()
    ...
    // My Awesome Library
    maven {
        val props = Properties()
        props.load(File("local.properties").inputStream())
        url = uri(props.getProperty("url"))
        credentials {
            username = props.getProperty("username")
            password = props.getProperty("token")
        }
    }
}

 

3. 종속성 추가

이제 방금 만든 라이브러리에 대한 종속성을 추가해주면 끝!

implementation("com.your.library.awsome:0.1")

 

 

참고자료
https://docs.github.com/ko/packages/learn-github-packages/introduction-to-github-packages

https://vegeta2102.medium.com/how-to-publish-android-library-to-github-package-as-a-maven-repository-4709de7608ab