日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
GradleforAndroid第二篇(Build.gradle入門)

在這一章,我們將學習以下內(nèi)容:

東山網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、自適應網(wǎng)站建設等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)公司

  • 理解Gradle文件
  • 編寫簡單的構(gòu)建任務
  • 自制構(gòu)建腳本

理解Gradle腳本

當然我們現(xiàn)在討論的所有內(nèi)容都是基于Android studio的,所以請先行下載相關(guān)工具。當我們創(chuàng)建一個新的工程,Android studio會默認為我們創(chuàng)建三個gradle文件,兩個Build.gradle,一個settings.gradle,build.gradle分別放在了根目錄和moudle目錄下,下面是gradle文件的構(gòu)成圖:

 
 
 
 
  1. MyApp
  2.   ├── build.gradle
  3.   ├── settings.gradle
  4.   └── app
  5.       └── build.gradle   

setting.gradle解析

當你的app只有一個模塊的時候,你的setting.gradle將會是這樣子的:

 
 
 
 
  1. include ':app'

setting.gradle文件將會在初始化時期執(zhí)行,關(guān)于初始化時期,可以查看上一篇博客,并且定義了哪一個模塊將會被構(gòu)建。舉個例子,上述setting.gradle包含了app模塊,setting.gradle是針對多模塊操作的,所以單獨的模塊工程完全可以刪除掉該文件。在這之后,Gradle會為我們創(chuàng)建一個Setting對象,并為其包含必要的方法,你不必知道Settings類的詳細細節(jié),但是你***能夠知道這個概念。

根目錄的build.gradle

該gradle文件是定義在這個工程下的所有模塊的公共屬性,它默認包含二個方法:

 
 
 
 
  1. buildscript {
  2.      repositories {
  3.          jcenter() 
  4.      }
  5.       dependencies {
  6.           classpath 'com.android.tools.build:gradle:1.2.3'
  7.       }
  8. }
  9. allprojects {
  10.      repositories {
  11.           jcenter() 
  12.      }

buildscript方法是定義了全局的相關(guān)屬性,repositories定義了jcenter作為倉庫。一個倉庫代表著你的依賴包的來源,例如maven倉庫。dependencies用來定義構(gòu)建過程。這意味著你不應該在該方法體內(nèi)定義子模塊的依賴包,你僅僅需要定義默認的Android插件就可以了,因為該插件可以讓你執(zhí)行相關(guān)Android的tasks。

allprojects方法可以用來定義各個模塊的默認屬性,你可以不僅僅局限于默認的配置,未來你可以自己創(chuàng)造tasks在allprojects方法體內(nèi),這些tasks將會在所有模塊中可見。

模塊內(nèi)的build.gradle

模塊內(nèi)的gradle文件只對該模塊起作用,而且其可以重寫任何的參數(shù)來自于根目錄下的gradle文件。該模塊文件應該是這樣:

 
 
 
 
  1. apply plugin: 'com.android.application'
  2.   android {
  3.       compileSdkVersion 22
  4.       buildToolsVersion "22.0.1"
  5.       defaultConfig {
  6.           applicationId "com.gradleforandroid.gettingstarted"
  7.           minSdkVersion 14
  8.           targetSdkVersion 22
  9.           versionCode 1
  10.           versionName "1.0"
  11.       }
  12.       buildTypes {
  13.           release {
  14.               minifyEnabled false
  15.               proguardFiles getDefaultProguardFile
  16.                ('proguard-android.txt'), 'proguard-rules.pro'
  17.           }
  18.        } 
  19.    }
  20.    dependencies {
  21.       compile fileTree(dir: 'libs', include: ['*.jar'])
  22.       compile 'com.android.support:appcompat-v7:22.2.0'
  23.     }   

插件

該文件的***行是Android應用插件,該插件我們在上一篇博客已經(jīng)介紹過,其是google的Android開發(fā)團隊編寫的插件,能夠提供所有關(guān)于Android應用和依賴庫的構(gòu)建,打包和測試。

Android

該方法包含了所有的Android屬性,而唯一必須得屬性為compileSdkVersion和buildToolsVersion:

  • compileSdkVersion:編譯該app時候,你想使用到的api版本。
  • buildToolsVersion:構(gòu)建工具的版本號。

構(gòu)建工具包含了很多實用的命令行命令,例如aapt,zipalign,dx等,這些命令能夠被用來產(chǎn)生多種多樣的應用程序。你可以通過sdk manager來下載這些構(gòu)建工具。

defaultConfig方法包含了該app的核心屬性,該屬性會重寫在AndroidManifest.xml中的對應屬性。

 
 
 
 
  1. defaultConfig {
  2.        applicationId "com.gradleforandroid.gettingstarted"
  3.        minSdkVersion 14
  4.        targetSdkVersion 22
  5.        versionCode 1
  6.        versionName "1.0"

***個屬性是applicationId,該屬性復寫了AndroidManifest文件中的包名package

name,但是關(guān)于applicationId和package

name有一些不同。在gradle被用來作為Android構(gòu)建工具之前,package

name在AndroidManifest.xml有兩個作用:其作為一個app的唯一標示,并且其被用在了R資源文件的包名。

Gradle能夠很輕松的構(gòu)建不同版本的app,使用構(gòu)建變種。舉個例子,其能夠很輕松的創(chuàng)建一個免費版本和付費版本的app。這兩個版本需要分隔的標示碼,所以他們能夠以不同的app出現(xiàn)在各大應用商店,當然他們也能夠同時安裝在一個手機中。資源代碼和R文件必須擁有相同的包名,否則你的資源代碼將需要改變,這就是為什么Android開發(fā)團隊要將package name的兩大功能拆分開。在AndroidManifest文件中定義的package name依然被用來作為包名和R文件的包名。而applicationid將被用在設備和各大應用商店中作為唯一的標示。

接下來將是minSdkVersion和targetSdkVersion。這兩個和AndroidManifest中的很像。minSdkVersion定義為最小支持api。

versionCode將會作為版本號標示,而versionName毫無作用。

所有的屬性都是重寫了AndroidManifest文件中的屬性,所以你沒必要在AndroidManifest中定義這些屬性了。

buildTypes方法定義了如何構(gòu)建不同版本的app,我們將在下一篇博客中有所介紹。

依賴包

依賴模塊作為gradle默認的屬性之一(這也是為什么其放在了Android的外面),為你的app定義了所有的依賴包。默認情況下,我們依賴了所有在libs文件下的jar文件,同時包含了AppCompat這個aar文件。我們將會在下一篇博客中討論依賴的問題。

讓我們開始tasks吧

如果你想知道你多少tasks可以用,直接運行g(shù)radlew tasks,其會為你展示所有可用的tasks。當你創(chuàng)建了一個Android工程,那么將包含Android tasks,build tasks,build setup tasks,help tasks,install tasks,verification tasks等。

基本的tasks

android插件依賴于Java插件,而Java插件依賴于base插件。

base插件有基本的tasks生命周期和一些通用的屬性。

base插件定義了例如assemble和clean任務,Java插件定義了check和build任務,這兩個任務不在base插件中定義。

這些tasks的約定含義:

  • assemble: 集合所有的output
  • clean: 清除所有的output
  • check: 執(zhí)行所有的checks檢查,通常是unit測試和instrumentation測試
  • build: 執(zhí)行所有的assemble和check

Java插件同時也添加了source sets的概念。

Android tasks

android插件繼承了這些基本tasks,并且實現(xiàn)了他們自己的行為:

  • assemble 針對每個版本創(chuàng)建一個apk
  • clean 刪除所有的構(gòu)建任務,包含apk文件
  • check 執(zhí)行Lint檢查并且能夠在Lint檢測到錯誤后停止執(zhí)行腳本
  • build 執(zhí)行assemble和check

默認情況下assemble tasks定義了assembleDebug和assembleRelease,當然你還可以定義更多構(gòu)建版本。除了這些tasks,android 插件也提供了一些新的tasks:

  • connectedCheck 在測試機上執(zhí)行所有測試任務
  • deviceCheck 執(zhí)行所有的測試在遠程設備上
  • installDebug和installRelease 在設備上安裝一個特殊的版本
  • 所有的install task對應有uninstall 任務

build task依賴于check任務,但是不依賴于connectedCheck或者deviceCheck,執(zhí)行check任務的使用Lint會產(chǎn)生一些相關(guān)文件,這些報告可以在app/build/outputs中查看:

android studio的tasks

你根本不必要去執(zhí)行g(shù)radle腳本在命令行中,Android studio有其對應的工具:

在這個界面,你要做的就是雙擊了。當然你也可以在Android studio中打開命令行,執(zhí)行相關(guān)命令,具體操作就不介紹了。

自定義構(gòu)建

當你在Android studio中自定義了gradle文件,需要更新project:

其實該按鈕,執(zhí)行了generateDebugSources tasks,該任務會生成所有必要的classes文件。

BuildConfig和resources

 
 
 
 
  1. android {
  2.     buildTypes {
  3.         debug {
  4.             buildConfigField "String", "API_URL",
  5.                "\"http://test.cdxwcx.com/api\""
  6.                buildConfigField "boolean", "LOG_HTTP_CALLS", "true"
  7.      }
  8.        release {
  9.             buildConfigField "String", "API_URL",
  10.                 "\"http://cdxwcx.com/api\""
  11.                buildConfigField "boolean", "LOG_HTTP_CALLS","false"
  12.      } 
  13.  } 

類似這些定義的常量,當定義了這些屬性后,你完全可以在代碼中使用:BuildConfig.API_URL和BuildConfig.LOG_HTTP

最近,Android tools team也讓其里面定義string變?yōu)榭赡埽?/p>

 
 
 
 
  1. android {
  2.        buildTypes {
  3.            debug {
  4.                resValue "string", "app_name", "Example DEBUG"
  5.            }
  6.            release {
  7.                resValue "string", "app_name", "Example"
  8.             } 
  9.        }

你可以在代碼中使用這些string。其中“”不是必須得。

全局設置

如果你有很多模塊在一個工程下,你可以這么定義你的project文件。

 
 
 
 
  1. allprojects {
  2.        apply plugin: 'com.android.application'
  3.        android {
  4.            compileSdkVersion 22
  5.            buildToolsVersion "22.0.1"
  6.        }
  7.  }  

這只會在你的所有模塊都是Android app應用的時候有效。你需要添加Android 插件才能訪問Android的tasks。更好的做法是你在全局的gradle文件中定義一些屬性,然后再模塊中運用它們。比如你可以在根目錄下這么定義:

 
 
 
 
  1. ext {
  2.       compileSdkVersion = 22
  3.       buildToolsVersion = "22.0.1"
  4.    

那么你在子模塊中就可以使用這些屬性了:

 
 
 
 
  1. android {
  2.        compileSdkVersion rootProject.ext.compileSdkVersion
  3.        buildToolsVersion rootProject.ext.buildToolsVersion
  4.  }  

Project properties文件

上述方法是一種辦法,當然還有很多辦法:

  • ext方法
  • gradle.properties文件
  • -p參數(shù)
 
 
 
 
  1. ext {
  2.      local = 'Hello from build.gradle'
  3. }
  4.    task printProperties << {
  5.      println local        // Local extra property
  6.      println propertiesFile        // Property from file
  7.      if (project.hasProperty('cmd')) {
  8.        println cmd        // Command line property
  9.      }

當然你可以在gradle.properties中定義:

 
 
 
 
  1. propertiesFile = Hello from gradle.properties

你也可以輸入命令行:

 
 
 
 
  1. $ gradlew printProperties -Pcmd='Hello from the command line'
  2. :printProperties
  3. Hello from build.gradle
  4. Hello from gradle.properties
  5. Hello from the command line  

總結(jié)

在這篇博客中,我們細致的查看了Android studio生成的三個gradle文件,現(xiàn)在你應該能夠自己去創(chuàng)建自己的gradle文件,我們還學習了最基本的構(gòu)建任務,學習了Android 插件以及其tasks。

在接下來的幾年里,Android開發(fā)生態(tài)將會爆炸性增長,很多有趣的依賴庫將會讓每個人去使用,在下一篇博客里面,我們將看看我們能有幾種方式添加我們的依賴庫,這樣我們才能夠避免造輪子。


新聞標題:GradleforAndroid第二篇(Build.gradle入門)
分享鏈接:http://www.dlmjj.cn/article/dpjdchs.html