这篇文章将介绍如何进行一步一步操作实现将自己的库上传至JCenter,使得可以简便的在app/build.gradle中的dependencies使用compile进行导入库使用。最终看起来使用的姿势是这样的
最终使用姿势1.Example项目和库的建立
按照平常的开发创建项目,在项目中创建Module,这个Module便是一个可以作为三方提供的库,这里举个简单栗子,一个android工具集的项目,核心目录结构如下:
project structure其中app下为Example的demo,其中包含了一个Module名字叫utils.
注意: demo和Module的目录名需要不同,比如com.leo618.utilsexample和com.leo618.utils;
完成项目的创建以及Module库代码编写之后,上传至github。
2.上传项目至github
把自己的项目上传到github上也是有多种方式的,可以直接在网站上传,或者使用GitHub桌面客户端,也可以使用命令行。这一步比较简单,注册github账号按照步骤上传就行了,直接跳过。
3.准备JCenter支持账号
首先你需要做的就是在https://bintray.com/有注册账号,没有的话注册一个便是,项目中需要两个东西:账号名称和API Key,右上角用户名处点击Edit Profile进入设置页面,左边栏最后一栏即为API Key(可能需要输入一次密码才能查看)
查看API Key4.修改项目配置,上传库
主要修改项目中的三个文件(红线标注):
Gradle文件修改-
加入插件依赖
在Project的build.gradle中的加入主要的两行classpath:
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1+' // jfrog plugin classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' // maven plugin } }
-
本地文件保存账户信息
在local.properties文件中加入bintray平台的账号和API Key,选择写在这个文件中是因为该文件不会上传到github上,版本控制中是需要忽略的,敏感信息就可以起到保护作用
local -
Module打包上传gradle脚本
在Module(库)的build.gradle中的加入脚本设置如下:
android { resourcePrefix "leo_" //资源标识前缀 随意填写 ... } // 然后你可以拷贝下面这一大段 修改注释的地方 apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray' version = "0.0.1"// 区分library版本 def siteUrl = 'https://github.com/Leo0618/Utils' // 项目的主页 github地址 def gitUrl = 'git@github.com:Leo0618/Utils.git' // Git仓库的url group = "com.leo618.utils" // Maven Group ID for the artifact,一般填你唯一的包名 install { repositories.mavenInstaller { pom { project { packaging 'aar' //项目的描述 name 'Android Utils.' 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 'Leo0618' name 'Leo' email 'leo0618@126.com' } } 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 options.linkSource true classpath += project.files(project.android.getBootClasspath().join(File.pathSeparator)) failOnError false } 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" name = "Utils" //发布到JCenter上的项目名字 websiteUrl = siteUrl vcsUrl = gitUrl licenses = ["Apache-2.0"] publish = true }
修改完成之后,执行gradle命令,过一会儿执行完成成功后,回到https://bintray.com/ 可以看到项目库源码已经上传到Maven仓库里面
上传成功点击进入项目,检查Files是否包含四个文件
一般来说只要上传成功aar和pom文件是有的,检查一下javadoc和sources两个jar是否存在,如果缺失这两个文件,很容易提交JCenter无法通过审核,如果缺失则分别按顺序执行gradle脚本命令other下面的三个命令
-
提交JCenter审核
点击2 进入 然后 send 即可,然后坐等几小时后,你就可以在其他项目中按照开头的姿势使用自己的库了。
如果你觉得文章有一定价值,欢迎推荐给你的朋友!
如有疑问,欢迎加群讨论交流
点击链接加入群【AndroidRunner】
网友评论
Execution failed for task ':utilsmodule:bintrayUpload'.
> Could not create package 'houwai/maven/UtilsModule': HTTP/1.1 404 Not Found [message:Repo 'maven' was not found]
请问这是执行哪一条gradle命令? sync project吗? 为什么我执行完后 bintray上没有看到上传的项目? 谢谢
不是sync project,可以使用gradle命令行执行,也可以双击IDE右侧Gradle中的项目名->Tasks->publishing->bintrayUpload进行上传,这个task会执行上面提到的install、javadoc、javadocjar三个命令,如若还不清楚有问题,欢迎加讨论QQ群 314896948