《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

你可能感兴趣的:(AS,Gradle,Android,Android,Gradle)