android gradle 从入门到gg 2

9
1/15/22 刘刘 IPD 刘刘刘刘刘 Android Gradle 刘刘刘刘 GG 刘2刘: Halleluja h

Upload: jween-lau

Post on 11-Apr-2017

305 views

Category:

Mobile


8 download

TRANSCRIPT

Page 1: Android gradle 从入门到gg 2

Wednesday, May 3, 2023

刘俊IPD 创新产品部

Android Gradle从入门到 GG

第 2 课 : Hallelujah

Page 2: Android gradle 从入门到gg 2

继续介绍 Android Gradle 插件的基本 DSL 使用真实 Android 项目中使用 Gradle

第 2 课 : Hallelujah

Page 3: Android gradle 从入门到gg 2

android { } 回顾defaultConfig { }: 默认配置 , 所有 flavor 都会继承sourceSets { }: 对代码 / 资源的配置 , android 重新对 gradle sourceSets 进行了针对 Android 的实现 , 叫做 AndroidSourceSetproductFlavors { }: 模块所有 flavor, 不同的 flavor, 可以打包出不同的 apkbuildTypes { }: 模块所有 build 类型 , 不同的类型 , 可以打包出不同的 apksigningConfig { }: 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, 标红的重点讲述

Page 4: Android gradle 从入门到gg 2

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' }}

Page 5: Android gradle 从入门到gg 2

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 的全包 }}

Page 6: Android gradle 从入门到gg 2

android.splits { }

此时 , 你可以直接认为多了两个不能使用的 flavor 维度 : density 和 abidensity: hdpi, mdpi, xhdpi, xxhdpiabi: 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 的全包 }}

Page 7: Android gradle 从入门到gg 2

android.splits { }

density: hdpi, mdpi, xhdpi, xxhdpiabi: x86, armeabi-v7a, mips

同样的 , gradle 任务也会多出很多 , 比如 :assembleXhdpiArmeabi-v7aDebugassembleMdpiX86ReleaseassembleUniversalRelease // 包含所有分辨率与 abi so 文件的包而使用最新的编译链工具的时候 , splits 是与 resConfig 冲突的还记得我们上节课讲的 resConfigs ‘xxhdpi’, ‘xhdpi’ 么 ?resConfigs 对 density 使用的时候 , 与 apk 分割的 density 分割是冲突的 , apk 分割是对全包分割 , resConfig 只对当前配置的variant 分割

Page 8: Android gradle 从入门到gg 2

android { }

defaultConfig { }: 默认配置 , 所有 flavor 都会继承sourceSets { }: 对代码 / 资源的配置 , android 重新对 gradle sourceSets 进行了针对 Android 的实现 , 叫做 AndroidSourceSetproductFlavors { }: 模块所有 flavor, 不同的 flavor, 可以打包出不同的 apkbuildTypes { }: 模块所有 build 类型 , 不同的类型 , 可以打包出不同的 apksigningConfig { }: App 模块打包 apk 的签名配置splits { }: Apk 分割 , 全资源 apk, 根据分辨率与 abi 分割成若干个小 apk*Options { }: dexOptions { }, packagingOptions { }, aaptOptions { }, lintOptions { }, compileOptions { }, adbOptions { }, testOptions { }

下面我们来看看实际项目 大鱼 中的 gradle 使用

Page 9: Android gradle 从入门到gg 2

大鱼

实际应用…

Wednesday, May 3, 2023

刘俊这将是一个系列课程 , 每周一节课

IPD 创新产品部

This is an real internal project, apologize for not opening source.