记录一些常用的 Android Gradle Plugin 中的DSL对应的java类
defaultConfig {}
对应的类是 DefaultConfig → BaseFlavor → DefaultProductFlavor → BaseConfigImpl
productFlavors {}
productFlavors 里面包含的元素对应的类是 ProductFlavor → BaseFlavor → DefaultProductFlavor → BaseConfigImpl
从上述继承关系可以看出 productFlavors 里面的每一个风味的产品属性跟 DefaultConfig 里的属性基本一致
applicationVariants.all { variant ->
// 这里获取到构建变体的产品风味,它里面的可用属性跟defaultConfig/productFlavors里面的基本一致
def mergedFlavor = variant.getMergedFlavor()
variant.outputs.all { output ->
output.outputFileName = apkName//这里可以自定义生成的apk名称使用上面的 mergedFlavor 基本可以满足需求
}
}
}
applicationVariants.all 遍历的元素 variant 的类型是 ApplicationVariantImpl → ApkVariantImpl → InstallableVariantImpl → AndroidArtifactVariantImpl → BaseVariantImpl
这里着重说一下这个variant(变体) ,他本身的可用属性有 name → 风味名称+构建类型 flavorName → 风味名称 buildType → 构建类型 productFlavors → 风味集合 对应上面的 productFlavors mergedFlavor → defaultConfig 与 productFlavors 里的元素混合后的风味 applicationId → 包名 versionName → 版本名 versionCode → 版本号 ,所以一般没有特殊需求,自定义生成apk名称使用variant的属性就足够用
variant.outputs.all 遍历的元素是 ApkVariantOutputImpl → BaseVariantOutputImpl
特别说明一点,如果你在 productFlavors 或 defaultConfig 里面用
resValue 'string', 'app_name', '****'
更换了app名称,而在applicationVariants.all中想要获取这个app名称,这在多渠道打包时生成不同包名和app名称时非常常见,
这时需要下述操作就可以获取app名称
def appname = mergedFlavor.getResValues()['app_name'].value
查看依赖冲突用到的gradle命令
gradlew {这里填上moudle名称}:dependencies --configuration archives