AppCompatActivity.onCreate ne peut être appelé qu'à partir du même groupe de bibliothèques

108

Après la mise à niveau vers appcompat, 25.1.0j'ai commencé à recevoir des erreurs câblées.

Dans mon code:

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

J'obtiens une erreur de peluche:

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

Comment éviter un tel comportement?

pixel
la source
6
remplacer invalidateOptionsMenu()par supportInvalidateOptionsMenu(). ça devrait faire l'affaire
ᴛʜᴇᴘᴀᴛᴇʟ
1
Je n'utilise pas de telles méthodes dans mon code
pixel
3
On dirait que c'est un bug: code.google.com/p/android/issues/detail?id=230387
Felipe Lima

Réponses:

95

Comme Felipe l'a déjà souligné dans son commentaire, il s'agit d'un bogue dans la version préliminaire des outils.

Vous pouvez contourner le problème pour le moment, jusqu'à ce que Google publie un correctif, en ajoutant ce qui suit dans le fichier build.gradle de votre module de projet:

android {
  lintOptions {
    disable 'RestrictedApi'
  }
}

Il convient de noter que cela peut masquer les vraies erreurs dans votre projet car il supprime toutes les erreurs de ce type, donc la meilleure option serait de rétrograder la version d'Android Studio et les outils utilisés dans le projet.

Martin
la source
5
Je suggérerais la réponse de @ Cbr ci-dessous, cela ne supprime qu'au niveau de la méthode, et cela fonctionne sur Android Studio 3, contrairement //noinspection RestrictedApi.
Sakiboy
137

Comme les réponses précédentes l'ont souligné, il s'agit d'un bug. Je recommande de ne pas désactiver l'avertissement de peluche spécifique à l'échelle du projet, mais uniquement pour cette méthode. Annotez votre méthode comme suit:

@SuppressLint("RestrictedApi")
@Override
public void setupDialog(Dialog dialog, int style) {
    super.setupDialog(dialog, style);
    //your code here
}
DimitrisCBR
la source
4
Cette réponse est meilleure car elle ne se désactive pas globalement, elle résout l'erreur / l'avertissement dans l'EDI et au moment de la compilation, elle est facile à comprendre car elle est explicitement répertoriée en haut de la méthode (contrairement à //noinspection RestrictedApice qui est masqué en tant que commentaire, et fait taire uniquement l'avertissement dans l'EDI, mais pas au moment de la compilation), et il fonctionne avec la dernière version d'Android Studio et Gradle.
Sakiboy
1
Cette réponse doit être utilisée. Jamais bonne idée de faire une désactivation globale sur le projet.
Christopher Smit
1
Vous pouvez également utiliser cette annotation uniquement sur la ligne sur laquelle vous en avez besoin au lieu de la supprimer pour toute la méthode
Ben Kane
65

La désactivation de l'avertissement dans lintOptions ne semble pas une bonne option, il est préférable de supprimer l'inspection au niveau de l'instruction.

Ajoutez ce commentaire au-dessus de la ligne de code qui donne l'avertissement:

//noinspection RestrictedApi
Tueur
la source
2
Je vais avec celui-ci. Je pourrais être la meilleure solution pour ne pas désactiver globalement les lintOptions. Thx
Yoraco Gonzales
4
Ne fonctionne pas dans Android Studio 3. Y a-t-il eu des changements?
vovahost
13
@vovahost que j'utilise @SuppressLint("RestrictedApi")au lieu de //noinspection RestrictedApisans problème dans Android Studio 3
vecteur
1
Oui bien sûr, celui-là fonctionne pour moi aussi mais la // non-inspection ne fonctionne que pour une seule déclaration, ce qui est mieux.
vovahost
1
@Sakiboy La solution du Cbr s'applique à toute la méthode que je ne voulais pas utiliser car elle peut masquer d'autres erreurs.
vovahost