AppCompatActivity.onCreate solo se puede llamar desde dentro del mismo grupo de bibliotecas


107

Después de actualizar a appcompat 25.1.0, comencé a recibir errores de cableado.

En mi codigo:

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

Me sale un error de pelusa:

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

¿Cómo prevenir tal comportamiento?


6
reemplazar invalidateOptionsMenu()con supportInvalidateOptionsMenu(). debería hacer el trabajo
ᴛʜᴇᴘᴀᴛᴇʟ

1
No uso tales métodos en mi código
píxel

Respuestas:


94

Como Felipe ya señaló en su comentario, este es un error en la versión preliminar de las herramientas.

Puede solucionarlo por ahora, hasta que Google publique una solución, agregando lo siguiente en el archivo build.gradle de su módulo de proyecto:

android {
  lintOptions {
    disable 'RestrictedApi'
  }
}

Vale la pena señalar que esto puede ocultar errores verdaderos en su proyecto, ya que suprime todos los errores de ese tipo, por lo que la mejor opción sería degradar la versión de Android Studio y las herramientas utilizadas en el proyecto.


5
Sugeriría la respuesta de @ Cbr a continuación, solo se suprime a nivel de método y funciona en Android Studio 3, a diferencia de //noinspection RestrictedApi.
Sakiboy

137

Como destacaron las respuestas anteriores, es un error. Recomiendo no deshabilitar la advertencia de pelusa específica en todo el proyecto, sino solo para ese método. Anote su método de la siguiente manera:

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

4
Esta respuesta es mejor porque no se deshabilita globalmente, resuelve el error / advertencia en el IDE y, en el momento de la compilación, es fácil de entender porque se enumera explícitamente en la parte superior del método (a diferencia de lo //noinspection RestrictedApique está oculto como comentario, y solo silencia la advertencia en el IDE, pero no en el momento de la compilación) y funciona con la versión más reciente de Android Studio y Gradle.
Sakiboy

1
Esta respuesta debe usarse. Nunca es una buena idea hacer una desactivación global en el proyecto.
Christopher Smit

1
También puede usar esta anotación solo en la línea en la que la necesita en lugar de suprimirla para todo el método
Ben Kane

64

Deshabilitar la advertencia en lintOptions no parece una buena opción, es mejor suprimir la inspección a nivel de declaración.

Agregue este comentario sobre la línea de código que da la advertencia:

//noinspection RestrictedApi

2
Voy con este. Podría ser la mejor solución para no deshabilitar lintOptions globalmente. Thx
Yoraco Gonzales

4
No funciona en Android Studio 3. ¿Hubo algunos cambios?
vovahost

13
@vovahost que uso en @SuppressLint("RestrictedApi")lugar de //noinspection RestrictedApisin problemas en Android Studio 3
vector

1
Sí, claro, ese también funciona para mí, pero // noinspection funciona solo para una declaración, que es mejor.
vovahost

1
@Sakiboy La solución de Cbr se aplica a todo el método que no quería usar porque puede ocultar otros errores.
vovahost
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.