[TOC]
準(zhǔn)備
安裝準(zhǔn)備蠻多的谍婉,例如java環(huán)境什么的這里不多說(shuō),達(dá)到目標(biāo)就行
客戶端準(zhǔn)備
Android studio 1.3以上 本文使用 1.5.1
Gradle 2.4 以上置鼻,本文使用 2.9服務(wù)端準(zhǔn)備
Git服務(wù)器,這里準(zhǔn)備的是 Gitlab 內(nèi)網(wǎng)服務(wù)器,用公共服務(wù)器也行
Maven服務(wù)器岁歉,本文準(zhǔn)備的是 Nexus 服務(wù)器
Android SDK Linux版本
Gradle 2.4以上,本文使用2.9
Nexus安裝
去官網(wǎng)下載安裝包后膝蜈,復(fù)制到 ~/opt 目錄锅移,執(zhí)行如下命令
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目錄下,并做個(gè)/usr/local/nexus鏈接指向nexus-x.xx.x-xx目錄饱搏,方便以后nexus oss版本升級(jí)
方便以后使用
- $NEXUS_HOME環(huán)境變量指向/usr/local/nexus
- 將sonatype-work遷移到其它指定路徑非剃,可以修改nexus-x.xx.x-xx/conf/nexus.properties配置文件中的nexus-work變量值
運(yùn)行 Nexus
nexus-x.xx.x-xx/bin/nexus start
配置服務(wù)端
配置帳號(hào)
git用戶租,Nexus用戶組
git帳戶推沸,Nexus帳戶
配置sonatype nexus oss
瀏覽器打開http://服務(wù)器地址:8081/nexus
就可以看到nexus oss的控制面板
新建倉(cāng)庫(kù) android-release
和 android-snapshots
建立調(diào)度權(quán)限 android 添加 新倉(cāng)庫(kù)的推送于管理權(quán)限
把用戶加入到調(diào)度權(quán)限中
詳細(xì)操作請(qǐng)查看 Nexus權(quán)限管理于調(diào)度任務(wù)
這個(gè)時(shí)候备绽,就有了可用的Android 倉(cāng)庫(kù)了
發(fā)布公共類庫(kù)到服務(wù)器Android倉(cāng)庫(kù)
創(chuàng)建插件腳本 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"
}
}
請(qǐng)修改其中的
getReleaseRepositoryUrl()
和getSnapshotRepositoryUrl()
指向你配置的 倉(cāng)庫(kù)地址
將腳本推送到公共git倉(cāng)庫(kù),獲取這個(gè)腳本的 raw
地址 http://......../master/.../nexus-pulish.gradle
module 設(shè)置
檢查構(gòu)建配置
build.gradle
設(shè)置為
apply plugin: 'com.android.library'
全局工程的 local.properties
配置項(xiàng)指定的 sdk.dir
ndk.dir
是否正確
檢查依賴庫(kù)
如果有動(dòng)態(tài)庫(kù) so
鬓催,且不是生成的疯坤,必須將文件放到 {$module}/src/main/jniLibs
下
配置推送參數(shù)
使用時(shí)在需要推送的module的 build.gradle
最后增加
apply from [raw 地址]
并在對(duì)應(yīng) module 中修改或者創(chuàng)建文件 gradle.properties
,內(nèi)容如下
# 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=
請(qǐng)?zhí)畛渑渲?br> GROUP
VERSION_NAME
POM_ARTIFACT_ID
NEXUS_USERNAME
NEXUS_PASSWORDGROUP建議包名
VERSION_NAME 三段數(shù)字字母小寫POM_ARTIFACT_ID 庫(kù)的別名
使用Gradle推送
運(yùn)行
gradlew uploadArchives
# 只發(fā)布這個(gè)module
gradlew :moudleName:uploadArchives
或者在Android studio 的右側(cè) Gradle 菜單里深浮,找對(duì)應(yīng)的項(xiàng)目的taskuploadArchives
運(yùn)行這個(gè) uploadArchives任務(wù)
推送成功后压怠,日志會(huì)顯示成功
使用私有倉(cāng)庫(kù)
在需要使用的module的 build.gradle
中加入
dependencies {
repositories {
jcenter()
maven{
url 'http://...../your-release'
}
}
compile 'GROUP:POM_ARTIFACT_ID:VERSION_NAME'
//例如使用公告庫(kù),私有庫(kù)請(qǐng)查閱庫(kù)本身參數(shù)
compile 'com.android.support:appcompat-v7:23.2.1'
}
這個(gè)格式來(lái)使用這個(gè)私有公共庫(kù)
gradle.properties 配置詳解
發(fā)布配置
字段 | 用途 | 備注 |
---|---|---|
GROUP | 發(fā)布組ID | 一般寫主要包結(jié)構(gòu) com.package.name |
VERSION_NAME | 版本號(hào) | 一般填寫0.0.1飞苇,用于區(qū)分版本 |
POM_ARTIFACT_ID | 標(biāo)識(shí)ID | 一般用工具名稱name |
NEXUS_USERNAME | 用戶名 | Nexus管理員分配 |
NEXUS_PASSWORD | 密碼 | 登陸后可自行修改 |
SNAPSHOT_REPOSITORY_URL | 快照倉(cāng)庫(kù)配置 | 一般注釋不填寫 |
RELEASE_REPOSITORY_URL | 發(fā)布倉(cāng)庫(kù)配置 | 一般注釋不填寫 |
快照發(fā)布
GROUP=SNAPSHOT
正式發(fā)布
GROUP=包結(jié)構(gòu)