android.view.InflateException Kesalahan menggembungkan kelas android.webkit.WebView


130

Di Lollipop (API 22) setiap kali di aplikasi saya, saya menampilkan tampilan web, aplikasi tersebut macet. Saya mengalami beberapa kerusakan di konsol pengembang android saya terkait dengan acara ini.

Tidak perlu dikatakan bahwa ini berfungsi di Android 4, 6, dan 7.

Membaca jejak tumpukan (diposting di akhir posting ini), ada sesuatu yang mengganggu saya

Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003

Saya mencari di R.java yang dihasilkan tanpa hasil, jelas karena ID tidak ada, tetapi patut dicoba.

Mencari-cari masalah di Google tampaknya terkait dengan cara lollipop menangani tampilan web. Saya memulai AVD baru dengan lollipop berdasarkan perangkat yang saya temukan di pelapor kerusakan di GDC, dan saya dapat mereproduksi masalahnya.


Jejak tumpukan penuh:

android.view.InflateException: Binary XML file line #7: Error inflating class android.webkit.WebView
                  at android.view.LayoutInflater.createView(LayoutInflater.java:633)
                  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
                  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
                  at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
                  at it.artecoop.ibreviary.WebViewFragment.onCreateView(WebViewFragment.java:67)
                  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2087)
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1113)
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295)
                  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
                  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682)
                  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:541)
                  at android.os.Handler.handleCallback(Handler.java:739)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:135)
                  at android.app.ActivityThread.main(ActivityThread.java:5254)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at java.lang.reflect.Method.invoke(Method.java:372)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
               Caused by: java.lang.reflect.InvocationTargetException
                  at java.lang.reflect.Constructor.newInstance(Native Method)
                  at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
                  at android.view.LayoutInflater.createView(LayoutInflater.java:607)
                  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
                  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) 
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) 
                  at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
                  at it.artecoop.ibreviary.WebViewFragment.onCreateView(WebViewFragment.java:67) 
                  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2087) 
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1113) 
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295) 
                  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) 
                  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682) 
                  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:541) 
                  at android.os.Handler.handleCallback(Handler.java:739) 
                  at android.os.Handler.dispatchMessage(Handler.java:95) 
                  at android.os.Looper.loop(Looper.java:135) 
                  at android.app.ActivityThread.main(ActivityThread.java:5254) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:372) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
               Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003
                  at android.content.res.Resources.getText(Resources.java:299)
                  at android.content.res.Resources.getString(Resources.java:385)
                  at com.android.org.chromium.content.browser.ContentViewCore.setContainerView(ContentViewCore.java:684)
                  at com.android.org.chromium.content.browser.ContentViewCore.initialize(ContentViewCore.java:608)
                  at com.android.org.chromium.android_webview.AwContents.createAndInitializeContentViewCore(AwContents.java:631)
                  at com.android.org.chromium.android_webview.AwContents.setNewAwContents(AwContents.java:780)
                  at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:619)
                  at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:556)
                  at com.android.webview.chromium.WebViewChromium.initForReal(WebViewChromium.java:311)
                  at com.android.webview.chromium.WebViewChromium.access$100(WebViewChromium.java:96)
                  at com.android.webview.chromium.WebViewChromium$1.run(WebViewChromium.java:263)
                  at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.drainQueue(WebViewChromium.java:123)
                  at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue$1.run(WebViewChromium.java:110)
                  at com.android.org.chromium.base.ThreadUtils.runOnUiThread(ThreadUtils.java:144)
                  at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.addTask(WebViewChromium.java:107)
                  at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:260)
                  at android.webkit.WebView.<init>(WebView.java:554)
                  at android.webkit.WebView.<init>(WebView.java:489)
                  at android.webkit.WebView.<init>(WebView.java:472)
                  at android.webkit.WebView.<init>(WebView.java:459)
                  at java.lang.reflect.Constructor.newInstance(Native Method) 
                  at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
                  at android.view.LayoutInflater.createView(LayoutInflater.java:607) 
                  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
                  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) 
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) 
                  at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
                  at it.artecoop.ibreviary.WebViewFragment.onCreateView(WebViewFragment.java:67) 
                  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2087) 
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1113) 
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295) 
                  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) 
                  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682) 
                  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:541) 
                  at android.os.Handler.handleCallback(Handler.java:739) 
                  at android.os.Handler.dispatchMessage(Handler.java:95) 
                  at android.os.Looper.loop(Looper.java:135) 
                  at android.app.ActivityThread.main(ActivityThread.java:5254) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:372) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

Ini sepertinya WebViewmasalah sistem . Saya tidak tahu apakah / kapan emulator mendapatkan pembaruan untuk itu. Sudahkah Anda mencoba perangkat keras?
CommonsWare

@commonsware tidak Saya tidak memiliki perangkat apa pun sekarang dengan lollipop. Tapi pelapor kerusakan menunjukkan banyak entri untuk ini.
Valerio

18
Pertanyaan ini dari tahun 2016 tetapi masalah ini muncul lagi di akhir tahun 2019. Jika Anda tiba di sini dari pencarian web, pastikan untuk memilih jawaban yang sesuai untuk Anda.
pengguna1032613

Saya tidak memiliki perangkat fisik API level 21. Saya mencoba menjalankan aplikasi di Genymotion dan emulator Android dengan API level 21 tetapi macet! Siapa pun di sini beri tahu saya apakah ini akan berfungsi pada Perangkat Fisik! Sekarang aplikasi saya berisiko!
Sumit Shukla

Bagi saya, Google Play melaporkan masalah pada Huawei P8 Lite yang menjalankan Android 5.0 tetapi tidak muncul pada Samsung Note 4 asli yang menjalankan Android 6.0.1 atau tablet Samsung Note 8 yang menjalankan Android 4.4.2.
FractalBob

Jawaban:


169

Jika Anda menggunakan androidx.appcompat:appcompat:1.1.0, coba androidx.appcompat:appcompat:1.0.2saja. tampaknya itu 1.1.0tidak memperbaiki bug WebViewdi Android 5.1.1.

Pembaruan Feb-2020: Kembali 1.0.2berhenti bekerja untuk banyak orang (termasuk aplikasi saya), tetapi menggunakan versi saat androidx.appcompat:appcompat:1.2.0-alpha02ini memperbaiki kerusakan. (Saya melihatnya di Huawei P8 Lite yang menjalankan Android 5.0 selama pengujian "Laporan pra-peluncuran" otomatis Google).

Pembaruan Juni-2020: Ada rilis yang lebih baru tersedia daripada yang disebutkan dalam pembaruan Feb-2020, Anda dapat melihat versi yang saat ini tersedia di sini:


3
Apakah ada perbaikan bug untuk mempertahankan 1.1.0 dan memperbaikinya? Kami bergantung pada beberapa hal yang tidak ada di 1.0.2 dan sepertinya beberapa versi alfa atau beta 1.1.0 tidak memiliki bug ini.
PampaZiya

3
Ya bersih diperbaiki terima kasih! Saya menggunakan beta01 dan semuanya tampak baik-baik saja. Saya akan terus menggunakannya karena tidak ada manfaat yang jelas dari menggunakan 1.1.0.
PampaZiya

11
Ada masalah terkait dengan penyesalan ini: Issuetracker.google.com/issues/141132133
Brais Gabin

3
Saat ini, penurunan versi tidak berfungsi, dalam kasus saya, solusi dari Issuetracker.google.com/issues/141132133 ini berfungsi: "Mungkin cara paling sederhana untuk mengatasi masalah ini adalah dengan memaksa Gradle menyetel versi ke 1.1.0- rc01. Tambahkan ini ke file gradle Anda. configurations.all {resolutionStrategy {force 'androidx.appcompat: appcompat: 1.1.0-rc01'}} "
Talu

3
androidx.appcompat:appcompat:1.2.0-alpha03bekerja juga
Artyom

45

Peringatan: solusi ini mungkin juga merusak beberapa hal; lihat komentar untuk detailnya

Jika Anda ingin memekarkan WebView dari tata letak XML, Anda dapat membungkusnya dalam subkelas kecil yang bagus (berdasarkan jawaban ikostet ):

public class LollipopFixedWebView extends WebView {
    public LollipopFixedWebView(Context context) {
        super(getFixedContext(context));
    }

    public LollipopFixedWebView(Context context, AttributeSet attrs) {
        super(getFixedContext(context), attrs);
    }

    public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(getFixedContext(context), attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(getFixedContext(context), attrs, defStyleAttr, defStyleRes);
    }

    public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr, boolean privateBrowsing) {
        super(getFixedContext(context), attrs, defStyleAttr, privateBrowsing);
    }

    public static Context getFixedContext(Context context) {
        return context.createConfigurationContext(new Configuration());
    }
}

EDIT: sekarang lebih bagus dengan Kotlin

class LollipopFixedWebView @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0,
    defStyleRes: Int = 0
) : WebView(context.createConfigurationContext(Configuration()), attrs, defStyleAttr, defStyleRes)

1
Saya menemukan masalah yang sama dan menggunakan solusi ini untuk memperbaikinya, terima kasih
itsa04g9

Memperbarui Android WebView di perangkat juga memperbaiki masalah
nama tampilan

2
Masih menjadi masalah di tahun 2019 dan berhasil, tapi saya tidak tahu kenapa / bagaimana, alangkah baiknya jika ini dijelaskan. Juga saya mendapatkan peringatan Tidak pernah digunakan pada konstruktor ke-4 "public LollipopFixedWebView (Konteks konteks, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
David

4
Hanya satu kata yang perlu diperhatikan tentang solusi ini: membuat instance WebView dengan Konteks kosong dapat menyebabkan efek samping yang tidak diinginkan. Misalnya, ActionModes dari WebView mungkin tidak akan berfungsi lagi (yaitu menekan lama untuk menyorot teks).
Dmitry Brant

5
Seperti yang dikatakan @DmitryBrant, berhati-hatilah saat menerapkan ini karena ini merusak beberapa hal, termasuk bidang drop-down dan penekanan lama untuk menyorot teks !
pengguna5507535

42

Jika Anda menggunakan androidx.appcompat:appcompat:1.1.0dan tidak ingin menurunkan androidx.appcompat:appcompat:1.0.2atau meningkatkan ke androidx.appcompat:appcompat:1.2.0-alpha03, ada solusi lain yang dijelaskan dalam komentar ini di Google Issue Tracker.

Saya perhatikan itu setelah memanggil applyOverrideConfiguration, Context.getAssets()dan Context.getResources().getAssets()tidak mengembalikan objek AssetManager yang sama. AssetManager yang dikembalikan dari Context.getAssets()tidak dapat mengakses sumber daya dalam paket lain (termasuk paket WebView sistem), menyebabkan WebView mogok. Jika saya menimpa Context.getAssets()untuk kembali getResources().getAssets(), masalahnya hilang.

Berdasarkan komentar tersebut, Anda bisa mengganti getAssets()di Aktivitas WebView sehingga ia kembali getResources().getAssets()untuk menyelesaikan masalah.

Jawa

@Override
public AssetManager getAssets() {
    return getResources().getAssets();
}

Kotlin

override fun getAssets(): AssetManager {
    return resources.assets
}

3
Jawaban bagus +1
Shirane85

Hai, jika ini benar, bagaimana cara memperbaikinya dengan rilis appCompact yang tidak terkait dengan AssetManager dan tampilan web itu sendiri?
Sinapse

Melihat daftar perubahan ini, tampaknya beberapa versi tampilan web mengalami masalah dengan applyOverrideConfigurationpanggilan di dalam pustaka AppCompat.
Prawira

34

saran saya adalah gunakan custom / new Configurationhanya jika "original one" menyebabkan masalah, begitu juga Lollipop saja. Kode @SpaceBizon berfungsi dengan baik hingga Android 8.x, pada 9 dan Q (saat ini beta) setiap tekan pilih / tarik-turun tidak akan menampilkan alat AlertDialogpilih, alih-alih terjadi kebocoran memori ... di bawah getFixedContextmetode tetap dengan kode versi yang sesuai "iffed"

public class LollipopFixedWebView extends WebView {

    public LollipopFixedWebView(Context context) {
        super(getFixedContext(context));
    }

    public LollipopFixedWebView(Context context, AttributeSet attrs) {
        super(getFixedContext(context), attrs);
    }

    public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(getFixedContext(context), attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(getFixedContext(context), attrs, defStyleAttr, defStyleRes);
    }

    private static Context getFixedContext(Context context) {
        if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT < 23) // Android Lollipop 5.0 & 5.1
            return context.createConfigurationContext(new Configuration());
        return context;
    }
}

21

Jika Anda menggunakan androidx.appcompat: appcompat: 1.1.0, ubah ke androidx.appcompat: appcompat: 1.0.2 atau jika Anda ingin menggunakan Tema DayNight, ganti applyOverrideConfiguration dalam aktivitas Anda sebagai berikut. (Catatan: Ini memerlukan aplikasi dimulai ulang saat beralih dari Tema Gelap ke Tema Terang dan sebaliknya).

override fun applyOverrideConfiguration(overrideConfiguration: Configuration?) {
        if (Build.VERSION.SDK_INT in 21..25 && (resources.configuration.uiMode ==  applicationContext.resources.configuration.uiMode)) {
                return
        }
        super.applyOverrideConfiguration(overrideConfiguration)
}

Solusi ini berhasil, tetapi bukankah seharusnya untuk 21..22, bukan 21..25? Masalahnya sepertinya tidak terjadi di API 23+.
Dmitry Brant

5
Ini adalah revisi yang menyebabkan kerusakan ini - android.googlesource.com/platform/frameworks/support/+/… . Jadi, menurut kodenya, crash akan terjadi di API 21..25 ​​di perangkat yang tidak menginstal Google Play Store dan Android Webview Version <50.
AR Mythili Saran

Mendowngrade ke androidx.appcompat: appcompat: 1.0.2 berhasil, terima kasih
Talu

3
Solusi saya di java yang tampaknya berhasil untuk saya adalah seperti ini (maaf untuk format yang buruk tetapi ini bukan jawaban baru, hanya port):@Override public void applyOverrideConfiguration(Configuration overrideConfiguration) { if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT <= 25) { return; } super.applyOverrideConfiguration(overrideConfiguration); }
Mike Hardy

@ARMythiliSaran mengapa Anda mengatakan bahwa ini hanya terjadi di "perangkat di mana Google Play Store tidak diinstal dan Versi Android Webview <50"?
andrei

20

Jika Anda tidak mengandalkan peralihan tema DayNight (atau peristiwa UiMode lainnya), Anda dapat menambahkan android: configChanges = "uiMode" ke manifes aktivitas webview untuk mencegah AppCompatDelegate memperbarui konfigurasi Sumber Daya dan dengan demikian mengacaukan inflasi tampilan web.


Ini berhasil untuk saya. Saya membutuhkan ConstraintLayout 1.1.3, yang membutuhkan appcompat 1.1.0, jadi mengembalikan bukanlah pilihan.
Matt Robertson

Menurunkan versi ke 1.0.2 tidak ada bedanya bagi saya, tetapi metode ini berhasil.
chrisbtoo

solusi yang luar biasa!
bojan

17

Coba gunakan untuk membuat tampilan web:

mWebView = new WebView(getActivity().createConfigurationContext(new Configuration()));

dan file xml saya?
Acauã Pitta

Ini memecahkan masalah saya, tanpa menurunkan versi perpustakaan apa pun
Bug Terjadi

10

Dan sekali lagi mencoba memperbaiki masalah. Harus mengganti metode ini dalam aktivitas Anda:

    @Override
    public void applyOverrideConfiguration(final Configuration overrideConfiguration) {
        if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT < 25) {
            overrideConfiguration.uiMode &= ~Configuration.UI_MODE_NIGHT_MASK;
        }
        super.applyOverrideConfiguration(overrideConfiguration);
    }

5

Saya dapat mereproduksi error pada API 21 di emulator.

Jadi saya mencoba menambahkan ini ke implementasi, seperti yang dijelaskan di dokumen :

dependencies {
    def appcompat_version = "1.1.0"

    implementation "androidx.appcompat:appcompat:$appcompat_version"
    // For loading and tinting drawables on older versions of the platform
    implementation "androidx.appcompat:appcompat-resources:$appcompat_version"
}

Menambahkan appcompat-resourcesitu tidak memperbaiki masalah.

Mungkin versi yang akan datang akan, tetapi saya ingin menyebutkan bahwa tampaknya ada pustaka sumber daya pelengkap yang seharusnya menangani masalah ini. Jadi ketika mencoba untuk memperbaikinya dengan versi baru appcompat, tambahkan appcompat-resourcespustaka dengan versi yang sama.

Mengembalikan ke androidx.appcompat:appcompat:1.0.2memang memperbaiki masalah sebagai solusi.


Saya tidak dapat kembali "androidx.appcompat:appcompat-resources:$appcompat_version"ke versi 1.0.2. "ERROR: Gagal menyelesaikan: androidx.appcompat: appcompat-resources: 1.0.2"
Murillo Comino

appcompat-resources tidak tersedia untuk 1.0.2. Lihat jawaban terbaru saya.
Manuel

Terima kasih banyak, ini berhasil. Saya berharap bahwa di versi mendatang menyelesaikan ini.
Murillo Comino

5

Kode di bawah ini akan memperbaiki masalah. Harap tambahkan di Activity:

@Override 
public AssetManager getAssets() {
    return getResources().getAssets(); 
}

3

Sekadar catatan, saya berjuang beberapa saat meskipun saya menurunkan versinya ke 1.0.2, hanya karena saya sepertinya memiliki ketergantungan transitif ke appcompat: 1.1.0 melalui androidx.constraintlayout: constraintlayout: 2.0.0-beta3. Setelah saya menurunkannya ke constraintlayout: 1.1.3 semuanya bekerja dengan baik

(Menurut https://issuetracker.google.com/issues/141351441 masalah akan segera diperbaiki dengan appcompat: 1.2.0-alpha02)


3

Saya menggunakan versi terbaru dari sumber ini . Silakan periksa dan gunakan milik Anda sendiri berdasarkan apa yang menurut Anda terbaik.

Jika Anda ingin melewati, penerapan di bawah ini menyelesaikan masalah:

implementation 'androidx.appcompat:appcompat:1.2.0-beta01'

2

戴 文锦 juga tepat untuk saya. Namun, mendowngrade hanya androidx.appcompat: appcompat: 1.1.0 ke 1.0.2 tidak berhasil.

Saya menurunkan semua versi Androidx saya yang sebelumnya ditingkatkan dari

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha10'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.recyclerview:recyclerview:1.1.0-beta04'
implementation 'androidx.viewpager2:viewpager2:1.0.0-beta04'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
implementation 'androidx.preference:preference:1.1.0'
implementation 'androidx.core:core:1.2.0-alpha04'

kembali ke

implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha09'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.recyclerview:recyclerview:1.1.0-beta03'
implementation 'androidx.viewpager2:viewpager2:1.0.0-beta03'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.vectordrawable:vectordrawable:1.1.0-rc01'
implementation 'androidx.preference:preference:1.1.0-rc01'
implementation 'androidx.core:core:1.2.0-alpha03'

Sebuah pengingat bahwa kode Google sejauh ini tidak bebas bug dan telah teruji dengan baik dan bahwa seseorang tidak boleh memutakhirkan versinya secara sembarangan.


Apakah Anda menurunkan versi androidx.appcompat: appcompat ke 1.1.0-rc01? Bukan untuk 1.0.2?
Zhebzhik Babich

Mencoba dengan 1.0.2 tetapi tidak berhasil. Harus salah satu dependensi lain yang dikombinasikan dengan appcompat.
S. Gissel

Cukup menurunkan peringkat androidx.appcompat:appcompatberhasil untuk saya. Untuk pembaca selanjutnya: pastikan untuk "sinkronisasi gradle" dan mengonfirmasi bahwa itu tidak cukup untuk Anda, sebelum menurunkan versi lainnya.
pengguna1032613

Setelah menurunkan versi, tidak akan berlebihan untuk memeriksa versi dependensi dalam proyek stackoverflow.com/a/39020703/6055194
Zhebzhik Babich

2
/**
 * Customized WebView to avoid crashing on Android 5 and 6 (API level 21 to 23)
 * If the Android System WebView is old and is not updated, the WebView view inflation fails.
 * To reproduce the issue, try on OS 5 or 6 with Android System WebView 72.0.3626.76 (this version is just a reference point from being which we saw no crashes)
 */
class BrilliantWebView : WebView {

   companion object {
       private fun getBrilliantContext(context: Context?) =
            if (!OSUtils.hasNougat()) // OS < 24 or OS < 7.0
                context?.createConfigurationContext(Configuration())
            else
                context
    }

   constructor(context: Context?) : super(getBrilliantContext(context))
   constructor(context: Context?, attrs: AttributeSet?) : super(getBrilliantContext(context), attrs)
   constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(getBrilliantContext(context), attrs, defStyleAttr)
}

@ sumit-shukla memposting cuplikan kode yang membantu kami menyelesaikan masalah. Tetapi pastikan Anda melakukan stackoverflow.com/a/57715955/2344192
nama tampilan

2
Hati-hati, solusi ini memecah bidang tarik-turun dan memilih teks di WebView.
pengguna5507535

2

AppCompat 1.2.0-alpha02 dirilis hari ini, jadi Anda dapat menggunakan

implementation 'androidx.appcompat:appcompat:1.2.0-alpha02'

yang akan memperbaiki masalah WebView di Lollipop.


itu memperbaiki masalah tetapi karena ini adalah versi alfa, ini dapat menyebabkan bug lain. jika Anda telah mencobanya, bukankah Anda menghadapi masalah lain di aplikasi Anda?
Soheil

@Soheil Tidak, saya belum mengalami gangguan apa pun. Versi alfa selalu sedikit berisiko, tentu saja. Sebagai contoh, sebuah bug untuk alpha02 disebutkan di sini: issuetracker.google.com/issues/141351441#comment48
Dimitris Pattas

2

Saya dapat mereproduksi masalah ini pada Nexus 7 API 22. Masalah ini diperbaiki dengan memperbarui versi Android System WebView dari versi 39 (2237560-arm) ke versi 79.0.3945.136

Ini tidak ada dalam kendali saya bagi pengguna untuk melakukan ini, tetapi ini adalah solusi jika Anda perlu membantu seseorang segera menggunakan aplikasi Anda.


1

Masalah ini diatasi untuk saya dengan menurunkan versi ke implementasi 'androidx.appcompat: appcompat: 1.0.2'


1

Dalam kasus saya, ada masalah dalam metode

fun getUserId(): Int = userId

dari MainActivity. Saya tidak tahu mengapa itu mempengaruhi WebView. getUserId()tidak diganti, atau metode publik Activitykelas. Jika saya mengganti nama atau menghapus metode ini, WebViewmulai terbuka. Juga mencoba untuk berubah

private var userId: Int = 0

untuk

var userId: Int = 0
    private set

mengarah ke pengecualian yang sama. Saya mengerti bahwa ketika melihat pengecualian:Caused by: java.lang.SecurityException: Permission Denial: null asks to run as user 123456 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS . Dalam hal ini pengguna = 123456 sebenarnya adalah pengguna resmi saya, yang digunakan dalam beberapa permintaan, bukan di WebView. Saya menduga Android digunakan userIdsebagai user_id lokal untuk prosesnya.

Seperti yang diperhatikan banyak orang, kami dapat menggunakan appcompat:1.1.0atau 1.0.2dan memperluas WebViewkelas. Dalam emulator 21 tanpa Layanan Google Play, ini WebViewakan mogok saat menyentuh label teks lama, tetapi pada perangkat biasa semuanya baik-baik saja.


0

Alih-alih mengubah versi dependensi apa pun, saya menerapkan pembuatan webView secara terprogram sebagai solusi.

Masalahnya sebenarnya terlihat seperti memulai dengan membaca layout dari file xml. Jadi jika cara terprogram adalah solusi yang dapat diterapkan untuk Anda, silakan periksa contoh di bawah ini.

private WebView generateWebView(){
    WebView wv = new WebView(YourContext);
    wv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    wv.setFitsSystemWindows(false); // your preferences
    wv.setVerticalScrollBarEnabled(false); // your preferences
    wv.setPadding(15,15,15,15); // your preferences
    return wv;
}

Dari sekedar menambahkan ke tampilan orang tua Anda:

LinearLayout scrollContainer = findViewById(R.id.scrollContainer);
scrollContainer.addView(generateWebView());

-4

Periksa versi. Androidx appcompat dan versi material Google selalu sama.

implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation "androidx.cardview:cardview:1.0.0"

masukkan deskripsi gambar di sini


1
Anda harus menempelkan kode contoh langsung di jawaban Anda jika gambar yang Anda tautkan tidak tersedia nanti.
Louis Charette
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.