Gradle插件學習筆記(二)

之前介紹了Gradle插件的開發,這次會對功能進行一部分拓展,建議沒有讀過第一篇文章的朋友,先看一下Gradle插件學習筆記(一)


Extension

之前的文章提到過,如何編寫一個插件,但是并不能通過外面傳遞參數進來,如果想使用一些自定義的參數可以使用Extension,我們可以再建立一個MyExtension.groovy

class MyExtension {def aaa;def bbb;}
復制代碼

然后找到插件類(可以參考上一篇文章):

public class TestPlugin implements Plugin<Project> {@Overridevoid apply(Project project) {project.extensions.create("deep", MyExtension)project.afterEvaluate {MyExtension extension = project['deep'];String a = extension.aaaString b = extension.bbbprintln("deep:${a},${b}")}}
}
復制代碼

Project本身是支持拓展的,所以提供了create方法,project.extensions.create("deep", MyExtension)這句代碼的意思是將我們的自定義的類作為Project的一個屬性值,key是deep。

這里在普及一個小知識,項目中gradle執行的時候,會先解析setting.gradle,然后是build.gradle,如果想在解析build.gradle之前做點事,可以使用project.beforeEvaluate如果想在解析build.gradle之后做點事可以project.afterEvaluate。

所以我們在解析完build.gradle之后,在訪問project中我們設置的屬性,即可得到build.gradle中設入的值。 來看個例子(其中hhh就是我們寫的插件名字,這個上篇文章提到過):

apply plugin: 'hhh'
deep{aaa="this is a"bbb="this is b"
}
復制代碼

執行任務打印:

android

通過上面的例子,我想到了正經的android工程不是也是這樣配置的嗎,我們可以測試一下。 都知道android工程中的project,樣式如下:

android {compileSdkVersion 26buildToolsVersion "26.0.3"defaultConfig {applicationId "deep.com.testgroovy"minSdkVersion 14targetSdkVersion 26versionCode 1versionName "1.0"}
}復制代碼

這些不都是project的一個拓展類嗎?我們可以測試一下,修改插件:

    @Overridevoid apply(Project project) {project.afterEvaluate {println("包名:"+project['android']["defaultConfig"].applicationId)}
復制代碼

我取project下的android,然后再取android下的defaultConfig,就可以得到包名,執行一下看看:

果然可以獲取包名,同理,在打包的時候可以拿到更多的設置信息。

總結

好了今天有點時間,先寫這么多吧,下篇文章具體說一下如何干預android編譯 也歡迎關注我的公眾號,之后會推薦更多好用的組件庫。

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

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

相關文章

php抽象類繼承抽象類,PHP面向對象程序設計高級特性詳解(接口,繼承,抽象類,析構,克隆等)...

本文實例講述了PHP面向對象程序設計高級特性。分享給大家供大家參考&#xff0c;具體如下&#xff1a;靜態屬性class StaticExample {static public $aNum 0; // 靜態共有屬性static public function sayHello() { // 靜態共有方法print "hello";}}print StaticExam…

Typora markdown公式換行等號對齊_Typora編寫博客格式化文檔的最佳軟件

Typora-編寫博客格式化文檔的最佳軟件Typora 不僅是一款支持實時預覽的 Markdown 文本編輯器&#xff0c;而且還支持數學公式、代碼塊、思維導圖等功能。它有 OS X、Windows、Linux 三個平臺的版本&#xff0c;是完全免費的。作為技術人員或者專業人員&#xff0c;使用Markdown…

Bootstrap靜態cdn

百度的靜態資源庫的 CDN 服務http://cdn.code.baidu.com/ &#xff0c;訪問速度更快、加速效果更明顯、沒有速度和帶寬限制、永久免費,引入代碼如下&#xff1a; <!-- 新 Bootstrap 核心 CSS 文件 --> <link href"http://apps.bdimg.com/libs/bootstrap/3.3.0/…

php復習,PHP排序算法的復習和總結

直接上代碼吧&#xff01;/** 插入排序(一維數組)* 每次將一個待排序的數據元素&#xff0c;插入到前面已經排好序的數列中的適當的位置&#xff0c;使數列依然有序&#xff1b;直到待排序的數據元素全部插入完成為止。*/function insertSort($arr){if(!is_array($arr) || coun…

docker-machine

vbox安裝 sudo /sbin/vboxconfig &#xfffc; yum install gcc make yum install kernel-devel-3.10.0-514.26.2.el7.x86_64 轉載于:https://www.cnblogs.com/yixiaoyi/p/dockermachine.html

intention lock_寫作技巧:你寫出來的情節有用嗎?好情節的原則——LOCK系統

讀者喜歡一本小說的原因只有一個&#xff1a;很棒的故事。——Donald Maass來&#xff0c;話筒對準這位小作家&#xff0c;請問你是如何構思故事的&#xff1f;是習慣于現在腦海中把故事都想好了&#xff0c;才開始寫作&#xff1f;還是習慣于臨場發揮&#xff0c;喜歡一屁股坐…

zookeeper基本操作

1.客戶端連接 [txtest1 bin]$ jps 23433 Jps 23370 QuorumPeerMain #zookeeper進程[txtest1 bin]$ ./zkCli.sh -server test1:2182 Connecting to test1:2182 2018-01-24 23:42:09,024 [myid:] - INFO [main:Environment100] - Client environment:zookeeper.version3.4.5-…

sqllite java 密碼,SQLite登錄檢查用戶名和密碼

我正在創建一個應用程序(使用Java和SQLite)(JFrame&#xff0c;使用Netbeans)我有我想要登錄的用戶 . (我有所有正確的包JDBC&#xff0c;SQLite等)我遇到的問題似乎是獲取用戶名/密碼來檢查我的users.db文件..我正在使用Java和SQLite . 我也在使用JDBC .我的一些代碼作為一個例…

springmvc與struts2的區別

1&#xff09;springmvc的入口是一個servlet&#xff0c;即前端控制器&#xff0c;例如&#xff1a;*.action struts2入口是一個filter過慮器&#xff0c;即前端過濾器&#xff0c;例如&#xff1a;/* 2&#xff09;springmvc是基于方法開發&#xff0c;傳遞參數是通過方法形…

power designer數據流圖_鯤云公開課 | 三分鐘帶你了解數據流架構

目前&#xff0c;市場上的芯片主要包括指令集架構和數據流架構兩種實現方式。指令集架構主要包括X86架構、ARM架構、精簡指令集運算RISC-V開源架構&#xff0c;以及SIMD架構。總體來說&#xff0c;四者都屬于傳統的通用指令集架構。傳統的指令集架構采用馮諾依曼計算方式&#…

onCreate源碼分析

原文地址Android面試題-onCreate源碼都沒看過&#xff0c;怎好意思說自己做android Activity扮演了一個界面展示的角色&#xff0c;堪稱四大組件之首&#xff0c;onCreate是Activity的執行入口&#xff0c;都不知道入口到底干了嘛&#xff0c;還學什么android,所以本文會從源碼…

linux php環境搭建教程,linux php環境搭建教程

linux php環境搭建的方法&#xff1a;首先獲取相關安裝包&#xff1b;然后安裝Apache以及mysql&#xff1b;接著修改配置文件“httpd.conf”&#xff1b;最后設置環境變量和開機自啟&#xff0c;并編譯安裝PHP即可。一、獲取安裝包PHP下載地址&#xff1a;http://cn.php.net/di…

Apache2.2與Tomcat7集成方案詳解

原文地址&#xff1a;http://my.oschina.net/u/919173/blog/159206 ------------------------------------ 首先談一下為什么要集成Apache和tomcat7&#xff1f; Apache是當前使用最為廣泛的WWW服務器軟件&#xff0c;具有相當強大的靜態HTML處理的能力。 Tomcat服務器是一個…

cocos 制作動態生成內容的列表_零代碼工具,讓你在線輕松制作交互內容!

在工作中設計師不會寫代碼&#xff0c;懂代碼的不會設計&#xff0c;2種不同工作互掐的情況屢見不鮮&#xff0c;那我們如何把這2項工作一并融合貫通呢&#xff1f;對于不懂代碼的職場“小白”&#xff0c;我們可以利用一些零代碼工具來完成。今天小編介紹幾款在線開發設計工具…

php怎樣數據緩存文件,php數據緩存到文件類設計

// 自定義緩存類class Cache_Filesystem {// 緩存寫保存function set ($key, $data, $ttl) {//打開文件為讀/寫模式$h fopen($this->get_filename($key), ‘a‘);if (!$h) throw new Exception("Could not write to cache");flock($h, LOCK_EX); //寫鎖定&#x…

jsp放在web-inf下的注意事項

原文&#xff1a;http://blog.csdn.net/whatlookingfor/article/details/38381881 ------------------------------------------------- web-inf目錄是不對外開放的&#xff0c;外部沒辦法直接訪問到。所有只能通過映射來訪問&#xff0c;比如映射為一個action或者servlet通過…

php打印布爾型,PHP數據類型之布爾型的介紹_PHP

布爾類型是PHP中 最簡單的類型。它的值可以為 TRUE 或 FALSE。如&#xff1a;$foofalse;$foo1true;echo "為假時輸出值為:".$foo; //沒有輸出值echo "為真時輸出值為:".$foo1; //輸出1這里主要的細節&#xff1a;當轉換為 boolean 時&#xff0c;以下值被認…

oracle 如何終止存儲過程的運行

0.查詢正在執行的存儲過程&#xff1a; select * from v$db_object_cache where locks > 0 and pins > 0 and typePROCEDURE;1. 在V$ACCESS視圖中找到要停止進程的SID: 舉例&#xff1a;存儲過程名&#xff1a;CRH_ENTRY SELECT t.* FROM V$ACCESS t WHERE t.objectCRH_…

python install zabbix.4.0

1.安裝 MySQLdb 模塊; #!/bin/bash #this is rpm python Environment depends on function depends_rpm(){ yum clean all yum -y install gcc* python-devel python-pip mariadb mariadb-devel mariadb-server if [ $? -eq 0 ]thenpip install MySQL-python1.2.5 elsee…