判断是否 AGP7+ 的方法

如何判断?

    /**
     * 是否是AGP7.0.0及以上
     * @param project
     * @return
     */
    static boolean isAGP7_0_0(Project project) {
        def androidComponents = project.extensions.findByName("androidComponents")
        if (androidComponents && androidComponents.hasProperty("pluginVersion")) {
            return true
        }
        return false
    }


    /**
     * 是否是AGP7.4.0及以上
     * @param project
     * @return
     */
    static boolean isAGP7_4_0(Project project) {
        def androidComponents = project.extensions.findByName("androidComponents")
        if (androidComponents && androidComponents.hasProperty("pluginVersion") && (androidComponents.pluginVersion.major > 7 || androidComponents.pluginVersion.minor >= 4)) {
            return true
        }
        return false
    }

测试

def androidComponents = target.extensions.findByName("androidComponents")
for (String key : androidComponents.properties.keySet()) {
    println("androidComponents k =" + key + "  val =" + androidComponents.properties.get(key))
    printF(androidComponents.properties.get(key))
    if (key === "pluginVersion") {
        println("major version: " + androidComponents.pluginVersion.major)
        println("minor version: " + androidComponents.pluginVersion.minor)
    }
}

在这里插入图片描述

我如何知道 androidComponents.pluginVersion 有 major 和 minor 字段?

打印一个类的所有属性

void printF(Object obj) {
    def clazz = obj.getClass()
    def fields = clazz.getDeclaredFields()
    String s = "default"
    for (Field f : fields) {
        def modifiers = f.getModifiers();
        if (Modifier.isPublic(modifiers)) {
            s = "public"
        } else if (Modifier.isPrivate(modifiers)) {
            s = "private"
        } else if (Modifier.isProtected(modifiers)) {
            s = "protected"
        }
        f.setAccessible(true)
        println("\t\tfield = " + s + "\t" + f.getType().getSimpleName() + "\t" + f.getName())
    }
    println("")
    println("")
}

输入如下:

androidComponents k =convention  val =org.gradle.internal.extensibility.DefaultConvention@35298865
		field = private	TypeOf	EXTRA_PROPERTIES_EXTENSION_TYPE
		field = private	ExtensionsDynamicObject	extensionsDynamicObject
		field = private	ExtensionsStorage	extensionsStorage
		field = private	ExtraPropertiesExtension	extraProperties
		field = private	InstanceGenerator	instanceGenerator
		field = private	Map	plugins
		field = private	Map	dynamicObjects


androidComponents k =class  val =class com.android.build.gradle.internal.plugins.AppPlugin$ApplicationAndroidComponentsExtensionImplCompat_Decorated
		field = private	int	ANNOTATION
		field = private	int	ENUM
		field = private	int	SYNTHETIC
		field = private	Constructor	cachedConstructor
		field = private	Class	newInstanceCallerCache
		field = private	String	name
		field = private	Module	module
		field = private	String	packageName
		field = private	Class	componentType
		field = private	ProtectionDomain	allPermDomain
		field = private	SoftReference	reflectionData
		field = private	int	classRedefinedCount
		field = private	ClassRepository	genericInfo
		field = private	Class[]	EMPTY_CLASS_ARRAY
		field = private	long	serialVersionUID
		field = private	ObjectStreamField[]	serialPersistentFields
		field = private	ReflectionFactory	reflectionFactory
		field = private	Object[]	enumConstants
		field = private	Map	enumConstantDirectory
		field = private	AnnotationData	annotationData
		field = private	AnnotationType	annotationType
		field = private	ClassValueMap	classValueMap


androidComponents k =sdkComponents  val =com.android.build.gradle.internal.dsl.SdkComponentsImpl_Decorated@6d099f04
		field = private	Describable	_gr_dn_
		field = private	ModelObject	_gr_owner_
		field = private	ServiceLookup	_gr_svcs_
		field = private	ConventionMapping	_gr_map_
		field = private	boolean	__adb__
		field = private	boolean	__bootClasspath__
		field = private	boolean	__ndkDirectory__
		field = private	boolean	__sdkDirectory__
		field = private	AbstractDynamicObject	_gr_dyn_
		field = private	MetaClass	_gr_mc_


androidComponents k =conventionMapping  val =org.gradle.internal.extensibility.ConventionAwareHelper@61be75c1
		field = private	Convention	_convention
		field = private	IConventionAware	_source
		field = private	Set	_propertyNames
		field = private	Set	_ineligiblePropertyNames
		field = private	Map	_mappings


androidComponents k =extensions  val =org.gradle.internal.extensibility.DefaultConvention@35298865
		field = private	TypeOf	EXTRA_PROPERTIES_EXTENSION_TYPE
		field = private	ExtensionsDynamicObject	extensionsDynamicObject
		field = private	ExtensionsStorage	extensionsStorage
		field = private	ExtraPropertiesExtension	extraProperties
		field = private	InstanceGenerator	instanceGenerator
		field = private	Map	plugins
		field = private	Map	dynamicObjects


androidComponents k =asDynamicObject  val =DynamicObject for extension 'androidComponents'


androidComponents k =pluginVersion  val =Android Gradle Plugin version 7.4.2
		field = private	Companion	Companion
		field = private	int	major
		field = private	int	minor
		field = private	int	micro
		field = private	PreviewType	_previewType
		field = private	int	preview
		field = private	Comparator	comparator


androidComponents k =taskThatOwnsThisObject  val =null
		field = private	NullObject	INSTANCE


androidComponents k =modelIdentityDisplayName  val =extension 'androidComponents'
		field = default	Object	val$type
		field = default	String	val$name


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值