[TOC]
准备
安装准备蛮多的,例如java环境什么的这里不多说,达到目标就行
客户端准备
Android studio 1.3以上 本文使用 1.5.1
Gradle 2.4 以上,本文使用 2.9服务端准备
Git服务器,这里准备的是 Gitlab 内网服务器,用公共服务器也行
Maven服务器,本文准备的是 Nexus 服务器
Android SDK Linux版本
Gradle 2.4以上,本文使用2.9
Nexus安装
去官网下载安装包后,复制到 ~/opt 目录,执行如下命令
sudo cp nexus-x.xx.x-xx-bundle.tar.gz /usr/local
cd /usr/local
sudo tar xvzf nexus-x.xx.x-xx-bundle.tar.gz
sudo ln -s nexus-x.xx.x-xx nexus
nexus oss官方建议将nexus-x.xx.x-xx安装到/usr/local目录下,并做个/usr/local/nexus链接指向nexus-x.xx.x-xx目录,方便以后nexus oss版本升级
方便以后使用
- $NEXUS_HOME环境变量指向/usr/local/nexus
- 将sonatype-work迁移到其它指定路径,可以修改nexus-x.xx.x-xx/conf/nexus.properties配置文件中的nexus-work变量值
运行 Nexus
nexus-x.xx.x-xx/bin/nexus start
配置服务端
配置帐号
git用户租,Nexus用户组
git帐户,Nexus帐户
配置sonatype nexus oss
浏览器打开http://服务器地址:8081/nexus
就可以看到nexus oss的控制面板
新建仓库 android-release
和 android-snapshots
建立调度权限 android 添加 新仓库的推送于管理权限
把用户加入到调度权限中
详细操作请查看 Nexus权限管理于调度任务
这个时候,就有了可用的Android 仓库了
发布公共类库到服务器Android仓库
创建插件脚本 nexus-pulish.gradle
apply plugin: 'maven'
apply plugin: 'signing'
def isReleaseBuild() {
return VERSION_NAME.contains("SNAPSHOT") == false
}
def getReleaseRepositoryUrl() {
return hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL : "http://xxxx:9009/nexus/content/repositories/android-releases/"
}
def getSnapshotRepositoryUrl() {
return hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL : "http://xxxx:9009/nexus/content/repositories/android-snapshots/"
}
def getRepositoryUsername() {
return hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : ""
}
def getRepositoryPassword() {
return hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : ""
}
signing {
required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives")}
sign configurations.archives
}
afterEvaluate { project ->
uploadArchives {
repositories {
mavenDeployer {
pom.groupId = GROUP
pom.artifactId = POM_ARTIFACT_ID
pom.version = VERSION_NAME
repository(url: getReleaseRepositoryUrl()) {
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
}
snapshotRepository(url: getSnapshotRepositoryUrl()) {
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
}
}
}
}
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
options {
encoding "UTF-8"
links "http://docs.oracle.com/javase/7/docs/api/"
linksOffline "http://d.android.com/reference", "${android.sdkDirectory}/docs/reference"
}
exclude '**/BuildConfig.java'
exclude '**/R.java'
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
classifier = 'javadoc'
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.sourceFiles
}
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
"${project.buildDir}/outputs/aar/${project.name}-release.aar"
}
}
请修改其中的
getReleaseRepositoryUrl()
和getSnapshotRepositoryUrl()
指向你配置的 仓库地址
将脚本推送到公共git仓库,获取这个脚本的 raw
地址 http://......../master/.../nexus-pulish.gradle
module 设置
检查构建配置
build.gradle
设置为
apply plugin: 'com.android.library'
全局工程的 local.properties
配置项指定的 sdk.dir
ndk.dir
是否正确
检查依赖库
如果有动态库 so
,且不是生成的,必须将文件放到 {$module}/src/main/jniLibs
下
配置推送参数
使用时在需要推送的module的 build.gradle
最后增加
apply from [raw 地址]
并在对应 module 中修改或者创建文件 gradle.properties
,内容如下
# if GROUP chants SNAPSHOT this project will archive to snapshots which archive to releases not chants
GROUP=SNAPSHOT
# VERSION Name of this must be x.x.x
VERSION_NAME=0.0.1
# maven artifactID
POM_ARTIFACT_ID=com.package.name
# snapshot url
#SNAPSHOT_REPOSITORY_URL=
# release url
#RELEASE_REPOSITORY_URL=
# username
NEXUS_USERNAME=
# password
NEXUS_PASSWORD=
请填充配置
GROUP
VERSION_NAME
POM_ARTIFACT_ID
NEXUS_USERNAME
NEXUS_PASSWORDGROUP建议包名
VERSION_NAME 三段数字字母小写POM_ARTIFACT_ID 库的别名
使用Gradle推送
运行
gradlew uploadArchives
# 只发布这个module
gradlew :moudleName:uploadArchives
或者在Android studio 的右侧 Gradle 菜单里,找对应的项目的taskuploadArchives
运行这个 uploadArchives任务
推送成功后,日志会显示成功
使用私有仓库
在需要使用的module的 build.gradle
中加入
dependencies {
repositories {
jcenter()
maven{
url 'http://...../your-release'
}
}
compile 'GROUP:POM_ARTIFACT_ID:VERSION_NAME'
//例如使用公告库,私有库请查阅库本身参数
compile 'com.android.support:appcompat-v7:23.2.1'
}
这个格式来使用这个私有公共库
gradle.properties 配置详解
发布配置
字段 | 用途 | 备注 |
---|---|---|
GROUP | 发布组ID | 一般写主要包结构 com.package.name |
VERSION_NAME | 版本号 | 一般填写0.0.1,用于区分版本 |
POM_ARTIFACT_ID | 标识ID | 一般用工具名称name |
NEXUS_USERNAME | 用户名 | Nexus管理员分配 |
NEXUS_PASSWORD | 密码 | 登陆后可自行修改 |
SNAPSHOT_REPOSITORY_URL | 快照仓库配置 | 一般注释不填写 |
RELEASE_REPOSITORY_URL | 发布仓库配置 | 一般注释不填写 |
快照发布
GROUP=SNAPSHOT
正式发布
GROUP=包结构