Android studio 发布公共类库到服务器maven仓库

[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-releaseandroid-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_PASSWORD

GROUP建议包名
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=包结构

你可能感兴趣的:(Android studio 发布公共类库到服务器maven仓库)