이 글은 Maven 이 아닌 JitPack 를 통한 안드로이드 라이브러리(aar)를 배포하는 방법을 설명합니다.
더불어 이 글을 작성하는 시점(23.09.13) 최신 버전인 Gradle 8.3 과 AGP 8.1.1 에서 Jitpack 빌드 실패에 대한 트러블 슈팅 후기도 함께합니다.
1. 안드로이드 라이브러리 만들기
일반 안드로이드 프로젝트를 생성 후 New > New Module
메뉴를 통하여 생성합니다.
자세한 내용은 아래 안드로이드 공식 문서에 모두 설명이 되어있으므로
이 글에서는 다루지 않겠습니다.
안드로이드 공식 문서: https://developer.android.com/studio/projects/android-library#CreateLibrary
예제 소스코드 참고: https://github.com/ogoons/mylibrary
2. GitHub 에 라이브러리 업로드 후 태깅
- 임의의 GitHub 레포지토리(
mylibrary
) 생성 - 생성한 라이브러리 소스 코드를 푸시
- 푸시 완료한 GitHub 레포지토리 페이지 이동 후 우측
Release
메뉴 클릭 Draft a new release
버튼 클릭- Choose a tag 에서 새로운 버전명의 태그(1.0.0) 생성
- 하단 섹션 입력은 필수가 아니므로 바로 하단
Publish release
클릭 - 릴리스와 태그 생성 완료
3. jitpack.io 에 트리거 된 새 버전의 라이브러리 확인
- https://jitpack.io/ 이동
-
JitPack 에서 GitHub 로그인 후 다음과 같이
UserName/RepositoryName
입력 후Look up
클릭
- 클릭 후
Get it
버튼을 누르거나 프로그래스 바가 진행이 되면 빌드를 시작합니다. -
빌드가 성공하면 아래와 같은 녹색 로그 아이콘을 볼 수 있습니다.
실패한다면 로그를 확인하여 문제를 해결한 후 2-3번 항목부터 반복합니다. - 하단에 라이브러리 통합을 가이드하는 섹션이 생성됩니다.
안내에 따라 추가하고자 하는 프로젝트build.gradle
파일에 추가해주면 됩니다.
Gradle, AGP 최신 버전에서의 빌드 실패 이슈
- Gradle 8.3
- AGP 8.1.1
위와 같은 환경의 빌드 시스템을 구성 후 JitPack 을 트리거 하면, AGP 8.1.1 과 일치하는 변형을 찾을 수 없다면서 빌드가 더 이상 진행이 되지 않는 문제가 있습니다.
No matching variant of com.android.tools.build:gradle:8.1.1 was found. the consumer was configured to find a library for use during runtime, compatible with java 8, packaged as a jar, and its dependencies declared externally, as well as attribute ‘org.gradle.plugin.api-version’ with value ‘8.3’ …
JitPack 에서 아직 최신 버전의 Gradle, AGP 를 지원하지 않는 것 처럼 보입니다.
일단, 이럴 경우는 프로젝트 루트 경로에 jitpack.yml
환경설정 파일을 필수로 추가해주어야 JitPack 에서 정상적인 빌드가 가능합니다.
파일 내용은 다음과 같습니다.
jdk:
- openjdk17
필자는 OpenJDK 17 환경에서 빌드가 되도록 설정하였습니다.
이 부분은 각자 개발된 환경에 맞게 설정하면 됩니다.
추가로 이 환경의 빌드 시스템으로 구성된 라이브러리를 성공적으로 배포하였다 해도, 같은 환경의 프로젝트에 통합 후 빌드 시에 Duplicate class 오류가 발생하는 이슈가 있습니다.
External Libraries 를 살펴보니 중복으로 aar 이 로딩되는 것으로 확인이 되는데 7.x 버전으로 다운그레이드 하여 시도해보면 문제가 없었습니다.
아래는 다운그레이드를 시도한 버전명 입니다.
- Gradle 7.5.1
- AGP 7.4.2
아무래도 8.x 버전의 버그로 생각이 됩니다.
같은 문제로 힘들어하는 안드로이드 개발자들을 위해 공유합니다.
아직 이슈 트래커나 온라인 상에 공유된 자료가 없어서, 이 문제가 해결이 되면 본문에 업데이트 하도록 하겠습니다.