错误:包com.android.annotations不存在


79

我有以下课程

import com.android.annotations.NonNullByDefault;

@NonNullByDefault
public final class Log {
    ...
}

这是我的build.gradle文件(一些部分省略了)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion '24.0.1'

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 2
        versionName "0.2"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

}

dependencies {    
    compile 'com.android.support:appcompat-v7:25.0.0'
    compile 'com.android.support:support-annotations:25.0.0'
    compile 'com.android.support:design:25.0.0'
}

在Android Studio中,我的课程没有警告

在此处输入图片说明

但是,当我尝试构建和运行我的应用程序时,我从gradle中得到了此错误

Information:Gradle tasks [:app:clean, :app:generateDebugSources, :app:generateDebugAndroidTestSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:assembleDebug]
Warning:[options] bootstrap class path not set in conjunction with -source 1.7
/home/puter/git-repos/TaskManager3/app/src/main/java/com/treemetrics/taskmanager3/util/Log.java
Error:(3, 31) error: package com.android.annotations does not exist
Error:(7, 2) error: cannot find symbol class NonNullByDefault
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
Information:BUILD FAILED
Information:Total time: 21.021 secs
Information:3 errors
Information:1 warning
Information:See complete output in console

我没有迁移到X。还有RN版本9s 0.59.9。面对同样的问题
2012年

Answers:


137

自动修复React Native的所有android至androidx问题(必备npx)

下面的两个标志添加到true您的gradle.properties文件在ProjectFolder/android/gradle.properties

android.useAndroidX=true
android.enableJetifier=true

执行

npm install --save-dev jetifier
npx jetify
npx react-native run-android

在package.json中,将以下内容添加到脚本中

  "postinstall" : "npx jetify"

更多信息请参见https://github.com/mikehardy/jetifier

更新: 现在内置于本机0.60中。如果您迁移到本机反应0.60,则不需要此步骤。- https://facebook.github.io/react-native/blog/2019/07/03/version-60#androidx-support


1
谢谢你这么多,这个工具帮了我很多,救了我的时间,我希望我可以给你多一票
贝拉尔mazlom

从npx jetify启动时,首先安装npm。工作了 谢谢!
Ernestyno

1
这真太了不起了!由于某种原因,我正在加入的项目仍使用react-native 0.59.0,这是试图从github编译一些现有代码而失败时感到沮丧的原因。尽管决定迁移以响应本机0.60.0的任务不在我的掌控之中,但这里的“执行”功能块才是真正的救星!
陈李勇

救命!非常感谢!
线程池

1
@PavanGarre我不明白为什么这个没有被标记为答案。它对我来说就像一种魅力,我必须说,不是在一百万年内我会猜到的。谢啦。欣赏它。
ChiragMS

32

androidx.appcompat:appcompat:1.0.2在gradle中使用实现,然后

更改import android.support.annotation.Nullable;import androidx.annotation.NonNull;类导入


1
好的,我在不同的库文件中有100多个导入,该怎么办?
RajnishCoder '19

1
@RajnishCoder使用为您实现的jetifier。
BMX

是否需要将Nullable更改为NonNull,还是只是一个错字?
拉斐尔·皮内尔

17

打开gradle.properties并使用以下代码:

android.useAndroidX=false
android.enableJetifier=false

或U也可以使用以下依赖项:

implementation 'androidx.appcompat:appcompat:1.0.2'
 implementation 'androidx.annotation:annotation:1.0.2'

尝试将它们添加到依赖项下,但获取>找不到类型为org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler的参数[androidx.appcompat:appcompat:1.0.2]的方法compile()。
奥马尔S.19年

还尝试了实现而不是编译,出现同样的错误
Omar S.19年

12

迁移到androidx时,我遇到了类似的问题。

如果通过将下面两行添加到gradle.properties中不能解决问题

android.useAndroidX=true
android.enableJetifier=true

然后尝试

  1. 在Android Studio 3.2及更高版本中,您可以通过 从菜单栏(developer.android.com)中选择“重构”>“迁移到AndroidX”,将现有项目迁移到AndroidX

如果仍然遇到迁移问题,请手动尝试替换引起问题的库。

例如

如果您有问题,请按照以下类映射表中的指示进行android.support.annotation.NonNull更改androidx.annotation.NonNull

类映射

Maven工件映射


重构和从import android.support.annotation.NonNull;转变import androidx.annotation.NonNull;为对我有用。
Andriy Makukha,

9

就我而言,我不得不使用

import androidx.annotation...

代替

import android.annotation...

我迁移到AndroidX并忘记更改它。


3

迁移到androidx时,我遇到了类似的问题。出现此问题的原因是旧黄油刀库的依赖性。

如果使用黄油刀,则应至少使用9.0.0-SNAPSHOT或更高版本的黄油刀。

implementation 'com.jakewharton:butterknife:9.0.0-SNAPSHOT' annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-SNAPSHOT'


2

注释来自support's library打包在中的android.support.annotation

作为另一个选择,您可以使用@NonNull注释,该注释表示参数,字段或方法的返回值永远不能为null。
它是从进口的import android.support.annotation.NonNull;


我在build.gradle中更改compile 'com.android.support:support-annotations:25.0.0'compile 'com.android.support:support-v4:25.0.0',导入仍然读取,import com.android.annotations.NonNullByDefault;并且仍然出现错误。这是你在说什么吗?
摩西

顺便说一下,这些都是由Android Studio解决的自动导入。
摩西

如果正确解决了导入问题,则不应引发该错误。
桑杰(Sanjeet),2016年

这就是我的观点,为什么Android Studio这样解决导入问题而不用红色突出显示导入内容,但是gradle抛出错误?
摩西

2

您可以在此处找到该support-annotations库的官方javadoc 。

错误:(3,31)错误:包com.android.annotations不存在

如您所见,所有类都在同一个包中,android.support.annotation而不是com.android.annotations

错误:(7,2)错误:找不到符号类NonNullByDefault

而且该类在该软件包NonNullByDefault 中不存在


Android Studio会自动为我解决导入问题,因此它来自某处,但现在我不确定该在哪里。关于为什么会引发错误,这仍然是一个谜。
摩西

这对我不起作用。我更改了导入,而android会自动替换它。引起问题,因为它必须是androidx,但会放入android.support导入。
韦斯利

2

您不应该手动编辑任何代码jetify应该为您完成这项工作,如果您正在使用cli运行/构建,则react-native无需执行任何操作,但是如果您运行/构建Andriod studio,则需要运行jetify作为预构建,这是如何使它自动化:

1-从上面的菜单转到编辑配置:

在此处输入图片说明

2-在启动前添加您将发现的屏幕底部,单击加号,然后选择“运行外部工具”

在此处输入图片说明

2-填写以下信息,请注意工作目录是您的项目根目录(不是android目录):

在此处输入图片说明

3-确保先执行此操作,最后,您的配置应如下所示: 在此处输入图片说明


您可以通过命令行“NPX jetify”在Android项目的根目录运行此命令
法里德Alnamrouti

是的,我是从根本上做到的。由于某些原因,我必须手动运行npm jetify才能正确运行该应用程序。对于同一目录,android studio抛出该目录无法运行npx jetify错误。即使这是项目的根仓库。感谢您的关注。
桑杰·乔希

1

如果黄油刀自动生成的文件出错,则更新黄油刀依赖版本

implementation 'com.jakewharton:butterknife:10.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'

1

您需要做的就是将类导入中的“ import android.support.annotation.Nullable”替换为“ import androidx.annotation.Nullable;”。

多数民众赞成在任何情况下..只要出现任何导入问题...删除该导入,然后在相关类上按Alt + Enter ..这将为您提供“导入类”的选项。 。


0

对我来说,这是旧版本 npm

运行npm install npm@latest -g然后npm install


0

对于Ionic,请尝试以下操作:

ionic cordova plugin add cordova-plugin-androidx
ionic cordova plugin add cordova-plugin-androidx-adapter

出现错误是因为此应用未使用androidX,但这些插件解决了错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.