gradle在Android中的使用

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

App

settings.gradle

配置Project和module

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

build.gradle

buildscript

gradle自身所使用的資源??梢月暶鞯馁Y源包括依賴項、第三方插件、倉庫地址等

repositories

倉庫 jcenter()、maven()和google()等

dependencies

配置依賴 classpath:'group:name:version'

ext

自定義屬性

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

allprojects

為所有項目提供共同所需依賴包

task

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

運行gradle clean時,執(zhí)行此處定義的task,刪除根目錄中的build目錄

Module

每個module都有一個build.gradle文件

build.gradle

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

plugin

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

apply from:'×××':應用腳本插件,其實就是把這個腳本加載進來

插件的作用

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

com.android.application插件

android{} 是Android插件提供的一個擴展類型,可以讓我們自定義Android Gradle工程,是Android Gradle工程配置的唯一入口。下面列舉一下主要的配置項。

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

    dexOptions {
        javaMaxHeapSize "2g"
        incremental = true
    }
    

dependencies{}

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

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

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

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

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

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