AppCompatActivity.onCreate можна викликати лише з однієї групи бібліотек


107

Після оновлення до appcompat 25.1.0я почав отримувати провідні помилки.

У моєму коді:

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

Я отримую помилку помилки:

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

Як запобігти такій поведінці?


6
замінити invalidateOptionsMenu()на supportInvalidateOptionsMenu(). вона повинна виконати цю роботу
ᴛʜᴇᴘᴀᴛᴇʟ

1
Я не використовую таких методів у своєму коді
піксель

Відповіді:


94

Як вже зазначив Феліпе у своєму коментарі, це помилка у передвипускній версії інструментів.

Ви можете вирішити це поки, поки Google не випустить виправлення, додавши в файл build.gradle вашого модуля проекту:

android {
  lintOptions {
    disable 'RestrictedApi'
  }
}

Варто зазначити, що це може приховати справжні помилки у вашому проекті, оскільки це пригнічує всі помилки цього типу, тому кращим варіантом було б зменшити версію Android Studio та інструменти, що використовуються в проекті.


5
Я б запропонував відповідь @ Cbr нижче, він лише придушує на рівні методу, і він працює на Android Studio 3, на відміну від цього //noinspection RestrictedApi.
Сакібой

137

Як підкреслювали попередні відповіді, це помилка. Я рекомендую не вимикати конкретні проекти попередження про ворсинки, але лише для цього методу. Повідомте про свій метод таким чином:

@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
Цю відповідь слід використовувати. Ніколи не гарна ідея робити глобальний відключення проекту.
Крістофер Сміт

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

64

Вимкнення попередження в lintOptions не виглядає найкращим варіантом, краще придушити перевірку на рівні заяви.

Додайте цей коментар над рядком коду, який дає попередження:

//noinspection RestrictedApi

2
Я йду з цим. Я можу бути кращим рішенням не вимкнути lintOptions в усьому світі. Thx
Йорако Гонзалес

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.