前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Publish Gradle Android Library to jCenter Repository

Publish Gradle Android Library to jCenter Repository

作者头像
宅男潇涧
发布2018-08-01 15:37:14
9270
发布2018-08-01 15:37:14
举报
文章被收录于专栏:潇涧技术专栏潇涧技术专栏

本文主要介绍如何通过Gradle将Android库项目上传到jCenter仓库中。

经常使用开源项目的童鞋肯定很喜欢以Maven或者Gradle的形式来导入其他的开源库,但是那些开源库是怎么放到开源库的仓库中的呢?之前Android Studio默认使用的Maven Central仓库,现在改为使用jCenter仓库,感兴趣可以阅读Android Studio – Migration from Maven Central to JCenter这篇文章了解下为什么。

必要知识:Gradle

这里只是列举一些必要的关于Gradle的知识,具体的详细介绍可以参考其他文档,例如Gradle官网的Gradle User Guide或者http://tools.android.com/Gradle Plugin User Guide(也可以阅读我的注解版本gradle-plugin-user-guide)。

关于如何在Android Studio中使用Gradle,可以看下这篇教程Gradle Tutorial : Part 6 : Android Studio + Gradle

下面是从Gradle入门系列教程 (英文原版教程点这里)中摘取的重要知识,可以对Gradle做个大致了解。

(1)每一次Gradle的构建(build)都包含一个或者多个项目(project),每个项目中又包含一个或者多个任务(task)

(2)Gradle的设计理念是:所有有用的特性都由Gradle插件提供。Gradle插件能够在项目中添加新任务;为新加入的任务提供默认配置;加入新的属性,可以覆盖插件的默认配置属性;为项目加入新的依赖。

(3)本质上说,仓库是一种存放依赖的容器,每一个项目都具备一个或多个仓库。Gradle支持以下仓库格式:Ivy仓库;Maven仓库;Flat directory仓库。

在加入Maven仓库时,Gradle提供了三种“别名”供我们使用,它们分别是:

mavenCentral()别名,表示依赖是从Central Maven 2仓库中获取的。 jcenter()别名,表示依赖是从Bintary’s JCenter Maven仓库中获取的。 mavenLocal()别名,表示依赖是从本地的Maven仓库中获取的。

声明仓库示例(将Central Maven 2 仓库加入到构建中):

代码语言:javascript
复制
repositories {
    mavenCentral()
}

(4)最普遍的依赖称为外部依赖,这些依赖存放在外部仓库中。一个外部依赖可以由以下属性指定:

group属性指定依赖的分组(在Maven中,就是groupId)。 name属性指定依赖的名称(在Maven中,就是artifactId)。 version属性指定外部依赖的版本(在Maven中,就是version)。

声明依赖格式:

代码语言:javascript
复制
dependencies {
    compile 'groupId:artifactId:version'
}
使用gradle-bintray-plugin插件

下面进入今天的主题,讨论如何通过Gradle将Android库项目上传到jCenter仓库中。这方面的博客还是有一些的,考虑到我以后会经常用到,还是打算写一篇自己的心得体会。参考网址如下:

使用Gradle发布Android开源项目到JCenter

Publishing Gradle Android Library to jCenter Repository

中文版本 使用Gradle发布项目到JCenter仓库

详细步骤如下:

1.注册Bintray账号

网址:https://bintray.com/

2.记录API Key

个人设置界面的左下角API key,复制保存该字符串

3.新建AS项目和库项目

在AS中新建项目,例如Polaris,再在项目中新建Module,选择Android Library Module,例如lib4polaris

4.打开项目根目录下的local.properties文件(如果没有就新建一个),输入你的Bintray账号的信息

代码语言:javascript
复制
bintray.user= [your name]
bintray.apikey= [your api key]

5.打开项目根目录下的build.gradle文件,修改dependencies部分,注意gradle需要使用1.1.2版本,如果使用的是1.1.0版本会出错的。另外添加两个重要的插件,其中android-maven-plugin插件用于生成JavaDoc和Jar文件等,gradle-bintray-plugin插件是用于上传项目到Bintray。

代码语言:javascript
复制
    dependencies {
        //when using gradle 1.1.0, there will be an error: Cannot call getBootClasspath() before setTargetInfo() is called
        //https://www.virag.si/2015/01/publishing-gradle-android-library-to-jcenter/
        classpath 'com.android.tools.build:gradle:1.1.2' //

        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
        classpath 'com.github.dcendents:android-maven-plugin:1.2'

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

6.打开库项目lib4polaris中的build.gralde文件,修改成以下内容,其中注释了#CONFIG#的地方都可以根据实际情况进行修改。下面的内容中添加了很多操作,例如定义pom并打包aar,打包javadocjar和sourcejar,上传到Jcenter仓库等。

更多关于配置上传到Bintray的参数可以参见项目gradle-bintray-plugin

代码语言:javascript
复制
apply plugin: 'com.android.library'

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

version = "1.0.0"                                                              // #CONFIG# // project version

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"
    resourcePrefix "polaris_"                                                  // #CONFIG# // resource prefix

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.android.support:support-v4:22.1.1'
}


def siteUrl = 'https://github.com/hujiaweibujidao/Polaris'                    // #CONFIG# // project homepage
def gitUrl = 'https://github.com/hujiaweibujidao/Polaris.git'                 // #CONFIG# // project git url
def issueUrl = 'https://github.com/hujiaweibujidao/Polaris/issues'            // #CONFIG# // project issue url
group = "hujiaweibujidao.github.io"                                           // #CONFIG# // Maven Group ID for the artifact (pageckage name is ok)


//generate javadoc and jar

install {
    repositories.mavenInstaller {
        // generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                name 'Polaris Library For Android'                             // #CONFIG# // project title
                url siteUrl
                // Set your license
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer {
                        id 'hujiaweibujidao'                                  // #CONFIG# // your user id (you can write your nickname)
                        name 'hujiawei'                                       // #CONFIG# // your user name
                        email 'hujiawei090807@gmail.com'                      // #CONFIG# // your email
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}

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
}

artifacts {
    archives javadocJar
    archives sourcesJar
}


//bintray upload

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty("bintray.user")
    key = properties.getProperty("bintray.apikey")
    configurations = ['archives']
    pkg {
        repo = "maven"
        name = "polaris"                                                   // #CONFIG# project name in jcenter
        desc = 'A helpful library for Android named Polaris.'
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        issueTrackerUrl = issueUrl
        licenses = ["Apache-2.0"]
        labels = ['android']
        publish = true
        publicDownloadNumbers = true
    }
}

7.选择工具栏中的Sync projects with Gradle files对项目进行重建,然后可以看到Gradle视图中的Task中出现了bintrayUpload,双击即可将项目上传到Bintray中。

image
image

8.在详情页中找到Maven Central标签,鼠标放上去它会提示你去提交到jCenter进行审核,点击进入后,写点内容就可以了,等待审核需要一定的时间。

image
image

9.审核通过之后,就可以在项目中通过很简单的方式来使用这个库项目了。

10.前面指定了项目关联的Git网址,但是实际上并没有上传Github上,下面的操作可以简单地在Android Studio中实现。

image
image

上传之后即可在Github中看到你的该项目。

题外话:

1.关于搜索顺序

下面其实是一次搜索报错,然后列出了Gradle搜索该library的顺序,感觉还是蛮有信息量的。

代码语言:javascript
复制
Could not find hujiaweibujidao.github.io:polaris:1.0.1.
Searched in the following locations:
    https://jcenter.bintray.com/hujiaweibujidao/github/io/polaris/1.0.1/polaris-1.0.1.pom
    https://jcenter.bintray.com/hujiaweibujidao/github/io/polaris/1.0.1/polaris-1.0.1.jar
    file:/Users/hujiawei/Android/android_sdk/extras/android/m2repository/hujiaweibujidao/github/io/polaris/1.0.1/polaris-1.0.1.pom
    file:/Users/hujiawei/Android/android_sdk/extras/android/m2repository/hujiaweibujidao/github/io/polaris/1.0.1/polaris-1.0.1.jar
    file:/Users/hujiawei/Android/android_sdk/extras/google/m2repository/hujiaweibujidao/github/io/polaris/1.0.1/polaris-1.0.1.pom
    file:/Users/hujiawei/Android/android_sdk/extras/google/m2repository/hujiaweibujidao/github/io/polaris/1.0.1/polaris-1.0.1.jar

从上面的输出可以看出,先是在Bintray上的对应位置找,如果没找到尝试在本地的android目录下的m2repository中找,如果还是没有找到,就在本地的google目录下的m2repository中找,如果还是没有找到,那就提示出错。

2.关于版本

有些时候同一个版本号多次执行bintrayUpload任务会报错,这个时候有两种选择,要么修改version,要么在Bintray中删除该版本。

另外,如果提示xxx.jar等文件找不到,可以先执行install任务,然后再执行bintrayUpload任务。

3.关于引用

审核通过之后,我先是使用hujiaweibujidao.github.io:polaris:1.0.0作为引用来导入,可是发现一直提示找不到!最后在Bintray中的Files中发现,pom以及jar等文件的命名是以lib4polaris-x.y.z开头的,也就是默认情况下是以我创建的Android Library Module的名称作为开始,因为上传本身也是发生在这个库项目的build.gradle中的。所以,如果改为使用hujiaweibujidao.github.io:lib4polaris:1.0.0即可引用到了。但是,如何自定义artifactId呢?这里有个对于该问题的讨论你可以试下,https://github.com/dcendents/android-maven-gradle-plugin/issues/9,其中msdx最后给出了他的方案,详情可以参考他的项目https://github.com/msdx/gradle-publish

使用bintray-release插件

该插件使得上传library到Bintray上更加简单,项目源码地址:novoda/bintray-release

参考教程:上传android library 到bintray

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015/5/28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 必要知识:Gradle
  • 使用gradle-bintray-plugin插件
  • 使用bintray-release插件
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档