Android Studio同时添加了@ androidx.annotation和@ android.support.annotation问题

时间:2018-09-25 11:45:57

标签: android android-studio

我将Android Studio更新为版本3.2.0。

当我接受建议列表 alt +输入的任何更改。

  • 问题是@androidx.annotation自动创建的。
  • 因此,建议方法具有两个注释@androidx.annotation.Nullableandroid.support.annotation.Nullable
  • 我不想手动删除此不必要的建议,所以只有android.support.annotation怎么办?
  • androidx.annotation软件包也未添加到我的应用中。而且我不想添加androidx.annotation

请参阅示例。

import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

public class LoginActivity extends AppCompatActivity {
    @Override
    public void onCreate(@androidx.annotation.Nullable @Nullable Bundle savedInstanceState, @androidx.annotation.Nullable @Nullable PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
    }
}

是否有一些IDE设置可以删除自动生成的androidx.annotation

更新

我可以通过迁移到androidxfrom official doc)来摆脱这个问题,但是我目前无法将所有项目迁移到androidx。所以需要一个解决方案。

8 个答案:

答案 0 :(得分:7)

AndroidX是用于向后兼容支持的新扩展库。在将来的新功能中,将在AnddroidX中解决向后兼容性支持。如本博客https://android-developers.googleblog.com/2018/05/hello-world-androidx.html

所述
  

28.0.0的稳定版本将是打包为> android.support的最终功能版本。所有后续功能版本将仅以> androidx打包的工件形式提供。

https://developer.android.com/topic/libraries/support-library/revisions

  

修订28.0.0生产   (2018年9月21日)

     

这是Support Library 28.0.0的稳定版本,适合在生产中使用。这将是> android.support包装下的最后一个功能版本,鼓励开发人员迁移到> AndroidX。

将您的应用程序从android.support迁移到androidx打包的依赖项

请参阅此链接https://developer.android.com/jetpack/androidx/migrate

如果您依赖的库引用了较早的支持库,则Android Studio会通过依赖关系转换将该库更新为引用androidx。依赖关系转换是由Android Gradle插件3.2.0-alpha14自动应用的,它重写了JAR和AAR依赖关系(以及传递性依赖关系)的字节码和资源,以引用新的androidx打包的类和工件。我们还将提供独立的翻译工具JAR。

因此,在第1步(依赖关系转换)中:在gradle.properties文件中,将 android.useAndroidX 标志设置为true,并设置 android.enableJetifier < / strong>标记为true。

android.useAndroidX=true
android.enableJetifier=true

第2步(源重构)中在Android Studio 3.2及更高版本中,您可以通过从菜单栏中选择“重构”>“迁移到AndroidX”,快速迁移现有项目以使用AndroidX。

Refactor to Androidx from menu

答案 1 :(得分:5)

Android Studio具有首选项“从导入和完成中排除”,可用于禁止建议androidx软件包:

enter image description here

例如,在此屏幕截图中,我已将java.time软件包添加到此列表中,因为我希望我的自动填充功能建议org.threeten.bp.LocalDate而不是java.time.LocalDate

您应该可以将androidx.annotation添加到此列表中以解决您的问题。

答案 2 :(得分:1)

Android Studio只能导入类路径中包含的文件。其中包括Androidx库-值得庆幸的是,如果不存在此类,Studio将不会建议它们(这就是为什么我们其他人在我们的项目中看不到此问题的原因)。

话虽如此,这意味着您已经更新了gradle文件,使其包含包含androidx.annotation.NonNull的软件包

com.android.support:support-annotations根据migration guide变成了androidx.annotation:annotation:1.0.0,因此您可以在模块Gradle文件中查找该组。

最简单的解决方法是从Gradle中删除该软件包,然后进行清理和重建。

注意:如果您想使用支持注释,则最新和最好的版本是mentioned here的28版本

答案 3 :(得分:0)

support library release note所述。

  

这是Support Library 28.0.0的稳定版本,适用于   用于生产。这将是   android.support打包,鼓励开发人员迁移到   AndroidX。

您仍然可以使用支持人员的课程路径。 (记住要清洁和建造) 但强烈建议您迁移到AndroidX,因为28.0.0的支持是最新版本。

(记住,不是全部)

答案 4 :(得分:0)

使用Android Studio 3.3.1,我能够复制该问题。我的项目刚刚创建,没有AndroidX依赖项。创建第一个片段并覆盖onCreateView()时,Android Studio会自动将2个注释@androidx.annotation.Nullable@Nullable添加到方法中(没有提示提示可能的导入方式)。自动添加的唯一注释导入是import android.support.annotation.Nullable;

如果您不希望migrate to AndroidX,那么此修复程序对我有用:

  • 手动删除所有@androidx.annotation.Nullable注释,仅保留原始的@Nullable注释。

  • 执行File > Invalidate Caches / Restart

在应用中创建新的片段时,将仅添加原始支持库的@Nullable注释。

答案 5 :(得分:0)

只需将annotationProcessor 'androidx.annotation:annotation:1.1.0'添加为您的build.gradle(Module: app)文件中的依赖项即可。

答案 6 :(得分:0)

我首先要说我是一个非常新手的闹剧爱好者,但是这个问题使我陷于困境,并且解决了一段时间后仍找不到解决方案。

每个人都在谈论将依赖项添加到build.griddle文件中,如果这很好用,对我来说,直到我更改了实际的导入列表(API 28)并将其从...更改为...

导入android.support.annotation.Nullable;

import androidx.annotation.Nullable;

我必须做很多即兴的工作才能找到新目录,因为它们似乎没有在我可以轻松找到的任何地方列出。

Fragment,FragmentManager,DialogueFragment以及许多其他情况也是如此。我希望这可以帮助像我一样遭受痛苦的人!

答案 7 :(得分:0)

由于在更新到 Android studio 4.2.1(或者可能是 4.2?)后出现了这个问题,我在这里添加了修复它的方法,对于任何偶然发现这个问题的人,就像我一样。

我最近开始获得双空性注释,如本问题所述。

要修复它,请执行以下操作:

  1. 转到 Android Studio 首选项
  2. 转到编辑器 > 检查
  3. 转到 Java > 可能的错误 > 可空性问题 > @NotNull/@Nullable 问题
  4. 按“配置注释”按钮
  5. 在顶部框中选择“androidx.annotation.Nullable”,然后点击框下方的勾选按钮,标题为“选择用于代码生成的注释”
  6. 对底部框中的“androidx.annotation.NonNull”执行相同的操作。
  7. 按确定

Android studio 现在应该只在生成代码时使用 androidx 注释。