现在公司安卓项目比较多,想把重复的、常用的类抽离出来作为一个类库。
参考maven文档及网上一些参考文档,简单的整理如下
创建公共库
- 新建一个项目,然后添加一个需要做为公共库的Module。
- 在这个module的gradle中添加代码:
apply plugin: 'maven'
def getRepositoryUsername() {
return hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : ""
}
def getRepositoryPassword() {
return hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : ""
}
afterEvaluate {project ->
uploadArchives {
repositories {
mavenDeployer {
pom.groupId = GROUP
pom.artifactId = POM_ARTIFACT_ID
pom.version = VERSION_NAME
repository(url:"http://172.16.7.251:8081/nexus/content/repositories/com.jjshome.mobile") {
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
}
}
}
}
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.sourceFiles
}
artifacts {
archives androidSourcesJar
}
}
这里的URL没有使用 releases的repositories(一般为http://172.16.7.251:8081/nexus/content/repositories/releases/ ), 而是自定义了一个MobileRepository,是因为上传releases的地址gradle报无法连接的错误,想来是私服有人设置了权限吧。
- 在这个module下添加配置文件gradle.properties,添加些属性
#对应maven的groupId值
GROUP=com.jjshome.mobile
#对应maven的version值
VERSION_NAME=0.0.3
#对应maven的artifactId值
POM_ARTIFACT_ID=jjs-utils
#登录nexus oss的用户名
NEXUS_USERNAME=admin
#登录nexus oss的密码
NEXUS_PASSWORD=admin123
- 运行上传任务
项目中引入公共库
- 在项目的顶层build.gradle添加私服地址
allprojects {
repositories {
jcenter()
maven {
url "http://172.16.7.251:8081/nexus/content/groups/public/"
}
}
}
- 在需要引用的modle中的build.gradle添加library
dependencies {
compile 'com.jjshome.mobile:jjs-utils:0.0.3'
}
配置中遇到的问题
<ul>在maven私服中需要把自己的repositories添加到Public Repositories 的Ordered Group Repositories中
</ul>
<ul>
在编译上传自定义的库时注意编译的sdk版本,和最低支持的sdk版本。如果引用的项目中compileSdkVersion的版本比自定义库中的低,minSdkVersion的版本比自定义的高,那么会编译失败。
最好是自定义的库支持的minSdkVersion要比较低,compileSdkVersion、targetSdkVersion也比较低。
</ul>