lint没有失败的构建

时间:2016-03-30 12:43:23

标签: android gradle lint

不久之前,我尝试通过在app模块中添加lint.xml文件并添加以下lintOptions来将lint添加到我的android studio项目中:

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

一切正常,调试版本在发生lint错误时失败,否则传递失败。虽然我没有将更改合并到项目中,但我最近返回到这些更改,发现构建不再对lint错误失败。我似乎无法找到导致这种情况的项目期间所做的更改。正如预期的那样,发布版本仍然在lint错误上失败。

从我可以收集的lint任务应该默认运行但我没有看到它作为我构建时运行的任务的一部分

可能有用的其他信息:

  • 我正在使用gradle包装器 distributionUrl = HTTPS://services.gradle.org/distributions/gradle-2.10-all.zip
  • 我正在通过android studio的Build构建 - >重建项目和 不是绿色播放按钮(我知道这不会运行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>

1 个答案:

答案 0 :(得分:3)

Run lint when building android studio projects找到解决方案。基本上你使汇编任务依赖于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
    }
}