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