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
Я не использую в своем коде такие методы
пиксель
3
Похоже, это ошибка: code.google.com/p/android/issues/detail?id=230387
Фелипе Лима,

Ответы:

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
}
ДимитрисCBR
источник
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