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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Gradle语法基础解析

發布時間:2024/9/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gradle语法基础解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

在從ADT轉移到AndroidStudio下開發,必然會遇到Gradle腳本打包的問題.看懂一個腳本最基本的前提就是了解它的語法,我在轉移開發環境的過程中,也開始接觸學習Gradle,在此做了一些總結,方便自己查閱.

Gradle為何物

第一次接著Gradle,對它做了大致的了解。按照網上普遍的說法:Gradle是以Groovy語言為基礎,面向Java應用為主。基于DSL(領域特定語言)語法的自動化構建工具.?看到這里我依舊還是有點云里霧里的,不過抓住了兩個重點:

1.Gradle是一門語言 2.Gradle是一個自動化構建工具 既然單從概念上得不到很好的理解,那么作為學習一門語言和一個工具,只能通過使用來增強概念和功能上的了解了.

Project和Task、Action

Gradle里面的任何東西都是基于Project和Task這兩個概念,基于這兩個概念,Gradle官方放出的指導手冊是這么描述的:

  • 每一個構建都是由一個或多個Project構成的.一個Project到底代表什么依賴于你想用Gradle做什么.舉個例子,一個Project可以代表一個JAR或者一個網頁應用.它也可能代表一個發布的 ZIP壓縮包,這個ZIP可能是由許多其他項目的JARs構成的.但是一個Project不一定非要代表被構建的某個東西.它可以代表一件**要做的事,比如部署你的應用.
  • 每一個Project是由一個或多個Task構成的.一個Task代表一些更加細化的構建.可能是編譯一些classes,創建一個JAR,生成javadoc,或者生成某個目錄的壓縮文件.
  • 每個Task又是由一個或多個Action構成的,Gradle中有兩種類型的Action,分別是doFirst和doLast.

在AndroidStudio構建生成一個apk的安裝包,它就要依賴于build.gradle腳本進行構建.此時生成apk包這樣一件事情就可以理解成為一個Project(要做一件什么事),而生成apk包只是一個比較大一統的概念.打包的過程需要進行各種各樣的配置,例如配置版本號,最低兼容Android幾的平臺,打包簽名等.這些相當于生成apk包這個Project的一個個具體的子步驟,也就是Gradle中的Task.

基礎語法

了解大概的一些基本概念之后,最重要的還是開始下手打碼實戰,創建自己的第一個Gradle構建腳本文件build.gradle

task hello {doLast {println 'Hello world!'} }

在命令行里,進入腳本所在的文件夾然后輸入命令gradle -q hello來執行構建腳本(前提是你安裝了Gradle并配置了環境變量),會在控制臺窗口得到如下輸出

$ gradle -q hello Hello world!

這個命令所執行的事情可以分為以下幾個步驟 1.去build.gradle文件中查找hello這個task,并且做編譯執行; 2.執行hello task中每個action里面的流程,此處只有doLast{}一個action負責輸出Hello world;

接下來看另外一段Gradle腳本

task upper << {String someString = 'mY_nAmE' println "Original: " + someString println "Upper case: " + someString.toUpperCase() }

執行gradle -q upper運行后,可以看到控制臺窗口的輸出如下:

$ gradle -q upper Original: mY_nAmE Upper case: MY_NAME

看到此處的代碼,需要做一個簡單的解釋一下,上面的這段代碼和下面的這種寫法是等價的,上面的寫法其實是Gradle提供的doLast{}的一種簡寫方式,因為Gradle直接重載了<<符號.

task upper {doLast{String someString = 'mY_nAmE'println "Original: " + someString println "Upper case: " + someString.toUpperCase() } }

看到這里,有沒有發現其實Gradle的語法,其實跟Java是非常類似的,哈哈...其實網上也存在著一種說法:Groovy就是沒有類型的Java,為什么說是Groovy,其實Gradle相當于Groovy的子類,Groovy的所有特性都被Gradle完整繼承了.看完下面的代碼就能理解為何成為沒有類型的Java的原因了.

task notype << {def oneInt = 1 //等價于 int oneInt = 1 def oneFloat = 1.00 //等價于 ioneFloat = 1.00 def oneString = 'Clock'//等價于 oneString = 'Clock' println "oneInt: " + oneInt println "oneFloat: " + oneFloat println "oneString: " + oneString }

編譯運行以上代碼后,即可以看到以下輸出

$ gradle -q notype oneInt: 1 oneFloat: 1.00 oneString: Clock

之所以說Groovy是無類型的Java,就是因為不管所有的類型都可以使用**def(define)**來定義一個變量,Gradle會根據你賦值的類型,將變量轉換成對應的基本類型. 最后來看一下Gradle里面如何使用循環的,直接看下面兩段代碼

task rounder << {10.times{println "it is: " + it } } task rounder << {10.times{a->println "it is: " + a } }

上面的兩段代碼的執行結果相同,如下:

$ gradle -q rounder it is: 0 it is: 1 it is: 2 it is: 3 it is: 4 it is: 5 it is: 6 it is: 7 it is: 8 it is: 9

都是做一個10次的循環,.times?和?it是關鍵字,其中**..times**.表示循環,10.times表示執行10次的一個循環,it表示循環中的計數值. 對于it,我們也可以自定義一個變量獲取這個計數值,像第二段代碼中的a->就是表示用a來取代it獲取這個循環中的計數值.對于

println "it is: " + a

我們也可以等價寫成

println "it is: $a"//$變量名,表示去取變量的值

任務依賴

Gradle中存在一種依賴關系,所謂依賴關系可以簡單的描述成一個Task的執行需要已另一個Task作為基礎,繼續看下面的兩段代碼

task hello << {println 'Hello world!' } task intro(dependsOn: hello) << { println "I'm Gradle" } task intro(dependsOn: 'hello') << {println "I'm Gradle" } task hello << { println 'Hello world!' }

上面兩段代碼的都是表示在執行intro task之前會先依賴執行hello task,唯一的區別就是被依賴的task是定義在調用之前還是調用之后,看到這里是否感覺這種依賴的關系相當于函數調用傳入參數那樣..顯得非常易懂.

多項目和遠程倉庫

Gradle支持可以將一個Project劃分成為一個或多個子Project來構成

include 'SubProject1','SubProject2','SubProject3'.........;

可以支持使用本地的mavenCentral庫,或者是遠程服務器上的庫

repositories {mavenCentral()//本地庫支持maven {url "http://repo.mycompany.com/maven2" //遠程庫地址 } }

常用的Gradle命令

下面介紹一些Gradle中常用的命令操作

  • 查看版本號:?gradle -v
  • 編譯執行某個task:?gradle Task名
  • 靜默編譯執行某個task:?gradle -q Task名(q表示quiet模式,表示編譯執行Gradle腳本的過程中,只輸出必要的信息. 除了quiet模式外,Gradle中還有其他三種模式)
  • 編譯執行某個Project中的某個task:gradle -b Project名 Task名(Gradle默認只執行build.gradle文件中,自定義其他文件xxx.gradle編譯運行顯式指定Project名稱,這里的build.gradle其實表示的就是build Project)
  • 顯示所有的Project:gradle projects
  • 顯示所有的task:gradle tasks
  • 顯示gradle的gui:gradle --gui?或?gradle --gui&(后臺運行)
  • 查找所有的gradle命令:?gradle --help

##最后

此處只是一小部分gradle的基礎使用總結,更多的gradle使用方式請戳這里Gradle User Guide

轉載于:https://www.cnblogs.com/sddai/p/10303978.html

總結

以上是生活随笔為你收集整理的Gradle语法基础解析的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日韩黄色网 | 久久精品一区二区在线观看 | 国产精品野外户外 | 成年网站免费在线观看 | 欧美精品首页 | 国产吞精囗交免费视频 | 国产婷婷在线视频 | 丰满人妻一区二区三区免费视频 | 无码精品一区二区三区在线 | 免费欧美黄色 | 污污网站免费 | 免费欧美黄色 | av不卡一区二区 | 久久中文字幕在线观看 | 一区二区成人免费视频 | 亚洲aaaa级特黄毛片 | 一级不卡毛片 | 成人h动漫精品一区二区无码 | 国产乱码精品1区2区3区 | 午夜秋霞网| 欧美大片在线播放 | 91欧美一区二区 | 国产成人福利在线 | 一本色道久久综合亚洲精品图片 | 久久免费少妇高潮久久精品99 | 久久久嫩草 | 糖心av| 日本成人片在线 | www.-级毛片线天内射视视 | 91丨国产丨白丝 | 蜜桃视频在线观看污 | 国产美女无遮挡永久免费观看 | 男人天堂新地址 | 好色先生视频污 | 精品国模一区二区三区 | 午夜视频福利在线 | 天堂男人网 | 亚洲国产精品成人 | 久草毛片 | 少妇高潮网站 | 免费观看视频在线观看 | 宅男深夜视频 | 久久亚洲精品小早川怜子 | 91国产一区 | 久久久精品日本 | 精品女同一区二区 | 久久精品h | 另类激情综合 | 村姑电影在线播放免费观看 | 久久午夜无码鲁丝片午夜精品 | 日韩特级黄色片 | va在线| 午夜福利电影 | 国产成a人亚洲精品 | 色噜噜狠狠一区二区三区果冻 | 国产精品久久久久久久成人午夜 | 国产精品丝袜视频无码一区69 | 邵氏电影《金莲外传2》免费观看 | 久久久一二三四 | 国产男人的天堂 | www.黄色片| 影音先锋每日资源 | 日韩欧美中文字幕在线播放 | av网在线 | 永久在线 | 金鱼妻日剧免费观看完整版全集 | 免费黄色美女网站 | 国模在线观看 | 99热这里只有精品在线观看 | 综合五月婷婷 | 亚洲精品久久久久久国 | 欧美激情精品久久久久久免费 | av在线资源站 | 在线观看日韩欧美 | 乱一色一乱一性一视频 | 大奶一区二区 | 成人毛片在线观看 | 久久精品国产77777蜜臀 | 曰批女人视频在线观看 | 婷婷综合 | www.youjizz国产 | 禁漫天堂下载18 | 国产区一区二区 | hd性videos意大利精品 | 超碰成人福利 | 久久av资源| 99久久网站 | 少妇人妻好深好紧精品无码 | 迈开腿让我尝尝你的小草莓 | 国产午夜毛片 | 欧美熟妇一区二区 | 97视频| 浪荡奴双性跪着伺候 | 禁漫天堂在线 | 五月激情啪啪 | 亚洲网在线 | 国产主播第一页 | 国产一区二区三区精品愉拍 | 麻豆91精品91久久久 |