AppCompatActivity.onCreate può essere chiamato solo dall'interno dello stesso gruppo di librerie


107

Dopo l'aggiornamento a appcompat 25.1.0ho iniziato a ricevere errori cablati.

Nel mio codice:

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

Ottengo un errore di lanugine:

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

Come prevenire tale comportamento?


6
sostituire invalidateOptionsMenu()con supportInvalidateOptionsMenu(). dovrebbe fare il lavoro
ᴛʜᴇᴘᴀᴛᴇʟ

1
Non utilizzo questi metodi nel mio codice
pixel

Risposte:


94

Come Felipe ha già sottolineato nel suo commento, questo è un bug nella versione pre-release degli strumenti.

Puoi aggirare il problema per ora, fino a quando Google non rilascia una correzione, aggiungendo quanto segue nel file build.gradle del modulo del tuo progetto:

android {
  lintOptions {
    disable 'RestrictedApi'
  }
}

Vale la pena notare che questo potrebbe nascondere i veri errori nel progetto poiché sopprime tutti gli errori di quel tipo, quindi l'opzione migliore sarebbe quella di eseguire il downgrade della versione di Android Studio e degli strumenti utilizzati nel progetto.


5
Suggerirei la risposta di @ Cbr di seguito, sopprime solo a livello di metodo e funziona su Android Studio 3, a differenza di //noinspection RestrictedApi.
Sakiboy

137

Come evidenziato nelle risposte precedenti, si tratta di bug. Consiglio di non disabilitare l'avviso di lanugine specifico a livello di progetto, ma solo per quel metodo. Annota il tuo metodo come segue:

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

4
Questa risposta è la migliore perché non disabilita a livello globale, risolve l'errore / avviso nell'IDE e in fase di compilazione, è facile da capire perché è esplicitamente elencato nella parte superiore del metodo (a differenza del //noinspection RestrictedApiquale è nascosto come commento e silenzia solo l'avviso nell'IDE, ma non in fase di compilazione) e funziona con la versione più recente di Android Studio e Gradle.
Sakiboy

1
Questa risposta dovrebbe essere usata. Non è mai una buona idea fare una disabilitazione globale sul progetto.
Christopher Smit

1
Puoi anche usare questa annotazione solo sulla riga su cui ti serve invece di sopprimerla per l'intero metodo
Ben Kane

64

Disabilitare l'avviso in lintOptions non sembra una buona opzione, è meglio sopprimere l'ispezione a livello di istruzione.

Aggiungi questo commento sopra la riga di codice che dà l'avviso:

//noinspection RestrictedApi

2
Vado con questo. Potrei essere la soluzione migliore per non disabilitare lintOptions a livello globale. Thx
Yoraco Gonzales

4
Non funziona in Android Studio 3. Sono state apportate alcune modifiche?
vovahost

13
@vovahost che uso @SuppressLint("RestrictedApi")invece di //noinspection RestrictedApisenza problemi in Android Studio 3
vettore

1
Sì certo, quello funziona anche per me, ma // noinspection funziona solo per un'istruzione che è meglio.
vovahost

1
@Sakiboy La soluzione di Cbr si applica all'intero metodo che non volevo usare perché potrebbe nascondere altri errori.
vovahost
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.