Lint未导致构建失败

7

前段时间,我尝试通过在应用程序模块添加一个lint.xml文件并添加以下lintOptions来将lint添加到我的Android Studio项目中:

lintOptions {
    abortOnError true
    checkReleaseBuilds true
    lintConfig file("lint.xml")
}

一切运行良好,lint错误会导致调试版本构建失败。但我没有将这些更改纳入项目中,最近回到这些更改时发现构建不再因lint错误而失败。我无法找到在那段时间内导致此问题的项目更改。与预期一样,发布版本构建仍然因为lint错误而失败。
据我的了解,lint任务应默认运行,但我在构建时未看到它作为任务的一部分。
以下是一些可能有助于解决问题的其他信息:
- 我正在使用gradle wrapper,distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip。 - 我通过Android Studio的“Build -> Rebuild Project”进行构建,而不是绿色的播放按钮(我知道这不会运行lint)。 - lint.xml:

<?xml version="1.0" encoding="UTF-8"?>
<lint>

    <!--The given layout_param is not defined for the given layout, meaning it has no
    effect.-->
    <issue id="ObsoleteLayoutParam" severity="error" />
    <!--A layout that has no children or no background can often be removed-->
    <issue id="UselessLeaf" severity="error" />
    <issue id="HardcodedText" severity="error" />
    <issue id="UnusedResources" severity="error" />
    <!--AdapterViews such as ListViews must be configured with data from Java code,
    such as a ListAdapter.-->
    <issue id="AdapterViewChildren" severity="error" />
    <!--Missing commit() on SharedPreference editor-->
    <issue id="CommitPrefEdits" severity="error" />
    <!--looks for cases where you have cut & pasted calls to
    findViewById but have forgotten to update the R.id field-->
    <issue id="CutPasteId" severity="error" />
    <!--Calling String#toLowerCase() or #toUpperCase() without specifying an explicit
    locale is a common source of bugs.-->
    <issue id="DefaultLocale" severity="error" />
    <!--Implied locale in date format-->
    <issue id="SimpleDateFormat" severity="error" />
    <!--Incorrect order of elements in manifest-->
    <issue id="ManifestOrder" severity="error" />
    <!--Using STRING instead of TEXT-->
    <issue id="SQLiteString" severity="error" />
    <!--Memory allocations within drawing code-->
    <issue id="DrawAllocation" severity="error" />
    <!--Handler is declared as an inner class, it may prevent the outer
    class from being garbage collected.-->
    <issue id="HandlerLeak" severity="error" />
    <!--Ellipsis string can be replaced with ellipsis character-->
    <issue id="TypographyEllipsis" severity="error" />
    <!--ScrollViews can have only one child-->
    <issue id="ScrollViewCount" severity="error" />
    <!--FragmentTransaction, you typically need to commit it as well-->
    <issue id="CommitTransaction" severity="error" />
    <!--A scrolling widget such as a ScrollView should not contain any nested
    scrolling widgets since this has various usability issues-->
    <issue id="NestedScrolling" severity="error" />
    <!--ScrollView children must set their layout_width or layout_height attributes to
    wrap_content-->
    <issue id="ScrollViewSize" severity="error" />
    <!--Using Wrong AppCompat Method-->
    <issue id="AppCompatMethod" severity="error" />
    <!--Some methods have no side effects, an calling them without doing something
    without the result is suspicious.-->
    <issue id="CheckResult" severity="error" />
    <!--Duplicate ids across layouts combined with include tags-->
    <issue id="DuplicateIncludedIds" severity="error" />
    <!--This check ensures that a layout resource which is defined in multiple
    resource folders, specifies the same set of widgets.-->
    <issue id="InconsistentLayout" severity="error" />
    <!--Wrong locale name-->
    <issue id="LocaleFolder" severity="error" />
    <!--Target SDK attribute is not targeting latest version-->
    <issue id="OldTargetApi" severity="error" />
    <!--Frequent alarms are bad for battery life.-->
    <issue id="ShortAlarm" severity="error" />


    <!--Using system app permission-->
    <issue id="ProtectedPermissions" severity="ignore" />
    <!--Package not included in Android-->
    <issue id="InvalidPackage" severity="ignore" />

</lint>


你能否在问题中添加 lint.xml 文件?可能是因为你添加了规则导致所有内容都通过了 lint 检查。 - Tal Kanel
1个回答

3

运行Android Studio项目时运行lint,我找到了一个解决方案。基本上,您可以使组装任务依赖于Lint任务以强制其运行:

applicationVariants.all { variant ->
variant.outputs.each { output ->
    def lintTask = tasks["lint${variant.name.capitalize()}"]
    output.assemble.dependsOn lintTask
}

对于图书馆项目 -

libraryVariants.all { variant ->
    variant.outputs.each { output ->
        def lintTask = tasks["lint${variant.name.capitalize()}"]
        tasks["bundle${variant.name.capitalize()}"].dependsOn lintTask
    }
}

1
项目中找不到名称为'bundleDebug'的任务,调试是变体名称。 - BATMAN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接