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