1. 程式人生 > >Android Studio gradle配置詳解

Android Studio gradle配置詳解

android gradle配置詳解

AppExtension類及其屬性

可能大部分人看到AppExtension類會感覺到非常的陌生,其實我們在app中的build.gradle中填寫配置資訊的時候,經常看到它,它是什麼呢?

如果你按ctrl+滑鼠左鍵對著Android{},點選進去就知道了,其實android{…}表示的就是AppExtension這個類。

如圖:

image

我們再來看看AppExtension繼承關係:

image

除了AppExtension之外還有2個類與之相似,LibraryExtension和TestExtension

如果是module專案作為lib使用,那麼lib下的build.gradle中的android對應的是LibraryExtension

AppExtension的屬性

  • aaptOptions:aapt是一個可以將資原始檔編譯成二進位制檔案的工具。aaptOptions表示aapt工具設定的可選項引數。
  • adbExecutable:adb從編譯sdk時執行
  • adbOptions:adb的可選項引數
  • applicationVariants:應用變體列表
  • ==buildToolsVersion==:構建工具版本(必要的)
  • buildTypes:構建型別(一般是release和debug,還可以自定義)
  • compileOptions:編譯可選項引數
  • ==compileSdkVersion==:編譯sdk版本(必要的)
  • dataBinding
    :Data Binding可選項引數(關於DataBinding的使用)
  • defualtConfig:預設配置,對於所有的打包專案
  • defualtPublishConfig:預設是release。使用參考
  • dexOptions:Dex可選項引數。
  • externalNativeBuild:native編譯支援。參考
  • flavorDimensionList:
  • generatePureSplits:是否拆成多個APK
  • jacoco:JaCoCo可選項引數
  • lintOptions:Lint工具可選項引數
  • ndkDirectory:ndk目錄(一般在local.properties中)
  • packagingOptions:packaging的可選引數
  • productFlavors:專案所有flavor
  • publishNonDefualt:不僅僅使用預設的publish artifacts。可參考defualtPublishConfig。
  • resourcePrefix:建立新資源時使用的字首。
  • sdkDirectory:sdk目錄(一般在local.properties中)
  • signingConfigs:簽名檔案的可選項引數
  • sourceSets:資原始檔目錄指定(Android中有自己的AndroidSourceSets,這個一般用於assets,jin等目錄)
  • splits:splits型別。
  • testBuildType:測試構建型別
  • testOptions:測試可選項引數
  • testVariants:測試變體
  • unitTestVariants:單元測試變體
  • variantFilter:變體過濾器

加粗的表示DSL語言的閉包

如:

buildTypes { }
  • 1
  • 1

AppExtension的方法: 
- flavorDimensions(dimension):指定flavor名稱 
- useLibraray(name):請求使用一個lib庫 
- useLibrary(name,required):與上面解釋一樣。

AppExtension的配置閉包(Configration blocks)

與app中build.gradle中android{}一樣,程式碼中由AppExtension類表示。其他的配置閉包也一樣。

  • aaptOptions{}
aaptOptions{}程式碼由AaptOptions類表示。

AaptOptions的屬性:
1.additionalParameters:額外引數,List型別。
2.cruncherEnabled:如果PNG圖片是否可以大量快速的處理,boolean型別。 true表示可以。
3.cruncherProcesses:快速處理,可能需要更多的記憶體和CPU。int型別。預設0,值越大處理越快,需要的記憶體和CPU也越大。
4.failOnMissingConfigEntry:如果沒有找到一個配置,就返回一個錯誤。Boolean值,預設false5.ignoreAssetsPattern:忽略Assets模組。
6.moCompress:拓展檔案不會打包進apk中。


用法(詳細用法可能需要去看看文件了):

aaptOptions{
    cruncherEnabled true//快速處理PNG圖片
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • adbOption{}
adbOptions{}對應的是AdbOptions

AdbOptions的屬性:
1.installOptionsapk安裝的可選引數。
2.timeOutInMs:使用adb的超時時間。

不常用
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • buildTypes{}
buildTypes{}對應的是BuildType類

buildTypes的屬性:

1.applicationIdSuffix:應用id字尾(給Applica)
2.consumerProguardFiles:混淆檔案包含在arr包中。
3.debuggable:是否生成一個debug的apk
4.embedMicroApp:可穿戴裝置app是否可以使用這個編譯型別
5.javaCompileOption:Java編譯配置引數
6.jniDebuggable:這個編譯型別的配置是否可以與debuggable的native程式碼生成一個apk
7.manifestPlaceholders:清單佔位符
8.minifyEnabled:是否縮小
9.multiDexEnabled:是否拆成多個Dex
10.multiDexKeepFile:指定文字檔案編譯進主Dex檔案中
11.multiDexKeepProguard:指定混淆檔案編譯進主Dex檔案中
12.name:build type的名字
13.proguardFiles:混淆檔案
14.pseudoLocalesEnabled:是否生成偽現場apk(如果沒有提供混淆規則檔案,則設定預設的混淆規則檔案(SDK/tools/proguard/proguard-android.txt))
15.renderscriptDebuggable:使用RenderScript編譯器的優化級別。
16.shrinkResources:是否去除未利用的資源,預設false,表示不去除。
17.signingConfig:簽名配置
18.testCoverageEnabled:測試覆蓋率是否被啟用。
19.useJack:過時
20.versionNameSuffix:版本名稱字尾
21.zipAlignEnable:是否使用zipalign工具壓縮。

------------------------------------------------------

buildType的方法:

1.buildConfigField(type,name,value):新增一個變數生成BuildConfig類。
2.consumeProguardFile(proguardFile):新增一個混淆檔案進arr包。
3.consumeProguardFile(proguardFiles):新增混淆檔案進arr包。
4.externalNativeBuild(action):配置本地的build選項。
5.initWith:複製這個build型別的所有屬性。
6.proguardFile(proguardFile):新增一個新的混淆配置檔案。
7.proguradFiles(files):新增新的混淆檔案
8.resValue(type,name,value):新增一個新的生成資源
9.setProguardFiles(proguardFileIterable):設定一個混淆配置檔案。


------------------------------------------------------------


buildType用法:

  buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            shrinkResources true
            zipAlignEnabled true
            debuggable false
            //...
        }

        debug{
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            shrinkResources true
            zipAlignEnabled true
            debuggable true
            //...
        }
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • compileOptions{}
compileOptions{}對應的是CompileOptions


CompileOptions的屬性:
1.encoding:Java原始檔的編碼格式
2.incremental:是否應該使用Java編寫的Gradle新的增量模型
3.sourceCompatibility:指定編譯編譯.java檔案的jdk版本
4.targetCompatibility:確保class檔案與targetCompatibility指定版本,或者更新的java虛擬機器相容


不太常用
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • dataBinding{}
dataBinding{}對應的是DataBindingOptions


DataBindingOptions的屬性:

1.addDefualtAdapters:是否新增一個預設的data binding介面卡。預設true。
2.enabled:是否使用data binding
3.version:data binding使用版本


dataBinding的使用:

dataBinding{
    enabled true
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • defualtConfig{}
defaultConfig{}是所有flavor都共有的配置。

英文解釋:The default configuration, inherited by all product flavors (if any are defined).


defaultConfig的使用:

 defaultConfig {
        applicationId "com.example.zhang.demo"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

如果專案中包含多個Module,可以將共有的minSdkVersion和targetSdkVersion抽取到Project中的build.gradle檔案中。具體細節下一章節。

  • dexOptions{}
dexOptions{}對應的是DexOptions

DexOptions屬性:

1.additionalParameters:給dx新增一系列附加的引數
2.javaMaxHeapSize:當呼叫dx時指定-Xmx值。
3.jumboMode:使用jumbo(龐大的)模式
4.keepRuntimeAnnotatedClasses:保持所有類中的執行時的註解在主Dex中。
5.maxProcessCount:可以使用Dex的最大併發程序數。預設為46.optimize:執行在dx編譯器是否有optimize標記。
7.preDexLibraries:是否預先dex庫,它可以改善增量的生成,但是在clear build可能會變慢
8.threadCount:當dx執行時使用的執行緒的數量。預設4個。


dexOptions{}的用法:

dexOptions {
    preDexLibraries  false
    javaMaxHeapSize "4g"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • externalNativeBuild{}
externalNativeBuild{}對應的是ExternalNativeBuild

ExternalNativeBuild的屬性:

1.cmake:CMake工具編譯選項。
2.ndkBuild:ndk-build選項。


在externalNativeBuild{}中有2個模組,cmake{}和ndkBuild{}模組

------------------------------------------------
cmake{}對應的是CmakeOptions

CmakeOption的屬性:
1.path:你的CmakeLists.txt編譯指令碼的相對路徑。

--------------------------------------------------
ndkBuild{}對應的是NdkBuildOptions

NdkBuildOptions的屬性:
1.path:你的Android.mk檔案的相對路徑。

--------------------------------------------------


externalNativeBuild{}的用法:

externalNativeBuild{
    ndkBuild{
        path file("src\\main\\jni\\Android.mk")
    }

    cmake {
        path "src/main/cpp/CMakeLists.txt"
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • jacoco{}
jacoco{}對應於JacocoOptions

JacocoOptions的屬性:
1.version:過時

英文原文:
note: this property 
            
           

相關推薦

Android Studio gradle配置

android gradle配置詳解 AppExtension類及其屬性 可能大部分人看到AppExtension類會感覺到非常的陌生,其實我們在app中的build.gradle中填寫配置資訊的時候,經常看到它,它是什麼呢? 如果你按c

android studio Gradle使用

1. 專案中Gradle檔案 對於一個gradle專案,最基礎的檔案配置如下: 一個專案有一個setting.gradle、一個頂層的 build.gradle檔案、以及每個Module中一個build.gradle檔案。 1.1 settin

Android Studio 使用本地gradle配置

由於國內牆的原因,我們的Gradle無法使用 但是我們可以通過去下載我們想要的Gradle版本 然後再AndoidStudio內去配置本地的版本 進而去實現了Gradle的配置 注意一: so我們按照setting->gradle->然後開啟gradle-wrapper.properti

android gradle配置

AppExtension類及其屬性 可能大部分人看到AppExtension類會感覺到非常的陌生,其實我們在app中的build.gradle中填寫配置資訊的時候,經常看到它,它是什麼呢? 如果你按ctrl+滑鼠左鍵對著Android{},點選進去就知道了

Android FileProvider 屬性配置及FileProvider多節點問題

眾所周知在android7.0,修改了對私有儲存的限制,導致在獲取資源的時候,不能通過Uri.fromFile來獲取uri了我們需要適配7.0+的機型需要這樣寫: 1:程式碼適配 if (Build.VERSION.SDK_INT > 23) {//

(Android Studio)gradle配置多個程式碼倉庫repositories

repositories {     mavenCentral()     maven { url "https://jitpack.io" }     maven { url "http://maven.al

android studio gradle配置apk名稱

更新到3.幾以上、gradle配置apk名稱會和以往不同、在此記錄一下 signingConfigs { debug { storeFile file("keystore" + File.separator + "android

Android Studio gradle 配置 keystore

配置keystore Android專案編譯的時候需要簽名,即keystore檔案,在不加配置的時候,Android Studio會使用一個預設簽名,通常在使用者資料夾下的.android目錄中,名為debug.keystore。而在編譯發行包的時候,我們一定

Android Studio 外掛開發二:工具類

轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/78112856 本文出自【趙彥軍的部落格】 在外掛開發過程中,我們按照開發一個正式的專案來操作,需要整理一些常用工具類。 Http 請求封裝 在外掛的專案中,我們看到依賴庫如下圖所示:

Android Studio Gradle 配置 lintOptions

android { lintOptions { // true--關閉lint報告的分析進度 quiet true // true--錯誤發生後停止gradle構建 abortOnError

新建專案和匯入之前eclipse打包過的專案在android studio打包apk

一、打包之前沒打包過的專案 1.開啟as自己想要打包專案介面,點選如下圖: 2.點選後會出現下圖:貌似和eclipse有點相同 3.應為是之前沒有打包過上面顯示button出現如下圖: 4.看到

Android Studio Gradle配置相關問題

Android Studio-Gradle配置相關問題 Gradle配置相關問題 解決方案 ps 一、Gradle配置相關問題 1、 AndroidStudio 開啟專案在 Building gradle project info 一直卡住 2、

Android系統許可權配置

Android 許可權控制程式碼分析 android系統充分利用了linux的使用者許可權管理方法,所以如果需要移植到其它系統,這一塊也是一個相當不小的工作量。那麼android系統到底是如何使用這些的有利因素呢? 首先需要知道linux許可權的兩個基本知識: 1

android studio,Gradle配置: RxJava失敗 Failed to resolve: io.reactivex:rxjava:1.1.2

Rxjava version2.X之後: To allow having RxJava 1.x and RxJava 2.x side-by-side, RxJava 2.x is under the maven coordinates io.reactivex.rxjav

android studio 工具使用和快捷鍵使用

可以開發屬於自己的應用,是否有點小激動?好吧!讓我們開始,首先點選Start a new Android Studio Project建立工程: 接下來需要輸入應用名稱(第一個字母要大寫)、公司域以及指定應用存放目錄,點選Next按鈕進入下一步: 如果第一個字母不

Android build.gradle檔案

Android build.gradle詳解 什麼是gradle? gradle是一個專案構建工具,java開發中有兩個大名鼎鼎的專案構建Maven,Ant,其中maven簡單易控深受開發者喜愛

Android studio cMake 使用

  本人最近在學習ndk 開發,由於用慣了AS 之後不想再去試用Eclipse  所以最近一個人再折騰 使用Android Studio 進行NDK 開發(使用ffmpeg進行練手)   由於是一個人自己再折騰,再加上白天也比較忙,晚上還經常加班 折騰了好久才搞明白 廢

Android Studio Gradle 多渠道自動打包,動態修改HostUrl,簽名apk,混淆配置

  文/ skay 最近遇到專案從Eclispe遷移到Android studio,以前的Ant自動打包指令碼已經相容不好了,所以用了Gradle實現打渠道包,切換環境等, Ant打包指令碼 <target name="-release-sign"

Android中JNI使用(2)---Android Studio中NDK環境配置

Android Studio中的NDK環境配置 1、下載NKD 在Android Studio中選擇File----Settings----Appearance&Behavior---System Settings----Andr

Android studio專案中的gradle.properties

Android studio專案中的gradle.properties詳解 在使用Android Studio新建Android專案之後,在專案根目錄下會預設生成一個gradle.properties檔案,我們可以在裡面做一些Gradle檔案的全域性性的配置,也可以將比較私密的資訊放