如何判断?
/**
* 是否是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