Android Studio添加了@androidx.annotation和@android.support.annotation两个注释的问题

24

我将Android Studio升级到版本3.2.0。

当我从建议列表或使用alt + enter键接受更改时,

  • @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?

更新

我通过迁移到androidx来自官方文档)解决了这个问题,但目前无法将所有项目迁移到androidx。所以需要一个解决方案。


1
@JeelVankhede,您可以查看文档 - “如果未指定,则标志默认为false。”,因此这些行是不必要的。无论如何,我也尝试过这个。 - Khemraj Sharma
1
@Redman 祝你享受派对 :D - Khemraj Sharma
1
@Mohsen 感谢您的帮助,但我不知道这与我的问题有什么关系。 - Khemraj Sharma
1
@Mohsen 1. 我没有迁移到androidx,我只是更新了AS。2. 我也尝试了这个设置,但没有变化。3. 我的项目没有依赖androidx注释。 - Khemraj Sharma
1
@Mohsen,我刚刚又尝试了一下新项目。这个问题也发生在我身上了,是IDE的一个bug。我会报告这个问题的。我想知道是否有一个快速的解决方法来解决这个问题。 - Khemraj Sharma
显示剩余8条评论
9个回答

13

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

28.0.0版的稳定发布将作为“android.support”包装的最终功能发布。随后的所有功能发布将仅作为“androidx-packaged artifacts”提供。

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

版本28.0.0 Production (2018年9月21日)

这是Support Library 28.0.0的稳定版本,适用于生产使用。这将是“android.support packaging”下的最后一个功能发布,鼓励开发人员迁移到AndroidX。

将应用程序从android.support迁移到androidx-packaged依赖项

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

如果您依赖引用旧版Support Library的库,则Android Studio将通过依赖项转换将该库更新为使用androidx。依赖项转换是由Android Gradle插件3.2.0-alpha14自动应用的,它会重写JAR和AAR依赖项(以及传递依赖项)的字节码和资源,以引用新的androidx-packaged类和artifacts。我们还将提供一个独立的转换工具作为JAR。

因此,在第1步(依赖项转换)中:在gradle.properties文件中将android.useAndroidX标志设置为true,将android.enableJetifier标志设置为true。

android.useAndroidX=true
android.enableJetifier=true

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

从菜单中重构到Androidx


3
为什么会出现错误:“找不到满足版本约束条件的'androidx.annotation:annotation'版本”? - IgorGanapolsky
2
迁移到AndroidX:在此页面下的“构件映射”中搜索“旧构建构件”,例如在您的情况下,“com.android.support:support-annotations”。然后将其替换为相应的AndroidX构建构件,这里是androidx.annotation:annotation:1.0.0,在您的应用gradle依赖项中实现'androidx.annotation:annotation:1.0.0'。 - K.Anam
没有使用Android Studio,如何做到? - red-devil

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

在 app/build.gradle 中添加在哪里? - red-devil
1
@red-devil 在你的依赖中,就像使用“implementation”一样,使用“annotationProcessor”。 - Itiel Maimon

5

Android Studio有一个偏好选项“从导入和完成中排除”,您可以使用它来抑制androidx包的建议:

enter image description here

例如,在此屏幕截图中,我已将 java.time 包添加到此列表中,因为我希望我的自动完成建议 org.threeten.bp.LocalDate 而不是 java.time.LocalDate
您应该能够将 androidx.annotation 添加到此列表中以解决您的问题。

3
还是一样的,兄弟。我排除了 androidx.annotation,但当我输入某些方法并从建议中覆盖它时,它会添加 androidx.annotationandroid.support.annotation 两个。 - Khemraj Sharma

4

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

也就是说,这里的含义是您已更新gradle文件以包含androidx.annotation.NonNull所在的包。

com.android.support:support-annotations根据迁移指南变为androidx.annotation:annotation:1.0.0,因此您可以在模块Gradle文件中查找此组。

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

注意:如果您想坚持使用支持注释,则最新版本是28,如此处所述


1
使用 Android Studio Arctic Fox(相当于版本 4.3)。我没有将我的项目迁移到 AndroidX。对我有用的是添加。
implementation 'androidx.annotation:annotation:1.1.0'

到应用级别的build.gradle文件。


1
使用Android Studio 3.3.1,我成功复制了这个问题。我的项目刚刚创建,并没有依赖AndroidX。当我创建第一个片段并覆盖了onCreateView()时,Android Studio会自动将2个注释@androidx.annotation.Nullable@Nullable添加到该方法中(没有提示给出可能的导入选择)。唯一自动添加的注释导入是import android.support.annotation.Nullable; 如果您不想迁移到AndroidX,这里有一个解决方法,适用于我:
  • 手动删除所有@androidx.annotation.Nullable注释,只留下原始的@Nullable注释。

  • 执行File > Invalidate Caches / Restart

当应用程序创建一个新的Fragment时,只会添加原始Support Library的@Nullable注释。

0

支持库发布说明所述。

这是支持库28.0.0的稳定版本,适用于生产环境。这将是android.support打包下的最后一个功能版本,建议开发人员迁移到AndroidX。

您仍然可以使用support的类路径。(记得清理和构建) 但强烈建议您迁移到AndroidX,因为28.0.0的support是最后一个版本。

(记住,不要同时使用两个库)


在哪里设置类路径? - IgorGanapolsky

0

我先说一下,我是一个非常新手的闹剧爱好者,但是同样的问题让我陷入了困境,而且已经解决了很长时间,我找不到解决方案。

每个人都谈论将依赖项添加到 build.griddle 文件中,如果这有效果,那太好了,但对我来说从未生效,直到我改变了实际的导入列表(API 28)并将它们从...

import android.support.annotation.Nullable;

-到-

import androidx.annotation.Nullable;

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

Fragment、FragmentManager、DialogueFragment 等等也是如此。我希望这可以帮助像我一样遭受痛苦的人!


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. 按下OK

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接