2016-12-14 17 views
53

После обновления до appcompat 25.1.0 Я начал получать проводные ошибки.AppCompatActivity.onCreate может быть вызван только из той же группы библиотек

В моем коде:

@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

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

+3

Кажется, что это ошибка: https://code.google.com/p/android/issues/detail?id=230387 –

ответ

48

Как уже указывал Фелипе в своем comment, это bug в предварительной версии инструментов.

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

android { 
    lintOptions { 
    disable 'RestrictedApi' 
    } 
} 

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

+4

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

56

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

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

//noinspection RestrictedApi 
+1

Я иду с этим. Я мог бы быть лучшим решением не отключать lintOptions по всему миру. Thx –

+2

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

+0

не может сказать, что, поскольку я использую последнюю бета-версию для всех своих проектов. И не нашел никакой проблемы – Killer

45

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

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

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