上传Android库到JCenter

上传Android库到JCenter

申请账号

到Bintray这网站上申请一个账号,并获取到账号和秘钥。
Bintray网站负责托管我们上传的jar包或aar包及版本信息。

Bintray是JCenter源码库的托管网站,除了可以通过Bintray将依赖库文件发布到JCenter,还可以创建自己的Maven仓库。由于Maven对开发者不太友好,上传依赖库异常困难,所以Android Studio将默认的源码库从maven换到了JCenter。

添加依赖

我们需要添加两个依赖

  1. 构建需要上传依赖库的相关文件的依赖
  2. 将依赖库上传到Bintray网站的依赖

在项目根build.gradle文件中添加如下代码:

buildscript {
    dependencies {
        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
    }
}

编写配置构建文件

再需要上传的module下的build.gradle文件中,添加构建配置。为了保持build.gradle文件的整洁,可以将构建配置单独放到gradle文件中,然后在build.gradle引入即可。

在项目根目录下添加配置文件bintrayupload.gradle,文件内容如下:

// 构建Maven依赖库脚本

apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

//定义上传到Bintray网站需要的属性,这三个参数定义在gradle.properties文件中
group = groupId
artifactId = artifactId
version = versionCode
def siteUrl = 'http://xxx'
def gitUrl = 'http://xxx'

//定义一个从local.properties文件读取参数的方法
def getPropertyFromLocalProperties(key) {
    File file = project.rootProject.file("local.properties")
    if (file.exists()) {
        Properties properties = new Properties()
        properties.load(file.newDataInputStream())
        return properties.getProperty(key)
    }
}

// 构建pom文件
install {
    repositories.mavenInstaller {
        pom {
            project {
                packaging 'aar'
                name 'One high-Performance log library for android'
                groupId groupId
                artifactId artifactId
                version versionCode
                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 'xxx'
                        name 'xxx'
                        email '[email protected]'
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}

//设置上传配置和参数
bintray {
    user = getPropertyFromLocalProperties("bintray.user")
    key = getPropertyFromLocalProperties("bintray.key")
    configurations = ['archives']
    pkg {
        repo = 'Maven'//这里要与Bintray网站的仓库名称一致
        name = "${project.group}:${project.name}"
        userOrg = 'xxx'
        licenses = ['Apache-2.0']
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        publish = true
    }
}

//构建源码任务
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))
    //注意添加编码方式,否则默认gbk编码在显示中文时乱码
    options.encoding = "utf-8"
    options.charSet = "utf-8"
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

在需要上传的module下的build.gradle文件中添加对bintrayupload.gradle文件的依赖。

//这句话一定要添加到文件末尾
apply from: rootProject.file("bintrayupload.gradle")

上传到maven

执行install任务

在gradle任务列表中找到other->install任务并执行,会依照bintrayupload.gradle文件的配置脚本构建所需文件。
上传Android库到JCenter_第1张图片

执行bintrayUpload任务

在gradle任务列表中找到publishing->bintrayUpload任务并执行,会将上一步构建的文件上传到Bintray网站。

上传Android库到JCenter_第2张图片

上传成功后,会自动创建相应包名的工程。

上传到JCenter

上传Android库到JCenter_第3张图片

在新建项目的右下角,点击“Add to JCenter”按钮,会将该项目文件发布到JCenter,等到审核通过后就可以使用了。

常见问题

Javadoc任务,报错:程序包 xxx 找不到

当你的程序依赖一些第三方库时,生成java doc会提示第三方类找不到,可以在gradle文件中添加如下代码,告知javadoc任务寻找类路径。

afterEvaluate {
    javadoc.classpath += files(android.libraryVariants.collect { variant ->
        variant.javaCompile.classpath.files
    })
}

生成java doc中文乱码

在gradle文件中设置doc的编码方式。

task javadoc(type: Javadoc) {
    options.encoding = "utf-8"
    options.charSet = "utf-8"
}

你可能感兴趣的:(Android)