日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Gradle与project(三)

發布時間:2024/2/28 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gradle与project(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 1. Gradle的執行流程
  • 2. Gradle 和 idea 對于 project 的概念的區別
  • 3. project 相關 API
  • 4. 屬性相關API
  • 5. 文件API

Initialzation初始化階段
解析整個工程中所有project(讀取setting.gradle文件),構建所有的project對應的Project對象

Configuration配置階段
解析所有的project對象中的task,構建好所有task的拓撲圖

Execution執行階段
執行具體的task及其依賴的task

// 配置階段開始前的監聽回調(即:在Initialzation與Configuration之間) this.beforeEvaluate {} // 配置階段完成后的監聽回調(即:在Configuration與Execution之間) this.afterEvaluate {} // gradle執行完畢后的回調監聽(即:在Execution之后) this.gradle.buildFinished {}// 與 this.beforeEvaluate {} 一樣 this.gradle.beforeProject {} // 與 this.afterEvaluate {} 一樣 this.gradle.afterProject {}

對于idea來說,一個項目實際上就是project,一個Project可以包含很多個模塊,一個module繼續可以有多個module。

Project

  • Module
  • Module
    • Module
    • Module
  • Module

而對于Gradle而言,Idea中的無論是Project還是Module,都是project,故樹狀結構如下:

project

  • project
  • project
    • project
    • project
  • project
api作用
getAllprojects()獲取工程中所有的project(包括根project與子project)
getSubProjects()獲取當前project下,所有的子project(在不同的project下調用,結果會不一樣,可能返回null)
getParent()獲取當前project的父project(若在rooProject的build.gradle調用,則返回null)
getRootProject()獲取項目的根project(一定不會為null)
project(String path, Closure configureClosure)根據path找到project,通過閉包進行配置(閉包的參數是path對應的Project對象)
allprojects(Closure configureClosure)配置當前project和其子project的所有project
subprojects(Closure configureClosure)配置子project的所有project(不包含當前project)

例子:

project('app') { Project project -> // 一個參數時,可以省略不寫,這里只是為了明確參數的類型apply plugin : 'com.android.application'group 'com.lqr'version '1.0.0-release'dependencies {}android {} }// 2、allprojects(Closure configureClosure) allprojects {group 'com.lqr'version '1.0.0-release' }// 3、subprojects(Closure configureClosure) subprojects { Project project -> if(project.plugins.hasPlugin('com.android.library')){apply from: '../publishToMaven.gradle'} } // rootProject : build.gradle // 定義擴展屬性 ext {compileSdkVersion = 25libAndroidDesign = 'com.android.support:design:25.0.0' }// app : build.gradle android {compileSdkVersion = this.compileSdkVersion // 父project中的屬性,子project可以直接訪問使用... } dependencies {compile this.libAndroidDesign // 也可以使用:this.rootproject.libAndroidDesign... }

父project中通過ext塊定義的屬性,子project可以直接訪問使用

// rootProject : build.gradle // 定義擴展屬性 ext {compileSdkVersion = 25libAndroidDesign = 'com.android.support:design:25.0.0' }// app : build.gradle android {compileSdkVersion = this.compileSdkVersion // 父project中的屬性,子project可以直接訪問使用... } dependencies {compile this.libAndroidDesign // 也可以使用:this.rootproject.libAndroidDesign... }

hasProperty(‘xxx’):判斷是否有在gradle.properties文件定義xxx屬性。
在gradle.properties中定義的屬性,可以直接訪問,但得到的類型為Object,一般需要通過toXXX()方法轉型。

// gradle.properties // 定義擴展屬性 isLoadTest=true mCompileSdkVersion=25// setting.gradle // 判斷是否需要引入Test這個Module if(hasProperty('isLoadTest') ? isLoadTest.toBoolean() : false) {include ':Test' }// app : build.gradle android {compileSdkVersion = mCompileSdkVersion.toInteger()... } api作用
getRootDir()獲取rootProject目錄
getBuildDir()獲取當前project的build目錄(每個project都有自己的build目錄)
getProjectDir()獲取當前project目錄
File file(Object path)定位一個文件,相對于當前project開始查找
ConfigurableFileCollection files(Object… paths)定位多個文件,與file類似
copy(Closure closure)拷貝文件
fileTree(Object baseDir, Closure configureClosure)定位一個文件樹(目錄+文件),可對文件樹進行遍歷
// 打印common.gradle文件內容 println getContent('common.gradle') def getContent(String path){try{def file = file(path)return file.text}catch(GradleException e){println 'file not found..'}return null }// 拷貝文件、文件夾 copy {from file('build/outputs/apk/')into getRootProject().getBuildDir().path + '/apk/'exclude {} // 排除文件rename {} // 文件重命名 }// 對文件樹進行遍歷并拷貝 fileTree('build/outputs/apk/') { FileTree fileTree ->fileTree.visit { FileTreeElement element ->println 'the file name is: '+element.file.namecopy {from element.fileinto getRootProject().getBuildDir().path + '/test/'}} }

總結

以上是生活随笔為你收集整理的Gradle与project(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。