使用Gradle构建Android工程
2015-09-18 17:02
513 查看
Gradle是以Groovy语言为基础,基于DSL语法的构建工具,它通过插件的方式定制工程构建过程。Google开发了Android Gradle插件,使用Gradle构建Android工程。
Gradle构建Android工程,我们可以在Android studio中使用,也可以在命令行中使用,也可以集成到持久化集成工具中。
Gradle构建Android工程的配置文件名是build.gradle,存放在工程的根目录下。
一个Android工程(Project)是由一个或多个组件(Module)组成,工程和组件都分别有各自的build.gradle
Android工程的build.gradle
一般情况下,我们不需要修改Android工程的build.gradle,工程级别的build.gradle定义gradle的基本配置。
buildscript->dependencies 中声明gradle依赖的Android插件以及版本号
Android组件的build.gradle
一般情况下,我们用到的Android组件有两种,Application和library
在上面例子中,
apply plugin: 'com.android.application' 表示gradle要使用Android插件来构建。
依赖support-v4库的例子
依赖library组件的例子
library路径是工程根目录下的lib文件夹
Signing配置
声明signingConfigs.release的签名配置,
在buildTypes.release 中使用签名
Product Flavor
当同一个app组件需要构建两种不同版本时,需要用到Product flavor,
下面的例子,声明了两种product flavor,demo和full,
两种product flavor构建不同的app,包名分别是"com.buildsystemexample.app.demo"和"com.buildsystemexample.app.full"
productFlavors和defaultConfig是相同的类型,也就是可配置的属性相同。在实际应用中,defaultConfig配置flavor相同的属性,
flavor不同的属性在各自flavor中声明。
Build Variant
Product flavor + Build type = BuildVariant
gradle根据用户选择的BuildVariant,进行构建
比如Product flavor 有 flavor1 和 flavor2 两种,
Build type 有debug 和 release 两种,
则 build variant 会有四种, 分别是 flavor1Debug, flavor1Release, flavor2Debug, flavor2Relese
如果工程没有定义product flavor, gradle会使用默认的flavor, build variant就是 build type名字。
源文件目录
src/main 默认的源文件目录
src/<buildType> 构建<buildType>时用到的源文件目录,可选的
src/<productFlavor> 构建<productFlavor>时用到的源文件目录, 可选的
build.gradle与Android Studio的关系
在Android studio 右键选中组件,如下图所示
android studio 展示的组件属性跟build.gradle是对应的,修改了android studio中的配置,会自动更新到build.gradle;反之也一样。
执行构建
Gradle执行构建有两种方法
1. 在Android studio中,选择Gradle选项卡,双击assemble<build_type>,执行构建。
比如本文的例子,在app组件下,选择assembleDebug,构建debug版本的apk
选择assembleRelease,构建release版本的apk
2. 在命令行中执行构建
在terminal中,cd到工程的根目录下
执行./gradlew :app:assembleDebug , 构建app组件的debug版本。
一个工程下可能有多个组件,所以使用:<组件名>来选择构建哪个组件
构建整个工程,执行./gradlew assembleDebug
执行clean
./gradlew clean
查看所有任务
./gradlew tasks
Gradle构建Android工程,我们可以在Android studio中使用,也可以在命令行中使用,也可以集成到持久化集成工具中。
Gradle构建Android工程的配置文件名是build.gradle,存放在工程的根目录下。
一个Android工程(Project)是由一个或多个组件(Module)组成,工程和组件都分别有各自的build.gradle
Android工程的build.gradle
一般情况下,我们不需要修改Android工程的build.gradle,工程级别的build.gradle定义gradle的基本配置。
buildscript->dependencies 中声明gradle依赖的Android插件以及版本号
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.3.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } |
一般情况下,我们用到的Android组件有两种,Application和library
下面是构建Application的build.gradle的例子
apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "21.1.2" defaultConfig { applicationId "com.han.myexampleapp2" minSdkVersion 8 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.0.1' } |
apply plugin: 'com.android.application' 表示gradle要使用Android插件来构建。
android{} 中定义android相关的构建选项 compileSdkVersion 表示要使用的Android sdk的版本 buildToolsVersion 表示编译工具的版本,编译工具使用SDK Manager管理(Android studio->Tools->Android->SDK Manager) defaultConfig 用来配置基本的构建属性和manifest(AndroidManifest.xml)属性。可以配置的属性如下表所示,如果属性在defaultConfig配置,相应的AndroidManifest.xml中的设置项会被覆盖。
applicationId "com.han.myexampleapp2" applicationId属性用来标识Android application的唯一标识。 关于build.gradle中的applicationId与AndroidManifest.xml的packageName的不同,可以参考这篇文章 https://chaosleong.gitbooks.io/gradle-for-android/content/appendix/applicationid_versus_packagename.html
下表是defaultConfig可以配置的属性:
Property Name | Default value in DSL object | Default value |
versionCode | -1 | value from manifest if present |
versionName | null | value from manifest if present |
minSdkVersion | -1 | value from manifest if present |
targetSdkVersion | -1 | value from manifest if present |
applicationId | null | value from manifest if present |
testApplicationId | null | applicationId + “.test” |
testInstrumentationRunner | null | android.test.InstrumentationTestRunner |
signingConfig | null | null |
proguardFile | N/A (set only) | N/A (set only) |
proguardFiles | N/A (set only) | N/A (set only) |
buildTypes配置怎样构建和打包组件,默认情况下,gradle会构建两种类型: release和debug
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
proguardFiles 声明使用的Proguard文件,
getDefaultProguardFile('proguard-android.txt')包含了默认的Proguard配置。
在'proguard-rules.pro'文件中,我们可以添加自定义的proguard配置,
'proguard-rules.pro'文件在组件根目录下。
minifyEnabled 控制gradle在构建时是否进行代码混淆,true为构建时执行代码混淆
下表是buildTypes可以配置的属性
Property name | Default values for debug | Default values for release / other |
debuggable | true | false |
jniDebuggable | false | false |
renderscriptDebuggable | false | false |
renderscriptOptimLevel | 3 | 3 |
applicationIdSuffix | null | null |
versionNameSuffix | null | null |
signingConfig | android.signingConfigs.debug | null |
zipAlignEnabled | false | true |
minifyEnabled | false | false |
proguardFile | N/A (set only) | N/A (set only) |
proguardFiles | N/A (set only) | N/A (set only) |
dependencies元素声明了要构建的组件依赖关系。
compile fileTree(dir: 'libs', include: ['*.jar']) 表示依赖libs目录下的所有.jar文件
compile 'com.android.support:appcompat-v7:23.0.1' 标识依赖版本是23.0.1的android support库
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.0.1' } |
compile 'com.android.support:support-v4:23.0.1' |
library路径是工程根目录下的lib文件夹
compile project(":lib") |
声明signingConfigs.release的签名配置,
在buildTypes.release 中使用签名
android { signingConfigs { release { storeFile file('release.keystore') } } buildTypes { release { ... signingConfig signingConfigs.release } } } |
当同一个app组件需要构建两种不同版本时,需要用到Product flavor,
下面的例子,声明了两种product flavor,demo和full,
两种product flavor构建不同的app,包名分别是"com.buildsystemexample.app.demo"和"com.buildsystemexample.app.full"
android { ... defaultConfig { ... } signingConfigs { ... } buildTypes { ... } productFlavors { demo { applicationId "com.buildsystemexample.app.demo" versionName "1.0-demo" } full { applicationId "com.buildsystemexample.app.full" versionName "1.0-full" } } } |
flavor不同的属性在各自flavor中声明。
Build Variant
Product flavor + Build type = BuildVariant
gradle根据用户选择的BuildVariant,进行构建
比如Product flavor 有 flavor1 和 flavor2 两种,
Build type 有debug 和 release 两种,
则 build variant 会有四种, 分别是 flavor1Debug, flavor1Release, flavor2Debug, flavor2Relese
如果工程没有定义product flavor, gradle会使用默认的flavor, build variant就是 build type名字。
源文件目录
src/main 默认的源文件目录
src/<buildType> 构建<buildType>时用到的源文件目录,可选的
src/<productFlavor> 构建<productFlavor>时用到的源文件目录, 可选的
build.gradle与Android Studio的关系
在Android studio 右键选中组件,如下图所示
android studio 展示的组件属性跟build.gradle是对应的,修改了android studio中的配置,会自动更新到build.gradle;反之也一样。
执行构建
Gradle执行构建有两种方法
1. 在Android studio中,选择Gradle选项卡,双击assemble<build_type>,执行构建。
比如本文的例子,在app组件下,选择assembleDebug,构建debug版本的apk
选择assembleRelease,构建release版本的apk
2. 在命令行中执行构建
在terminal中,cd到工程的根目录下
执行./gradlew :app:assembleDebug , 构建app组件的debug版本。
一个工程下可能有多个组件,所以使用:<组件名>来选择构建哪个组件
构建整个工程,执行./gradlew assembleDebug
执行clean
./gradlew clean
查看所有任务
./gradlew tasks
相关文章推荐
- Android 经验
- android学习历程,自定义listview并从服务器端获取数据填充进listview
- Android的intent之间复杂参数的传递
- Android常用开源组件
- android EditText问题多行文本输入
- android framework 重启LOG分析方法
- android开关屏幕
- Android 开源项目分类汇总
- android中相机的简单调用
- Android中一个textviewz中的字符串俩个颜色显示
- Android layout属性大全
- Android 蓝牙开发小结与探讨
- android学习----overridePendingTransition
- Android-开发遇到的问题汇总
- Android CheckBox自定义
- Android中onSaveInstanceState和onRestoreInstanceState的调用
- Android开发之SurfaceView详解
- android系统平台显示驱动开发简要:LCD驱动调试篇『四』
- 0918Android基础自定义属性
- android Notification 通知封装