安卓工程build.gradle中的Groovy的常見知識點

文章目錄

  • 變量定義
  • 函數定義
  • 函數調用
  • 閉包參數
  • APK輸出配置
  • 多channel配置
  • 依賴配置
  • 關鍵總結
  • 常見混淆點
  • groovy高度兼容java

變量定義

def debugCdnUrl = "\"http://xxx\"" //變量賦值

函數定義

def getTime() {  // 函數定義(def 是 Groovy 中定義變量/函數的關鍵字)return new Date().format("yyyyMMdd", TimeZone.getDefault())
}

函數調用

apply plugin: 'com.android.application'  // apply 是方法,參數是一個 Map
// (plugin: 'com.android.application' 等價于 [plugin: 'com.android.application'])println "hello world"  // 方法調用(Groovy的 println)signingConfigs {  // 方法調用(接收閉包參數)debug {  // 方法調用(配置 debug 簽名)storeFile file('..\\myKey\\xxxKey.jks')  // 方法調用(storeFile 是方法,參數是 file() 的返回值)keyPassword '123456'  // 方法調用(參數字符串)// ...其他同理}
}buildTypes {  // 方法調用debug {  // 方法調用(配置 debug 類型)signingConfig signingConfigs.debug  // 方法調用(參數是 signingConfigs.debug 的返回值)minifyEnabled false  // 方法調用(參數布爾值)buildConfigField("String", "app_key", "\"${app_key}\"")  // 方法調用(三個參數)}
}

閉包參數

android {  // 方法調用(接收閉包參數)compileSdkVersion 30        // 方法調用(參數30)buildToolsVersion '28.0.3'   // 方法調用(參數字符串)useLibrary 'org.apache.http.legacy'  // 方法調用(參數字符串)defaultConfig {  // 方法調用(接收閉包參數)applicationId "com.jy.demo"      // 方法調用(參數字符串)minSdkVersion 21                 // 方法調用(參數21)targetSdkVersion 30              // 方法調用(參數30)// ...其他類似}sourceSets {  // 方法調用(接收閉包參數)main {  // 方法調用(配置 main 的 source set)jniLibs.srcDir 'libs'  // 方法調用(jniLibs 是對象,srcDir 是方法)}// ...其他channel配置同理}
}

APK輸出配置

applicationVariants.all { variant ->  // 方法調用(all 是方法,參數是閉包)def buildType = variant.buildType.name  // 屬性訪問(variant.buildType 是對象,name 是屬性)variant.getPackageApplicationProvider().get().outputDirectory = ...  // 方法調用鏈(getPackageApplicationProvider() 返回對象,再調用 get())variant.outputs.each {  // 方法調用(each 是 Groovy 的迭代方法)it.outputFileName = ...  // 屬性賦值(it 是 outputs 的元素,outputFileName 是屬性)}
}

多channel配置

flavorDimensions "channel", 'cdn'  // 方法調用(兩個字符串參數)
productFlavors {  // 方法調用(接收閉包參數)p_xxx {  // 方法調用(創建名為 p_xxx 的 flavor)dimension "channel"  // 方法調用(參數字符串)applicationId "com.xxx.demo"  // 方法調用(參數字符串)buildConfigField "String", "apkUpdateUrl", '"..."'  // 方法調用(三個參數)《注入字段》}// ...其他同理
}

依賴配置

dependencies {  // 方法調用(接收閉包參數)p_xxxImplementation fileTree(...)  // 方法調用(p_xxxImplementation 是方法名,參數是 fileTree 的返回值)    p_pftestImplementation fileTree(include: ['*.jar', '*.aar'], dir: 'gamelibs') //demo of previous lineimplementation 'androidx.appcompat:appcompat:1.3.1'  // 方法調用(implementation 是方法,參數字符串)
}

關鍵總結

  • 方法調用:Groovy 允許省略括號,例如 compileSdkVersion 30 等價于 compileSdkVersion(30)
  • 閉包參數:類似 android { … } 的結構,android 是方法,后面的 { … } 是閉包參數
  • 屬性賦值:當代碼直接形如 key = value 時(例如 it.outputFileName = …),這是真正的屬性賦值。
  • DSL 魔法:Gradle 通過 Groovy 的 methodMissing 和 propertyMissing 機制,將未定義的方法/屬性轉換為配置項。

常見混淆點

// buildConfigField:看似是屬性,實則是方法,接受三個參數(類型、字段名、值)。// manifestPlaceholders:是方法調用(manifestPlaceholders = [ ... ]),參數是一個 Map。// jniLibs.srcDir 'libs':jniLibs 是對象,srcDir 是方法,參數是路徑。

groovy高度兼容java

  • 在 build.gradle 文件中,可以直接使用 Java 代碼的語法,因為 Groovy(Gradle 的默認 DSL 語言)與 Java 高度兼容。
  • 總的來說:可以使用java語法、調用java庫;但是更推薦優先使用groovy語法和gradle的DSL特性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79166.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79166.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79166.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

阿里云 SLS 多云日志接入最佳實踐:鏈路、成本與高可用性優化

作者:裘文成(翊韜) 摘要 隨著企業全球化業務的擴展,如何高效、經濟且可靠地將分布在海外各地的應用與基礎設施日志統一采集至阿里云日志服務 (SLS) 進行分析與監控,已成為關鍵挑戰。 本文聚焦于阿里云高性能日志采集…

deep seek簡介和解析

deepseek大合集,百度鏈接:https://pan.baidu.com/s/10EqPTg0dTat1UT6I-OlFtg?pwdw896 提取碼:w896 一篇文章帶你全面了解deep seek 目錄 一、deep seek是什么 DeepSeek-R1開源推理模型,具有以下特點: 技術優勢: 市場定位&…

在ISOLAR A/B 工具使用UDS 0x14服務清除單個DTC故障的配置

在ISOLAR A/B 工具使用UDS 0x14服務清除單個DTC故障的配置如下圖所示 將DemClearDTCLimitation參數改成DEM_ALL_SUPPORTED_DTCS 此時0x14 服務就可以支持單個DTC的故障清除, 如果配置成 DEM_ONLY_CLEAR_ALL_DTCS 則只能夠用0x14服務清楚所有DTC。

Redis面試 實戰貼 后面持續更新鏈接

redis是使用C語言寫的。 面試問題列表: Redis支持哪些數據類型?各適用于什么場景? Redis為什么采用單線程模型?優勢與瓶頸是什么? RDB和AOF持久化的區別?如何選擇?混合持久化如何實現&#x…

Selenium自動化測試工具常見函數

目錄 前言 一、什么是自動化? 二、元素的定位 三、測試對象的操作 3.1輸入文本send_keys() 3.2按鈕點擊click() 3.3清除文本clear() 3.4獲取文本信息text 3.5獲取頁面的title與URL 四、窗口 4.1窗口的切換switch_to.window() 4.2窗口大小設置 …

seata 1.5.2 升級到2.1.0版本

一、部署1.5.2 1、解壓縮 tar -xvf apache-seata-***-incubating-bin.tar.gz 2、修改conf下的application.yml 只需要修改seata下的此配置,然后再nacos中添加其它配置,下面是application.yml的配置: server:port: 7091spring:applic…

Vue知識框架

一、Vue 基礎核心 1. 響應式原理 數據驅動:通過 data 定義響應式數據,視圖自動同步數據變化。 2、核心機制 Object.defineProperty(Vue 2.x)或 Proxy(Vue 3.x)實現數據劫持。依賴收集:追蹤…

Nginx靜態資源增加權限驗證

Nginx靜態資源增加權限驗證 一、前言二、解決思路2.1、方式一2.2、方式二三、代碼3.1、方式一3.1.1、前端代碼3.1.2、后端代碼3.1.3、Nginx調整3.1.4、注意事項3.2.方式二四、參考資料一、前言 在項目開發的過程中,項目初期,及大部分小型項目都是使用共享磁盤進行靜態文件的…

分析NVIDIA的股價和業績暴漲的原因

NVIDIA自2016年以來股價與業績的持續高增長,是多重因素共同作用的結果。作為芯片行業的領軍企業,NVIDIA抓住了技術、戰略、市場與行業趨勢的機遇。以下從技術創新、戰略布局、市場需求、財務表現及外部環境等維度,深入分析其成功原因&#xf…

更換芯片后因匝數比變化,在長距離傳輸時出現通訊問題。我將從匝數比對信號傳輸的影響、阻抗匹配等方面分析可能原因,并給出相應解決方案。

匝數比影響信號幅度與相位:原 HM1188 芯片匝數比 1:1,信號在變壓器原副邊傳輸時幅度基本不變;更換為 XT1188 芯片(匝數比 1:2)后,根據變壓器原理,副邊輸出信號幅度會變為原邊的 2 倍。短距離 10…

Python引領前后端創新變革,重塑數字世界架構

引言:Python 在前后端開發的嶄新時代 在當今數字化時代,軟件開發領域持續創新,而 Python 作為一門功能強大、應用廣泛的編程語言,正引領著前后端開發的變革浪潮。Python 以其簡潔易讀的語法、豐富的庫和框架生態系統,以及強大的跨領域適用性,在計算機領域占據了舉足輕重…

IP SSL證書常見問題助您快速實現HTTPS加密

一、什么是IP SSL證書? IP SSL證書是一種專門用于保護基于IP地址的網站或服務器的SSL證書。與傳統的域名SSL證書不同,它不需要綁定域名,而是直接與公網IP地址關聯。當用戶訪問該IP地址時,瀏覽器與服務器之間會建立加密連接&#…

「Mac暢玩AIGC與多模態27」開發篇23 - 多任務摘要合成與提醒工作流示例

一、概述 本篇基于興趣建議輸出的方式,擴展為支持多任務輸入場景,介紹如何使用 LLM 對用戶輸入的多項待辦事項進行摘要整合、生成重點提醒,并保持自然語言風格輸出,適用于任務總結、進度引導、日程提醒等輕量型任務生成場景。 二…

前端自學入門:HTML 基礎詳解與學習路線指引

在互聯網的浪潮中,前端開發如同構建數字世界的基石,而 HTML 則是前端開發的 “入場券”。對于許多渴望踏入前端領域的初學者而言,HTML 入門是首要挑戰。本指南將以清晰易懂的方式,帶大家深入了解 HTML 基礎,并梳理前端…

js 兩個數組中的指定參數(id)相同,為某個對象設置disabled屬性

在JavaScript中,如果想要比較兩個數組并根據它們的id屬性來設置某個對象的disabled屬性為true,你可以使用幾種不同的方法。這里我將介紹幾種常用的方法: 方法1:使用循環和條件判斷 const array1 [{ id: 1, name: Item 1 },{ id…

編寫大模型Prompt提示詞方法

明確目標和任務 // 調用LLM進行分析const prompt 你是一名嚴格而友好的英語口語評分官,專業背景包括語音學(phonetics)、二語習得(SLA)和自動語音識別(ASR)。你的任務是: ① 比對參…

MCP系列(一)什么是MCP?

MCP 是什么:從 USB-C 到 AI 的「萬能接口」哲學 MCP(Model Context Protocol,模型上下文協議) 是Anthropic于2024年11月推出的AI跨系統交互標準,專為解決LLM(大語言模型)的「數字失語癥」——讓…

NoMachine 將虛擬顯示器改為物理顯示器

一、前言 大多數服務器需求是設置為虛擬顯示器,因為服務器本身不接物理的顯示器。但我的需求不太一樣,服務器就在身邊,有時候關閉遠控也需要實時監測,所以接了物理的顯示器。 NoMachine 默認會為用戶創建一個新的桌面會話&#xf…

YOLOv8 優化:基于 Damo-YOLO 與 DyHead 檢測頭融合的創新研究

文章目錄 YOLOv8 的背景與發展Damo-YOLO 的優勢與特點DyHead 檢測頭的創新之處融合 Damo-YOLO 與 DyHead 檢測頭的思路融合后的模型架構融合模型的代碼實現導入必要的庫定義 Damo-YOLO 的主干網絡定義特征金字塔網絡(FPN)定義 DyHead 檢測頭定義融合后的…

關稅沖擊下,FBA國際物流企業如何靠智能拓客跑出增長“加速度”?

國際物流行業正迎來前所未有的增長機遇。據中研普華最新報告,2025年全球物流市場規模已突破6.27萬億美元,其中中國跨境物流市場預計達2.71萬億元。在全球化與數字化雙輪驅動下,國際物流從“規模擴張”邁向“價值重構”。可以說,國…