android library를 만들고 배포할려면 maven repository가 필요한데, 이게 준비가 되어 있지 않다면 aar파일을 직접 전달해야 하는 번거러움이 있습니다. 그런데 github packages에 apache maven을 지원해주기에 간단하게 aar library를 배포하여 사용할 수 있습니다.
github packages에 대한 설명은. 해당 링크로..
github - personal access tokne 생성
github의 자신의 계정에서 Settings
-> Developr settings
-> Personal access tokens
으로 가서 access token을 생성 합니다.
write packages, read packages 를 체크 합니다.
properties
project의 root 위칭에 github.properties 를 만들고 그 안에
github에서의 username과 access token생성한 것을 적용해 줍니다.
그리고 해당 파일은 github에 올라가지 않도록 .gitignore
에 추가해 주는 것이 좋습니다. 보안상...
github_username={username}
github_access_token={access_token}
Publish script
library module에 있는 위치에 publish.gradle
를 만듭니다.
그리고 그 안의 내용에는
apply plugin: 'maven-publish'
def githubProperties = new Properties()
githubProperties.load(new FileInputStream(rootProject.file("github.properties")))
def LIB_GROUP_ID = {library_group_id}
def LIB_ARTIFACT_ID = {artifact_id}
def LIB_VERSION = {version_name}
task sourceJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier "sources"
}
publishing {
repositories {
maven {
name = 'GithubPackages'
url = uri("https://maven.pkg.github.com/{user_name}/{project_name}")
credentials {
username = githubProperties['github_username'] ?: System.getenv("github_username")
password = githubProperties['github_access_token'] ?: System.getenv("github_access_token")
}
}
maven {
name = 'CustomMavenRepo'
url = "file://${buildDir}/repo"
}
}
publications {
deploy(MavenPublication) {
groupId LIB_GROUP_ID
artifactId LIB_ARTIFACT_ID
version LIB_VERSION
artifact("$buildDir/outputs/aar/${aar_library_name}.aar")
artifact(sourceJar)
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
//Iterate over the compile dependencies (we don't want the test ones), adding a <dependency> node for each
configurations.api.allDependencies.each {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
}
}
}
}
}
그리고 나서, library project에 있는 build.gradle
에 아래와 같이 추가해 줍니다.
apply from: file('publish.gradle')
이와 같이 추가하고 나면
그림과 같이 gradle에 publishing 에 대한 부분이 생깁니다.
library를 build후 publishDeployPublicationToCustomMavenRepoRepository
하고 나면, local repo에 배포가 되는 부분을 확인할 수 있습니다.
실질적으로 배포를 할려면 publishDeployPublicationToGithubPackagesRepository
로 하면 github의 지정된 username/project의github packages에 배포가 되게 됩니다.
library 사용
root에 있는 build.gradle
에 다음과 같이 repositories에 추가해 줍니다.
def githubProperties = new Properties()
githubProperties.load(new FileInputStream(rootProject.file("github.properties")))
repositories {
google()
jcenter()
mavenLocal()
maven {
name = {maven_repository_name}
url = uri("https://maven.pkg.github.com/{user_name}/{project_name}")
credentials {
username = githubProperties['github_username'] ?: System.getenv("github_username")
password = githubProperties['github_access_token'] ?: System.getenv("github_access_token")
}
}
}
그리고 application 에 있는 build.gradle
에 maven repository에 있는 library 사용할 때 처럼.
implementation '{library_group_id}:{artifact_id}:{version}'
으로 해서 사용하면 됩니다.
maven repository를 만들고 관리하는 것 또한 비용인데, 이걸 github packages를 이용한다면 간단히 해결되는 것 같습니다.
'Android' 카테고리의 다른 글
다양한 adapter의 결합... concatadapter... (0) | 2021.03.06 |
---|---|
Android Studio.. Logcat 색상 변경. (0) | 2021.02.25 |
사용하지 않는 resource 정리. (0) | 2021.02.17 |
Firebase Crashlytics에서 custom UnCaughtExceptionHandler 적용하기. (0) | 2020.12.31 |
Kotlin collection 에서 item들의 sum 계산. (0) | 2020.07.11 |