在开发过程中,常常引用优秀的第三方依赖库,我们也可以发布自己的依赖库到jCenter上,公开分享依赖库,供大家方便集成使用,不用再麻烦导入jar包或者Library工程。
使用AndroidStudio或者IDEA上,只需要添加几行代码到build.gradle文件就可以使用这个library了,如
1 | dependencies { |
依赖库服务器
Android Studio是从build.gradle里面定义的Maven 仓库服务器上下载library的。Apache Maven是Apache开发的一个工具,提供了用于贡献library的文件服务器。总的来说,只有两个标准的Android library文件服务器:jCenter 和 Maven Central(这里只介绍jCenter)
。
jCenter
jCenter是一个由 bintray.com维护的Maven仓库
我们在项目的build.gradle 文件中如下定义仓库,就能使用jCenter了:
1 | allprojects { |
发布library
申请Bintray账号
注册账号
各位大兄弟需要一个bintray账号,进入Bintray主页注册账号,注意注册个人账号:https://bintray.com/signup/oss ,注册企业账号:https://bintray.com/signup ,我们需要注册个人账号,如果使用企业账号会出现上传的依赖库到期等问题。
注意注册邮箱问题:不能使用QQ、163等邮箱,如果使用GitHub快速登录,也要注意GitHub邮箱不能是QQ、163等邮箱。登录
创建AndroidLibrary仓库
Add New Repository
新建仓库,注意仓库的命名:maven,因为上传依赖时,会默认上传到maven仓库记录API KEY
右上角菜单->Edit Profile
->API key
,输入登录密码,出现API KEY,复制API KEY,用于上传依赖,注意API KEY保密
引入bintray-release
创建Module
启动AndroidStudio,然后新建一个Android Library的Module项目的build.gradle引入
在你的项目的build.gradle添加bintray-release的classpath,注意是项目的build.gradle,不是module的,如:1
2
3
4dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'com.novoda:bintray-release:0.3.4' // 添加
}配置待上传的Module的build.gradle,详细设置可查看官方WiKi
打开刚刚新建的Module里的build.gradle文件,添加配置,如:1
2
3
4
5
6
7
8
9
10
11
12
13apply plugin: 'com.android.library'
apply plugin: 'com.novoda.bintray-release' // 添加
// 添加
publish {
userOrg = 'veizhang' // bintray.com注册的用户名[必填]
repoName = 'maven' // 远程仓库名称,可不填,默认名称:maven,可改为其他已创建的仓库名
groupId = 'com.excellence' // jCenter上的路径[必填]
artifactId = 'basetools' // 项目名称[必填]
publishVersion = '1.2.2' // 版本号[必填]
desc = 'Android通用适配器和常用的工具类' // 依赖描述[可写可不写]
website = 'https://github.com/VeiZhang/BaseToolsLibrary' // Git远程仓库链接[必填,否则出现400的错误,不会自动创建依赖包]
}至此,准备工作已完成,准备上传
上传
打开AndroidStudio下方的Terminal命令窗口,cd module
进入待上传的Module目录中,然后输入命令,执行完毕。1
gradle clean build bintrayUpload -PbintrayUser=veizhang -PbintrayKey=xxxxxxxxxxxxxxxxxxxxxxxxxxx -PdryRun=false
注意:
需要替换PbintrayKey为账号里的API KEY; PdryRun=false,执行命令,没有问题则会上传,如果改成PdryRun=true会运行所有的环节,但不会上传; PbintrayUser对应用户名;
上传成功后,在你的maven仓库里出现Module
审核
此时还不能引用,最后一步,只需要进入上传的依赖库中,点击Add to Jcenter
,给管理员审核依赖,提交的时候要做一个简短的英文描述,尽量不要用中文,审核一般需要等待几个小时,如果想快速通过审核,Module中什么都不写,新建完Module后直接上传审核,这种方式亲测可快速通过审核,审核成功后可以引用依赖,如图1
compile 'com.excellence:basetools:1.2.2'
- 依赖更新
在开发过程中,不断拓展集成新功能到Module中,那我们要同时更新jCenter上的依赖,只需要把版本号提高,发布即可1
2
3publish {
publishVersion = '1.2.2' // 更新版本
}
问题集合
Could not create package ‘dorisgm/maven/commonlibrary2’: HTTP/1.1 400 Bad Request [message:Please enter a valid VCS URL for your package.]
400 表示Bintray自动创建依赖库失败,原因是需要在gradle文件里添加website描述,这样才会自动创建依赖库;否则在Bintray网站上手动创建依赖库,然后上传也可以Error:Execution failed for task ‘:xxxxx:bintrayUpload’.> Could not create package> ‘xxxxx/maven/xxxxxxxxx’: HTTP/1.1 401 Unauthorized
401 这个错误很明显是认证错误,可能是你的用户名或者API key错了Could not create package ‘xxxxx’: HTTP/1.1 404 Not Found [message:Repo ‘maven’ was not found]
先Create Repository(名字默认是maven,必须要先创建仓库,或者把repoName改成其他已创建的仓库名),然后add new package如果没有出现Add to jCenter
或者在bintray里面没有搜索到上传的依赖,则可能是Repository设置私有,改成public就可以了Javadoc异常
1.Execution failed for task ‘:core:mavenAndroidJavadocs’.Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting): ‘/Users/zhou/git/app/core/build/tmp/mavenAndroidJavadocs/javadoc.options’
2.androidstudio mavenAndroidJavadocs FAILED GBK编码不可映射JavaDoc注解出现异常,一般是有中文注解导致,改成英文; 或者修改项目的build.gradle配置和修改Module的build.gradle配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14allprojects {
repositories {
jcenter()
}
/**避免中文注释:编码GBK的不可映射字符**/
tasks.withType(Javadoc) {
options{
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
}
}1
2
3
4
5/**避免Javadocs错误:找不到引用**/
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
}Execution failed for task ‘:core:lint’. Lint found errors in the project; aborting build.
在上传过程中执行了lint检查,所以可能会报上面的错误。解决方法就是避免lint的检查,在Module的build.gradle下面就要添加如下配置:1
2
3
4
5android {
lintOptions {
abortOnError false
}
}
- 下载的依赖看不了源码
Module会被打包成arr文件,其中包含资源文件,大家在引用时可以查看源码。上传到Bintray时,如果混淆了(即开启了minifyEnabled true),可能会导致引用的Library看不到源码,去掉Module里混淆文件proguard-rules.pro的两行代码,即:1
2-renamesourcefileattribute SourceFile #保证异常时显示行号
-keepattributes SourceFile,LineNumberTable