Android組件化落地方案現(xiàn)在有兩種,第一種是以jar/aar包的方式進(jìn)行編譯依賴亡呵,另外一種是以工程方式進(jìn)行依賴硫戈,這兩種方案各有優(yōu)缺點,今天分享的是第一種丁逝,通過jar/aar方式進(jìn)行編譯依賴霜幼。
首先,如果要進(jìn)行編譯依賴就一定要有一個比較好的管理平臺來發(fā)布以及后續(xù)的維護(hù)罪既,所以我們使用現(xiàn)在服務(wù)端所用的nexus服務(wù)琢感。今天主要就是介紹如何在Android里面進(jìn)行配置,實現(xiàn)打包并且上傳到nexus服務(wù)中去烘挫,以及如何在項目中進(jìn)行引用柬甥。
第一步其垄,創(chuàng)建你的Android工程卤橄。然后找到你的Module的build.gradle,做如下修改棒口,以便于你assembleRelease后是jar/aar辜膝。
// 注釋掉這行漾肮,咱們需要生成的是個aar包克懊,而不是applicaiton
//apply plugin: 'com.android.application'
// 增加此行配置,表示當(dāng)前包生成的是jar/aar
apply plugin: 'com.android.library'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
// 由于library模式是不能設(shè)置applicationId墙懂,所以注釋掉
// applicationId "com.android.xxx.logger"
minSdkVersion 17
targetSdkVersion 25
versionCode 1
versionName "1.0.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
}
第二步扮念,在project的build.gradle同級目錄中,創(chuàng)建一個publish.gradle
并且增加如下代碼巧勤,此代碼的作用是進(jìn)行打包弄匕,并且上傳到你的nexus目錄地址中迁匠。
apply plugin: 'maven'
apply plugin: 'signing'
configurations {
deployerJars
}
repositories {
mavenCentral()
}
// 判斷版本是Release or Snapshots
def isReleaseBuild() {
return !VERSION.contains("SNAPSHOT");
}
// 獲取倉庫url
def getRepositoryUrl() {
return isReleaseBuild() ? RELEASE_URL : SNAPSHOT_URL;
}
// type顯示指定任務(wù)類型或任務(wù), 這里指定要執(zhí)行Javadoc這個task,這個task在gradle中已經(jīng)定義
task androidJavadocs(type: Javadoc) {
// 設(shè)置源碼所在的位置
source = android.sourceSets.main.java.sourceFiles
}
// 生成javadoc.jar
task androidJavadocsJar(type: Jar) {
// 指定文檔名稱
classifier = 'javadoc'
from androidJavadocs.destinationDir
}
// 生成sources.jar
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.sourceFiles
}
// 產(chǎn)生相關(guān)配置文件的任務(wù)
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
}
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment {
MavenDeployment deployment -> signing.signPom(deployment)
}
pom.version = VERSION
pom.artifactId = ARTIFACT_ID
pom.groupId = GROUP_ID
repository(url: getRepositoryUrl()) {
authentication(userName: NAME, password: PASSWORD) // maven授權(quán)信息
}
}
}
}
// 進(jìn)行數(shù)字簽名
signing {
// 當(dāng) 發(fā)布版本 & 存在"uploadArchives"任務(wù)時城丧,才執(zhí)行
required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
}
第三步,增加這個文件以后搂鲫,syncy一下會發(fā)現(xiàn)報錯磺平,因為有些全局變量沒有進(jìn)行聲明以及賦值拐辽,所以找到同級目錄中的gradle.properties擦酌,增加如下代碼赊舶。
# 用于上傳到指定nexus服務(wù)配置
# 如果在版本號中有 -SNAPSHOT字段,這樣在上傳的時候會上傳到 SNAPSHOT_URL 地址中笼平,反之會上傳到 RELEASE_URL 地址中
VERSION=1.0.0-SNAPSHOT
GROUP_ID=com.android.xxx.logger
ARTIFACT_ID=JFLogger
RELEASE_URL=http://maven.xxx.com/nexus/content/repositories/releases/
SNAPSHOT_URL=http://maven.xxx.com/nexus/content/repositories/snapshots/
NAME=***
PASSWORD=**********
第四步寓调,反回來找到Module的build.gradle,然后在最底下增加如下代碼夺英,此代碼的作用是把gradle的配置引入到項目中痛悯,這樣你就可以在gradle的命令中調(diào)用uploadArchives方法進(jìn)行打包上傳。
apply from: '../publish.gradle'
第五步惧财,執(zhí)行uploadArchives炒考,可以命令行執(zhí)行,也可以用IDE的工具來執(zhí)行帘靡,具體畫面如下瓤帚。
至此戈次,所有都已經(jīng)配置好了,這樣你就可以在你的nexus中找到對應(yīng)的版本了绊寻。