Contenu connexe
Similaire à Android gradle 从入门到gg 2 (20)
Android gradle 从入门到gg 2
- 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 使用