AppCompatActivity.onCreate hanya bisa dipanggil dari dalam grup pustaka yang sama

107

Setelah meningkatkan ke appcompat, 25.1.0saya mulai mendapatkan kesalahan berkabel.

Dalam kode saya:

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

Saya mendapatkan kesalahan lint:

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

Bagaimana cara mencegah perilaku seperti itu?

piksel
sumber
6
ganti invalidateOptionsMenu()dengan supportInvalidateOptionsMenu(). itu harus melakukan pekerjaan
ᴛʜᴇᴘᴀᴛᴇʟ
1
Saya tidak menggunakan metode seperti itu dalam kode saya
piksel
3
Sepertinya itu bug: code.google.com/p/android/issues/detail?id=230387
Felipe Lima

Jawaban:

94

Seperti yang Felipe tunjukkan dalam komentarnya, ini adalah bug dalam versi pra-rilis alat.

Anda dapat mengatasinya untuk saat ini, hingga Google merilis perbaikan, dengan menambahkan berikut ini ke dalam file build.gradle modul proyek Anda:

android {
  lintOptions {
    disable 'RestrictedApi'
  }
}

Perlu dicatat bahwa ini mungkin menyembunyikan kesalahan sebenarnya dalam proyek Anda karena ini menekan semua kesalahan jenis itu, jadi opsi yang lebih baik adalah menurunkan versi Android Studio dan alat yang digunakan dalam proyek tersebut.

Martin
sumber
5
Saya akan menyarankan jawaban @ Cbr di bawah ini, ini hanya menekan di tingkat metode, dan berfungsi di Android Studio 3, tidak seperti //noinspection RestrictedApi.
Sakiboy
137

Seperti tanggapan sebelumnya yang disorot, itu adalah bug. Saya sarankan untuk tidak menonaktifkan peringatan lint spesifik di seluruh proyek, tetapi hanya untuk metode itu. Beri keterangan metode Anda sebagai berikut:

@SuppressLint("RestrictedApi")
@Override
public void setupDialog(Dialog dialog, int style) {
    super.setupDialog(dialog, style);
    //your code here
}
DimitrisCBR
sumber
4
Jawaban ini paling baik karena tidak dinonaktifkan secara global, ini memecahkan kesalahan / peringatan di IDE dan pada waktu kompilasi, mudah dipahami karena secara eksplisit tercantum di bagian atas metode (tidak seperti //noinspection RestrictedApiyang disembunyikan sebagai komentar, dan hanya membungkam peringatan di IDE, tetapi tidak pada waktu kompilasi), dan berfungsi dengan versi terbaru Android Studio dan Gradle.
Sakiboy
1
Jawaban ini harus digunakan. Tidak pernah ada ide bagus untuk melakukan penonaktifan global pada proyek.
Christopher Smit
1
Anda juga dapat menggunakan anotasi ini hanya pada baris yang Anda perlukan alih-alih menekan untuk seluruh metode
Ben Kane
64

Menonaktifkan peringatan di lintOptions tampaknya bukan merupakan pilihan yang baik, lebih baik hentikan pemeriksaan di tingkat pernyataan.

Tambahkan komentar ini di atas baris kode yang memberikan peringatan:

//noinspection RestrictedApi
Pembunuh
sumber
2
Saya akan memilih yang ini. Saya mungkin solusi yang lebih baik untuk tidak menonaktifkan lintOptions secara global. Thx
Yoraco Gonzales
4
Tidak berfungsi di Android Studio 3. Apakah ada beberapa perubahan?
vovahost
13
@vovahost saya gunakan @SuppressLint("RestrictedApi")sebagai ganti //noinspection RestrictedApitanpa masalah di Android Studio 3
vektor
1
Ya tentu, yang satu itu berhasil untuk saya juga, tetapi // noinspection bekerja untuk satu pernyataan saja yang lebih baik.
vovahost
1
@Sakiboy Solusi Cbr berlaku untuk seluruh metode yang tidak ingin saya gunakan karena dapat menyembunyikan kesalahan lain.
vovahost