那篇文章的android插件版本老了,3.0.0以后获取AndroidProject的方式变了。
看完gradle android插件源码,com.android.build.gradle.tasks.LintBaseTask给出了线索:
protected AndroidProject createAndroidProject(Project gradleProject) {
String modelName = AndroidProject.class.getName();
ToolingModelBuilder modelBuilder = this.toolingRegistry.getBuilder(modelName);
assert modelBuilder != null;
ExtraPropertiesExtension ext = gradleProject.getExtensions().getExtraProperties();
ext.set("android.injected.build.model.only.versioned", Integer.toString(3));
ext.set("android.injected.build.model.disable.src.download", Boolean.valueOf(true));
AndroidProject var5;
try {
var5 = (AndroidProject)modelBuilder.buildAll(modelName, gradleProject);
} finally {
ext.set("android.injected.build.model.only.versioned", (Object)null);
ext.set("android.injected.build.model.disable.src.download", (Object)null);
}
return var5;
}
继续前进,我们可以找到:
1.toolingRegistry被GlobalScope.getToolingRegistry()获得
2.GlobalScope被VariantScope.getGlobalScope()获得
3.VariantScope被ApplicationVariant.getVariantData().getScope()得到
ApplicationVariant是com.android.application插件中applicationVariants的元素,可以遍历applicationVariants列表获取。
这是app/build.gradle中的示例代码:
android {
// other script...
applicationVariants.all { variant ->
def globalScope = variant.variantData.scope.globalScope
String modelName = AndroidProject.class.getName()
ToolingModelBuilder modelBuilder = globalScope.toolingRegistry.getBuilder(modelName)
AndroidProject androidProject = (AndroidProject) modelBuilder.buildAll(modelName, project)
// create your task to do something
}
}