일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Google Cloud Messasing
- android studio
- GCM
- 카카오톡
- 데이터 공유
- Google Cloud Messasging
- Android O Preview
- 페이스북
- ios
- signing
- ios9
- HTTP
- Unchecked Exception
- Activity 수명 주기
- contentprovider
- Android O
- Android
- In-app Billing
- Push
- service
- 안드로이드 개발 레벨업 교과서
- gradle
- BLOCK
- 트위터
- NSURLConnection
- 배포
- 다른 앱에서 열기
- xcode
- unreal
- AccountManager
- Today
- Total
노블의 개발이야기
Bintray(jCenter)에 Android Library(.aar)을 배포 본문
jCenter는 Bintray에서 운영 중인 Maven Repository 입니다.
1. Sign up to Bintray
Bintray 홈페이지는 무료로 가입이 가능합니다.
서비스 이용은 개인일 경우 모두 오픈 조건으로 무료로 사용 가능합니다.
회사 또는 private을 원하는 사용자를 위한 유료 서비스도 추가 제공됩니다.
가격 정보 및 서비스 조건은 Bintray pricing에서 확인 가능합니다.
2. Apply the plugin to your Gradle build script
jCenter 또는 Maven Central에 배포하기 위해서는 Plugin을 dependencies에 추가해야합니다.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
}
}
apply plugin: 'com.jfrog.bintray'
- Maven Plugin
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
}
}
apply plugin: 'com.github.dcendents.android-maven'
3. Add the bintray configuration closure to your build.gradle file
다음과 같이 group, version을 정의합니다.
group = 'com.shnoble.module'
version = '1.0.0'
위와 같이 정의하지 않으면 unspecified
로 표시됩니다.
자격 증명
배포하고자 하는 Library의 build.gradle 파일에 ‘bintray’ 클로저를 추가합니다.
bintray {
user = 'bintray_user'
key = 'bintray_api_key'
...
}
- Parameter 설명
Parameter |
Description |
user |
Bintray 회원 가입 시 작성한 Username |
key |
Bintray에서 제공하는 API Key [Your Profile] -> [Edit] |
- 스크립트에서 Bintray 자격 증명을 명시적으로 정의하지 않고 환경 변수 또는 외부 사용자 속성에 저장하고 다음과 같이 사용할 수 있습니다.
bintray {
user = System.getenv('BINTRAY_USER')
key = System.getenv('BINTRAY_KEY')
...
}
또는
bintray {
user = project.hasProperty('bintrayUser') ? project.property('bintrayUser') : System.getenv('BINTRAY_USER')
key = project.hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY')
...
}
publish
bintray {
user = 'bintray_user'
key = 'bintray_api_key'
publish = true // [Default: false] Whether version should be auto published after an upload
...
}
- Parameter 설명
Parameter |
Description |
publish |
aar 파일을 bintray에서 자동으로 배포하게 하려면 publish를 true로 설정해야 합니다. (기본값은 false) 만약, false로 설정할 경우 7일 안에 배포를 해주어야 하며 그렇지 않으면 자동 파기 된다. |
4. Add your Bintray package information to the bintray closure
Bintray에 모듈을 업로드 하려면 빈트레이가 관리하는 Gradle 플러그인인 Bintray 플러그인을 사용하면 된다.
Bintray 패키지 정보를 bintray 클로저에 추가합니다.
bintray {
user = 'bintray_user'
key = 'bintray_api_key'
pkg {
repo = 'generic'
name = 'gradle-project'
userOrg = 'bintray_user'
licenses = ['Apache-2.0']
vcsUrl = 'https://github.com/bintray/gradle-bintray-plugin.git'
}
}
필수 매개 변수 :
Parameter |
Description |
repo |
bintray에 생성한 Repository |
name |
bintray에 생성한 패키지 명 |
licenses |
패키지 라이센스 |
vcsUrl |
VCS URL |
선택적 매개 변수 :
Parameter |
Description |
userOrg |
repo가 사용자 조직 중 하나에 속한 경우 선택적인 조직 이름입니다. 추가하지 않으면 기본적으로 ‘BINTRAY_USER’을 사용합니다. |
websiteUrl |
웹 사이트 URL |
issueTrackerUrl |
github의 issue tracker를 사용한다면 URL을 설정 |
labels |
라벨 설정 |
publicDownloadNumbers |
??? |
githubRepo |
Github repository |
githubReleaseNotesFile |
githubReleaseNotesFile 을 설정하면 Release Note를 관리할 수 있다. README.md를 걸어주거나 별도의 md 파일을 생성하여 Release note를 관리할 수 있다. |
5. Add version information to the “pkg” closure
“pkg” 클로저에 버전 정보를 추가합니다.
pkg {
version {
name = '1.0-Final'
desc = 'Gradle Bintray Plugin 1.0 final'
released = new Date()
vcsTag = '1.3.0'
attributes = ['gradle-plugin': 'com.use.less:com.use.less.gradle:gradle-useless-plugin']
}
}
필수 매개 변수 :
Parameter |
Description |
name |
Version name |
선택적 매개 변수 :
Parameter |
Description |
desc |
Version description (버전에 대한 설명) |
released |
Date of the version release. (릴리즈 된 날짜) 다음 형식 중 하나를 사용할 수 있습니다.* Date in the format of ‘yyyy-MM-dd’T’HH:mm:ss.SSSZZ’ * java.util.Date instance |
vscTag |
Version control tag name |
attributes |
Attributes to be attached to the version : 버전에 Attach되는 속성 |
6. Add licenses information
licenses 클로저는 선택 사항입니다.
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution 'repo'
}
}
7. Add schema information
scm 클로저는 선택 사항입니다.
scm { // Optional setting
connection 'https://github.com/shnoble/android-maven-bintray.git'
developerConnection 'https://github.com/shnoble/android-maven-bintray'
url 'https://github.com/shnoble/android-maven-bintray'
}
8. Add developers information
developers { // Optional setting
developer {
id 'shnoble'
name 'shnoble'
email 'shnoble79@gmail.com'
}
}
9. Upload to bintray
bintrayUpload 실행
./gradlew bintrayUpload
bintrayUpload에 성공하면 아래와 같이 aar 파일이 bintray에 업로드 된 것을 확인할 수 있습니다.
10. Upload test
Bintray에 배포된 aar이 접근이 가능한지 체크하기 위해 dl 주소를 사용합니다.
https://dl.bintray.com/{user-name}}/{repository-name}
다음과 같이 repositories를 설정합니다.
allprojects {
repositories {
jcenter()
maven {
url "https://dl.bintray.com/shnoble79/android-maven-jcenter"
}
}
}
다음과 같이 dependencies를 설정합니다.
dependencies {
...
compile 'com.shnoble.module:module-bintray:1.0.0@aar'
...
}
dl을 이용하여 dependencies를 설정할 때는 @aar
을 붙여줘야 합니다.
11. Add the install closure to your build.gradle file
aar
은 bintray
설정으로도 bintray에 업로드가 가능합니다.
하지만 jCenter에 배포를 위해서는 install
클로저를 설정하여 pom.xml 을 설정해야합니다.
다음과 같이 install 클로저를 설정합니다.
install {
repositories.mavenInstaller {
pom.project {
name 'ModuleBintray'
description 'Bintray sample library'
url 'https://github.com/shnoble/android-maven-jcenter'
inceptionYear '2017' // release date
// Gradle dependencies
packaging 'aar'
groupId 'com.shnoble.module'
artifactId 'module-bintray'
version '1.0.1'
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution 'repo'
}
}
scm { // Optional
connection 'https://github.com/shnoble/android-maven-jcenter.git'
developerConnection 'https://github.com/shnoble/android-maven-jcenter'
url 'https://github.com/shnoble/android-maven-jcenter'
}
developers { // Optional
developer {
id 'shnoble'
name 'shnoble'
email 'shnoble79@gmail.com'
}
}
}
}
}
project
pom 의 project 정보를 설정 합니다.
Parameter |
Description | |
name |
모듈 이름 | Optional |
description |
설명 | Optional |
url |
기본 사이트 url | Optional |
inceptionYear |
release 년도 | Optional |
packaging |
aar | |
groupId |
groupId | |
artifactId |
artifactId | |
version |
version |
compile '{groupId}:{artifactId}:{version}@{packaging}'
install task 실행
./gradlew install
install task를 실행하면 .m2/repository
에 업로드 되며 build/poms/pom-default.xml
파일이 생성된 것을 확인할 수 있습니다.
install task를 실행 후에 bintrayUpload를 실행하면 pom.xml 파일이 업로드 된 것을 확인할 수 있습니다.
12. Add the jar/docs
jCenter 배포를 위해서는 jar/docs 파일을 포함해야합니다.
// JCenter publish
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
// Optional docs
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
// Optional javadoc
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar // Optional
archives sourcesJar
}
task findConventions << {
println project.getConvention()
}
13. Add to jCenter
jCenter는 자동으로 동기화 되지 않습니다.
bintray 사이트에서 Add to jCenter
를 클릭하여 배포합니다.
jCenter 배포는 1일 이상 소요됩니다.
배포과 완료되면 다음과 같이 표시됩니다.
POM Dependency의 버전이 “unspecified”로 표시되는 문제
배포하고자하는 library의 dependency가 아래와 같이 project로 되어있다면 POM.xml에 버전이 “unspecified”로 표시됩니다.
dependencies {
...
compile project(':module-first')
}
아래와 같이 install 클로저에 “unspecified”에 대한 처리를 해줘야 합니다.
install {
repositories.mavenInstaller {
...
pom.whenConfigured { pom ->
pom.dependencies.forEach { dep ->
if (dep.getVersion() == "unspecified") {
dep.setGroupId('com.shnoble.module')
dep.setVersion('1.0.2')
}
}
}
}
}
POM Dependency에 type을 ‘aar’로 지정하는 방법
아래와 같이 dependecy에 type이 빠져있다.
<dependencies>
<dependency>
<groupId>com.android.support</groupId>
<artifactId>appcompat-v7</artifactId>
<version>25.3.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.daya.android</groupId>
<artifactId>daya-http</artifactId>
<version>0.0.7-alpha</version>
<scope>compile</scope>
</dependency>
</dependencies>
type을 ‘aar’로 지정하고 싶다면 build.gradle의 dependencies에 다음과 같이 ‘@aar’을 추가해준다.
dependencies {
...
compile 'com.daya.android:daya-http:0.0.8-alpha@aar'
}
Using
Repositories 설정
- Bintray의 jCenter
buildscript {
repositories {
jcenter()
}
}
- Sonatype의 Maven Central
buildscript {
repositories {
mavenCentral()
}
}
Dependency 추가
dependencies {
...
compile 'com.shnoble.module:module-bintray:1.0.2'
...
}
참고 사이트
- gradle-bintray-plugin
- Android Module을 Bintray(JCenter)에 배포하는 방법
- android-maven-plugin
- How to distribute your own Android library through jCenter and Maven Central from Android Studio
- Publish an aar file to jCenter with Gradle
'Android' 카테고리의 다른 글
[Android] Service (0) | 2017.08.01 |
---|---|
[Android] UriMatcher (0) | 2017.07.24 |
[Android] Android O - Background Execution Limits (0) | 2017.07.13 |
[Android] Android O 기기에서 실행되는 모든 앱에 영향을 미치는 주요 변경사항 (0) | 2017.07.12 |
[Android] Context란? (7) | 2017.07.12 |