AppCompatActivity.onCreate można wywołać tylko z tej samej grupy bibliotek


109

Po aktualizacji do appcompat 25.1.0zaczęły pojawiać się błędy okablowania.

W moim kodzie:

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

Pojawia się błąd kłaczków:

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

Jak zapobiegać takiemu zachowaniu?


6
wymienić invalidateOptionsMenu()z supportInvalidateOptionsMenu(). powinno
wystarczyć

1
Nie używam takich metod w moim kodzie
piksel

Odpowiedzi:


95

Jak już zauważył Felipe w swoim komentarzu, jest to błąd w przedpremierowej wersji narzędzi.

Na razie możesz to obejść, dopóki Google nie wyda poprawki, dodając następujące elementy do pliku build.gradle modułu projektu:

android {
  lintOptions {
    disable 'RestrictedApi'
  }
}

Warto zauważyć, że może to ukryć prawdziwe błędy w twoim projekcie, ponieważ pomija wszystkie tego typu błędy, więc lepszym rozwiązaniem byłoby obniżenie wersji Android Studio i narzędzi użytych w projekcie.


5
Sugerowałbym odpowiedź @ Cbr poniżej, tłumi ona tylko na poziomie metody i działa w przeciwieństwie do Android Studio 3 //noinspection RestrictedApi.
Sakiboy

138

Jak podkreślano w poprzednich odpowiedziach, jest to błąd. Zalecam nie wyłączać określonego ostrzeżenia o kłaczkach w całym projekcie, ale tylko dla tej metody. Opisz swoją metodę w następujący sposób:

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

4
Ta odpowiedź jest najlepsza, ponieważ nie wyłącza się globalnie, rozwiązuje błąd / ostrzeżenie w IDE, a podczas kompilacji jest łatwa do zrozumienia, ponieważ jest wyraźnie wymieniona na górze metody (w przeciwieństwie do tego, //noinspection RestrictedApiktóry jest ukryty jako komentarz i tylko wycisza ostrzeżenie w IDE, ale nie podczas kompilacji) i działa z najnowszą wersją Android Studio i Gradle.
Sakiboy

1
Tej odpowiedzi należy użyć. Nigdy nie jest dobrym pomysłem globalne wyłączenie projektu.
Christopher Smit

1
Możesz również użyć tej adnotacji tylko w wierszu, w którym go potrzebujesz, zamiast pomijać dla całej metody
Ben Kane

65

Wyłączenie ostrzeżenia w lintOptions nie wygląda na dobrą opcję, lepiej wyłączyć kontrolę na poziomie instrukcji.

Dodaj ten komentarz nad wierszem kodu, który daje ostrzeżenie:

//noinspection RestrictedApi

2
Idę z tym. Mogę być lepszym rozwiązaniem, aby nie wyłączać lintOptions globalnie. Dzięki
Yoraco Gonzales

4
Nie działa w Android Studio 3. Czy były jakieś zmiany?
vovaost

13
@vovaost używam @SuppressLint("RestrictedApi")zamiast //noinspection RestrictedApibez problemów w Android Studio 3
wektor

1
Tak, pewnie, to też działa dla mnie, ale // noinspection działa tylko dla jednej instrukcji, co jest lepsze.
vovaost

1
@Sakiboy Rozwiązanie CBR dotyczy całej metody, której nie chciałem używać, ponieważ może ukryć inne błędy.
vovaost
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.