在Android Studio 中使用aar库非常方便,在模块化开发中尤为重要。在项目中经常从网络上获取公开的第三方类库进行开发,而这个网络位置就是JCenter。在在gradle中使用:
repositories {
jcenter()
}
jCenter是Bintray提供的公开下载服务,使用自身开发的artifactory开源应用搭建,后绪会介绍如何使用artifactory来搭建团队内部的私有仓库。
dependencies {
compile 'com.facebook.fresco:fresco:0.14.1'
}
在 Android Studio 中引用一个 Module Library 是不是很方便,类似于这样格式的开源库都是上传到了`bintray`上的,然后在发布成开源。
JCenter 是全世界最大的 Java 仓库,也是 Android Studio 中 repositories 的默认节点。JCenter 支持 Maven, Gradle, lvy , SBT 等大部分构建工具。
需要注意,发布到JCenter上面的库是开源的或是经过混淆的,否则就放弃这种想法,直接提供Jar包给第三方好了。
JCenter是由 [Bintray](https://bintray.com/) 公司在维护,所以先注册一个Bintray账号。
在bintray
上注册一个账号 建议注册个人账号。可以使用github
账号直接授权登录。
由于 Bintray网站 改版了,增加了Organization的概念。如果点击中间那个大大的绿色按钮,用那个点了注册就错了!! 变成了注册一个组织,注册地址是 https://bintray.com/signup 提交aar的时候就会出现Unauthorized这个错误 注意:个人的注册地址为https://bintray.com/signup/oss
注意一点:不能使用国内的邮箱注册。
上图:点击首页默认注册的是组织号
个人注册如上图
注册完了不知道自己注册是个人账号还是组织账号?
如果不小心注册成了组织账号了怎么办?
用国外的邮箱谷歌、雅虎等。新注册个账号即可。
然后输入登录密码就可以获取到API KEY了。
上图中注意:创建的maven仓库名字和类型都要写成maven。
添加 maven-gradle和gradle-bintray插件
项目的Project
下的build.gradle
中添加:
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
android-maven-gradle-plugin
插件是用来打包Maven所需文件的。gradle-bintray-plugin
插件是用来将生成的Maven所需文件上传到Bintray的。
1.在library model
下创建一个bintrayUpload.gradle
文件,文件内容如下:
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
// This is the library version used when deploying the artifact
// 配置版本
version = "1.0.0"
// 定义相关网站
def siteUrl = 'https://github.com/lugq/permissionDemo' // 项目的主页
def gitUrl = '[email protected]:lugq/permissionDemo.git' // Git仓库的url
group = "com.lugq.jcenterdemo" // Maven Group ID for the artifact,一般填你唯一的包名
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓定义 pom 并打包 aar↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
// Add your description here
name 'JCenter Demo'
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 'luguoqiang' //填写的一些基本信息
name 'luguoqiang'
email '[email protected]' // 填写邮箱
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑定义 pom 并打包 aar↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
// 打包 javadocjar 和 sourcejar
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
}
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 = "JcenterDemo" //发布到JCenter上的项目名字
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
javadoc { //jav doc采用utf-8编码否则会报“GBK的不可映射字符”错误
options{
encoding "UTF-8"
charSet 'UTF-8'
}
}
2.在library model
的build.gradle
中追加如下代码:
apply from: "bintrayUpload.gradle"
3.在local.properties
文件中添加从Bintray
申请到的API Key
#bintray
bintray.user=your bintray username
bintray.apikey=your apikey
建议将local.properties文件加入忽略文件中不上传,以保护你的apikey。
如果你一完成了上述的配置后,下面只需要一行代码就可以完成将项目提交到Bintray。
打开终端进入项目目录下,执行gradlew bintrayUpload
命令即可。
或者双击Tasts
文件夹下的publishing
下的bintrayUpload
文件;
执行完成后,打开你的bintray主页如果在Owned Repositories
下的maven
选中看到你的仓库,则说明你已经将你的仓库成功上传到bintray了。
坑一
Error:Execution failed for task ':module:bintrayUpload'.
> java.io.FileNotFoundException: /Users/peter/AndroidStudioProjects/JCenterDemo/module/build/poms/pom-default.xml (No such file or directory)
如果是这样的话说明你执行bintrayUpload的方式是在Android Studio的Gradle窗口中选择"Run *** bintrayUpload",请不要用这种方式执行bintrayUpload
正确的姿势应该是在命令行中执行gradlew bintrayUpload
坑二
peter:JCenterDemo peter$ gradlew bintrayUpload
bash: gradlew: command not found
解决:mac
和windows
不同 要在gradlew
命令下加上./
,
于是添加上了./,开始执行./gradlew bintrayUpload
命令
坑三
peter:botbrain-sdk-video peter$ ./gradlew bintrayUpload
bash: ./gradlew: Permission denied
peter:botbrain-sdk-video peter$
解决:改变gradlew的权限
chmod +x gradlew