如何避免对新com.android.tools.build:gradle-api中的内部android任务的依赖

问题描述

https://medium.com/androiddevelopers/new-apis-in-the-android-gradle-plugin-f5325742e614中,在com.android.tools.build:gradle-api包中声明了一个新的api。应该用它来代替com.android.tools.build:gradle包中的旧接口。

这里的一个重要区别似乎是现在限制了对android任务的访问,而我们应该将其作为中介与Artifact系统进行交互。

像这样:

class ExamplePlugin: Plugin<Project> {
    override fun apply(project: Project) {
        project.extensions.getByType(CommonExtension::class.java).let { androidExtension ->
            androidExtension.onVariantProperties {
                val myTask = project.tasks.register("myTask${this.name.capitalize()}",MyTask::class.java) {
                    it.inputApkFiles.set(artifacts.get(ArtifactType.APK))
                }
                artifacts
                    .use(myTask)
                    .wiredWithDirectories(
                        MyTask::inputApkFiles,MyTask::outputApkDirectory
                    )
                    .toTransform(ArtifactType.APK)
            }
        }
    }
}

这意味着新任务:app:myTaskDebug:app:myTaskRelease现在可用。但是,必须直接调用它们,而android-studio功能(例如直接部署到设备上的播放按钮)将不包含这些功能。

解决此问题的常用方法是使:app:assembleDebugapp:assembleRelease任务取决于您的自定义任务。像这样(在旧的api中)

project.getExtensions().getByType(AppExtension.class).applicationVariants.each { appVariant ->
    appVariant.assemble.dependsOn(myTask)
}

使用新的api获得此行为的正确方法是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...