Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Android gradle 从入门到gg 2

469 views

Published on

Android Gradle系列课程, 课程惟一目的是为魅族培养Android Gradle工程师, 该系列课程涵盖Android Gradle基本使用与自定义, 使用Gradle驱动各种各样的Android需求, Gradle插件开发, Gradle CI集成, 以及Google Android Gradle插件, 魅族Gradle插件

Published in: Mobile
  • Be the first to comment

Android gradle 从入门到gg 2

  1. 1. 2016年5月6日 刘俊 IPD创新产品部 Android Gradle 从入门到GG 第2课: Hallelujah
  2. 2. • 继续介绍Android Gradle 插件的基本DSL使 用 • 真实 Android 项目中使用 Gradle 第2课: Hallelujah
  3. 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. 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. 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. 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. 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. 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 使用
  9. 9. 大鱼 实际应用… 2016年5月6日 刘俊 这将是一个系列课程, 每周一节课 IPD创新产品部 This is an real internal project, apologize for not opening source.

×