AndroidX迁移后的命令行lint错误

时间:2018-11-02 13:09:22

标签: android android-studio lint androidx

仅在通过./gradle lintDebug从命令行运行内部版本时,迁移到AndroidX后才看到此lint错误

我在Android Studio中看不到任何警告或错误。

以下是产生错误的代码:

import com.google.android.material.snackbar.Snackbar

...

Snackbar.make(this.findViewById<View>(android.R.id.content), R.string.recorder_permissions,
                    Snackbar.LENGTH_INDEFINITE).setAction("ENABLE") {
                // Request permission here
            }.show()

错误:

app/src/debug/java/com/mobile/android/ui/LogInfoActivity.kt:214: Error: Must be one of: BaseTransientBottomBar.LENGTH_INDEFINITE, BaseTransientBottomBar.LENGTH_SHORT, BaseTransientBottomBar.LENGTH_LONG or value must be ≥ 1 (was -2) [WrongConstant]
                      Snackbar.LENGTH_INDEFINITE).setAction("ENABLE"
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~
  app/src/debug/java/com/mobile/android/ui/LogInfoActivity.kt:258: Error: Must be one of: BaseTransientBottomBar.LENGTH_INDEFINITE, BaseTransientBottomBar.LENGTH_SHORT, BaseTransientBottomBar.LENGTH_LONG or value must be ≥ 1 (was -2) [WrongConstant]
                                  Snackbar.LENGTH_INDEFINITE).setAction("ENABLE"
                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~

build.gradle: implementation "com.google.android.material:material:1.0.0-rc01"

SnackBar.make方法具有@IntDef,仅需要SnackBar.LENGTH ...常量。更改为基类常量会导致Android Studio错误。

Build Tools版本:3.2.1 Gradle版本:4.6

1 个答案:

答案 0 :(得分:0)

最终是一个愚蠢的错误。我们的一个图书馆项目有一个gradle条目,其中包含较旧版本的物料依赖项:

implementation "com.google.android.material:material:1.0.0-alpha1"

将其更改为此固定即可:

implementation "com.google.android.material:material:1.0.0"

看起来这是Alpha1版本特有的问题。只要创建一个新的Android项目,就可以轻松地重新创建它。然后将项目转换为AndroidX。这显示了错误,因为它在转换后使用了alpha1版本。创建测试项目使我误入歧途。