序:开发时间长了,有一些自己开发用的顺手代码。每次用到时都是copy过来显然很麻烦。一直想着把自己常用的一些控件或者功能模块整合一下,打包到仓库里,用到时可以直接依赖。而且牛人都是自己开发框架和开源库。为了技术进步和后面用着方便。
上传的三种代码仓库:本底Maven仓库、局域网Maven仓库和远程jcenter仓库
1.本底仓库:
这个比较简单,做的时候也没遇到啥坑。简单说一下流程:
①在module的build.gradle文件增加以下内容:
apply plugin: 'maven'
uploadArchives{
repositories.mavenDeployer{
// 配置本地仓库路径,项目根目录下的repository目录中
repository(url: uri('../repository'))
// 唯一标识(通常为模块包名,也可以任意)
pom.groupId = "com.xxx.annotation"
// 项目名称(通常为类库模块名称,也可以任意)
pom.artifactId = "annotation"
// 版本号
pom.version = "1.0.0"
}
}
②在Studio中gradle里面找到该模块并执行uploadArchives,如下图:
③编译完成后,就会在repository设置的目录下生成对应的aar即相关pom文件,见下图:
④然后开始使用了,在项目的build.gradle下设置仓库地址,该地址即前面repository所在的路径,如下图:
最后就可以在模块里依赖此开源库了。
2.局域网仓库,主要针对的是公司内部的开源库,方便公司管控。可以安装使用Nexus,此处没有去尝试,先暂且略过。
3.上传远程的jcenter仓库
这里遇到的坑比较多,很多博客讲的都是有时间局域性,当时可以,现在的外部环境变化之后,已经没有效果了。我们接着采坑。
①首先需要注册一个Bintray账户,bintray官网注册地址。注册完成后,新建一个organization,在该organization创建一个仓库。仓库使用maven的
创建完成之后会在该组织下看到该仓库,如下图
创建完账号之后,下面开始选择使用的插件了。
②选择使用上传到jcenter仓库的插件。主要有两种:
gradle-bintray-plugin
这个插件的地址 https://github.com/bintray/gradle-bintray-plugin,使用此插件的人非常多,但是gradle配置内容较多,稍不小心就会出问题,这也就导致很多人根据别人的文章一步步走一般都不会成功了。
bintray-release
地址https://github.com/novoda/bintray-release,此插件相比上面的就简单很多了,主要是配置内容少了很多,即使出了问题解决也相对容易。(注意:此插件已经很久没有维护了,所以后面在使用的时候也遇到坑了。这里后面再说修改方式)
我是先选择的bintray-release。使用如下:
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
//配置依赖的插件
classpath 'com.novoda:bintray-release:0.9.2'
}
然后在库模块build.gradle增加如下配置:
apply plugin: 'com.novoda.bintray-release'
publish {
repoName = "maven"
//bintray注册的组织organization的名字,此处需要注意
userOrg = 'yn'
//compile引用时的第1部分groupId
groupId = 'com.xxx'
//compile引用时的第2部分项目名
artifactId = 'annotation'
//compile引用时的第3部分版本号
publishVersion = '1.0.0'
// 描述
desc = 'This is a annotation library22'
//该库的网址, 个人用户,此处一般为该项目存在git上的网址
website = 'https://github.com/xxx/xxx'
}
注意:userOrg 为bintray注册的组织organization的名字
最后,在命令行执行如下命令:
gradle clean build bintrayUpload -PbintrayUser= … -PbintrayKey=… -PdryRun=false;
PbintrayUser为用户名,PbintrayKey为秘钥。
输入完密码之后,即可看到秘钥。此处会遇到以下坑
坑一
Could not create an instance of type com.novoda.release.internal.compat.gradle5_3.AndroidSoftwareComponentCompat_Gradle_5_3.
org/gradle/api/internal/java/usagecontext/LazyConfigurationUsageContext
处理:github上的解释是gradle版本不兼容导致,需要降低到5.6.4以下,但我尝试之后并没有效果,降到5.4.1也还是会报这个错,看了github上,有两年没有维护了,在gradle版本上有限制。其实我是想大不了把代码拉下来,改一下兼容高版本的,然后再放到git上。发现已经有人这样做了。所以我直接使用别人改的就可以了。这里需要改一下插件,改为如下:
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
// classpath 'com.novoda:bintray-release:0.9.2'
//改为 用此插件
classpath 'com.github.panpf.bintray-publish:bintray-publish:1.0.0'
}
坑二
换了插件之后,发现编译还是报错,报GBK编码的错误。日志显示是在生成doc时报错了。如下
错误: 编码GBK的不可映射字符
处理:增加如下配置:
allprojects {
...
tasks.withType(Javadoc) {
options{
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
// enabled = false
}
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
}
坑填完,上传完成后,即可在binary里面看到自己的库了。
③最后是使用了:
增加仓库地址,仓库地址为:https://dl.bintray.com/组织名/仓库名
allprojects {
repositories {
google()
jcenter()
// maven {url "file:\\D:\\soft_development\\android\\workspace\\project\\YnArc\\repository"}
maven{ url 'https://dl.bintray.com/yn/maven'}
}
....
}
然后在需要使用的模块添加依赖:
implementation("com.xxx.annotation:1.0.0")