【问题标题】:android gradle increment lintandroid gradle 增量皮棉
【发布时间】:2018-02-07 01:15:19
【问题描述】:

由于我将从事 Android 的增量 Lint 检查,并且我查看了一些文章,我发现我可以在 build.gradle 中添加一个任务,然后通过重写 LintGradleClient 来传递一些参数,这应该可以按照中所述这篇文章,但是我按照文章描述的,在AndroidProject中增加了LintGradle参数无法获取,我在哪里使用kotlin实现。有人可以帮助我吗? 这里是文章url路径https://www.jianshu.com/p/4833a79e9396

我将 AndroidProject 作为 Kotlin 的代码:

fun getAndroidProject(): AndroidProject{
   var gradleConn = GradleConnector.newConnector()
   gradleConn.forProjectDirectory(getProject().getProjectDir())  
   var modelProject =   gradleConn.connect().getModel(com.android.builder.model.AndroidProject::class.java)
   return modelProject
}

我运行任务,它告诉我这样:

此版本中没有“AndroidProject”类型的模型。

【问题讨论】:

    标签: android gradle increment lint


    【解决方案1】:

    那篇文章的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.toolingRegistryGlobalScope.getToolingRegistry()获得
    2.GlobalScopeVariantScope.getGlobalScope()获得
    3.VariantScopeApplicationVariant.getVariantData().getScope()得到

    ApplicationVariantcom.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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 2020-02-03
      • 2010-11-01
      • 2011-11-23
      • 1970-01-01
      相关资源
      最近更新 更多