狠狠撸

狠狠撸Share a Scribd company logo
2016年4月15日
刘俊
IPD创新产物部
Android Gradle
从入门到GG
第0课: Intro
? 简要介绍Gradle在Android开发中必要的基
本知识, 为之后的课程做准备
? Gradle驱动的Android项目基本的工程结构
? Gradle简要介绍
? Android项目基本介绍
第0课: Intro
? Maven, Ivy, Groovy DSL
? 增量编译
? 完善的API
? 依赖管理
? 与大量其他工具集成
? 极度方便(相较于ant, maven等)
为什么使用Gradle
为什么使用Gradle
不好意思,忘记刚才说的废话
开发 Android 应用或游戏,
你不用 Gradle 编译试试?
骋谤补诲濒别基本项目结构
使用Gradle Wrapper
? Gradle Wrapper由
gradle/
gradlew
gradlew.bat
三者组成
? 由于项目协作, 以及跨平
台编译, 在任何时候, 你都
应该使用 Gradle Wrapper
而非本机安装Gradle
使用Gradle Wrapper
你可以通过修改
distribuitionUrl 的 版
本号来更改 gradle
wrapper 的版本
使用Gradle Wrapper
? 使用Android Studio新建一
个工程的时候,会自动生
成Gradle Wrapper
? 你甚至可以将Gradle
Wrapper拷贝出去,自己
手动创建Gradle项目
骋谤补诲濒别基本项目结构
? settings.gradle: 一个Gradle工程
的结构声明,与入口
? build.gradle: 每一个build.gradle
文件都负责其所在目录的模块
(Module)
骋谤补诲濒别基本项目结构
? settings.gradle
include ‘PROJECT_NAME’ 声明
包含的模块
rootProject是默认的根模块, 即
工程的根目录就是一个根模块
settings.gradle
// 模块默认取路径 settingsDir/path/to/your/module
include ':path:to:your:module '
// 修改模块的名字
project(':path:to:your:module').name = 'YourCustomName '
// 修改模块的路径
project(':path:to:your:module').projectDir =
new File(settingsDir, 'new/path/to/your/module/dir')
rootDir // 根目录
settingsDir // settings.gradle 文件所在目录
rootProject // 根模块
骋谤补诲濒别基本项目结构
? rootProject: 根模块
name默认是settings.gradle同
目录的目录名
与settings.gradle同目录的
build.gradle负责rootProject的
gradle配置
? build/: 每个模块下的build目录,
都是这个模块的gradle编译输
入与输出以及临时文件所在目
录。在.gitignore中,它是被
ignore的
骋谤补诲濒别基本项目结构
? Project(‘:app’): app模块
你在 settings.gradle 中 include
过的 :app,如果未做配置,路
径默认是 app/ 同名子目录
同样的,由该目录下的
build.gradle负责Project(‘:app’)
的gradle配置
? app/build/: 同样的, 每个模块
下的 build/ 目录, 都是这个模
块的gradle编译输入与输出以
及临时文件所在目录。
骋谤补诲濒别基本项目结构
? Gradle Properties来自
gradle.properties
local.properties
命令行传参
? gradle.properties: 所有协作开发者以
及编译服务器都可以使用, 例如Jvm
参数配置, gradle编译配置, 部分插件
的功能开关与配置等
? local.properties: 只有本地使用,
在.gitignore中是被屏蔽掉的, 例如
NDK, SDK的本机路径, 部分插件需要
的用户名, 密码, token等敏感数据
? 命令行: ./gradlew –Pkey=value
骋谤补诲濒别基本项目结构
? build/: 编译目录, 每个模块都有
? generated/: 编译模块, 生成的额外的辅助
代码, 资源, 例如BuildConfig.java等
? intermediates/: 增量编译数据, 包含编译过
程中产生的所有输入/输出数据, 例如
javaCompile, dex, ndkCompile,
ResourceMerger, ManifestMerger, 依赖处
理, instant run, transform api等等都在这里
? outpus/: 最终输出, 例如apk, aar, lint检查
结果, mappings retrace文件等
? tmp/: 就像文件名一样
Android APP模块默认结构
? libs/: 本地jar包
? src/androidTest/: Android单元测试
? src/test/: Java单元测试
? src/main/: android.sourceSets.main
? src/main/java/: Android Java代码
? src/main/res/: Android res资源
? src/main/jniLibs/: so库文件
? src/main/jni/: Jni C/C++代码
? src/main/assets/: Android assets资源
? src/main/aidl/: Android aidl代码
? src/main/rs/: Android RenderScript脚本
? src/main/kotlin/: 你还可以使用其他编程语言
自定义模块结构
android {
sourceSets {
main {
manifest.srcFile "AndroidManifest.xml"
java.srcDirs = ["src"]
resources.srcDirs = ["src"]
aidl.srcDirs = ["src"]
renderscript.srcDirs = ["src"]
res.srcDirs = ["res"]
assets.srcDirs = ["assets"]
jniLibs.srcDirs =["libs"]
jni.srcDirs=["jni"]
}
}
}
休息时间
课后任务: BasicProject 中有 lib 模块, 为Eclipse
工程结构, 请将此模块改为Android Studio默认
工程结构.
http://git.ipd.meizu.com/AnR/android-gradle-samples
记得使用自己的邮箱名作为分支名PR给我
[Github用户移步] https://github.com/Jween/android-gradle-samples
Gradle加载顺序
settings.gradle
rootProject
build.gradle
Sub Projects
build.gradle
根模块 子模块
buildscript{classpath}
buildSrc
Gradle运行时依赖
基于classpath的运行
时环境,
加载gradle脚本
Maven,
Ivy
apply 各
种插件
Gradle Task
? 在Android Studio的Gradle Panel中, 你可以
看到如左侧的任务预览
? 或者使用命令行 ./gradlew –p app/ tasks
任务来查看模块的任务
Gradle Task
? LifeCycle: 初始化, 配置, Actions
? Properties: group, description, …
? Actions:
<< { action content }
doFirst { action content }
doLast { action content }
? Dependencies: 任务之间的依赖关系
dependsOn
shouldRunAfter
mustRunAfter
finalizeBy
Gradle Task - LifeCycle
初始化 配置 执行
Gradle每一次编
译, 都为所有模
块初始化好所
有任务
先执行的是任
务中所有非
action的脚本
最后才根据
action队列的顺
序依次执行
action
Gradle Task - Properties
task clean(type: Delete) {
group 'build'
description 'Clean build/ folder in root dir'
delete rootProject.buildDir
}
? group: 任务的分组
? description: 任务的说明
? type: TaskType 决定该任务是什么类型的, 类似于
Java类与实例的关系, 但不一样
Gradle Task - Actions
? 当gradle对模块初始化完毕之后
configuration部分的代码已经配置完毕
? 假如运行的是clean任务, 或者有任务依赖了clean任务,
那么 doLast {} 部分的action脚本会被执行
task clean(type: Delete) {
// task configuration
group 'build'
description 'Clean build/ folder in root dir'
delete rootProject.buildDir
// task action
doLast {
println "Directory `$rootDir${File.separator}build` has been removed"
}
}
Gradle Task - Dependencies
? 每当 assemble 任务被执行之前, clean任务先执行
? 更多的 dependencies 依赖关系会在后续课程中详讲
task clean(type: Delete) {
// task configuration
group 'build'
description 'Clean build/ folder in root dir'
delete rootProject.buildDir
// task action
doLast {
println "Directory `$rootDir${File.separator}build`" + " has been removed"
}
}
task("assemble").dependsOn 'clean'
Demo
Demo实战…
2016年4月15日
刘俊
这将是一个系列课程,
每周一节课
IPD创新产物部
Ad

Recommended

Android gradle 从入门到gg 2
Android gradle 从入门到gg 2
Jun Liu
?
簡單上手Android studio
簡單上手Android studio
琨堯 林
?
Android gradle 从入门到gg 1
Android gradle 从入门到gg 1
Jun Liu
?
Android gradle 从入门到gg 3
Android gradle 从入门到gg 3
Jun Liu
?
[DEPRECATED]Gradle flavor
[DEPRECATED]Gradle flavor
Jun Liu
?
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)
Will Huang
?
Clojure cnclojure-meetup
Clojure cnclojure-meetup
sunng87
?
如何與 Git 優雅地在樹上唱歌
如何與 Git 優雅地在樹上唱歌
Mu Chun Wang
?
Gradle 和 Android Studio --- Jason Ko
Gradle 和 Android Studio --- Jason Ko
力中 柯
?
20170905 dev ops in hiiir
20170905 dev ops in hiiir
Isaac Tseng
?
Swagger
Swagger
Yan-ren Tsai
?
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
Will Huang
?
Flutter 踩雷心得
Flutter 踩雷心得
Weizhong Yang
?
ModernWeb 2017 angular component
ModernWeb 2017 angular component
Chieh Kai Yang
?
Mvp in practice
Mvp in practice
彥彬 洪
?
Using google appengine_1027
Using google appengine_1027
Wei Sun
?
向箩辩耻别谤测学习
向箩辩耻别谤测学习
jay li
?
用 Go 語言 打造微服務架構
用 Go 語言 打造微服務架構
Bo-Yi Wu
?
20170217 julia小程式到專案發布之旅
20170217 julia小程式到專案發布之旅
岳華 杜
?
Git flow 與團隊合作
Git flow 與團隊合作
Bo-Yi Wu
?
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
Weizhong Yang
?
Github Actions
Github Actions
Weizhong Yang
?
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
Bo-Yi Wu
?
Go 語言基礎簡介
Go 語言基礎簡介
Bo-Yi Wu
?
CocoaPods private repo
CocoaPods private repo
Weizhong Yang
?
CICD Workshop 20180922
CICD Workshop 20180922
Earou Huang
?
Dart null safety
Dart null safety
Weizhong Yang
?
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
Bo-Yi Wu
?
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
信宏 陳
?
Reactive X 响应式编程
Reactive X 响应式编程
Jun Liu
?

More Related Content

What's hot (20)

Gradle 和 Android Studio --- Jason Ko
Gradle 和 Android Studio --- Jason Ko
力中 柯
?
20170905 dev ops in hiiir
20170905 dev ops in hiiir
Isaac Tseng
?
Swagger
Swagger
Yan-ren Tsai
?
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
Will Huang
?
Flutter 踩雷心得
Flutter 踩雷心得
Weizhong Yang
?
ModernWeb 2017 angular component
ModernWeb 2017 angular component
Chieh Kai Yang
?
Mvp in practice
Mvp in practice
彥彬 洪
?
Using google appengine_1027
Using google appengine_1027
Wei Sun
?
向箩辩耻别谤测学习
向箩辩耻别谤测学习
jay li
?
用 Go 語言 打造微服務架構
用 Go 語言 打造微服務架構
Bo-Yi Wu
?
20170217 julia小程式到專案發布之旅
20170217 julia小程式到專案發布之旅
岳華 杜
?
Git flow 與團隊合作
Git flow 與團隊合作
Bo-Yi Wu
?
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
Weizhong Yang
?
Github Actions
Github Actions
Weizhong Yang
?
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
Bo-Yi Wu
?
Go 語言基礎簡介
Go 語言基礎簡介
Bo-Yi Wu
?
CocoaPods private repo
CocoaPods private repo
Weizhong Yang
?
CICD Workshop 20180922
CICD Workshop 20180922
Earou Huang
?
Dart null safety
Dart null safety
Weizhong Yang
?
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
Bo-Yi Wu
?
Gradle 和 Android Studio --- Jason Ko
Gradle 和 Android Studio --- Jason Ko
力中 柯
?
20170905 dev ops in hiiir
20170905 dev ops in hiiir
Isaac Tseng
?
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
Will Huang
?
ModernWeb 2017 angular component
ModernWeb 2017 angular component
Chieh Kai Yang
?
Using google appengine_1027
Using google appengine_1027
Wei Sun
?
向箩辩耻别谤测学习
向箩辩耻别谤测学习
jay li
?
用 Go 語言 打造微服務架構
用 Go 語言 打造微服務架構
Bo-Yi Wu
?
20170217 julia小程式到專案發布之旅
20170217 julia小程式到專案發布之旅
岳華 杜
?
Git flow 與團隊合作
Git flow 與團隊合作
Bo-Yi Wu
?
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
Weizhong Yang
?
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
Bo-Yi Wu
?
Go 語言基礎簡介
Go 語言基礎簡介
Bo-Yi Wu
?
CICD Workshop 20180922
CICD Workshop 20180922
Earou Huang
?
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
Bo-Yi Wu
?

Viewers also liked (20)

不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
信宏 陳
?
Reactive X 响应式编程
Reactive X 响应式编程
Jun Liu
?
Android layout 工程師在想什麼?給視覺設計師
Android layout 工程師在想什麼?給視覺設計師
Kane Shih
?
础苍诲谤辞颈诲进阶鲍滨控制元件
础苍诲谤辞颈诲进阶鲍滨控制元件
艾鍗科技
?
Gradle,the new build system for android
Gradle,the new build system for android
zhang ghui
?
大鱼架构演进
大鱼架构演进
Jun Liu
?
Android 介面設計
Android 介面設計
PingLun Liao
?
Line Height (中文版)
Line Height (中文版)
bigCat Mao
?
础苍诲谤辞颈诲动态耻颈介面设计
础苍诲谤辞颈诲动态耻颈介面设计
艾鍗科技
?
大型础辫辫面临的挑战
大型础辫辫面临的挑战
Chih-Chung Lee
?
如何逐步提升颁厂厂的可利用性、模组化
如何逐步提升颁厂厂的可利用性、模组化
洧杰 廖
?
Rxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJava
Kros Huang
?
持续整合与单元测试
持续整合与单元测试
昱劭 劉
?
Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)
振揚 陳
?
App 產品製作心得 - 我的 App 創業之路
App 產品製作心得 - 我的 App 創業之路
Nokimi Lai
?
IBM云咨询服务介绍 温海峰
IBM云咨询服务介绍 温海峰
Hardway Hou
?
Gradleでビルドするandroid NDKアプリ
Gradleでビルドするandroid NDKアプリ
Hideyuki Kikuma
?
窺探職場上所需之資安專業技術與能力 Tdohconf
窺探職場上所需之資安專業技術與能力 Tdohconf
jack51706
?
Patterns of Expertise in Cloud 云计算中的专家模式 QCon 2014 北京
Patterns of Expertise in Cloud 云计算中的专家模式 QCon 2014 北京
Li Yi
?
淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)
Kyle Lin
?
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
信宏 陳
?
Reactive X 响应式编程
Reactive X 响应式编程
Jun Liu
?
Android layout 工程師在想什麼?給視覺設計師
Android layout 工程師在想什麼?給視覺設計師
Kane Shih
?
础苍诲谤辞颈诲进阶鲍滨控制元件
础苍诲谤辞颈诲进阶鲍滨控制元件
艾鍗科技
?
Gradle,the new build system for android
Gradle,the new build system for android
zhang ghui
?
大鱼架构演进
大鱼架构演进
Jun Liu
?
Line Height (中文版)
Line Height (中文版)
bigCat Mao
?
础苍诲谤辞颈诲动态耻颈介面设计
础苍诲谤辞颈诲动态耻颈介面设计
艾鍗科技
?
大型础辫辫面临的挑战
大型础辫辫面临的挑战
Chih-Chung Lee
?
如何逐步提升颁厂厂的可利用性、模组化
如何逐步提升颁厂厂的可利用性、模组化
洧杰 廖
?
Rxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJava
Kros Huang
?
持续整合与单元测试
持续整合与单元测试
昱劭 劉
?
Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)
振揚 陳
?
App 產品製作心得 - 我的 App 創業之路
App 產品製作心得 - 我的 App 創業之路
Nokimi Lai
?
IBM云咨询服务介绍 温海峰
IBM云咨询服务介绍 温海峰
Hardway Hou
?
Gradleでビルドするandroid NDKアプリ
Gradleでビルドするandroid NDKアプリ
Hideyuki Kikuma
?
窺探職場上所需之資安專業技術與能力 Tdohconf
窺探職場上所需之資安專業技術與能力 Tdohconf
jack51706
?
Patterns of Expertise in Cloud 云计算中的专家模式 QCon 2014 北京
Patterns of Expertise in Cloud 云计算中的专家模式 QCon 2014 北京
Li Yi
?
淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)
Kyle Lin
?
Ad

Android gradle 从入门到gg 0