Android Library上传到JCenter仓库实践

前言

这段时间研究了下以前做app开发的时候并没有太过关注的JCenter仓库,在实际开发当中通常都是使用第三方开发者上传到jcenter的library,而我们使用的这些library或者plugin是怎么发布到JCenter并让我使用的? 如果我们想开发一个Library或者plugin,我们该怎么做?带着这些问题,我围绕它做了以下实践:

  • Android Library上传到JCenter仓库实践
  • Gradle插件开发实践-上传apk文件到Bugly

我会分别以两篇博客来分享一下我的实践过程,本篇是入门篇,主要是要告诉大家如何创建一个Android Library并上传到JCenter,很简单,相信你看了这篇文章之后以后想发布一个开源库给广大开发者用不再是问题。

概念普及

JCenter是什么?

jcenter是一个由 bintray.com维护的Maven仓库。一般我们会这样定义使用的仓库:

repositories {
        jcenter()
    }

Maven仓库又是什么?

你可以理解为存放我们Library的文件服务器。

我们在使用一些开源库的时候,可能会看到在项目根目录下的build.gradle有如下配置:

allprojects {
    repositories {
        mavenCentral()
    }
}

mavenCentral又是什么?

我好乱啊,我不想说话。但你还是带着疑问去Google了,能搜索到的问题我们不问好吗?

好吧,直接说答案。mavenCentral跟jcenter一样,都是maven仓库,只是存放的地方不一样,不用猜了,它们半毛钱关系都没有,有一段时间Android的默认仓库是mavenCentral,但后来由于它对开发者不太友好,就把默认仓库换成了jcenter。

更加详细的说明,可以参考以下文章:

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0623/3097.html

注册bintray账号

你要想在bintray上发布自己的Library就必须有一个创建一个账号,这里建议直接使用github账号授权登录,这样以后你开源的仓库可以在github找到相应的源码,如果你不想公开的话就另外创建一个账号了。

登录成功之后,你就可以在bintray看到一些著名的仓库,比如我们开发者经常使用的homebrew。

创建package

这里示例创建一个myutils的包,如下图所示:

ok,这个时候你创建好了package,后面就可以准备我们开发好的Library,然后上传到maven仓库,继续耐心看下面的步骤。

创建一个Android Library

新建一个android project,然后new 一个module,选择android library,项目结构如下:

这里我只是为了演示,创建了一个简单的类:

应用bintray插件

如果想通过bintrayUpload命令上传library就必须引用相应的插件,配置如下:

 dependencies {
        classpath ‘com.android.tools.build:gradle:2.0.0‘
        classpath ‘com.github.dcendents:android-maven-gradle-plugin:latest.release‘
        classpath ‘com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6‘
    }

然后在我们的Library工程的build.gradle引用插件,如下所示:

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

其中com.android.library是android的插件,表示它是一个android library。

应用成功后,你会看到插件生成的task,如下图所示:

通过这个task,我们可以将我们的library上传到maven仓库当中,现在还不行,我们还得继续完成我们的配置。

build.gradle配置

我们需要在library工程的build.gradle配置我们的相应的信息,下面是示例代码:

apply plugin: ‘com.android.library‘
apply plugin: ‘com.github.dcendents.android-maven‘
apply plugin: ‘com.jfrog.bintray‘
// 这个version是区分library版本的,因此当我们需要更新library时记得修改这个version
version = "1.0.0"

android {
    compileSdkVersion 19
    buildToolsVersion "23.0.3"
    resourcePrefix "devilwwj_"
    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 21
        versionCode 1
        versionName version
    }
    lintOptions {
        abortOnError false
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
        }
    }
}
dependencies {
    compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
    testCompile ‘junit:junit:4.12‘
}

def siteUrl = ‘https://github.com/devilWwj/Android-Tech‘      // 项目的主页
def gitUrl = ‘https://github.com/devilWwj/Android-Tech.git‘   // Git仓库的url
group = "com.devilwwj.library" // Maven Group ID for the artifact,一般填你唯一的包名
install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging ‘aar‘
                // Add your description here
                description ‘my utils for test‘
                name ‘Android Commonly used utils‘  //项目描述
                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 ‘YOUR_ID‘
                        name ‘YOUR NAME‘
                        email ‘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) {
    options.encoding = ‘UTF-8‘
    source = ‘src/main/java‘
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = ‘javadoc‘
    from javadoc.destinationDir
}
artifacts {
    archives javadocJar
    archives sourcesJar
}
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"  //发布到Bintray的那个仓库里,默认账户有四个库,我们这里上传到maven库
        name = "myutils"  //发布到Bintray上的项目名字
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}

你还需要在local.properties中定义两行代码:

bintray.user=YOUR_BINTRAY_USERNAME
bintray.apikey=YOUR_BINTRAY_API_KEY

分别是你在bintray的用户名和apikey,具体可以在你的profile找到。

配置完成后,我们就可以执行bintrayUpload命令上传我们的库到bintray,可以直接执行task或者在命令行敲入以下命令:

gradlew bintrayUpload

如果上传成功,就会在bintray的网页看到你的library,例如我通过命令上传的myutils库:

这个时候你已经实现通过gradle脚本上传library到maven仓库,你可以在本地验证以下,需要进行在根目录的build.gradle配置:

allprojects {
    repositories {
        jcenter()
        maven {
            url ‘https://dl.bintray.com/devilwwj/maven/‘
        }

    }
}

这样我们就可以访问上传到maven的library,在项目配置:

编译成功之后,可以在External Libraries看到我们从maven仓库下载下来的library:

但如果你想让其他开发者直接使用,需要上传到Jcenter,而不需要配置maven的地址。

上传到jcenter

完成这些操作之后,你只需等待bintray团队审核通过,之后其他开发者只需配置一行代码就可以使用了。

总结

关于使用gradle上传library到jcenter的实践基本就这样,在实践之前也参考了很多文章,但过程都基本类似,大家可以对比一下,自己按照这些步骤实践一下,看是否会遇到一些坑,踩坑并填坑的过程就是你经验的积累,我为什么要去了解这些内容,笔者以前在开发app并没有太关注这些,但从应用开发者转变成SDK开发者之后,从使用轮子到创造轮子的转变,需要我关注这些,从知道是什么到为什么再到怎么做,这对我们深入学习知识非常重要。

时间: 2024-08-26 08:58:12

Android Library上传到JCenter仓库实践的相关文章

Android将Library上传到jcenter超简单完整步骤以及遇到的各种坑

Android将Library上传到jcenter超简单完整步骤以及遇到的各种坑 在[玩转SQLite系列](七)打造轻量级ORM工具类SQLiteDbUtil操作数据库 中我们可以看到这个工具类的超简洁用法:只需要在gradle中引入: compile 'cn.bluemobi.dylan:sqlitelibrary:0.1' 即可使用,那么这到底是怎么回事?这个是Android项目所在jcenter的一个远程仓库.我们只需要将你的libray上传到jcenter即可,那么如和将一个项目上传到

android和struts2实现android文件上传

1.开发准备如下2个工具类 package org.lxh.util; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.URL; import java.util.Map; /** * 上传文件到服务器 * * @auth

关于云储存或者百度云的基础问题, 用java/android 实现上传文件到云储存(比如百度云)

============问题描述============ 关于云储存或者百度云的基础问题, 用java/android 实现上传文件到云储存(比如百度云) ============解决方案1============ 参考百度相关api

分布式版本控制系统Git-----2.上传至远程仓库之基础版

好,之前已经将文档下载下来了,但是我感觉还是将自己之前截的图放出来比较好,自己整理的,但是总不能放桌面上,时间久了也会忘得,索性放到博客上吧,也便于其他人查看,简直是百利而无一害啊.哈哈.来吧. 注意!想操作以下步骤,一定要看上一篇下载下来的zip中的第一章的" 初次运行 Git 前的配置 ",否则下面的操作失败!! 1.首先创建自己的远程仓库.我的仓库名是Demo 2.它会提示你接下来怎么做. 3.那就按照它说的来呗.首先新建一个文件夹,路径不要含有中文,毕竟是个程序员,要知道乱码的

用eclipse怎样将本地的项目打成jar包上传到mevan仓库

1.将maven 中的settings文件配置好用户名和密码,如下: <servers> <server> <id>releases</id> <username>admin</username> <password>admin</password> </server> </servers> 2.将需要打成jar的项目中的pom文件中配置上传的maven仓库路径: <distrib

Android端上传文件到Web服务器

本文中主要就Android端上传文件到Web服务器,做出的一个简单的Demo 1.Tomcat上部署的服务端的实现 2.Android端的代码实现 1.Tomcat服务器上面项目的部署与实现 创建一个Web Project 创建FileUploadServlet.java,当然,一下两个重要的Jar包不能够忘记! commons-fileupload-1.2.2.jar commons-io-2.0.1.jar FileUploadServlet.java import java.io.File

把本地git仓库的项目上传到远程仓库

之前在学校实验室服务器上建了一个git远程仓库,存放我写的express项目代码.后来由于出去实习,就无法访问那个远程仓库了,因为它在校园网内. 还好我的笔记本中有这个项目完整的本地仓库,于是我就试着在阿里云中新建一个仓库,这样就能把我的本地仓库的代码都上传上去. 首先,我再home目录创建了仓库文件夹,然后在这个文件夹下创建一个子文件夹作为我express项目的仓库目录 mkdir /home/repository/meadowlark.git 在meadowlark.git目录下,运行 gi

githup上传项目到仓库

1.有了自己的账号 2.创建一个新的项目,填写项目名称,描述 3.复制生成的https链接接下来用到 4.进入到你的项目所在目录右键git bash打开窗口 5.输入命令 输入git init 如下图所示,这个意思是在当前项目的目录中生成本地的git管理(会发现在当前目录下多了一个.git文件夹) 输入git add . 这个是将项目上所有的文件添加到仓库中的意思,如果想添加某个特定的文件,只需把.换成这个特定的文件名即可. 输入git commit -m "first commit"

docker 外部镜像 上传到本地仓库

下载外部镜像,多个节点服务器需要安装的时候再到外网下载,虽然加了加速器,修改镜像源为国内的,但是下载速度还是挺慢. 于是想我们已经安装了镜像仓库,为什么不直接将外部下载的镜像信息上传到本地仓库呢.这样只需要下载一次,然后任何需要使用的机器到本地的仓库下载安装即可. 这里我安装ELK中的L,也就是logstash,需要在每个节点服务器都安装,而这个文件就有800多M,再次下载就比较慢.于是..这样做了. 这里我的镜像仓库harbor安装在192.168.89.132上. 上传镜像的格式为 dock