使用Gradle(Android Studio)发布Android开源项目到jCenter

2016-01-04

使用Android Studio进行Android开发的时候,有些第三方库的引用只需要一句话

compile 'com.squareup.picasso:picasso:2.3.2'

第一次用的时候感觉很神奇,等到自己参与到开源组件的开发的时候,也想实现这种效果,应该怎么操作呢?本文就介绍一下如何使用Gradle发布到jCenter。

一、注册账号及获取API Key

首先,我们需要一个Bintray的账号,在https://bintray.com进行注册。

网站会分配个每个注册账号一个唯一的API Key,作为身份标识,所以注册完毕之后我们需要找到API Key,进入https://bintray.com并登录,鼠标移至右上角你的用户名处,点击Your Profile,如图

01

然后点击头像旁边的Edit,

02

最后点击API Key切换到该页面,点击Show查看你的API Key并复制保存下来,接下来要用到。

03

二、配置Gradle

1、配置全局Gradle

找到Gradle的目录,根据你的操作系统的不同,该目录位于

Windows XPC:\Documents and Settings\用户名\.gradle
Windows 7及以上C:\Users\用户名\.gradle
Mac OS/Users/用户名/.gradle

打开目录下的gradle.properties文件(如果文件不存在则新建),添加Bintray信息到文件末尾

BINTRAY_USER=celerysoft
BINTRAY_KEY=********************

BINTRAY_USER为你在Bintray注册的用户名,BINTRAY_KEY则为刚才获取到的API Key。

当然,你也可以选择在每个项目中的gradle.properties文件添加上述Bintray信息,但这样做十分繁琐,还需要将该文件添加到.gitignore中,防止泄露了个人信息。

2、配置项目Gradle

我们开发开源控件时,一般都会包含两个module,librarydemo,demo为控件的使用示例,library才是控件的实际源码,上传到jCenter时只需要上传library模块就行。

修改项目根目录的build.gradle文件

在dependencies下添加一行

classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'

添加完之后gradle.properties文件的内容大概如下

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

修改项目library目录的build.gradle文件

在文件末尾添加一行:apply from: 'bintray.gradle'

bintray.gradle暂时还不存在,我们需要在library目录下创建它,并修改它的内容如下

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
group = PROJ_GROUP
version = PROJ_VERSION
project.archivesBaseName = PROJ_ARTIFACTID

apply plugin: 'com.jfrog.bintray'
//apply plugin: "com.jfrog.artifactory"
apply plugin: 'maven-publish'

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += configurations.compile
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

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

javadoc {
    options{
        encoding "UTF-8"
        charSet 'UTF-8'
        author true
        version true
        links "http://docs.oracle.com/javase/7/docs/api"
        title PROJ_ARTIFACTID
    }
}

def pomConfig = {
    licenses {
        license {
            name PROJ_LICENSE
            url PROJ_LICENSE_URL
            distribution "repo"
        }
    }
    developers {
        developer {
            id DEVELOPER_ID
            name DEVELOPER_NAME
            email DEVELOPER_EMAIL
        }
    }
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            artifactId PROJ_ARTIFACTID
            artifact javadocJar
            artifact sourcesJar

            pom.withXml {
                def root = asNode()
                root.appendNode('description', PROJ_DESCRIPTION)
                root.children().last() + pomConfig

                def dependenciesNode = root.appendNode('dependencies')
                configurations.compile.allDependencies.each {
                    if (it.group && it.name && it.version) {
                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', it.group)
                        dependencyNode.appendNode('artifactId', it.name)
                        dependencyNode.appendNode('version', it.version)
                    }
                }
            }
        }
    }
}

afterEvaluate {
    publishing.publications.mavenJava.artifact(bundleRelease)
}

bintray {
    user = hasProperty("bintrayUser")?getProperty("bintrayUser"):getProperty("BINTRAY_USER")
    key = hasProperty("bintrayKey")?getProperty("bintrayKey"):getProperty("BINTRAY_KEY")

    publications = ['mavenJava']
    publish = true

    pkg {
        repo = 'maven'
        name = PROJ_NAME
        licenses = [PROJ_LICENSE]
        vcsUrl = PROJ_VCSURL
        userOrg = user

        version {
            name = PROJ_VERSION
            released  = new Date()
            desc = PROJ_VERSION_DESC
            vcsTag = PROJ_VERSION
        }

        publicDownloadNumbers = true
    }
}

84行和85行用到的就是刚才设置的全局gradle变量,Bintray的用户名和API Key,然后第1行的PROJ_GROUP和第2行的PROJ_VERSION又是啥?请继续往下看。

修改项目根目录的gradle.properties文件

在文件末尾添加如下内容

PROJ_GROUP=com.celerysoft
PROJ_VERSION=1.0.0
PROJ_VERSION_DESC=No release note left.
PROJ_NAME=MaterialDesignDialog
PROJ_ARTIFACTID=materialdesigndialog
PROJ_DESCRIPTION=Android dialog that follows the Google Material Design.
PROJ_WEBSITEURL=https://github.com/celerysoft/MaterialDesignDialog
PROJ_VCSURL=git@github.com:celerysoft/MaterialDesignDialog.git
PROJ_ISSUETRACKERURL=https://github.com/celerysoft/MaterialDesignDialog/issues
PROJ_LICENSE=MIT
PROJ_LICENSE_URL=https://raw.githubusercontent.com/celerysoft/MaterialDesignDialog/master/LICENSE

DEVELOPER_ID=celerysoft
DEVELOPER_NAME=Celery Qin
DEVELOPER_EMAIL=celerysoft@gmail.com

最终项目的引用方式为

dependencies {
    compile 'com.celerysoft:materialdesigndialog:1.0.0'
}

可以发现,引用形式是PROJ_GROUP:PROJ_ARTIFACTID:PROJ_VERSION

三、上传到Bintray

由于在Windows和Mac OS下使用命令行的方法不一样,先说说怎么在Android Studio里上传吧。上面的步骤执行完之后,先同步一下项目,即Sync Project with Gradle Files,然后点击Gradle,找到library的Task下的publishing里的bintrayUpload,双击执行上传,等待上传完成即可。

升级Android Studio 2.3之后发现这个方法会导致部分文件没有生成,所以只能采用命令行上传的方法了。

在macOS下打开终端cd到项目目录,执行./gradlew build bintrayUpload即可,在Windows下估计也是类似的,我没试过,就不误导大家啦。

04

四、包含项目到jCenter

进入https://bintray.com并登录,找到你刚才上传的项目点进去,点击右下角的

05

然后写几句你的项目的介绍,然后Send,之后等待jCenter的审核,审核通过之后就可以使用

compile 'com.celerysoft:materialdesigndialog:1.0.0'

来引用你的项目了。

noBorder

除非另有声明,本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。

文章评论



章节列表