亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用Composing?builds提升Android編譯速度

 更新時(shí)間:2022年06月22日 16:15:27   作者:程序員DHL  
這篇文章主要介紹了使用Composing?builds提升Android編譯速度示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

長期以來困擾我們的一個(gè)問題就是構(gòu)建速度,AndroidStudio 的構(gòu)建速度嚴(yán)重影響 Android 開發(fā)者的工作效率,尤其是更新一個(gè)版本號,導(dǎo)致整個(gè)項(xiàng)目重新構(gòu)建,在網(wǎng)絡(luò)慢的情況下,這是無法忍受的。

buildSrc 這種方式,在最近幾年是非常流行的,因?yàn)樗幸韵聝?yōu)點(diǎn):

共享 buildSrc 庫工件的引用,全局只有一個(gè)地方可以修改它

支持 AndroidStudio 自動補(bǔ)全

支持 AndroidStudio 單擊跳轉(zhuǎn)

有優(yōu)點(diǎn)的同時(shí)也有缺點(diǎn),來看一下 Gradle 文檔

A change in buildSrc causes the whole project to become out-of-date. Thus, when making small incremental changes, the --no-rebuild command-line option is often helpful to get faster feedback. Remember to run a full build regularly or at least when you’re done, though.

buildSrc的更改會導(dǎo)致整個(gè)項(xiàng)目過時(shí),因此,在進(jìn)行小的增量更改時(shí),-- --no-rebuild命令行選項(xiàng)通常有助于獲得更快的反饋。不過,請記住要定期或至少在完成后運(yùn)行完整版本。

匯總一句話就是說,buildSrc 依賴更新將重新構(gòu)建整個(gè)項(xiàng)目,那么有沒有一種方法支持自動補(bǔ)全和單擊跳轉(zhuǎn),有不用重新構(gòu)建整個(gè)項(xiàng)目,Composing builds 就可以實(shí)現(xiàn),接下來我們來演示一下 buildSrc 和 Composing builds 它們的 build 的時(shí)間,相關(guān)代碼我已經(jīng)上傳到 GitHub 了:ComposingBuilds-vs-buildSrc

通過這篇文章你將學(xué)習(xí)到以下內(nèi)容,將在文末總結(jié)部分會給出相應(yīng)的答案

  • 什么是 buildSrc?
  • 什么是 Composing builds?
  • 如何使用 Composing builds 和 buildSrc
  • buildSrc 和 Composing builds 優(yōu)勢劣勢對比?
  • Composing builds 編譯速度怎么樣?
  • buildSrc 如何遷移到 Composing builds?
  • 管理 Gradle 依賴都有那幾種方式?以及效率怎么樣?

這篇文章涉及很多重要的知識點(diǎn),請耐心讀下去,我相信應(yīng)該會給大家?guī)砗芏嗖灰粯拥臇|西。

Composing builds 和 buildSrc 對比

接下來我們來演示一下 buildSrc 和 Composing builds 它們的優(yōu)勢劣勢對比,在分析之前,先來了解一下基本概念

什么是 buildSrc

摘自 Gradle 文檔:當(dāng)運(yùn)行 Gradle 時(shí)會檢查項(xiàng)目中是否存在一個(gè)名為 buildSrc 的目錄。然后 Gradle 會自動編譯并測試這段代碼,并將其放入構(gòu)建腳本的類路徑中, 對于多項(xiàng)目構(gòu)建,只能有一個(gè) buildSrc 目錄,該目錄必須位于根項(xiàng)目目錄中, buildSrc 是 Gradle 項(xiàng)目根目錄下的一個(gè)目錄,它可以包含我們的構(gòu)建邏輯,與腳本插件相比,buildSrc 應(yīng)該是首選,因?yàn)樗子诰S護(hù)、重構(gòu)和測試代碼

什么是 Composing builds

摘自 Gradle 文檔:復(fù)合構(gòu)建只是包含其他構(gòu)建的構(gòu)建. 在許多方面,復(fù)合構(gòu)建類似于 Gradle 多項(xiàng)目構(gòu)建,不同之處在于,它包括完整的 builds ,而不是包含單個(gè) projects

  • 組合通常獨(dú)立開發(fā)的構(gòu)建,例如,在應(yīng)用程序使用的庫中嘗試錯(cuò)誤修復(fù)時(shí)
  • 將大型的多項(xiàng)目構(gòu)建分解為更小,更孤立的塊,可以根據(jù)需要獨(dú)立或一起工作

buildSrc vs Composing builds

為了正確對比這兩種方式,新建了兩個(gè)空的項(xiàng)目分別是 Project-buildSrc 和 Project-ComposingBuild,這兩個(gè)項(xiàng)目引用的依賴都是一樣的,Project-buildSrc 包含 buildSrc,Project-ComposingBuild 包含 Composing builds。

Project-buildSrc 和 Project-ComposingBuild 它們的結(jié)構(gòu)都差不多,接下來我們來看一下,編譯速度 和 使用上有什么不同。

編譯速度

Project-buildSrc 和 Project-ComposingBuild 這兩個(gè)項(xiàng)目,它們的 androidx.appcompat:appcompat 的版本是 1.0.2,現(xiàn)在我們從 1.0.2 升級到 1.1.0 來看一下它們 Build 的時(shí)間。

  • Project-buildSrc:修改了版本號 1.0.2 -> 1.1.0 重新 Build 用時(shí) 37s

  • Project-ComposingBuild:修改了版本號 1.0.2 -> 1.1.0 重新 Build 用時(shí) 8s

當(dāng)修改了版本號,Project-buildSrc 項(xiàng)目 Build 的時(shí)間幾乎是 Project-ComposingBuild 項(xiàng)目的 4.6 倍( PS: 每個(gè)人的環(huán)境不同,時(shí)間上會有差異,但是 Project-buildSrc 的時(shí)間總是大于 Project-ComposingBuild )

在更大的項(xiàng)目中,網(wǎng)絡(luò)慢的情況下,這種差異會更加明顯,幾分鐘的構(gòu)建都是常事,在 buildSrc 中做微小的更改,可能需要花很長時(shí)間構(gòu)建,等待團(tuán)隊(duì)其他成員在他們提取更改之后,都將導(dǎo)致項(xiàng)目重新構(gòu)建,這個(gè)代價(jià)是非常昂貴的。

它們在使用上有什么不同呢

Project-buildSrc

  • 在項(xiàng)目根目錄下新建一個(gè)名為 buildSrc 的文件夾( 名字必須是 buildSrc,因?yàn)檫\(yùn)行 Gradle 時(shí)會檢查項(xiàng)目中是否存在一個(gè)名為 buildSrc 的目錄 )
  • 在 buildSrc 文件夾里創(chuàng)建名為 build.gradle.kts 的文件,添加以下內(nèi)容
plugins {
    `kotlin-dsl`
}
repositories{
    jcenter()
}
  • buildSrc/src/main/java/包名/ 目錄下新建 Deps.kt 文件,添加以下內(nèi)容
object Versions {
    ......
    val appcompat = "1.1.0"
    ......
}
object Deps {
    ......
    val appcompat =  "androidx.appcompat:appcompat:${Versions.appcompat}"
    ......
}
  • 重啟你的 Android Studio,項(xiàng)目里就會多出一個(gè)名為 buildSrc 的 module,實(shí)現(xiàn)上面演示的效果

Project-ComposingBuild

  • 新建的 module 名稱 versionPlugin
  • 在 versionPlugin 文件夾下的 build.gradle 文件內(nèi),添加以下內(nèi)容
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        // 因?yàn)槭褂玫?Kotlin 需要需要添加 Kotlin 插件
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"
    }
}
apply plugin: 'kotlin'
apply plugin: 'java-gradle-plugin'
repositories {
    // 需要添加 jcenter 否則會提示找不到 gradlePlugin
    jcenter()
}
gradlePlugin {
    plugins {
        version {
            // 在 app 模塊需要通過 id 引用這個(gè)插件
            id = 'com.hi.dhl.plugin'
            // 實(shí)現(xiàn)這個(gè)插件的類的路徑
            implementationClass = 'com.hi.dhl.plugin.Deps'
        }
    }
}

versionPlugin/src/main/java/包名/ 目錄下新建 Deps.kt 文件,添加以下內(nèi)容

class Deps : Plugin<Project> {
    override fun apply(project: Project) {
    }
    companion object {
        val appcompat = "androidx.appcompat:appcompat:1.1.0"
    }
}

在 settings.gradle 文件內(nèi)添加 includeBuild 'versionPlugin' 重啟你的 Android Studio

在 app 模塊 build.gradle 文件內(nèi)首行添加以下內(nèi)容,就可以實(shí)現(xiàn)上面演示的效果

plugins{
    // 這個(gè) id 就是在 versionPlugin 文件夾下 build.gradle 文件內(nèi)定義的 id
    id "com.hi.dhl.plugin"
}

ps:plugins{} 需要放在 app 模塊 build.gradle 文件內(nèi)首行位置

Project-ComposingBuild 比 Project-buildSrc 多了兩步操作需要在 settings.gradle 和 build.gradle 引入插件,兩者在使用都是差不多的

如何快速使用 buildSrc

  • 訪問 ComposingBuilds-vs-buildSrc 拷貝 buildSrc 文件夾到你的項(xiàng)目的根目錄
  • 重啟你的 Android Studio,項(xiàng)目里就會多出一個(gè)名為 buildSrc 的 module

如何快速使用 Composing builds

  • 訪問 ComposingBuilds-vs-buildSrc 拷貝 versionPlugin 文件夾到你的項(xiàng)目的根目錄
  • 按照上面的配置方式,分配在 settings.gradle 和 app 模塊的 build.gradle 引用插件即可

總結(jié)

總共從以下幾個(gè)方面對比了 Composing builds 和 buildSrc

  • 目錄結(jié)構(gòu):它們的基本目錄結(jié)構(gòu)是相同的,可以根據(jù)自己的項(xiàng)目進(jìn)行不同的擴(kuò)展
  • 編譯速度:當(dāng)修改了版本號,Project-buildSrc 項(xiàng)目 Build 的時(shí)間幾乎是 Project-ComposingBuild 項(xiàng)目的 4.6 倍( PS: 每個(gè)人的環(huán)境不同,時(shí)間上會有差異,但是 Project-buildSrc 的時(shí)間總是大于 Project-ComposingBuild )
  • 使用上的區(qū)別:Composing builds 比 buildSrc 多了兩步操作需要在 settings.gradle 和 build.gradle 引入插件

Project-buildSrc 和 Project-ComposingBuild 相關(guān)代碼已經(jīng)上傳到 GitHub 了:ComposingBuilds-vs-buildSrc

到目前為止大概管理 Gradle 依賴提供了 4 種不同方法:

  • 手動管理 :在每個(gè) module 中定義插件依賴庫,每次升級依賴庫時(shí)都需要手動更改(不建議使用)
  • 使用 ext 的方式管理插件依賴庫 :這是 Google 推薦管理依賴的方法 Android官方文檔
  • Kotlin + buildSrc:自動補(bǔ)全和單擊跳轉(zhuǎn),依賴更新時(shí) 將重新 構(gòu)建整個(gè)項(xiàng)目
  • Composing builds:自動補(bǔ)全和單擊跳轉(zhuǎn),依賴更新時(shí) 不會重新 構(gòu)建整個(gè)項(xiàng)目

buildSrc 如何遷移到 Composing builds?

如果當(dāng)前項(xiàng)目使用的是 buildSrc 方式,遷移到 Composing builds 很簡單,需要將 buildSrc 內(nèi)容拷貝的 Composing builds 中,然后刪掉 buildSrc 文件夾就可以即可

參考文獻(xiàn)

Organizing Gradle Projects

Composing builds

Android官方文檔,使用 ext 的方式管理插件依賴庫

以上就是使用Composing builds提升Android編譯速度的詳細(xì)內(nèi)容,更多關(guān)于Android編譯Composing builds 的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Android應(yīng)用開發(fā)中Intent的作用及使用方法

    詳解Android應(yīng)用開發(fā)中Intent的作用及使用方法

    這篇文章主要介紹了Android應(yīng)用開發(fā)中Intent的作用與用法,包括如何激活A(yù)ctivity組件與Intent的投遞等,需要的朋友可以參考下
    2016-03-03
  • Fresco加載手機(jī)圖片墻

    Fresco加載手機(jī)圖片墻

    這篇文章主要為大家詳細(xì)介紹了Fresco加載手機(jī)圖片墻,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Android 游戲開發(fā)中繪制游戲觸摸軌跡的曲線圖

    Android 游戲開發(fā)中繪制游戲觸摸軌跡的曲線圖

    本文主要介紹 Android 繪制游戲觸摸軌跡的曲線圖的簡單示例,這里詳細(xì)說明使用方法,并附示例代碼,有需要的小伙伴可以參考下
    2016-08-08
  • Android 定位系統(tǒng)(GPS)開發(fā)詳解

    Android 定位系統(tǒng)(GPS)開發(fā)詳解

    GPS定位是智能手機(jī)上一個(gè)比較有意思的功能,LBS等服務(wù)都有效的利用了GPS定位功能,本文就跟大家分享下Android開發(fā)中的GPS定位知識
    2016-07-07
  • Android滾輪選擇時(shí)間控件使用詳解

    Android滾輪選擇時(shí)間控件使用詳解

    這篇文章主要為大家詳細(xì)介紹了Android滾輪選擇時(shí)間控件使用,滾輪選擇選擇數(shù)值、選擇字符串,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Android SharePreferences與數(shù)據(jù)庫SQLite存儲實(shí)現(xiàn)方法介紹

    Android SharePreferences與數(shù)據(jù)庫SQLite存儲實(shí)現(xiàn)方法介紹

    這篇文章主要介紹了Android SharePreferences與數(shù)據(jù)庫SQLite用于存儲的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • Android中BaseActivity自定義標(biāo)題欄

    Android中BaseActivity自定義標(biāo)題欄

    這篇文章主要介紹了Android中BaseActivity自定義標(biāo)題欄,非常實(shí)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android AutoCompleteTextView自動提示文本框?qū)嵗a

    Android AutoCompleteTextView自動提示文本框?qū)嵗a

    這篇文章主要介紹了Android AutoCompleteTextView自動提示文本框?qū)嵗a的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • Android AIDL中Map參數(shù)傳遞的問題詳解

    Android AIDL中Map參數(shù)傳遞的問題詳解

    這篇文章主要給大家介紹了關(guān)于Android AIDL中Map參數(shù)傳遞問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友下面來一起看看吧。
    2017-12-12
  • Android 13新功能及適配工作詳解

    Android 13新功能及適配工作詳解

    這篇文章主要為大家介紹了Android 13的新功能及需要哪些適配工作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03

最新評論