
前言
本文屬于 《一款基于MVP架構(gòu)的快速應(yīng)用開發(fā)框架,kotlin版本》(注:此文章還在更新中,可先看看,敬請(qǐng)期待!) 的擴(kuò)展文章,詳細(xì)介紹在使用 LeoFastDevMvpKotlin 快速開發(fā)框架的時(shí)候,進(jìn)行項(xiàng)目依賴管理的方法。
介紹
Android 依賴統(tǒng)一管理距目前為止,博主一共知道有三種方法,分別是:
- 傳統(tǒng)apply from的方式(也是本文想講的一種方式):新建一個(gè) 「config.gradle」 文件,然后將項(xiàng)目中所有依賴寫在里面,更新只需修改 「config.gradle」 文件內(nèi)容,作用于所有module。
- buildSrc 方式:當(dāng)運(yùn)行 Gradle 時(shí)會(huì)檢查項(xiàng)目中是否存在一個(gè)名為 buildSrc 的目錄。然后 Gradle 會(huì)自動(dòng)編譯并測(cè)試這段代碼,并將其放入構(gòu)建腳本的類路徑中, 對(duì)于多項(xiàng)目構(gòu)建,只能有一個(gè) buildSrc 目錄,該目錄必須位于根項(xiàng)目目錄中, buildSrc 是 Gradle 項(xiàng)目根目錄下的一個(gè)目錄。
- Composing builds 方式:復(fù)合構(gòu)建只是包含其他構(gòu)建的構(gòu)建. 在許多方面,復(fù)合構(gòu)建類似于 Gradle 多項(xiàng)目構(gòu)建,不同之處在于,它包括完整的 builds ,而不是包含單個(gè) projects,總的來(lái)說(shuō),他有 buildSrc 方式的優(yōu)點(diǎn),同時(shí)更新不需要重新構(gòu)建整個(gè)項(xiàng)目。
三種方式各有各的好,目前最完美的應(yīng)該是第三種實(shí)現(xiàn)。但是這種方式不利于框架使用,因?yàn)樗鼘儆诘氖切陆ㄒ粋€(gè)module,如果項(xiàng)目遠(yuǎn)程依賴了框架,默認(rèn)也包含了這個(gè) module。所以博主選擇了第一種方式。以下文章也是圍繞第一種方式進(jìn)行講解。
實(shí)現(xiàn)方式
實(shí)現(xiàn)這個(gè)統(tǒng)一依賴管理,攏共分三步,分別是:
- 第一步:創(chuàng)建「config.gradle」 文件
- 第二步:項(xiàng)目當(dāng)中引入「config.gradle」
- 第三步:在所有module的「build.gradle」當(dāng)中添加依賴
-
第一步:創(chuàng)建 「config.gradle」 文件
首先將 Aandroid Studio 目錄的Android格式修改為Project,然后再創(chuàng)建一個(gè)「config.gradle」的文件
1681962514751.jpg然后我們編輯文章里面的內(nèi)容,這里直接給出框架的代碼出來(lái)(篇幅太長(zhǎng),省略部分代碼):
ext { /** * 基礎(chǔ)配置 對(duì)應(yīng) build.gradle 當(dāng)中 android 括號(hào)里面的值 */ android = [ compileSdk : 32, minSdk : 21, targetSdk : 32, versionCode : 1, versionName : "1.0.0", testInstrumentationRunner: "androidx.test.runner.AndroidJUnitRunner", consumerProguardFiles : "consumer-rules.pro" ...... ] /** * 版本號(hào) 包含每一個(gè)依賴的版本號(hào),僅僅作用于下面的 dependencies */ version = [ coreKtx : "1.7.0", appcompat : "1.6.1", material : "1.8.0", constraintLayout : "2.1.3", navigationFragmentKtx: "2.3.5", navigationUiKtx : "2.3.5", junit : "4.13.2", testJunit : "1.1.5", espresso : "3.4.0", ...... ] /** * 項(xiàng)目依賴 可根據(jù)項(xiàng)目增加刪除,但是可不刪除本文件里的,在 build.gradle 不寫依賴即可 * 因?yàn)镸VP框架默認(rèn)依賴的也在次文件中,建議只添加,不要?jiǎng)h除 */ dependencies = [ coreKtx : "androidx.core:core-ktx:$version.coreKtx", appcompat : "androidx.appcompat:appcompat:$version.appcompat", material : "com.google.android.material:material:$version.material", constraintLayout : "androidx.constraintlayout:constraintlayout:$version.constraintLayout", navigationFragmentKtx : "androidx.navigation:navigation-fragment-ktx:$version.navigationFragmentKtx", navigationUiKtx : "androidx.navigation:navigation-ui-ktx:$version.navigationUiKtx", junit : "junit:junit:$version.junit", testJunit : "androidx.test.ext:junit:$version.testJunit", espresso : "androidx.test.espresso:espresso-core:$version.espresso", ...... ] }簡(jiǎn)單理解就是將所有的依賴,分成版本號(hào)以及依賴名兩個(gè)數(shù)組的方式保存,所有都在這個(gè)文件統(tǒng)一管管理。用 ext 包裹三個(gè)數(shù)組:第一個(gè)是「build.gradle」Android 里面的,第二個(gè)是版本號(hào),第三個(gè)是依賴的名字。依賴名字?jǐn)?shù)組里面的依賴版本號(hào)通過(guò) $ 關(guān)鍵字指代 version 數(shù)組里面的版本號(hào)
-
第二步:項(xiàng)目當(dāng)中引入 「config.gradle」
將「config.gradle」文件引入項(xiàng)目當(dāng)中,在項(xiàng)目的根目錄的「build.gradle」文件(也就是剛剛新建的 「config.gradle」同目錄下的),添加如下代碼:
apply from:"config.gradle"需要注意的的是,如果你是 AndroidStudio 4.0+ 那么你將看到這樣的「build.gradle」文件
// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id 'com.android.application' version '7.2.2' apply false id 'com.android.library' version '7.2.2' apply false id 'org.jetbrains.kotlin.android' version '1.7.10' apply false } apply from:"config.gradle"相反,如果你是 AndroidStudio 4.0- 那么你將會(huì)看到這樣的「build.gradle」文件
apply from: "config.gradle" buildscript { ext.kotlin_version="1.7.10" repositories { maven { url "https://jitpack.io" } mavenCentral() google() } dependencies { classpath "com.android.tools.build:gradle:4.2.1" classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { maven { url "https://jitpack.io" } mavenCentral() google() } } task clean(type: Delete) { delete rootProject.buildDir }不過(guò)僅僅是兩個(gè)文件里面的內(nèi)容不一致,這個(gè)文件的位置是一樣的,而且我們添加的引入代碼也是一樣的。可以說(shuō),這只是順帶提一嘴,實(shí)際上不影響我們實(shí)現(xiàn)統(tǒng)一依賴管理這個(gè)方式。
-
第三步:在所有module的「build.gradle」當(dāng)中添加依賴
這一步是最重要的,我們完成了上面兩步之后,只是做好了準(zhǔn)備,現(xiàn)在我們需要將我們每一個(gè)module里面「build.gradle」文件里面的依賴指向「config.gradle」文件。也就是下圖圈起來(lái)的 那兩個(gè)「build.gradle」文件。
Snipaste_2023-04-20_14-15-58.png因?yàn)槲覀兊诙降臅r(shí)候已經(jīng)在根目錄引入了「config.gradle」,所以我們?cè)凇竍uild.gradle」就可以指向「config.gradle」例如:
implementation rootProject.ext.dependencies.coreKtx這一行,就指代了我們「config.gradle」文件里面的 dependencies 數(shù)組里面的 coreKtx 的內(nèi)容。完整示例如下:
plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' } android { namespace 'leo.dev.mvp.kt' // compileSdk 32 compileSdk rootProject.ext.android.compileSdk defaultConfig { applicationId "leo.dev.mvp.kt" // minSdk 21 // targetSdk 32 // versionCode 1 // versionName "1.0" // // testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" minSdk rootProject.ext.android.minSdk targetSdk rootProject.ext.android.targetSdk versionCode rootProject.ext.android.versionCode versionName rootProject.ext.android.versionName testInstrumentationRunner rootProject.ext.android.testInstrumentationRunner } ...... } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') // implementation 'androidx.core:core-ktx:1.7.0' // implementation 'androidx.appcompat:appcompat:1.6.1' // implementation // // testImplementation 'junit:junit:4.13.2' // androidTestImplementation 'androidx.test.ext:junit:1.1.5' // androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' implementation rootProject.ext.dependencies.coreKtx implementation rootProject.ext.dependencies.appcompat implementation rootProject.ext.dependencies.material testImplementation rootProject.ext.dependencies.junit androidTestImplementation rootProject.ext.dependencies.testJunit androidTestImplementation rootProject.ext.dependencies.espresso }需要注意的是,我們?cè)诰帉懘a的時(shí)候,是沒有代碼自動(dòng)補(bǔ)全的。所以得小心翼翼,必須要和「config.gradle」文件里面的名字向一致。
注意事項(xiàng)
- 首先就是這種方式在coding的時(shí)候,是沒有代碼補(bǔ)全的(只有輸入過(guò)的,才會(huì)有提示),我們需要確保我們的名字一致
- 我們?cè)谠黾右蕾嚨臅r(shí)候,在「config.gradle」里面添加完之后,記得在對(duì)應(yīng)的module里面的「build.gradle」里面添加對(duì)應(yīng)的指向代碼。
總結(jié)
以上就是本篇文章的全部?jī)?nèi)容,總結(jié)起來(lái)其實(shí)步驟不多,也就三步。但是需要注意的是細(xì)節(jié)。需要保持寫入的依賴與「config.gradle」文件一致,并且未寫過(guò)的詞,是不會(huì)有代碼自動(dòng)補(bǔ)全的。
另外本篇文章是本文屬于 《一款基于MVP架構(gòu)的快速應(yīng)用開發(fā)框架,kotlin版本》 的擴(kuò)展文章,所以會(huì)一步一步說(shuō)得比較詳細(xì)一點(diǎn)。大家可以挑重點(diǎn)跳過(guò)閱讀。

