跳转到内容

Lint 静态检查规范

为了帮助开发者在编译期及时发现潜在问题、规范 API 调用,BetterAndroid 内置了一套 Android Lint 规则。

规则列表

以下是目前生效的所有 Lint 规则列表 (仅对 Kotlin 语言生效)。

ui-component

Issue ID类别级别优先级简要描述
MultipleSystemBarsControllerPropertiesCORRECTNESSERROR8Only one SystemBarsController property is allowed in a class.
ReplaceWithNotificationActionUSABILITYWARNING5Use ui-component's notification action APIs instead.
ReplaceWithNotificationComponentUSABILITYWARNING5Use ui-component's notification APIs instead.
ReplaceWithSystemBarsControllerUSABILITYWARNING5Use ui-component's SystemBarsController instead.

ui-component-adapter

Issue ID类别级别优先级简要描述
ReplaceWithRecyclerAdapterExtensionUSABILITYWARNING5Use ui-component-adapter's RecyclerAdapter extensions instead.
ReplaceWithRecyclerViewExtensionUSABILITYWARNING5Use ui-component-adapter's RecyclerView extensions instead.

ui-extension

Issue ID类别级别优先级简要描述
ReplaceWithActivityExtensionUSABILITYWARNING5Use ui-extension's startActivity<T>(...) instead.
ReplaceWithBackPressedExtensionUSABILITYWARNING5Use ui-extension's back pressed extensions instead.
ReplaceWithBitmapExtensionUSABILITYWARNING5Use ui-extension's bitmap decode extensions instead.
ReplaceWithCoroutinesExtensionUSABILITYWARNING5Use ui-extension's coroutine extensions instead.
ReplaceWithContextExtensionUSABILITYWARNING5Use ui-extension's context host activity extensions instead.
ReplaceWithDrawableExtensionUSABILITYWARNING5Use ui-extension's Drawable.setPadding(size) instead.
ReplaceWithFragmentExtensionUSABILITYWARNING5Use ui-extension's fragment manager extensions instead.
ReplaceWithHandleOnWindowInsetsChangedUSABILITYWARNING5Use ui-extension's handleOnWindowInsetsChanged(...) instead.
ReplaceWithLayoutInflaterExtensionUSABILITYWARNING5Use ui-extension's layoutInflater extension instead.
ReplaceWithLifecycleExtensionUSABILITYWARNING5Use ui-extension's lifecycle observer extensions instead.
ReplaceWithLifecycleOwnerExtensionUSABILITYWARNING5Use ui-extension's lifecycle owner extensions instead.
ReplaceWithRecyclerViewExtensionUSABILITYWARNING5Use ui-extension's RecyclerView.layoutManager() instead.
ReplaceWithResourcesExtensionUSABILITYWARNING5Use ui-extension's resources compat extensions instead.
ReplaceWithTextViewExtensionUSABILITYWARNING5Use ui-extension's TextView extensions instead.
ReplaceWithToastExtensionUSABILITYWARNING5Use ui-extension's toast(...) function instead of Toast.makeText(...).show().
ReplaceWithViewBindingExtensionUSABILITYWARNING5Use ui-extension's ViewBinding extensions instead.
ReplaceWithViewExtensionUSABILITYWARNING5Use ui-extension's View.kt instead.
ReplaceWithViewImeExtensionUSABILITYWARNING5Use ui-extension's showIme() or hideIme() instead.
ReplaceWithViewOutlineProviderExtensionUSABILITYWARNING5Use ui-extension's outlineProvider(...) instead.
ReplaceWithViewTooltipTextCompatExtensionUSABILITYWARNING5Use ui-extension's tooltipTextCompat instead of TooltipCompat.setTooltipText(...) or ViewCompat.setTooltipText(...).
ReplaceWithViewWalkExtensionUSABILITYWARNING5Use ui-extension's walkToRoot() or walkThroughChildren() instead.

system-extension

Issue ID类别级别优先级简要描述
ReplaceWithAndroidVersionUSABILITYWARNING5Use system-extension's AndroidVersion instead of Build.VERSION.SDK_INT.
ReplaceWithApplicationExtensionUSABILITYWARNING5Use system-extension's application extensions instead.
ReplaceWithBroadcastExtensionUSABILITYWARNING5Use system-extension's broadcast extensions instead.
ReplaceWithClipboardExtensionUSABILITYWARNING5Use system-extension's clipboard extensions instead.
ReplaceWithIntentExtensionUSABILITYWARNING5Use system-extension's intent extensions instead.
ReplaceWithServiceExtensionUSABILITYWARNING5Use system-extension's service extensions instead.

如何关闭或调整规则

如果你想关闭某一条规则,或将某一条规则调整为其它级别,可以在项目根目录创建 lint.xml

示例如下

xml
<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <issue id="ReplaceWithViewExtension" severity="ignore" />
    <issue id="ReplaceWithAndroidVersion" severity="error" />
</lint>

其中 severity 常用值如下:

  • ignore
  • warning
  • error
  • fatal

你也可以直接在 Gradle 中进行控制。

示例如下

kotlin
android {
    lint {
        disable += "ReplaceWithViewExtension"
        warning += "ReplaceWithToastExtension"
        error += "ReplaceWithAndroidVersion"
    }
}

当你只想检查部分规则时,也可以使用 checkOnly

示例如下

kotlin
android {
    lint {
        checkOnly += setOf(
            "ReplaceWithViewExtension",
            "ReplaceWithAndroidVersion"
        )
    }
}

问题反馈

目前大部分 Lint 检测器均由 AI Agent 代为完成,可能仍然存在问题,例如尚未测试过的复杂 UAST 语法树场景。如果你在使用过程中发现了 Lint 规则出现了误报或 Quick Fix 无法正确修复问题,可以通过提供 Issue ID 在 GitHub Issues 直接向我们反馈。

如果你认为一些规则不够合理出现过于约束代码的情况,或者你有一些新的规则建议,也欢迎向我们反馈,我们会进行评估和调整。

基于 Apache-2.0 许可发布