如何解决android.support.annotation包不存在的错误?

2,951 阅读3分钟

当构建你的Android应用程序时,你可能会发现一个错误,说软件包android.support.annotation 不存在。

下面是一个错误的例子。

error: package android.support.annotation does not exist
error: cannot find symbol class NonNull
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.

通常情况下,上述错误发生在你将你的Android应用程序迁移到使用androidx 库时。

androidx 是Android Jetpack库所使用的命名空间。它是一组Android支持库,帮助你开发Android应用程序。

androidx 包完全取代了android.support 包,并且新的功能将被添加到androidx

import 当你使用androidx ,你需要更新你的Android源代码,用androidx.annotation 包替换所有android.support.annotation 包的语句。

下面是一个替换使用FloatRange 注释的import 语句的例子。

// import android.support.annotation.FloatRange;
import androidx.annotation.FloatRange;

public class Color {
@FloatRange(from=0.0,to=1.0)
public float makeOpaque() {
return (float) 0.5;
}
}

你可以尝试使用Android Studio的AndroidX迁移功能来帮助你自动完成这个过程,而不是逐个替换import 行。

在你迁移到AndroidX之前,请先将你的注解库依赖关系更新到28.0 版本。

dependencies {
 implementation 'com.android.support:support-annotations:28.0.0'
}

这是必须的,因为AndroidX版本1.0.0 ,相当于支持库版本28.0.0

如果你使用较少的支持库版本,在迁移后构建你的应用程序时可能会出现其他错误。

要开始迁移,在你的gradle.properties 文件中添加以下两行。

android.useAndroidX=true
android.enableJetifier=true

接下来,从你的Android Studio顶部菜单中选择Refactor > Migrate to AndroidX

一旦你完成审查并让Android Studio进行重构,所需的androidx 依赖项应该被添加到你的build.gradle 文件中。

你也应该看到import 行被替换成新的。

如果你在迁移到AndroidX后仍然看到构建错误,那么你需要手动替换import 语句。

右键点击你的应用程序包,打开上下文菜单,然后选择Replace in Files...菜单,如下所示。

Android Studio文件中的替换菜单

](android-studio-replace-files.png)

在弹出的窗口中,目标是用androidx.annotation 替换你所有的文件android.support.annotation

下面的截图应该有帮助。

替换安卓注解的导入

如果你想逐个审查重构,就点击替换,或者点击全部替换,一次性重构所有出现的情况。

现在注解库的问题应该已经解决了。

解决React Native应用程序中的注解错误

如果你正在使用React Native构建一个Android应用程序,那么你还需要在完成上述所有步骤后运行 jetifier包,然后完成上面所有的步骤。

注意:你需要使用Android Studio迁移React Native Android应用程序,在Android Studio中打开android/ 文件夹。

当你使用Android Studio迁移你的本地Java代码时,node_modules 文件夹中的React Native模块可能仍然包含使用Android支持库的代码。

jetifier 模块重构了包含在你的React Native应用程序中的Java代码,以使用androidx ,而不是android.support 命名空间。

使用Android Studio迁移到AndroidX后,用NPM运行以下步骤。

npm install --save-dev jetifier
npx jetify

或者如果你使用Yarn。

yarn add jetifier
yarn jetify

你的node_modules 文件夹中使用旧的Android支持库的import 语句将被替换为androidx

一旦完成,你应该可以运行你的React Native应用。

npx react-native run-android

你可能还想在你的postinstall 脚本中包含对jetify 的调用。

"scripts": {
"postinstall": "jetify"
}

当你用npm installnpm update 更新你的Node模块依赖时,你需要再次运行jetify 命令。

jetify 添加为postinstall 命令将使 Node 在安装后自动运行它。

现在你已经学会了如何在你的Android应用程序中修复android.support.annotation 包不存在的错误。

谢谢你的阅读!我希望这个教程对你有用。🙏