在項目的發(fā)展過程中,可能需要不斷地引入新的第三方包,通常都是aar的形式。當項目不斷地擴展,aar越來越多,會發(fā)現(xiàn)維護aar也是一件麻煩的事。
通常引用第三方aar會有兩種形式,一種是遠程訪問,一種是本地訪問。
Demo工程地址,通過代碼可以更容易理解。
一是通過遠程訪問maven庫地址的形式。需要做兩件事:
第一步在工程的build.gradle中加入庫地址
buildscript {
????repositories {
????????maven {
? ??????????//谷歌粑粑官方的地址是'https://maven.google.com/',一般無法訪問。這里用阿里家的梯子。
????????????url 'https://maven.aliyun.com/repository/google'
? ? ????????name 'google'? ?
? ? ? ? }
}
allprojects {
????repositories {
????????maven {
????????????url 'https://maven.aliyun.com/repository/google'
? ? ? ? ? ? name 'Google'
? ? ? ? }
????}
}
第二步在項目的gradle中進行配置
compile + 空格 + 插件名。
舉例:compile?'com.android.support:support-v4:26.0.0'
Notice:
此處有個小規(guī)范,如果是地址形式直接引用,使用'',也就是英文半角單引號;如果是中間插入版本等變量信息,使用"",英文半角雙引號。
二是引用本地aar包。也是需要做兩件事:
第一步在項目gradle內(nèi)加入引用路徑
repositories {
????flatDir {
? ? ? ? //默認aar本地存放路徑在libs下
????????dirs'libs'
????}
}
第二步在項目gradle中進行配置
compile(name:? 'aar的包名', ext: 'aar')
比如把webp的aar保存在本地,可以通過
compile(name : 'webp-1.0.0', ext: 'aar')的形式配置。
隨著項目的發(fā)展,可能引用的google包越來越多,比如appcompat,desigin,percent等等遠程包。也可能是本地集成第三方項目的aar。如果在同一個gradle中維護,一會兒加個本地的,一會兒加個遠程的,還要進行版本控制,就會看著眼暈。那么在此介紹兩種“集中式”引用aar的方法。
一是遠程aar的集中管理
本地引用的第一步還是不變的。
第二步在工程目錄下,新加一個aar包引用目錄。
創(chuàng)建一個目錄文件,假設取名aarOnline.gradle。文件內(nèi)容如下
ext {
????dependVersion = [??
? ? ? ? //引用的SDK信息,需要更新時,直接修改此處就可以
????????androidSupportSdkVersion:'25.2.0'
????]
? ? supportLibrary? =? [
? ??????support:"com.android.support:support-v4:$dependVersion.androidSupportSdkVersion",
????????//recycleview
????????recycleview:"com.android.support:recyclerview-v7:$dependVersion.androidSupportSdkVersion",
????????//appcompat
????????appcompat:"com.android.support:appcompat-v7:$dependVersion.androidSupportSdkVersion",
????]
? ? //轉(zhuǎn)換成引用對象
? ??supportLibs = supportDeps.values()
}
這樣,如果需要更新引用的support信息,只需要修改androidSupportSdkVersion對應的版本信息即可
第三步在工程的build.gradle中加入引用
在工程的build.gradle(也就是配置引用庫地址的文件)的頭部加入引用文件。
applyfrom: '引用文件名'
舉例:applyfrom: 'aarOnline.gradle'
第四步修改項目build.gradle中的dependencies
將之前的complie '項目名'的引用刪除,修改為:
compile rootProject.ext.引用包組
舉例:compile rootProject.ext.supportLibs 即可。
至此,遠程引用的集中式處理介紹完畢。這樣做有三個好處,一是代碼整潔,二是版本控制方便,三是增刪改查方便。
二是本地aar的集中管理
本地引用的第一步還是不變的。
第二步在工程目錄下,創(chuàng)建一個編譯腳本
腳本的作用是批量處理aar文件。舉例創(chuàng)建一個aarNative.gradle文件。文件內(nèi)容如下:
def aarFolderName ='libs'
repositories {
????flatDir {
????????dirs aarFolderName// aar目錄
? ? }
}
dependencies {
????def aarNativeBat= {
? ? ? ? //查找目錄下所有.aar結(jié)尾的文件
????????fileTree(dir: aarFolderName,include:'*.aar').each { File file ->
? ? ? ? ? ? //獲取文件名
? ? ? ? ? ?def name = file.name.lastIndexOf('.').with {
?????????????????it != -1 ? file.name[0..<it] : file.name }
? ? ? ? ? ?compile(name: name,ext:'aar')
? ? ? ? ? }
????}
? ? //執(zhí)行腳本
????aarNativeBat()
}
第三步在項目的build.gradle中加入引用
只需要在文件頭部加入引用文件即可。
applyfrom: '../引用文件名'
舉例:applyfrom: '../aarNative.gradle'
Notice:需要注意引用路徑。如果腳本在項目目錄下,使用“applyfrom: '引用文件名'”即可。具體情況具體處理。
至此,本地集中引用aar介紹完畢。這樣做的一大好處就是,直接拷貝aar文件即可,不比再擔心版本不一致,版本寫錯的問題,因為不需要維護每個aar了。
Demo工程地址,通過代碼更容易理解。