배경
당신이 유틸리티 클래스를 작성하는 경우 개발 과정은, 일반적으로 다른 프로젝트에 사용하는 lib 디렉토리를 얻을 수있을 것입니다, 사용되는 다른 항목을주고 싶다 :
해방 후 전화에서 관련 프로젝트에 도입 :
문제
해당 프로젝트를 사용하려면 우리는 공통의 lib 디렉토리 안에 있지 않은 경우? 그런 그들이 사용할 수 없습니다하지,하지만 쉬운 일이 아닙니다, 각각의 장소에 다시 허세 작동해야 각 변경하는 경우, 유지하고, 수정하고, 되더라도 파일을 복사, 길을 포장 항아리와 같은 이전의 옛날 방식에 따르면, 리소스 파일 더욱 문제가있는 경우 그것은 타사 오픈 소스 라이브러리와 동일 할 수 없습니다 : 수정을 완료 할 수있는 장소, 코드의 로컬 라인에 대한 참조가 해결 될 수 있는가?
이 같이 :
implementation "io.reactivex.rxjava2:rxjava:2.x.y"
复制代码
물론, 일부 프로그램, 인터넷은 간소화하고 내 옆에 조금 정리, 오늘 우리에게 빠른 게시하고 자신의 코드, 구덩이 및 우회에 작은 단계를 공유 촉진하는 단계 템플릿을 제공하기 위해 많은 준비가 만든 솔루션이 있습니다.
Jcenter에 자바 코드를 업로드
주요 단계 (프록시에서 권장하는 전체를 완료하기 위해, 또는 느리거나 실패 할 것이다, 프레임 부분은 중요한 항목입니다) :
- 가입 JFrog Bintray 계정을
오른쪽 여기에 계정 등록을 열려면 참고 녹색 버튼의 왼쪽에 등록하고, 뒷면은 매우 귀찮은 것입니다하지 않도록주의해야한다.
- 성공적으로 등록 후 프로필에 API 키를 기억 업로드 사용하는 것입니다 :
- 우리가 관리되는 코드를 어디에서 새로운 창고를 만들고, 창고입니다
- 단지 창고 (Respository) 패키지 (Packge)에서 생성 계속, 예를 들어, 지금이 패키지에 전달 된 코드 내부에 도구를 투사 할 준비가, 내가 만든 :
지금까지, 내 준비는 기본적으로 장소에 배치 된 몇 가지 핵심 메시지를 보면 :
- 창고 이름 : TestRepository
- 패키지 이름 : MyTools
- 사용자 이름 : soulqw (자신에 의해 대체 될 것이다)
- API 키 : XXXXXXXX는 (자신에 의해 대체 될 것이다)
- 우리의 프로젝트에 반환하는 몇 가지 템플릿 설정을 할 수
- 우리의 프로젝트를 Gradle을 루트에 다음과 같은 구성 파일을 추가합니다 :
dependencies {
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
}
复制代码
- 우리는 디렉토리에 다시 전달해야, 그 다음과 같이 우리의 도구 디렉토리, 그 Gradle을 파일에 추가하는 곳이다 :
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
def siteUrl = 'https://www.google.com/' //可选 如果有的话
def gitUrl = 'https://www.google.com/' //可选 如果有的话
group = "com.share" //路径
version = "0.0.2.release" //版本名称, 不要用beta,否则容易审核不通过
//以上两个配合项目目录名最终上传上去引用就是 compile 'com.share:tools:0.0.2.release'
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
task copyDoc(type: Copy) {
from "${buildDir}/docs/"
into "docs"
}
artifacts {
archives javadocJar
archives sourcesJar
}
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
name 'is permission tool for android'
url siteUrl
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'soulqw' //用户名
name 'qinwei' //姓名
email '[email protected]' //邮箱
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
//关键信息我们从localProperties文件中读取
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
repo = "TestRepository" // 仓库名
name = "MyTools"// 包名
desc = 'just tools'
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
javadoc {
options {
encoding "UTF-8"
charSet 'UTF-8'
author true
version true
links "http://docs.oracle.com/javase/7/docs/api"
}
}
复制代码
우리는 다음과 같은 규칙이있는 프로젝트 그룹, 버전, 최종 프로젝트 디렉토리 병합 스타일을 통과해야 위의 버전 번호를 입력합니다 :
./gradlew install bintrayUpload
复制代码
그런 다음 다음과 같이 성공은 다음과 같습니다
우리는 도서관에서 모습을 통과
dependencies {
// implementation project(':tools')
implementation 'com.share:tools:0.0.2.release'
}
复制代码
참고 :
- 글로벌 프록시에서 업로드 프로세스를 완료해야합니다
- 성공적인 버전까지 통과 된 후 변경 될 필요가있는 경우, 우리는 이름의 수정 된 버전을 다시 업로드하는 코드를 재 - 수정, 변경할 수 없습니다 등 0.0.2.release로, (거부 검토 할 realease 또는 버전 번호, 또는 쉽게 사용하려고 )
- 이제 나중에 참조를 전달하고 감사의 채택 이후, Jcenter에 추가가 필요하지 않습니다 수
설명을 사용할 승인을 위해 하루 이틀에 잘 보통 몇 시간을 기입 해 봅니다. 감사가 거부되면, 당신을 거부하는 이유, 당신은 다시 검사 할 수 있습니다 다시 자신의 요청을 수정하고 메시지에 회신 설명한다 :
승인되면, 이후의 반복 한 같은 이름의 수정 된 버전을 다시 검토 할 필요가 없습니다
- lib 디렉토리에 의존 프로젝트는 안드로이드 지원 라이브러리와 같은 라이브러리를 소유하는 경우
dependencies {
implementation 'com.android.support:appcompat-v7:28.0.0'
}
复制代码
응용 프로그램에 대한 프로젝트는이 라이브러리를 사용하지만, 편집 인해 일치하지 않는 버전 번호 및 오류에 쉽게 때 응용 프로그램이이 LIB를 도입 그래야 각, 불일치의 버전 번호에 따라, 올바른 자세는 해당 라이브러리에 LIB 의존성을 말을하는 것입니다 구현에 compileOnly 또는에서 제공하는 컴파일
dependencies {
//这样引用容易引发冲突,改为compileOnly 仅仅lib内可用
// implementation 'com.android.support:appcompat-v7:28.0.0'
compileOnly 'com.android.support:appcompat-v7:28.0.0'
}
复制代码
다음은 과거와 현재 구성에서 여러 Gradle을 변화의 테이블 :
새로운 구성 | 이전 구성 | 행동 |
---|---|---|
이행 | 엮다 | 모듈에 대한 종속성이 컴파일시에 가능하며 런타임 모듈 소비자 만 사용할 수 있습니다. 대신 시스템을 구축하는 프로젝트의 양을 줄일 수 있기 때문에 크게, 빌드 시간을 줄일 수 있습니다 API / 컴파일을 사용하는 대형 멀티 - 프로젝트 구현의 건설을 위해 재 컴파일 할 필요가있다. 대부분의 응용 프로그램과 테스트 모듈이 구성을 사용해야합니다. |
API | 엮다 | 모듈에 대한 종속성은 소비자에게 제공하고 컴파일시에 모듈 컴파일 타임 및 런타임에 사용할 수 있습니다. 이 구성은 행동 컴파일 (현재 사용되지 않음), 정상적인 상황에서, 당신은 단지 라이브러리 모듈에서 사용한다 유사하다. 당신은 각각의 테스트 모듈에 자사의 API를 열고 자하지 않는 응용 프로그램 모듈은 구현을 사용해야합니다. |
compileOnly | 제공 | 모듈 종속성은 컴파일시에 사용할 수 있으며, 그 소비자는 컴파일 또는 실행시에 사용할 수 없습니다. 이 문제는 제공하는 구성 (현재 사용되지 않음)과 유사하다. |
runtimeOnly | APK | 모듈 및 종속성은 런타임에 소비자에게 사용할 수 있습니다. 이 구성은 APK처럼 동작 (현재는 사용되지 않음). |
소개 :
나중에 프로젝트의 개발, 우리의 프로젝트는 천천히 코 틀린로 이동하고, 나중에 코 틀린에 클래스의 도구로 나타나
++ 버전,
업로드,
그런 다음. . .
코 틀린 코드를 업로드 지원
- 돌아 가기로 프로젝트 수준의 Gradle을 파일 :
classpath "org.jetbrains.dokka:dokka-gradle-plugin:0.9.18"
复制代码
그런 다음 전체 파일은 다음과 같이해야합니다 :
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.10'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
//upload
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
//kotlin
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
//for kotlin upload
classpath "org.jetbrains.dokka:dokka-gradle-plugin:0.9.18"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
复制代码
돌아 가기 Gradle을 파일의 우리의 도구, 구성 :
//for kotlin upload
apply plugin: 'org.jetbrains.dokka'
//同时添加三个方法 for kotlin
task dokkaJavadoc(type: org.jetbrains.dokka.gradle.DokkaTask) {
outputFormat = 'javadoc'
outputDirectory = javadoc.destinationDir
}
task generateJavadoc(type: Jar, dependsOn: dokkaJavadoc) {
group = 'jar'
classifier = 'javadoc'
from javadoc.destinationDir
}
task generateSourcesJar(type: Jar) {
group = 'jar'
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
复制代码
아티팩트로 대체됩니다 :
artifacts {
archives generateJavadoc //javadocJar
archives generateSourcesJar //sourcesJar
}
复制代码
그리고 이렇게 최종 템플릿은 코 틀린 자바가 아래로 업로드 업로드 할 수 있습니다 :
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
//for upload
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
//for kotlin upload
apply plugin: 'org.jetbrains.dokka'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 14
targetSdkVersion 28
versionCode 2
versionName "0.0.3"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
//这样引用容易引发冲突,改为compileOnly 仅仅lib内可用
// implementation 'com.android.support:appcompat-v7:28.0.0'
compileOnly 'com.android.support:appcompat-v7:28.0.0'
compileOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
def siteUrl = 'https://www.google.com/' //可选 如果有的话
def gitUrl = 'https://www.google.com/' //可选 如果有的话
group = "com.share" //路径
version = "0.0.3.release" //版本名称, 不要用beta,否则容易审核不通过
//以上两个配合项目目录名最终上传上去引用就是 compile 'com.share:tools:0.0.2.release'
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
//同时添加三个方法 for kotlin
task dokkaJavadoc(type: org.jetbrains.dokka.gradle.DokkaTask) {
outputFormat = 'javadoc'
outputDirectory = javadoc.destinationDir
}
task generateJavadoc(type: Jar, dependsOn: dokkaJavadoc) {
group = 'jar'
classifier = 'javadoc'
from javadoc.destinationDir
}
task generateSourcesJar(type: Jar) {
group = 'jar'
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task copyDoc(type: Copy) {
from "${buildDir}/docs/"
into "docs"
}
//for java only
//artifacts {
// archives javadocJar
// archives sourcesJar
//}
//for kotlin
artifacts {
archives generateJavadoc //javadocJar
archives generateSourcesJar //sourcesJar
}
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
name 'is permission tool for android'
url siteUrl
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'soulqw' //用户名
name 'qinwei' //姓名
email '[email protected]' //邮箱
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
//关键信息我们从localProperties文件中读取
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
repo = "TestRepository" // 仓库名
name = "MyTools"// 包名
desc = 'just tools'
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
javadoc {
options {
encoding "UTF-8"
charSet 'UTF-8'
author true
version true
links "http://docs.oracle.com/javase/7/docs/api"
}
}
复制代码
그 다음에 업로드 명령을 입력 :
개요
위의 방법에 의하면, 일반적으로 통해 액세스 할 수있는 업로드 문제가 없을 것, 기본적으로 완료
마지막으로, 구성 파일 localproperties에 주목
HTTPS : //juejin.im/post/5cf8dc44e51d454f6f16eb9e 재현