《Gradle 權威指南》讀書筆記——第七章 Android Gradle 插件

AndroidGradle插件其實就是一個Gradle的第三方插件
優點:容易重用代碼和資源,
容易創建應用衍生版本(多渠道包),
容易配置擴展和自定義構建過程,
和IDE無縫整合

Android Gradle插件分類

//app
com.android.application
//aar
com.android.library
//test
com.android.test

應用Andriod插件

buildscript{
    repositories{
        jcenter()
    }
    dependencies{
        classpath'com.android.tools.build:1.5.0'
    }
}
apply plugin:'com.android.application'
//android{}是Android插件的提供的一個擴展類型,用於自定義AndroidGradle工程
android{
    compileVersion 23
    buildToolsVersion "23.0.1"
}
​

工程結構

project
  |--build.gradle
  |--project.iml
  |--libs
  |--proguard-rules.pro
  |--src
  |   |----androidTest
  |   |      |-- java
  |   |----main
  |   |       |--AndroidManifest.xml //android特有
  |   |       |--java
  |   |       |--res //特有
  |   |-----test
  |           |--java

androidTest,main,test 分別是 3個 SourceSet 。
Android Gradle 工程配置,都是在android{}是唯一的入口,通過它可以實現對Android Gradle項目進行自定義的擴展其具體實現是com.android.build.gradle.AppExtendsion,是Project的一個擴展

//build.gradle
buildscript{
    repositories{
        jcenter()
    }
    dependencies{
        classpath'com.android.tools.build:gradle:1.5.0'
    }
}

​
​
apply plugin:'com.android.application'
android{
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
    defaultConfig{
        applicationId "org.fly.xxx"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes{
        release{
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguardrule.tx'
        }
    }   
}
dependencies{
    
}


//getExtensionClass(),在AndroidGradle插件中返回就是com.android.build.gradle.AppExtension
//所以Android的很多配置可以從這個類中去找

extension=project.extendsions.create('android',getExtensionClass()
    ,(ProjectInternal)project,instantiator,androidBuilder,sdkHandler
    ,buildTypeContainer,productFlavorContainer,signingConfigContainer
    ,extraModelInfo,isLibrary())

android 插件屬性
compileSdkVersion:
配置我們編譯的Android工程SDK,該配置的原型就是是一個compileSdkVersion方法

android{
    compileSdkVersion 23
}
public void compileSdkVersion(int apiLevel){
    compileSdkVersion("android-"+apiLevel)
}
​
//還有一個重載方法
public void compileSdkVersion(String version){
    chekWriteability()
    this.target=version
}
android{
    comileSdkVersion 'android-23'
}
​
//還有一個set方法,所以我們可以把他當成一個屬性使用
android.compileSdkVersion=23
android.compileSdkVersion='android-23'
​
public void setCompileSdkversion(int level){
    ...
}
public void setCompileSdkversion(String level){
    ...
}


buildToolsVersion:

//常用方法
public void buildToolsVersion(String version){
    checkWritability();
    buildToolsRevision=FullRevision.parseRevision(version);
}
//同樣有set方法
public String getBuildToolsVersion(){
    return buildToolsRevision.toString();
}
public void setBuildToolsVersion(String version){
    buildToolsVersion(version);
}

defaultConfig:
defaultConfig是一個ProductFlavor,具有默認的配置,ProductFlavor允許我們根據不同的情況生成多個不同的APK包,比如我們的多渠道包.
如果不針對我們自定義的ProductFlavor單獨配置,會爲這個ProductFlavor使用默認的defaultConfig配置.

參數 作用
applicationId 配置我們的包名
minSdkVersion 最低支持的安卓版本
targetSdkVersion 基於哪個安卓版本開發的
versionCode 版本號
versionName 版本名稱

buildTypes:
buildTypes,一個NamedDomainObjectContainer,與SourceSet類型是一個域對象.
SourceSet中有main/test,同樣的,buildTypes中有release,debug等等.
我們可以在buildTypes{}裏新增任意多個我們需要構建的類型

名稱 意義
release BuildType類型
minifyEnable 是否開啓混淆
proguardFiles proguard的配置文件
proguardFiles getDefaultProguardFile(‘proguard-android.txt’),‘proguard-rule.pro

AndroidGradle任務
Android插件是基於Java插件的,所以Android插件基本包含了所有的Java插件的功能,如assemable,check,build等,
此外還添加了connectCheck deviceCheck lint install uninstall 等等任務

任務名稱 作用
connectCheck 在所有連接的設備或模擬器上運行check檢查
deviceCheck 通過API連接遠程設備運行check,被用於CI(持續集成)服務器上
lint 在所有ProductFlavor上運行lint檢查
install 在已經連接的設備上安裝應用
connectCheck 在所有連接的設備或模擬器上運行check檢查
uninstall 卸載應用
signingReport 打印App的簽名
androidDependencies 打印Android的依賴

一般我們常用的build assemable clean lint check,通過這些任務可以打包生成apk,對現有的Android進行lint檢查

從Eclipse遷移項目到AndroidStudio
書中P93

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章