【问题标题】:lint not failing buildslint 没有失败的构建
【发布时间】:2016-03-30 12:43:23
【问题描述】:

不久前,我尝试通过在 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 -> 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 的规则......

标签: android gradle lint


【解决方案1】:

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

【讨论】:

  • 在项目中找不到名称为“bundleDebug”的任务,调试是变体名称
猜你喜欢
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 2021-01-05
  • 2018-05-06
  • 2018-12-09
相关资源
最近更新 更多