Android Studio добавляет проблемы @androidx.annotation и @android.support.annotation

Я обновил Android Studio до версии 3.2.0.

Когда я принимаю любые изменения из списка предложений или alt + enter.

  • Проблема заключается в @androidx.annotation.
  • Таким образом, метод предложений имеет две аннотации @androidx.annotation.Nullable и android.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

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 Производство (21 сентября 2018 г.)

Это стабильный выпуск библиотеки поддержки 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 - значение true.

android.useAndroidX=true
android.enableJetifier=true

на шаге 2 (рефакторинг исходного кода): в Android Studio 3.2 и более поздних версиях вы можете быстро перенести существующий проект в AndroidX, выбрав "Рефакторинг"> "Перенос в AndroidX" в строке меню.

Refactor to Androidx from menu

Ответ 2

Android Studio имеет параметр предпочтения "Исключить из импорта и завершения", который можно использовать для подавления предложения пакетов androidx:

enter image description here

Например, на этом java.time я добавил пакет java.time в этот список, потому что я хочу, чтобы в автозаполнении предлагалось org.threeten.bp.LocalDate но не java.time.LocalDate.

Вы должны иметь возможность добавить androidx.annotation в этот список, чтобы решить вашу проблему.

Ответ 3

Android Studio может импортировать только файлы, которые включены в ваш путь к классам. Это включает в себя библиотеки Androidx - к счастью, если классов нет, Studio не предложит их (именно поэтому остальные из нас не видят этой проблемы в наших проектах).

При этом подразумевается, что вы обновили свой файл gradle, включив в него пакет, содержащий androidx.annotation.NonNull

com.android.support:support-annotations стал androidx.annotation:annotation:1.0.0 соответствии с руководством по миграции, поэтому вы можете искать эту группу в своем файле Gradle модуля.

Самое простое исправление - удалить этот пакет из Gradle, затем очистить и перестроить.

Примечание. Если вы хотите придерживаться аннотаций поддержки, то последняя и самая большая версия - 28, как указано здесь

Ответ 4

Просто добавьте annotationProcessor 'androidx.annotation:annotation:1.1.0' в качестве зависимости в ваш build.gradle(Module: app).

Ответ 5

Как указано в примечании к выпуску библиотеки поддержки.

Это стабильный выпуск Support Library 28.0.0 и подходит для использования в производстве. Это будет последний выпуск функций под упаковкой android.support, и разработчикам рекомендуется перейти на AndroidX.

Вы все равно можете использовать путь класса поддержки. (не забудьте очистить и построить) Но настоятельно рекомендуем перейти на AndroidX, так как 28.0.0 поддержки - последняя версия.

(помните, НЕ ОБА)

Ответ 6

Используя Android Studio 3.3.1, я смог воспроизвести проблему. Мой проект только что был создан, без зависимости от AndroidX. Когда я создал первый фрагмент и onCreateView(), Android Studio в метод автоматически добавили 2 аннотации @androidx.annotation.Nullable и @Nullable (подсказка не указана с возможным выбором импорта). Единственный автоматически добавленный import android.support.annotation.Nullable; аннотаций был import android.support.annotation.Nullable;

Если вы не хотите переходить на AndroidX, вот исправление, которое сработало для меня:

  • @androidx.annotation.Nullable аннотации @androidx.annotation.Nullable вручную, оставив только оригинальные аннотации @Nullable.

  • Do File > Invalidate Caches/Restart

Когда в приложении будет создан новый фрагмент, будет добавлена только оригинальная аннотация библиотеки поддержки @Nullable.

Ответ 7

Я начну с того, что я очень начинающий любитель фарса, но эта та же самая проблема застряла у меня, и она была решена в течение некоторого времени, и я не мог найти решение.

Все говорят о добавлении зависимостей в ваши файлы build.griddle, и если это работает отлично, у меня никогда не было необходимости, пока я не изменил фактические списки импорта (API 28) и изменил их с...

import android.support.annotation.Nullable;

-До-

импорт androidx.annotation.Nullable;

Мне пришлось много импровизировать, чтобы найти новые каталоги, потому что, кажется, их не было нигде в списке.

Это также относится к Fragment, FragmentManager, DialogueFragment и многим другим. Я надеюсь, что это помогает кому-то страдать, как я был!