SlideShare uma empresa Scribd logo
1 de 26
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基本项目结构
使用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项目
Gradle基本项目结构
• settings.gradle: 一个Gradle工程
的结构声明,与入口
• build.gradle: 每一个build.gradle
文件都负责其所在目录的模块
(Module)
Gradle基本项目结构
• 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 // 根模块
Gradle基本项目结构
• rootProject: 根模块
name默认是settings.gradle同
目录的目录名
与settings.gradle同目录的
build.gradle负责rootProject的
gradle配置
• build/: 每个模块下的build目录,
都是这个模块的gradle编译输
入与输出以及临时文件所在目
录。在.gitignore中,它是被
ignore的
Gradle基本项目结构
• Project(‘:app’): app模块
你在 settings.gradle 中 include
过的 :app,如果未做配置,路
径默认是 app/ 同名子目录
同样的,由该目录下的
build.gradle负责Project(‘:app’)
的gradle配置
• app/build/: 同样的, 每个模块
下的 build/ 目录, 都是这个模
块的gradle编译输入与输出以
及临时文件所在目录。
Gradle基本项目结构
• Gradle Properties来自
gradle.properties
local.properties
命令行传参
• gradle.properties: 所有协作开发者以
及编译服务器都可以使用, 例如Jvm
参数配置, gradle编译配置, 部分插件
的功能开关与配置等
• local.properties: 只有本地使用,
在.gitignore中是被屏蔽掉的, 例如
NDK, SDK的本机路径, 部分插件需要
的用户名, 密码, token等敏感数据
• 命令行: ./gradlew –Pkey=value
Gradle基本项目结构
• 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创新产品部

Mais conteúdo relacionado

Mais procurados

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

Mais procurados (20)

Gradle 和 Android Studio --- Jason Ko
Gradle 和 Android Studio --- Jason KoGradle 和 Android Studio --- Jason Ko
Gradle 和 Android Studio --- Jason Ko
 
20170905 dev ops in hiiir
20170905 dev ops in hiiir20170905 dev ops in hiiir
20170905 dev ops in hiiir
 
Swagger
SwaggerSwagger
Swagger
 
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
 
Flutter 踩雷心得
Flutter 踩雷心得Flutter 踩雷心得
Flutter 踩雷心得
 
ModernWeb 2017 angular component
ModernWeb 2017 angular componentModernWeb 2017 angular component
ModernWeb 2017 angular component
 
Mvp in practice
Mvp in practiceMvp in practice
Mvp in practice
 
Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027
 
向jquery学习
向jquery学习向jquery学习
向jquery学习
 
用 Go 語言 打造微服務架構
用 Go 語言打造微服務架構用 Go 語言打造微服務架構
用 Go 語言 打造微服務架構
 
20170217 julia小程式到專案發布之旅
20170217 julia小程式到專案發布之旅20170217 julia小程式到專案發布之旅
20170217 julia小程式到專案發布之旅
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作
 
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
 
Github Actions
Github ActionsGithub Actions
Github Actions
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
 
Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介
 
CocoaPods private repo
CocoaPods private repoCocoaPods private repo
CocoaPods private repo
 
CICD Workshop 20180922
CICD Workshop 20180922CICD Workshop 20180922
CICD Workshop 20180922
 
Dart null safety
Dart null safetyDart null safety
Dart null safety
 
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
 

Destaque

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

Destaque (20)

不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
 
Reactive X 响应式编程
Reactive X 响应式编程Reactive X 响应式编程
Reactive X 响应式编程
 
Android layout 工程師在想什麼?給視覺設計師
Android layout   工程師在想什麼?給視覺設計師Android layout   工程師在想什麼?給視覺設計師
Android layout 工程師在想什麼?給視覺設計師
 
Android進階UI控制元件
Android進階UI控制元件Android進階UI控制元件
Android進階UI控制元件
 
Gradle,the new build system for android
Gradle,the new build system for androidGradle,the new build system for android
Gradle,the new build system for android
 
大鱼架构演进
大鱼架构演进大鱼架构演进
大鱼架构演进
 
Android 介面設計
Android 介面設計Android 介面設計
Android 介面設計
 
Line Height (中文版)
Line Height (中文版)Line Height (中文版)
Line Height (中文版)
 
Android動態ui介面設計
Android動態ui介面設計Android動態ui介面設計
Android動態ui介面設計
 
大型App面臨的挑戰
大型App面臨的挑戰大型App面臨的挑戰
大型App面臨的挑戰
 
如何逐步提升CSS的可利用性、模組化
如何逐步提升CSS的可利用性、模組化如何逐步提升CSS的可利用性、模組化
如何逐步提升CSS的可利用性、模組化
 
Rxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJavaRxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJava
 
持續整合與單元測試
持續整合與單元測試持續整合與單元測試
持續整合與單元測試
 
Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)
 
App 產品製作心得 - 我的 App 創業之路
App 產品製作心得 - 我的 App 創業之路App 產品製作心得 - 我的 App 創業之路
App 產品製作心得 - 我的 App 創業之路
 
IBM云咨询服务介绍 温海峰
IBM云咨询服务介绍   温海峰IBM云咨询服务介绍   温海峰
IBM云咨询服务介绍 温海峰
 
Gradleでビルドするandroid NDKアプリ
Gradleでビルドするandroid NDKアプリGradleでビルドするandroid NDKアプリ
Gradleでビルドするandroid NDKアプリ
 
窺探職場上所需之資安專業技術與能力 Tdohconf
窺探職場上所需之資安專業技術與能力 Tdohconf窺探職場上所需之資安專業技術與能力 Tdohconf
窺探職場上所需之資安專業技術與能力 Tdohconf
 
Patterns of Expertise in Cloud 云计算中的专家模式 QCon 2014 北京
Patterns of Expertise in Cloud 云计算中的专家模式 QCon 2014 北京Patterns of Expertise in Cloud 云计算中的专家模式 QCon 2014 北京
Patterns of Expertise in Cloud 云计算中的专家模式 QCon 2014 北京
 
淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)
 

Semelhante a Android gradle 从入门到gg 0

2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设Tianwei Liu
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011Ching Yi Chan
 
Android開發app
Android開發appAndroid開發app
Android開發app騰昱 魏
 
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 GradleJustin Lin
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂imShining @DevCamp
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境Will Huang
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映heyfluke
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映heyfluke
 
Android应用开发 - 沈大海
Android应用开发 - 沈大海Android应用开发 - 沈大海
Android应用开发 - 沈大海Shaoning Pan
 
Android开发培训 单元1
Android开发培训 单元1Android开发培训 单元1
Android开发培训 单元1longqi293
 
Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Bill Lin
 
rebar erlang 2
rebar erlang 2rebar erlang 2
rebar erlang 2致远 郑
 
HDInsight for Microsoft Users
HDInsight for Microsoft UsersHDInsight for Microsoft Users
HDInsight for Microsoft UsersKuo-Chun Su
 
4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdfssuserd6c7621
 
Dev c++整合開發工具教學
Dev c++整合開發工具教學Dev c++整合開發工具教學
Dev c++整合開發工具教學Lin Steven
 
Android -汇博
Android -汇博Android -汇博
Android -汇博dlqingxi
 
I os与android多平台开发心得
I os与android多平台开发心得I os与android多平台开发心得
I os与android多平台开发心得drewz lin
 

Semelhante a Android gradle 从入门到gg 0 (20)

2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011
 
Android JNI
Android JNIAndroid JNI
Android JNI
 
Android開發app
Android開發appAndroid開發app
Android開發app
 
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
 
Flutter實作概述 | GDSC NYCU
Flutter實作概述 | GDSC NYCUFlutter實作概述 | GDSC NYCU
Flutter實作概述 | GDSC NYCU
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
 
Android应用开发 - 沈大海
Android应用开发 - 沈大海Android应用开发 - 沈大海
Android应用开发 - 沈大海
 
Android开发培训 单元1
Android开发培训 单元1Android开发培训 单元1
Android开发培训 单元1
 
Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析
 
rebar erlang 2
rebar erlang 2rebar erlang 2
rebar erlang 2
 
HDInsight for Microsoft Users
HDInsight for Microsoft UsersHDInsight for Microsoft Users
HDInsight for Microsoft Users
 
Docker基礎
Docker基礎Docker基礎
Docker基礎
 
4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf
 
Dev c++整合開發工具教學
Dev c++整合開發工具教學Dev c++整合開發工具教學
Dev c++整合開發工具教學
 
Android -汇博
Android -汇博Android -汇博
Android -汇博
 
I os与android多平台开发心得
I os与android多平台开发心得I os与android多平台开发心得
I os与android多平台开发心得
 

Android gradle 从入门到gg 0