gradle在Android中的使用

參考http://m.itdecent.cn/p/8b8a550246bd,整理為自己需要的方便查看

App

settings.gradle

配置Project和module

include ':app' , ':module1',':module2'

build.gradle

buildscript

gradle自身所使用的資源。可以聲明的資源包括依賴(lài)項(xiàng)、第三方插件、倉(cāng)庫(kù)地址等

repositories

倉(cāng)庫(kù) jcenter()、maven()和google()等

dependencies

配置依賴(lài) classpath:'group:name:version'

ext

自定義屬性

  • 只在當(dāng)前配置文件使用的,在當(dāng)前文件定義 ext.xxx_name='xxx',使用的時(shí)候$xxx_name獲取值
  • 通用自定義配置,單獨(dú)定義文件ext{xxx_1='xxx'} 在需要使用的文件中 apply from: '文件名',使用${xxx_1}獲取值

allprojects

為所有項(xiàng)目提供共同所需依賴(lài)包

task

task clean(type: Delete) {
    delete rootProject.buildDir
}

運(yùn)行g(shù)radle clean時(shí),執(zhí)行此處定義的task,刪除根目錄中的build目錄

Module

每個(gè)module都有一個(gè)build.gradle文件

build.gradle

這里主要就是dependencies,和一些plugin。主要介紹下plugin,以'com.android.application'插件為例

plugin

apply plugin:'×××': 二進(jìn)制插件,一般都是被打包在一個(gè)jar里獨(dú)立發(fā)布的

apply from:'×××':應(yīng)用腳本插件,其實(shí)就是把這個(gè)腳本加載進(jìn)來(lái)

插件的作用

  • 添加一些task,幫助完成一些工作
  • 添加一些依賴(lài)
  • 給現(xiàn)有對(duì)象添加一些擴(kuò)展,android{}這個(gè)配置塊就是Android Gradle插件為Project對(duì)象添加的一個(gè)擴(kuò)展
  • 對(duì)項(xiàng)目進(jìn)行一些約定,比如應(yīng)用Java插 件之后,約定src/main/java目錄下是我們的源代碼存放位置

com.android.application插件

android{} 是Android插件提供的一個(gè)擴(kuò)展類(lèi)型,可以讓我們自定義Android Gradle工程,是Android Gradle工程配置的唯一入口。下面列舉一下主要的配置項(xiàng)。

  1. compileSdkVersion 是編譯所依賴(lài)的Android SDK的版本,這里是API Level。
  2. buildToolsVersion 是構(gòu)建該Android工程所用構(gòu)建工具的版本。
  3. defaultConfig{} 它是一個(gè)ProductFlavor的默認(rèn)的配置,后面會(huì)介紹ProductFlavor
      1. applicationId 包名,app的唯一標(biāo)識(shí)。跟AndroidManifest里面的package是可以不同的。package指的是代碼目錄下路徑;applicationId指的是app對(duì)外發(fā)布的唯一標(biāo)識(shí),會(huì)在簽名、申請(qǐng)第三方庫(kù)、發(fā)布時(shí)候用到。
      
      2. minSdkVersion 是支持的Android系統(tǒng)的api level
      
      3. targetSdkVersion 基于哪個(gè)Android版本開(kāi)發(fā)的
      
      4. versionCode app應(yīng)用內(nèi)部版本號(hào),一般用于控制app升級(jí)
      
      5. versionName app應(yīng)用的版本名稱(chēng),一般是發(fā)布的時(shí)候?qū)懺赼pp上告訴用戶(hù)的
      
      6. multiDexEnabled 是否啟用自動(dòng)拆分多個(gè)Dex的功能
      
      7. ndk{} 多平臺(tái)編譯,生成有so包的時(shí)候使用,包括四個(gè)平臺(tái)'armeabi', 'x86', 'armeabi-v7a', 'mips'
      
      8. flavorDimensions 定義需要定制化的字段,然后在productFlavors中使用
  1. sourceSets 源代碼集合,是Java插件用來(lái)描述和管理源代碼及資源的一個(gè)抽象概念,是一個(gè)Java源代碼文件和資源文件的集合,我們可以通過(guò)sourceSets更改源集的Java目錄或者資源目錄等。
  2. buildTypes 構(gòu)建類(lèi)型,內(nèi)置了debug和release兩個(gè)構(gòu)建類(lèi)型,一般用在代碼混淆
       name:build type的名字
       applicationIdSuffix:應(yīng)用id后綴
       versionNameSuffix:版本名稱(chēng)后綴
       debuggable:是否生成一個(gè)debug的apk
       minifyEnabled:是否混淆
       proguardFiles:混淆文件
       signingConfig:簽名配置
       manifestPlaceholders:清單占位符
       shrinkResources:是否去除未利用的資源,默認(rèn)false,表示不去除。
       zipAlignEnable:是否使用zipalign工具壓縮。
       multiDexEnabled:是否拆成多個(gè)Dex
       multiDexKeepFile:指定文本文件編譯進(jìn)主Dex文件中
       multiDexKeepProguard:指定混淆文件編譯進(jìn)主Dex文件中
  1. signingConfigs 簽名配置。一個(gè)app只有在簽名之后才能被發(fā)布、安裝、使用,簽名是保護(hù)app的方式,標(biāo)記該app的唯一性。
       storeFile: 簽名文件
       storePassword: 簽名證書(shū)文件的密碼
       storeType: 簽名證書(shū)類(lèi)型
       keyAlias: 簽名證書(shū)中秘鑰別名
       keyPassword: 簽名證書(shū)中改密鑰的密碼
  1. productFlavors Gradle的多渠道打包,你可以在不同的包定義不同的變量,實(shí)現(xiàn)自己的定制化版本的需求。
       defaultConfig 中定義的 flavorDimensions
       manifestPlaceholders 占位符,我們可以通過(guò)它動(dòng)態(tài)配置AndroidManifest文件一些內(nèi)容,譬如app的名字
       buildConfigField 是BuildConfig文件的一個(gè)函數(shù),而B(niǎo)uildConfig這個(gè)類(lèi)是Android Gradle構(gòu)建腳本在編譯后生成的,而buildConfigField就是其中的自定義函數(shù)變量
       定義常量 buildConfigField "boolean","isTest","true" 
       就會(huì)在BuildConfig類(lèi)中添加一個(gè)變量 public static final boolean isTest = true
       然后我們就可以在代碼中使用   BuildConfig.isTest
  1. dexOptions{} dx命令只是一個(gè)腳本,它調(diào)用的還是Java編寫(xiě)的dx.jar庫(kù),是Java程序處理的,所以當(dāng)內(nèi)存不足的時(shí)候,就會(huì)內(nèi)存溢出。給dx分配的內(nèi)存是一個(gè)G,給它增加內(nèi)存分配來(lái)解決這個(gè)問(wèn)題。

    dexOptions {
        javaMaxHeapSize "2g"
        incremental = true
    }
    

dependencies{}

  • compile fileTree(include: ['.jar'], dir: 'libs')* 依賴(lài)本地libs文件夾下的擴(kuò)展名為jar
  • compile project('×××') 引入某個(gè)本地module
  • compile group:name:version

gradle 3.0中依賴(lài)implementation、api的區(qū)別

  • api跟以前的compile沒(méi)什么區(qū)別,指令依賴(lài)會(huì)傳遞,只需要引入一次,其它module不用再次引入
  • implementation指令依賴(lài)是不會(huì)傳遞的,也就是說(shuō)當(dāng)前引用的第三方庫(kù)僅限于本module內(nèi)使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,355評(píng)論 25 708
  • 說(shuō)明 本文主要介紹和Gradle關(guān)系密切、相對(duì)不容易理解的配置,偏重概念介紹。部分內(nèi)容是Android特有的(例如...
    搬磚的小明閱讀 16,176評(píng)論 1 62
  • 當(dāng)畢業(yè)不夠兩年,身邊的朋友慢慢得有車(chē)有房有女朋友周末有自己的節(jié)目,而我覺(jué)得很多美好的事情我都遙不可及,找不到可以讓...
    19snow93閱讀 12,024評(píng)論 34 192
  • 如果我們需要一個(gè)模型,讓線(xiàn)程能隨時(shí)處理事件但并不退出,這種模型通常稱(chēng)作Event Loop.實(shí)現(xiàn)這種模型的關(guān)鍵點(diǎn)在...
    August24閱讀 338評(píng)論 0 0
  • 忽然夕陽(yáng)淹沒(méi)了等待 滿(mǎn)街的樹(shù)影 安靜了某時(shí)某刻 風(fēng)吹進(jìn)黃昏的微涼后 我走了 視線(xiàn)開(kāi)始模糊 誰(shuí)知道 我一生的入迷 終...
    葛卡閱讀 164評(píng)論 3 0

友情鏈接更多精彩內(nèi)容