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?

piksel
źródło
6
wymienić invalidateOptionsMenu()z supportInvalidateOptionsMenu(). powinno
wystarczyć
1
Nie używam takich metod w moim kodzie
piksel
3
Wygląda na to, że to błąd: code.google.com/p/android/issues/detail?id=230387
Felipe Lima

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.

Jaskółka oknówka
źródło
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
}
DimitrisCBR
źródło
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
Zabójca
źródło
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