Skip to content

AGP 3.4.2适配 #757

@gb18030

Description

@gb18030

做如下修改:
`private fun addFlavorForTransform(baseExtension: BaseExtension) {

    if(baseExtension.flavorDimensionList == null){//AGP3.4.2的这里为空
        baseExtension.flavorDimensions(ShadowTransform.DimensionName)
    }else{
        baseExtension.flavorDimensionList.add(ShadowTransform.DimensionName)
    }
   
    try {
        baseExtension.productFlavors.create(ShadowTransform.NoShadowTransformFlavorName) {
            it.dimension = ShadowTransform.DimensionName
            if(isFlavorHasDefaultParam()) it.isDefault = true//AGP3.4.2 没这个属性
            
        }
        baseExtension.productFlavors.create(ShadowTransform.ApplyShadowTransformFlavorName) {
            it.dimension = ShadowTransform.DimensionName
            if(isFlavorHasDefaultParam()) it.isDefault = false
            
        }
    } catch (e: InvalidUserDataException) {
        throw Error("请在android{} DSL之前apply plugin: 'com.tencent.shadow.plugin'", e)
    }
}

fun isFlavorHasDefaultParam() : Boolean{

    val declaredFunctions = ProductFlavor::class.declaredFunctions
    for (declaredFunction in declaredFunctions) {
        if(declaredFunction.name == "setDefault") return true
    }
    return false;
}

`

`companion object {

    private fun getManifestFile(processManifestTask: ManifestProcessorTask) =
        when (processManifestTask) {
            is ProcessMultiApkApplicationManifest -> {
                processManifestTask.mainMergedManifest.get().asFile
            }
            is ProcessApplicationManifest -> {
                try {
                    processManifestTask.mergedManifest.get().asFile
                } catch (e: NoSuchMethodError) {
                    //AGP小于4.1.0
                    val dir =
                        processManifestTask.outputs.files.files
                            .first { it.path.contains("[/\\\\]merged_manifests".toRegex())}//3.4.2AGP有intent_merged_manifests文件夹 但里面没清单文件
                    File(dir, ANDROID_MANIFEST_XML)
                }
            }
            else -> throw IllegalStateException("不支持的Task类型:${processManifestTask.javaClass}")
        }

    private fun getPackageForR(project: Project, variantName: String): String {
        val linkApplicationAndroidResourcesTask =
            project.tasks.getByName("process${variantName.capitalize()}Resources")
        val property = when {

            linkApplicationAndroidResourcesTask.hasProperty("namespace") -> {
                linkApplicationAndroidResourcesTask.property("namespace")
            }
            linkApplicationAndroidResourcesTask.hasProperty("originalApplicationId") -> {
                linkApplicationAndroidResourcesTask.property("originalApplicationId")
            }
            else -> throw IllegalStateException("不支持的AGP版本")
        }
        
        return when (property) {
            is String -> { //AGP3.4.2 这个值类型是String
                property
            }
            is Property<*> -> {
                (property as Property<String>).get()
            }
            else -> throw IllegalStateException("不支持的AGP版本")
        }
    }
}

`
望验证后做好兼容

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions