【问题标题】:error: package com.android.annotations does not exist错误:包 com.android.annotations 不存在
【发布时间】:2017-03-15 19:10:55
【问题描述】:

我有以下课程

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

【问题讨论】:

标签: android react-native android-studio gradle android-gradle-plugin


【解决方案1】:

为 React Native 自动修复所有 android 到 androidx 的问题(先决条件 npx)

在gradle.properties 文件ProjectFolder/android/gradle.properties 中的true 中添加以下两个标志

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

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

【讨论】:

  • 非常感谢,这个工具帮了我很多,节省了我的时间,希望我能给你更多的投票
  • 首先安装npm,从npx jetify启动。工作。谢谢!
  • 这太棒了!出于某种原因,我加入的项目仍在使用 react-native 0.59.0,这是我在尝试从 github 编译一些现有代码并失败时感到沮丧的根源。虽然迁移到 react native 0.60.0 的决定不在我手中,但这里的“执行”块是实时保护程序!
  • 救命稻草!非常感谢!
  • @PavanGarre 我不明白为什么这没有被标记为答案。它对我来说就像一种魅力,我必须说,在一百万年后我不会猜到它。谢啦。欣赏它。
【解决方案2】:

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

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

【讨论】:

  • 好的,我在库的不同文件中有超过 100 个导入,该怎么办?
  • @RajnishCoder 使用 jetifier 为你做这件事。
  • 是否需要将Nullable改为NonNull,还是只是拼写错误?
【解决方案3】:

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

android.useAndroidX=false
android.enableJetifier=false

或者你也可以使用这些依赖:

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

【讨论】:

  • 试图将它们添加到依赖项下,但在 org.gradle.api.internal 类型的对象上找不到参数 [androidx.appcompat:appcompat:1.0.2] 的方法 compile()。 artifacts.dsl.dependencies.DefaultDependencyHandler.
  • 也尝试了实现而不是编译,同样的错误
【解决方案4】:

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

如果通过将以下两行添加到 gradle.properties 没有解决问题

android.useAndroidX=true
android.enableJetifier=true

那就试试吧

  1. 使用 Android Studio 3.2 及更高版本,您可以通过从菜单栏中选择 Refactor > Migrate to AndroidX 将现有项目迁移到 AndroidX (developer.android.com)

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

例如

如果您对android.support.annotation.NonNull 有疑问,请将其更改为androidx.annotation.NonNull,如下面的类映射表所示。

Class Mappings

Maven Artifact Mappings

【讨论】:

  • 重构和从 import android.support.annotation.NonNull; 更改为 import androidx.annotation.NonNull; 都为我工作。
  • 谢谢。类和工件映射的链接是我多年来一直在寻找的。​​span>
【解决方案5】:

就我而言,我不得不使用

import androidx.annotation...

而不是

import android.annotation...

我迁移到 AndroidX 却忘记更改了。

【讨论】:

    【解决方案6】:

    只需安装(它会自动修复)

    npm install --save-dev jetifier <--------avoid if aleardy installed start from below lines
    npx jetify
    

    然后运行

    npx cap sync
    

    终于

      npx react-native run-android
    
      
    

    【讨论】:

      【解决方案7】:

      您不应该手动编辑任何代码 jetify 应该为您完成这项工作,如果您使用 react-native 从 cli 运行/构建,您不需要做任何事情,但如果您正在运行/building Andriod studio 你需要运行 jetify 作为预构建,这里是你如何自动化这个:

      1- 从上面的菜单进入编辑配置:

      2- 添加屏幕底部你会发现启动前点击加号并选择运行外部工具

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

      3- 确保在其他任何事情之前运行,最后,您的配置应该如下所示:

      【讨论】:

      • 你能从Android项目根目录下的命令行“npx jetify”运行这个命令吗
      • 是的,我在根级别上做到了。出于某种原因,我必须手动运行 npm jetify 才能正确运行应用程序。对于同一目录,android studio 在目录上抛出 can't run npx jetify 错误。即使它是项目根仓库。感谢您的关注。
      【解决方案8】:

      我在迁移到 androidx 时遇到了类似的问题。这个问题是由于旧黄油刀库依赖造成的。

      如果您使用的是黄油刀,那么您应该至少使用 9.0.0-SNAPSHOT 或更高版本的黄油刀。

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

      【讨论】:

        【解决方案9】:

        对于 Ionic,试试这个:

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

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

        【讨论】:

          【解决方案10】:

          注释来自support's library,它们封装在android.support.annotation 中。

          作为另一种选择,您可以使用@NonNull 注释,它表示参数、字段或方法的返回值永远不能为空。
          从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 解决的自动导入。
          • 如果正确解析导入,则不应引发错误。
          • 这就是我的意思,为什么 Android Studio 会像这样解析导入,而不是用红色下划线,但 gradle 却抛出错误?
          【解决方案11】:

          你可以找到heresupport-annotationslibrary 的官方javadoc。

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

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

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

          还有类NonNullByDefault在那个包中不存在。

          【讨论】:

          • Android Studio 会自动为我解析导入,所以它来自某个地方,但现在我不确定在哪里。至于为什么会抛出错误,这仍然是一个谜。
          • 这对我不起作用。我更改了导入,android 会自动替换它。导致问题,因为它需要是 androidx 但放置 android.support 导入。
          【解决方案12】:

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

          这是一种常见的做法..每当有任何导入问题...删除该导入并只需在相关类上按 Alt+Enter 即可..这将为您提供“导入类”的选项..提示 Enter 会得到解决了...

          【讨论】:

            【解决方案13】:

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

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

            【讨论】:

              【解决方案14】:

              对我来说,这是npm 的旧版本。

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

              【讨论】:

                猜你喜欢
                • 2017-09-25
                • 2011-10-03
                • 1970-01-01
                • 2014-10-02
                • 2016-06-01
                • 2018-06-21
                • 2020-03-13
                • 2015-06-20
                相关资源
                最近更新 更多