AppCompatActivity.onCreate kann nur innerhalb derselben Bibliotheksgruppe aufgerufen werden

106

Nach dem Upgrade auf appcompat 25.1.0habe ich verkabelte Fehler bekommen.

In meinem Code:

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

Ich erhalte einen Flusenfehler:

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

Wie kann ein solches Verhalten verhindert werden?

Pixel
quelle
6
ersetzen invalidateOptionsMenu()durch supportInvalidateOptionsMenu(). es sollte den Job machen
ᴛʜᴇᴘᴀᴛᴇʟ
1
Ich benutze solche Methoden nicht in meinem Code
Pixel
3
Klingt nach einem Fehler: code.google.com/p/android/issues/detail?id=230387
Felipe Lima

Antworten:

94

Wie Felipe bereits in seinem Kommentar betont hat, handelt es sich um einen Fehler in der Vorabversion der Tools.

Sie können dies zunächst umgehen, bis Google einen Fix veröffentlicht, indem Sie Folgendes in die build.gradle-Datei Ihres Projektmoduls einfügen:

android {
  lintOptions {
    disable 'RestrictedApi'
  }
}

Es ist erwähnenswert, dass dies echte Fehler in Ihrem Projekt verbergen kann, da alle Fehler dieses Typs unterdrückt werden. Die bessere Option wäre daher, die Version von Android Studio und die im Projekt verwendeten Tools herunterzustufen.

Martin
quelle
5
Ich würde die Antwort von @ Cbr unten vorschlagen, sie wird nur auf Methodenebene unterdrückt und funktioniert im Gegensatz zu Android Studio 3 //noinspection RestrictedApi.
Sakiboy
136

Wie in früheren Antworten hervorgehoben, handelt es sich um einen Fehler. Ich empfehle, die spezifische Flusenwarnung nicht projektweit zu deaktivieren, sondern nur für diese Methode. Kommentieren Sie Ihre Methode wie folgt:

@SuppressLint("RestrictedApi")
@Override
public void setupDialog(Dialog dialog, int style) {
    super.setupDialog(dialog, style);
    //your code here
}
DimitrisCBR
quelle
3
Diese Antwort ist am besten, weil sie nicht global deaktiviert wird, den Fehler / die Warnung in der IDE löst und zum Zeitpunkt der Kompilierung leicht zu verstehen ist, da sie explizit oben in der Methode aufgeführt ist (im Gegensatz zu //noinspection RestrictedApider, die als Kommentar ausgeblendet ist, und Die Warnung wird nur in der IDE stummgeschaltet, jedoch nicht zur Kompilierungszeit. Sie funktioniert mit der neuesten Version von Android Studio und Gradle.
Sakiboy
Diese Antwort sollte verwendet werden. Nie eine gute Idee, eine globale Deaktivierung des Projekts durchzuführen.
Christopher Smit
Sie können diese Anmerkung auch nur in der Zeile verwenden, in der Sie sie benötigen, anstatt sie für die gesamte Methode zu unterdrücken
Ben Kane,
64

Das Deaktivieren der Warnung in lintOptions ist keine gute Option. Es ist besser, die Überprüfung auf Anweisungsebene zu unterdrücken.

Fügen Sie diesen Kommentar über der Codezeile hinzu, die die Warnung ausgibt:

//noinspection RestrictedApi
Mörder
quelle
2
Ich gehe mit diesem. Ich könnte die bessere Lösung sein, um die lintOptions nicht global zu deaktivieren. Thx
Yoraco Gonzales
4
Funktioniert nicht in Android Studio 3. Gab es einige Änderungen?
Vovahost
12
@vovahost Ich benutze @SuppressLint("RestrictedApi")statt //noinspection RestrictedApiohne Probleme in Android Studio 3
Vektor
1
Ja sicher, das funktioniert auch für mich, aber die // noinspection funktioniert nur für eine Anweisung, was besser ist.
Vovahost
1
@ Sakiboy Die Lösung von Cbr gilt für die gesamte Methode, die ich nicht verwenden wollte, da sie möglicherweise andere Fehler verbirgt.
Vovahost