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?

pixel
fuente
6
reemplazar invalidateOptionsMenu()con supportInvalidateOptionsMenu(). debería hacer el trabajo
ᴛʜᴇᴘᴀᴛᴇʟ
1
No uso tales métodos en mi código
píxel
3
Parece que es un error: code.google.com/p/android/issues/detail?id=230387
Felipe Lima

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.

Martín
fuente
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
}
DimitrisCBR
fuente
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
Asesino
fuente
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