AppCompatActivity.onCreate можно вызывать только из той же группы библиотек


109

После обновления до appcompat 25.1.0у меня начались ошибки проводной связи.

В моем коде:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

Я получаю ошибку lint:

AppCompatActivity.onCreate can only be called from within the same library group (groupId=com.android.support)

Как предотвратить такое поведение?


6
заменить invalidateOptionsMenu()на supportInvalidateOptionsMenu(). он должен делать свою работу
ᴛʜᴇᴘᴀᴛᴇʟ

1
Я не использую в своем коде такие методы
пиксель

Ответы:


95

Как уже отмечал Фелипе в своем комментарии, это ошибка в предварительной версии инструментов.

Вы можете обойти это сейчас, пока Google не выпустит исправление, добавив следующее в файл build.gradle вашего модуля проекта:

android {
  lintOptions {
    disable 'RestrictedApi'
  }
}

Стоит отметить, что это может скрыть истинные ошибки в вашем проекте, поскольку подавляет все ошибки этого типа, поэтому лучшим вариантом было бы понизить версию Android Studio и инструментов, используемых в проекте.


5
Я бы предложил ответ @Cbr ниже, он подавляет только на уровне метода и работает на Android Studio 3, в отличие от //noinspection RestrictedApi.
Сакибой

138

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

@SuppressLint("RestrictedApi")
@Override
public void setupDialog(Dialog dialog, int style) {
    super.setupDialog(dialog, style);
    //your code here
}

4
Этот ответ лучше всего, потому что он не отключается глобально, он решает ошибку / предупреждение в среде IDE и во время компиляции, его легко понять, потому что он явно указан в верхней части метода (в отличие от того, //noinspection RestrictedApiкоторый скрыт как комментарий, и заглушает предупреждение только в среде IDE, но не во время компиляции), и он работает с новейшей версией Android Studio и Gradle.
Сакибой

1
Этот ответ следует использовать. Никогда не стоит делать глобальное отключение проекта.
Christopher Smit

1
Вы также можете использовать эту аннотацию только для нужной вам строки вместо подавления для всего метода
Бен Кейн,

65

Отключение предупреждения в lintOptions не выглядит хорошим вариантом, лучше отключить проверку на уровне оператора.

Добавьте этот комментарий над строкой кода, которая дает предупреждение:

//noinspection RestrictedApi

2
Я пойду с этим. Я мог бы быть лучшим решением, чтобы не отключать lintOptions глобально. Thx
Yoraco Gonzales

4
Не работает в Android Studio 3. Были ли изменения?
vovahost

13
@vovahost я использую @SuppressLint("RestrictedApi")вместо //noinspection RestrictedApiбез проблем в Android Studio 3
вектор

1
Да, конечно, это тоже работает для меня, но // noinspection работает только для одного оператора, что лучше.
vovahost

1
@Sakiboy Решение Cbr применимо ко всему методу, который я не хотел использовать, потому что он может скрыть другие ошибки.
vovahost
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.