【Android 项目构建】深入理解Gradle
2017-07-10 16:29
453 查看
一、Gradle基础 1、Gradle是什么? Gradle是以groovy为编程语言,面向java应用的自动化构建工具。
2、Gradle文件的三种类型:(1)类型:settings.gradle、根目录下build.gradle、module目录下build.gradle。(2)执行顺序:settings.gradle在初始化阶段执行,根目录下build.gradle和module目录下build.gradle在配置阶段进行配置,其中,根目录下build.gradle具有全局性。
3、build.gradle构建文件中五大基本元素:build.gradle文件中基本的元素有:defaultConfig(默认配置)、buildTypes(构建类型)、dependencies(依赖)、productFlavors(渠道包配置)、signingConfigs(签名配置)。
二、依赖管理 “依赖管理”主要包含两个方面:“仓库依赖”和“项目依赖”。“仓库依赖”指的是对仓库的定义,在定义好仓库之后,就可以在dependencies里通过类似如下代码的形式添加依赖了。
1、依赖仓库 (1)预定义依赖仓库 (2)远程仓库 (3)本地仓库
三、Gradle任务1、Groovy核心语法:(1)build.gradle与project对象的关系:每一个build.gradle都对应一个project对象。比如,我们apply "com.android.application"其实调用的是project.apply “com.android.application”。
(2)属性为project对象定义属性的方法是
(3)变量
(4)方法: (a)方法定义
(b)方法调用
2、创建任务(1)追加任务
(2)创建任务
(3)依赖任务
3、执行任务(1)task.execute()即可执行(2)命令行执行 gradlew task
4、beforeEvaluate和afterEvaluate分别在配置前和配置后执行
四、Gradle任务在实际项目中应用1、在实际场景下经常有这样的需求:gradle中某个配置只有在debug模式下才能生效,那么这该如何实现呢?最初想到的方案是,通过ext定义一个属性,在buildTypes在release里设置为true,在debug里设置为false,然后根据这个属性的值来判断是否引入。然而,gradle中代码是从上向下执行的,所以,这个变量就永远被置为false。最终想到如下方案:
2、每定义一个Activity就要在manifest里注册一个Activity,这样是不是很烦?可以在gradle文件中实现。具体实现,等待我后续的blog吧~
五、最后如果疑问,欢迎email联系我 zhshan@ctrip.com
2、Gradle文件的三种类型:(1)类型:settings.gradle、根目录下build.gradle、module目录下build.gradle。(2)执行顺序:settings.gradle在初始化阶段执行,根目录下build.gradle和module目录下build.gradle在配置阶段进行配置,其中,根目录下build.gradle具有全局性。
3、build.gradle构建文件中五大基本元素:build.gradle文件中基本的元素有:defaultConfig(默认配置)、buildTypes(构建类型)、dependencies(依赖)、productFlavors(渠道包配置)、signingConfigs(签名配置)。
apply plugin: 'com.android.application' android { compileSdkVersion 26 buildToolsVersion "26.0.0" defaultConfig { applicationId "com.ctrip.demo" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" } buildTypes { release { buildConfigField "String", "API_URL", "\"http://example.com/api\"" buildConfigField "boolean", "LOG_OUTPUT", "false" minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } staging { applicationIdSuffix ".colinambitious" versionNameSuffix "-staging" } debug { buildConfigField "String", "API_URL", "\"http://test.example.com/api\"" buildConfigField "boolean", "LOG_OUTPUT", "true" } } productFlavors { red { applicationId 'com.colinambitious.red' versionCode 3 } blue { applicationId 'com.colinambitious.blue' versionCode 4 } free { applicationId 'com.colinambitious.free' versionCode 5 } paid { applicationId 'com.colinambitious.paid' versionCode 6 } } signingConfigs { staging.initWith(signingConfigs.debug) release { storeFile file("release.keystore") storePassword "secretpassword" keyPassword "secretpassword" } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:26.0.0-alpha1' compile project(path: ':PublicProduct') // compile project(path: ':mylibrar') compile project(path: ':Tour') }
二、依赖管理 “依赖管理”主要包含两个方面:“仓库依赖”和“项目依赖”。“仓库依赖”指的是对仓库的定义,在定义好仓库之后,就可以在dependencies里通过类似如下代码的形式添加依赖了。
compile 'com.android.support:appcompat-v7:26.0.0-alpha1'“项目依赖”有两种方式:module依赖 和 aar包依赖。
1、依赖仓库 (1)预定义依赖仓库 (2)远程仓库 (3)本地仓库
repositories { jcenter() maven { url "http://maven.dev.sh.ctripcorp.com:8081/nexus/content/groups/public" } flatDir { dirs '../CTRepo' } }jcenter()就是第一种仓库依赖,即预定义依赖仓库。一般我们在开发过程中想要把自己项目的jar包开源出来,就可以放到jcenter()上。如上代码的第二种方式就是远程仓库的定义,可以看到代码里设置了自定义的maven仓库。flatDir就是用来定义本地仓库的方式。 2、项目依赖 (1)module依赖 首先在settings.gradle中include进需要依赖的module,然后通过如下代码在需要依赖的module添加如下依赖
dependencies { compile project(path: ':Business') }(2).aar文件依赖 首先通过flatDir定义本地仓库,然后在需要依赖的module下加入如下依赖(其中,name为aar的名字,ext为扩展名)
dependencies { compile(name:'myaar-release', ext:'aar') }
三、Gradle任务1、Groovy核心语法:(1)build.gradle与project对象的关系:每一个build.gradle都对应一个project对象。比如,我们apply "com.android.application"其实调用的是project.apply “com.android.application”。
(2)属性为project对象定义属性的方法是
ext { app_name = "AndroidDemo_root" }
(3)变量
def localProperties = rootProject.file('local.properties')
(4)方法: (a)方法定义
int getApplicationID() {10752}
(b)方法调用
def test = getApplicationID()
2、创建任务(1)追加任务
task hello << { println "hello, world;root_project_name is ' + ${app_name}"; }
(2)创建任务
tasks.create(name: 'hello') << { println 'Hello, world!' }
(3)依赖任务
hello.dependsOn test
3、执行任务(1)task.execute()即可执行(2)命令行执行 gradlew task
4、beforeEvaluate和afterEvaluate分别在配置前和配置后执行
四、Gradle任务在实际项目中应用1、在实际场景下经常有这样的需求:gradle中某个配置只有在debug模式下才能生效,那么这该如何实现呢?最初想到的方案是,通过ext定义一个属性,在buildTypes在release里设置为true,在debug里设置为false,然后根据这个属性的值来判断是否引入。然而,gradle中代码是从上向下执行的,所以,这个变量就永远被置为false。最终想到如下方案:
List<TaskExecutionRequest> taskRequests = gradle.startParameter.getTaskRequests(); if (taskRequests.size() > 0) { String args = taskRequests.get(0).toString(); if (args.toLowerCase().contains("assembledebug")) { println "test output test outpu test outpu " println "test output test outpu test outpu " println "test output test outpu test outpu " } }
2、每定义一个Activity就要在manifest里注册一个Activity,这样是不是很烦?可以在gradle文件中实现。具体实现,等待我后续的blog吧~
五、最后如果疑问,欢迎email联系我 zhshan@ctrip.com
相关文章推荐
- 深入理解Android Studio构建文件build.gradle配置
- Android开发之深入理解Android Studio构建文件build.gradle配置
- Android开发之深入理解Android Studio构建文件build.gradle配置
- Android开发之深入理解Android Studio构建文件build.gradle配置
- Android开发之深入理解Android Studio构建文件build.gradle配置
- Android开发之深入理解Android Studio构建文件build.gradle配置
- Android开发之深入理解Android Studio构建文件build.gradle配置
- 使用Gradle构建Android项目
- 深入浅出Android Gradle构建系统(二:项目结构)
- Android项目中如何用好构建神器Gradle?
- Gradle构建Android项目
- Android项目中如何用好构建神器Gradle?(转)
- eclipse中如何用gradle构建android项目
- Android项目中如何用好构建神器Gradle?
- Android项目中如何用好构建神器Gradle?
- Android项目中如何用好构建神器Gradle
- 【Android Studio探索之路系列】之十:Gradle项目构建系统(四):Android Studio项目多渠道打包
- 使用Gradle构建Android项目
- Android项目中如何用好构建神器Gradle?
- eclipse中如何用gradle构建android项目