Android - 統(tǒng)一依賴管理(config.gradle)

Android-GoogleIOSpotlightPrivacyAndSecurity_1024x512.png

前言

本文屬于 《一款基于MVP架構(gòu)的快速應用開發(fā)框架,kotlin版本》(注:此文章還在更新中,可先看看又厉,敬請期待!) 的擴展文章椎瘟,詳細介紹在使用 LeoFastDevMvpKotlin 快速開發(fā)框架的時候覆致,進行項目依賴管理的方法。

介紹

Android 依賴統(tǒng)一管理距目前為止降传,博主一共知道有三種方法篷朵,分別是:

  1. 傳統(tǒng)apply from的方式(也是本文想講的一種方式):新建一個 「config.gradle」 文件,然后將項目中所有依賴寫在里面婆排,更新只需修改 「config.gradle」 文件內(nèi)容声旺,作用于所有module。
  2. buildSrc 方式:當運行 Gradle 時會檢查項目中是否存在一個名為 buildSrc 的目錄段只。然后 Gradle 會自動編譯并測試這段代碼腮猖,并將其放入構(gòu)建腳本的類路徑中, 對于多項目構(gòu)建,只能有一個 buildSrc 目錄赞枕,該目錄必須位于根項目目錄中, buildSrc 是 Gradle 項目根目錄下的一個目錄澈缺。
  3. Composing builds 方式:復合構(gòu)建只是包含其他構(gòu)建的構(gòu)建. 在許多方面,復合構(gòu)建類似于 Gradle 多項目構(gòu)建炕婶,不同之處在于姐赡,它包括完整的 builds ,而不是包含單個 projects柠掂,總的來說项滑,他有 buildSrc 方式的優(yōu)點,同時更新不需要重新構(gòu)建整個項目涯贞。

三種方式各有各的好枪狂,目前最完美的應該是第三種實現(xiàn)危喉。但是這種方式不利于框架使用,因為它屬于的是新建一個module州疾,如果項目遠程依賴了框架辜限,默認也包含了這個 module。所以博主選擇了第一種方式严蓖。以下文章也是圍繞第一種方式進行講解薄嫡。

實現(xiàn)方式

實現(xiàn)這個統(tǒng)一依賴管理,攏共分三步谈飒,分別是:

  • 第一步:創(chuàng)建「config.gradle」 文件
  • 第二步:項目當中引入「config.gradle」
  • 第三步:在所有module的「build.gradle」當中添加依賴
  • 第一步:創(chuàng)建 「config.gradle」 文件

    首先將 Aandroid Studio 目錄的Android格式修改為Project岂座,然后再創(chuàng)建一個「config.gradle」的文件

    1681962514751.jpg

    然后我們編輯文章里面的內(nèi)容,這里直接給出框架的代碼出來(篇幅太長杭措,省略部分代碼):

    ext {
    /**
     * 基礎(chǔ)配置 對應 build.gradle 當中 android 括號里面的值
     */
    android = [
            compileSdk               : 32,
            minSdk                   : 21,
            targetSdk                : 32,
            versionCode              : 1,
            versionName              : "1.0.0",
            testInstrumentationRunner: "androidx.test.runner.AndroidJUnitRunner",
            consumerProguardFiles    : "consumer-rules.pro"
            
            ......
    ]
    
    /**
     * 版本號 包含每一個依賴的版本號费什,僅僅作用于下面的 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",
            
            ......
    ]
    
    /**
     * 項目依賴 可根據(jù)項目增加刪除,但是可不刪除本文件里的手素,在 build.gradle 不寫依賴即可
     * 因為MVP框架默認依賴的也在次文件中鸳址,建議只添加,不要刪除
     */
    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",
            
            ......
            ]
    }
    

    簡單理解就是將所有的依賴泉懦,分成版本號以及依賴名兩個數(shù)組的方式保存稿黍,所有都在這個文件統(tǒng)一管管理。用 ext 包裹三個數(shù)組:第一個是「build.gradle」Android 里面的崩哩,第二個是版本號巡球,第三個是依賴的名字。依賴名字數(shù)組里面的依賴版本號通過 $ 關(guān)鍵字指代 version 數(shù)組里面的版本號

  • 第二步:項目當中引入 「config.gradle」

    將「config.gradle」文件引入項目當中邓嘹,在項目的根目錄的「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- 那么你將會看到這樣的「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
      }
      
    

    不過僅僅是兩個文件里面的內(nèi)容不一致汹押,這個文件的位置是一樣的矿筝,而且我們添加的引入代碼也是一樣的∨锛郑可以說窖维,這只是順帶提一嘴,實際上不影響我們實現(xiàn)統(tǒng)一依賴管理這個方式妙痹。

  • 第三步:在所有module的「build.gradle」當中添加依賴

    這一步是最重要的铸史,我們完成了上面兩步之后,只是做好了準備怯伊,現(xiàn)在我們需要將我們每一個module里面「build.gradle」文件里面的依賴指向「config.gradle」文件沛贪。也就是下圖圈起來的 那兩個「build.gradle」文件。

    Snipaste_2023-04-20_14-15-58.png

    因為我們第二步的時候已經(jīng)在根目錄引入了「config.gradle」,所以我們在「build.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
          
      }
      
    

    需要注意的是,我們在編寫代碼的時候猩系,是沒有代碼自動補全的媚送。所以得小心翼翼,必須要和「config.gradle」文件里面的名字向一致寇甸。

注意事項

  • 首先就是這種方式在coding的時候塘偎,是沒有代碼補全的(只有輸入過的,才會有提示)拿霉,我們需要確保我們的名字一致
  • 我們在增加依賴的時候吟秩,在「config.gradle」里面添加完之后,記得在對應的module里面的「build.gradle」里面添加對應的指向代碼绽淘。

總結(jié)

以上就是本篇文章的全部內(nèi)容涵防,總結(jié)起來其實步驟不多,也就三步沪铭。但是需要注意的是細節(jié)壮池。需要保持寫入的依賴與「config.gradle」文件一致,并且未寫過的詞杀怠,是不會有代碼自動補全的椰憋。

另外本篇文章是本文屬于 《一款基于MVP架構(gòu)的快速應用開發(fā)框架,kotlin版本》 的擴展文章赔退,所以會一步一步說得比較詳細一點橙依。大家可以挑重點跳過閱讀。

文末圖片.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末硕旗,一起剝皮案震驚了整個濱河市窗骑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卵渴,老刑警劉巖慧域,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浪读,居然都是意外死亡昔榴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門碘橘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來互订,“玉大人,你說我怎么就攤上這事痘拆⊙銮荩” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吐葵。 經(jīng)常有香客問我规揪,道長,這世上最難降的妖魔是什么温峭? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任猛铅,我火速辦了婚禮,結(jié)果婚禮上凤藏,老公的妹妹穿的比我還像新娘奸忽。我一直安慰自己,他們只是感情好揖庄,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布栗菜。 她就那樣靜靜地躺著,像睡著了一般蹄梢。 火紅的嫁衣襯著肌膚如雪疙筹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天检号,我揣著相機與錄音腌歉,去河邊找鬼。 笑死齐苛,一個胖子當著我的面吹牛翘盖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凹蜂,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼馍驯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了玛痊?” 一聲冷哼從身側(cè)響起汰瘫,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎擂煞,沒想到半個月后混弥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡对省,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年蝗拿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒿涎。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡哀托,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出劳秋,到底是詐尸還是另有隱情仓手,我是刑警寧澤胖齐,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站嗽冒,受9級特大地震影響呀伙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜添坊,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一区匠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧帅腌,春花似錦、人聲如沸麻汰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽五鲫。三九已至溺职,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間位喂,已是汗流浹背浪耘。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留塑崖,地道東北人七冲。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像规婆,于是被迫代替她去往敵國和親澜躺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容