如何在数据绑定的safeUnbox警告后使构建过程失败

时间:2018-11-03 21:19:49

标签: android data-binding warnings

This question解释了什么是“ safeUnbox警告”。

build.gradle中包含以下内容:

extension NSPasteboard.PasteboardType {

    /// The name of a file or directory
    static let fileName: NSPasteboard.PasteboardType = {
        return NSPasteboard.PasteboardType("NSFilenamesPboardType")
    }()
}

及更高版本:

lintOptions {
    quiet false
    abortOnError true
    warningsAsErrors true
    baseline file("lint-baseline.xml")
}

但是数据绑定的SafeUnbox警告不会使构建过程失败。输出抱怨警告,并且警告变成了错误:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
    kotlinOptions {
        jvmTarget = "1.8"
        allWarningsAsErrors = true
    }
}

但是在构建过程的最后,我有:

w: warning: viewModel.doorsState.getValue().first is a boxed field but needs to be un-boxed to execute android:text. This may cause NPE so Data Binding will safely unbox it. You can change the expression and explicitly wrap viewModel.doorsState.getValue().first with safeUnbox() to prevent the warning
  file:///.../app/src/debug/res/layout/activity_car_connection_debug.xml Line:75
e: warnings found and -Werror specified

有什么方法可以使整个构建过程在“ safeUnbox警告”失败的情况下失败?

2 个答案:

答案 0 :(得分:3)

我找到了解决方案,是的!

将以下法术放在根gradle.build上即可解决问题。

subprojects {
    afterEvaluate {
        if (project.plugins.hasPlugin("kotlin-kapt")) {
            kapt {
                javacOptions {
                    option("-Xmaxerrs", 1000)
                    option("-Werror")
                }
            }
        }
    }
}

此法术也增加了记录错误数量的限制(默认值:100),如果使用了DataBinding,则很有用。

答案 1 :(得分:1)

作为Alexander的答案的补充,您也可以在模块build.gradle中定义它,这可能更易读:

android {

    ...

    kapt {
        javacOptions {
            option("-Xmaxerrs", 1000)
            option("-Werror")
        }
    }
}