SlideShare ist ein Scribd-Unternehmen logo
1 von 9
2016年5月6日
刘俊
IPD创新产品部
Android Gradle
从入门到GG
第2课:
Hallelujah
• 继续介绍Android Gradle 插件的基本DSL使
用
• 真实 Android 项目中使用 Gradle
第2课: Hallelujah
android { } 回顾
• defaultConfig { }: 默认配置, 所有 flavor 都会继承
• sourceSets { }: 对代码/资源的配置, android 重新对 gradle sourceSets 进行
了针对 Android 的实现, 叫做 AndroidSourceSet
• productFlavors { }: 模块所有 flavor, 不同的 flavor, 可以打包出不同的 apk
• buildTypes { }: 模块所有 build 类型, 不同的类型, 可以打包出不同的 apk
• signingConfig { }: App 模块打包 apk 的签名配置
• splits { }: Apk 分割, 全资源apk, 根据分辨率与abi分割成若干个小apk
• *Options { }: dexOptions { }, packagingOptions { }, aaptOptions { },
lintOptions { }, compileOptions { }, adbOptions { }, testOptions { }
• 你可以在 http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.BaseExtension.html 这里查
看详细的 DSL, 本节课只讲常用到的 android DSL, 标红的重点讲述
android.signingConfigs { }
signingConfigs 配置 keystore 等签名, 用于 apk 签名, 一般而言, 密
码等敏感信息, 应该存储在 local.properties 里面, 或者CI服务器通
过 ./gradlew –PkeyPassword=android –PstorePassword=android 命
令行传参, 传递给 gradle脚本, 此处仅示例就随意咯
signingConfigs {
eng {
keyAlias 'androiddebugkey'
keyPassword ‘android'
storeFile file('./eng.keystore')
storePassword ‘android'
}
}
buildTypes {
debug {
signingConfig signingConfigs.eng
}
}
signingConfigs {
jskConfig {
keyAlias ‘jskKey'
keyPassword ‘jskkey'
storeFile file('./test.jks')
storePassword ‘jkskey_password'
}
}
android.splits { }
Apk分割, 可以对 分辨率 资源, abi 平台 这两个维度, 分割出多个
apk出来, 常用于精简apk大小, 最小化打包等
splits {
density {
enable true // 默认对所有分辨率都分割 (include 列表包含所有 abi)
exclude "ldpi", "tvdpi", "xxxhdpi" // 移除 ldpi, tvdpi, xxxhdpi 分辨率
// 向 AndroidManifest中注入兼容屏幕结点 <compatible-screens><screen ...>
compatibleScreens 'small', 'normal', 'large', 'xlarge'
}
abi {
enable true // 默认对所有 abi 分割 (include 列表包含所有 abi)
reset() // 将 include 列表置空
include 'x86', 'armeabi-v7a', 'mips'
universalApk true // 额外打出一个包含所有 abi 的全包
}
}
android.splits { }
此时, 你可以直接认为多了两个不能使用的 flavor 维度:
density 和 abi
density: hdpi, mdpi, xhdpi, xxhdpi
abi: x86, armeabi-v7a, mips
splits {
density {
enable true // 默认对所有分辨率都分割 (include 列表包含所有 abi)
exclude "ldpi", "tvdpi", "xxxhdpi" // 移除 ldpi, tvdpi, xxxhdpi 分辨率
// 向 AndroidManifest中注入兼容屏幕结点 <compatible-screens><screen ...>
compatibleScreens 'small', 'normal', 'large', 'xlarge'
}
abi {
enable true // 默认对所有 abi 分割 (include 列表包含所有 abi)
reset() // 将 include 列表置空
include 'x86', 'armeabi-v7a', 'mips'
universalApk true // 额外打出一个包含所有 abi 的全包
}
}
android.splits { }
density: hdpi, mdpi, xhdpi, xxhdpi
abi: x86, armeabi-v7a, mips
同样的, gradle任务也会多出很多, 比如:
assembleXhdpiArmeabi-v7aDebug
assembleMdpiX86Release
assembleUniversalRelease // 包含所有分辨率与 abi so文件的包
而使用最新的编译链工具的时候, splits 是与 resConfig 冲突的
还记得我们上节课讲的 resConfigs ‘xxhdpi’, ‘xhdpi’ 么?
resConfigs 对 density 使用的时候, 与 apk 分割的 density 分割是
冲突的, apk分割是对全包分割, resConfig只对当前配置的variant
分割
android { }
• defaultConfig { }: 默认配置, 所有 flavor 都会继承
• sourceSets { }: 对代码/资源的配置, android 重新对 gradle sourceSets 进行
了针对 Android 的实现, 叫做 AndroidSourceSet
• productFlavors { }: 模块所有 flavor, 不同的 flavor, 可以打包出不同的 apk
• buildTypes { }: 模块所有 build 类型, 不同的类型, 可以打包出不同的 apk
• signingConfig { }: App 模块打包 apk 的签名配置
• splits { }: Apk 分割, 全资源apk, 根据分辨率与abi分割成若干个小apk
• *Options { }: dexOptions { }, packagingOptions { }, aaptOptions { },
lintOptions { }, compileOptions { }, adbOptions { }, testOptions { }
• 下面我们来看看实际项目 大鱼 中的 gradle 使用
大鱼
实际应用…
2016年5月6日
刘俊
这将是一个系列课程,
每周一节课
IPD创新产品部
This is an real internal project, apologize for not opening source.

Weitere ähnliche Inhalte

Was ist angesagt?

如何與 Git 優雅地在樹上唱歌
如何與 Git 優雅地在樹上唱歌如何與 Git 優雅地在樹上唱歌
如何與 Git 優雅地在樹上唱歌Mu Chun Wang
 
ModernWeb 2017 angular component
ModernWeb 2017 angular componentModernWeb 2017 angular component
ModernWeb 2017 angular componentChieh Kai Yang
 
20170217 julia小程式到專案發布之旅
20170217 julia小程式到專案發布之旅20170217 julia小程式到專案發布之旅
20170217 julia小程式到專案發布之旅岳華 杜
 
Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027Wei Sun
 
20170905 dev ops in hiiir
20170905 dev ops in hiiir20170905 dev ops in hiiir
20170905 dev ops in hiiirIsaac Tseng
 
Flutter 踩雷心得
Flutter 踩雷心得Flutter 踩雷心得
Flutter 踩雷心得Weizhong Yang
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽Will Huang
 
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
 
CocoaPods private repo
CocoaPods private repoCocoaPods private repo
CocoaPods private repoWeizhong Yang
 
用 Go 語言 打造微服務架構
用 Go 語言打造微服務架構用 Go 語言打造微服務架構
用 Go 語言 打造微服務架構Bo-Yi Wu
 
向jquery学习
向jquery学习向jquery学习
向jquery学习jay li
 
Gradle 和 Android Studio --- Jason Ko
Gradle 和 Android Studio --- Jason KoGradle 和 Android Studio --- Jason Ko
Gradle 和 Android Studio --- Jason Ko力中 柯
 
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps BotBo-Yi Wu
 
Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介Bo-Yi Wu
 
git, repo, Gerrit 基礎教學
git, repo, Gerrit 基礎教學git, repo, Gerrit 基礎教學
git, repo, Gerrit 基礎教學Doremi Lin
 

Was ist angesagt? (20)

如何與 Git 優雅地在樹上唱歌
如何與 Git 優雅地在樹上唱歌如何與 Git 優雅地在樹上唱歌
如何與 Git 優雅地在樹上唱歌
 
ModernWeb 2017 angular component
ModernWeb 2017 angular componentModernWeb 2017 angular component
ModernWeb 2017 angular component
 
Swagger
SwaggerSwagger
Swagger
 
20170217 julia小程式到專案發布之旅
20170217 julia小程式到專案發布之旅20170217 julia小程式到專案發布之旅
20170217 julia小程式到專案發布之旅
 
Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027
 
20170905 dev ops in hiiir
20170905 dev ops in hiiir20170905 dev ops in hiiir
20170905 dev ops in hiiir
 
Flutter 踩雷心得
Flutter 踩雷心得Flutter 踩雷心得
Flutter 踩雷心得
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作
 
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
 
CocoaPods private repo
CocoaPods private repoCocoaPods private repo
CocoaPods private repo
 
Github Actions
Github ActionsGithub Actions
Github Actions
 
用 Go 語言 打造微服務架構
用 Go 語言打造微服務架構用 Go 語言打造微服務架構
用 Go 語言 打造微服務架構
 
向jquery学习
向jquery学习向jquery学习
向jquery学习
 
Gradle 和 Android Studio --- Jason Ko
Gradle 和 Android Studio --- Jason KoGradle 和 Android Studio --- Jason Ko
Gradle 和 Android Studio --- Jason Ko
 
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
 
Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介
 
git, repo, Gerrit 基礎教學
git, repo, Gerrit 基礎教學git, repo, Gerrit 基礎教學
git, repo, Gerrit 基礎教學
 
Dart null safety
Dart null safetyDart null safety
Dart null safety
 

Andere mochten auch

不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式信宏 陳
 
Android 介面設計
Android 介面設計Android 介面設計
Android 介面設計PingLun Liao
 
大鱼架构演进
大鱼架构演进大鱼架构演进
大鱼架构演进Jun Liu
 
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控制元件艾鍗科技
 
Android動態ui介面設計
Android動態ui介面設計Android動態ui介面設計
Android動態ui介面設計艾鍗科技
 
大型App面臨的挑戰
大型App面臨的挑戰大型App面臨的挑戰
大型App面臨的挑戰Chih-Chung Lee
 
Rxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJavaRxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJavaKros Huang
 
窺探職場上所需之資安專業技術與能力 Tdohconf
窺探職場上所需之資安專業技術與能力 Tdohconf窺探職場上所需之資安專業技術與能力 Tdohconf
窺探職場上所需之資安專業技術與能力 Tdohconfjack51706
 
Appassionata violin
Appassionata violinAppassionata violin
Appassionata violinSuni Aguado
 
Hymn to hope violin
Hymn to hope violinHymn to hope violin
Hymn to hope violinSuni Aguado
 
Hockey Kit for Android
Hockey Kit for AndroidHockey Kit for Android
Hockey Kit for Android旭辰 羅
 
Memory Leaks in Android Applications
Memory Leaks in Android ApplicationsMemory Leaks in Android Applications
Memory Leaks in Android ApplicationsLokesh Ponnada
 
[DEPRECATED]Gradle the android
[DEPRECATED]Gradle the android[DEPRECATED]Gradle the android
[DEPRECATED]Gradle the androidJun Liu
 
Deep dive into Android Data Binding
Deep dive into Android Data BindingDeep dive into Android Data Binding
Deep dive into Android Data BindingRadek Piekarz
 

Andere mochten auch (20)

不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
 
Android 介面設計
Android 介面設計Android 介面設計
Android 介面設計
 
大鱼架构演进
大鱼架构演进大鱼架构演进
大鱼架构演进
 
Reactive X 响应式编程
Reactive X 响应式编程Reactive X 响应式编程
Reactive X 响应式编程
 
Android layout 工程師在想什麼?給視覺設計師
Android layout   工程師在想什麼?給視覺設計師Android layout   工程師在想什麼?給視覺設計師
Android layout 工程師在想什麼?給視覺設計師
 
Android進階UI控制元件
Android進階UI控制元件Android進階UI控制元件
Android進階UI控制元件
 
Android動態ui介面設計
Android動態ui介面設計Android動態ui介面設計
Android動態ui介面設計
 
大型App面臨的挑戰
大型App面臨的挑戰大型App面臨的挑戰
大型App面臨的挑戰
 
Rxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJavaRxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJava
 
窺探職場上所需之資安專業技術與能力 Tdohconf
窺探職場上所需之資安專業技術與能力 Tdohconf窺探職場上所需之資安專業技術與能力 Tdohconf
窺探職場上所需之資安專業技術與能力 Tdohconf
 
Appassionata violin
Appassionata violinAppassionata violin
Appassionata violin
 
Hymn to hope violin
Hymn to hope violinHymn to hope violin
Hymn to hope violin
 
Android Data Binding
Android Data BindingAndroid Data Binding
Android Data Binding
 
Android Databinding Library
Android Databinding LibraryAndroid Databinding Library
Android Databinding Library
 
Hockey Kit for Android
Hockey Kit for AndroidHockey Kit for Android
Hockey Kit for Android
 
Android MVVM
Android MVVMAndroid MVVM
Android MVVM
 
Memory Leaks in Android Applications
Memory Leaks in Android ApplicationsMemory Leaks in Android Applications
Memory Leaks in Android Applications
 
FFmpeg presentation
FFmpeg presentationFFmpeg presentation
FFmpeg presentation
 
[DEPRECATED]Gradle the android
[DEPRECATED]Gradle the android[DEPRECATED]Gradle the android
[DEPRECATED]Gradle the android
 
Deep dive into Android Data Binding
Deep dive into Android Data BindingDeep dive into Android Data Binding
Deep dive into Android Data Binding
 

Ähnlich wie Android gradle 从入门到gg 2

Android -汇博
Android -汇博Android -汇博
Android -汇博dlqingxi
 
Android GDB Debugging (Chinese)
Android GDB Debugging (Chinese)Android GDB Debugging (Chinese)
Android GDB Debugging (Chinese)William Lee
 
Android系统移植技术详解
Android系统移植技术详解Android系统移植技术详解
Android系统移植技术详解zzc89522
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂imShining @DevCamp
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映heyfluke
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映heyfluke
 
Android开发基础
Android开发基础Android开发基础
Android开发基础ykdsg
 
GitHub android 40項熱門技術
GitHub android 40項熱門技術GitHub android 40項熱門技術
GitHub android 40項熱門技術勝全 謝
 
Hadoop开发者入门专刊
Hadoop开发者入门专刊Hadoop开发者入门专刊
Hadoop开发者入门专刊liangxiao0315
 
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 GradleJustin Lin
 
搭建你的Android Studio開發環境
搭建你的Android Studio開發環境搭建你的Android Studio開發環境
搭建你的Android Studio開發環境Yuan Chiu
 
Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture lusecheng
 
Android Apk包反编译入门分享
Android Apk包反编译入门分享Android Apk包反编译入门分享
Android Apk包反编译入门分享jicheng687
 
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析CC
 
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯SZ Lin
 
Android应用开发 - 沈大海
Android应用开发 - 沈大海Android应用开发 - 沈大海
Android应用开发 - 沈大海Shaoning Pan
 
第十一堂 學習編譯與上架
第十一堂 學習編譯與上架第十一堂 學習編譯與上架
第十一堂 學習編譯與上架力中 柯
 
KISSY Editor Design 2
KISSY Editor Design 2KISSY Editor Design 2
KISSY Editor Design 2yiming he
 
09 creating windows phone game with cocos2d-xna
09   creating windows phone game with cocos2d-xna09   creating windows phone game with cocos2d-xna
09 creating windows phone game with cocos2d-xna乐费 胡
 

Ähnlich wie Android gradle 从入门到gg 2 (20)

Android -汇博
Android -汇博Android -汇博
Android -汇博
 
Android GDB Debugging (Chinese)
Android GDB Debugging (Chinese)Android GDB Debugging (Chinese)
Android GDB Debugging (Chinese)
 
Android系统移植技术详解
Android系统移植技术详解Android系统移植技术详解
Android系统移植技术详解
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
 
Build Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratchBuild Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratch
 
Android开发基础
Android开发基础Android开发基础
Android开发基础
 
GitHub android 40項熱門技術
GitHub android 40項熱門技術GitHub android 40項熱門技術
GitHub android 40項熱門技術
 
Hadoop开发者入门专刊
Hadoop开发者入门专刊Hadoop开发者入门专刊
Hadoop开发者入门专刊
 
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
 
搭建你的Android Studio開發環境
搭建你的Android Studio開發環境搭建你的Android Studio開發環境
搭建你的Android Studio開發環境
 
Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture
 
Android Apk包反编译入门分享
Android Apk包反编译入门分享Android Apk包反编译入门分享
Android Apk包反编译入门分享
 
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
 
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
 
Android应用开发 - 沈大海
Android应用开发 - 沈大海Android应用开发 - 沈大海
Android应用开发 - 沈大海
 
第十一堂 學習編譯與上架
第十一堂 學習編譯與上架第十一堂 學習編譯與上架
第十一堂 學習編譯與上架
 
KISSY Editor Design 2
KISSY Editor Design 2KISSY Editor Design 2
KISSY Editor Design 2
 
09 creating windows phone game with cocos2d-xna
09   creating windows phone game with cocos2d-xna09   creating windows phone game with cocos2d-xna
09 creating windows phone game with cocos2d-xna
 

Android gradle 从入门到gg 2

  • 2. • 继续介绍Android Gradle 插件的基本DSL使 用 • 真实 Android 项目中使用 Gradle 第2课: Hallelujah
  • 3. android { } 回顾 • defaultConfig { }: 默认配置, 所有 flavor 都会继承 • sourceSets { }: 对代码/资源的配置, android 重新对 gradle sourceSets 进行 了针对 Android 的实现, 叫做 AndroidSourceSet • productFlavors { }: 模块所有 flavor, 不同的 flavor, 可以打包出不同的 apk • buildTypes { }: 模块所有 build 类型, 不同的类型, 可以打包出不同的 apk • signingConfig { }: App 模块打包 apk 的签名配置 • splits { }: Apk 分割, 全资源apk, 根据分辨率与abi分割成若干个小apk • *Options { }: dexOptions { }, packagingOptions { }, aaptOptions { }, lintOptions { }, compileOptions { }, adbOptions { }, testOptions { } • 你可以在 http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.BaseExtension.html 这里查 看详细的 DSL, 本节课只讲常用到的 android DSL, 标红的重点讲述
  • 4. android.signingConfigs { } signingConfigs 配置 keystore 等签名, 用于 apk 签名, 一般而言, 密 码等敏感信息, 应该存储在 local.properties 里面, 或者CI服务器通 过 ./gradlew –PkeyPassword=android –PstorePassword=android 命 令行传参, 传递给 gradle脚本, 此处仅示例就随意咯 signingConfigs { eng { keyAlias 'androiddebugkey' keyPassword ‘android' storeFile file('./eng.keystore') storePassword ‘android' } } buildTypes { debug { signingConfig signingConfigs.eng } } signingConfigs { jskConfig { keyAlias ‘jskKey' keyPassword ‘jskkey' storeFile file('./test.jks') storePassword ‘jkskey_password' } }
  • 5. android.splits { } Apk分割, 可以对 分辨率 资源, abi 平台 这两个维度, 分割出多个 apk出来, 常用于精简apk大小, 最小化打包等 splits { density { enable true // 默认对所有分辨率都分割 (include 列表包含所有 abi) exclude "ldpi", "tvdpi", "xxxhdpi" // 移除 ldpi, tvdpi, xxxhdpi 分辨率 // 向 AndroidManifest中注入兼容屏幕结点 <compatible-screens><screen ...> compatibleScreens 'small', 'normal', 'large', 'xlarge' } abi { enable true // 默认对所有 abi 分割 (include 列表包含所有 abi) reset() // 将 include 列表置空 include 'x86', 'armeabi-v7a', 'mips' universalApk true // 额外打出一个包含所有 abi 的全包 } }
  • 6. android.splits { } 此时, 你可以直接认为多了两个不能使用的 flavor 维度: density 和 abi density: hdpi, mdpi, xhdpi, xxhdpi abi: x86, armeabi-v7a, mips splits { density { enable true // 默认对所有分辨率都分割 (include 列表包含所有 abi) exclude "ldpi", "tvdpi", "xxxhdpi" // 移除 ldpi, tvdpi, xxxhdpi 分辨率 // 向 AndroidManifest中注入兼容屏幕结点 <compatible-screens><screen ...> compatibleScreens 'small', 'normal', 'large', 'xlarge' } abi { enable true // 默认对所有 abi 分割 (include 列表包含所有 abi) reset() // 将 include 列表置空 include 'x86', 'armeabi-v7a', 'mips' universalApk true // 额外打出一个包含所有 abi 的全包 } }
  • 7. android.splits { } density: hdpi, mdpi, xhdpi, xxhdpi abi: x86, armeabi-v7a, mips 同样的, gradle任务也会多出很多, 比如: assembleXhdpiArmeabi-v7aDebug assembleMdpiX86Release assembleUniversalRelease // 包含所有分辨率与 abi so文件的包 而使用最新的编译链工具的时候, splits 是与 resConfig 冲突的 还记得我们上节课讲的 resConfigs ‘xxhdpi’, ‘xhdpi’ 么? resConfigs 对 density 使用的时候, 与 apk 分割的 density 分割是 冲突的, apk分割是对全包分割, resConfig只对当前配置的variant 分割
  • 8. android { } • defaultConfig { }: 默认配置, 所有 flavor 都会继承 • sourceSets { }: 对代码/资源的配置, android 重新对 gradle sourceSets 进行 了针对 Android 的实现, 叫做 AndroidSourceSet • productFlavors { }: 模块所有 flavor, 不同的 flavor, 可以打包出不同的 apk • buildTypes { }: 模块所有 build 类型, 不同的类型, 可以打包出不同的 apk • signingConfig { }: App 模块打包 apk 的签名配置 • splits { }: Apk 分割, 全资源apk, 根据分辨率与abi分割成若干个小apk • *Options { }: dexOptions { }, packagingOptions { }, aaptOptions { }, lintOptions { }, compileOptions { }, adbOptions { }, testOptions { } • 下面我们来看看实际项目 大鱼 中的 gradle 使用