如何避免对新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 (将#修改为@)