android.view.InflateException sınıfı şişirme hatası android.webkit.WebView


132

Lollipop'ta (API 22), uygulamamda her zaman bir web görünümü gösteriyorum, uygulama çöküyor. Android geliştirici konsolumda bu etkinlikle ilgili birden çok kilitlenme var.

Android 4, 6 ve 7'de çalıştığını söylemeye gerek yok.

Yığın izini okumak (bu yazının sonunda yayınlanmıştır), beni rahatsız eden bir şey

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

Oluşturulan R.java'da şanssız bir şekilde arama yaptım, çünkü açıkçası kimlik yok, ama denemeye değerdi.

Sorunun etrafında dolaşmak, lolipopun web görünümünü nasıl ele aldığıyla ilgili görünüyor. GDC'deki çökme raporlayıcısında bulduğum bir cihaza dayalı olarak lolipop ile yeni bir AVD başlattım ve sorunu yeniden oluşturabilirim.


Tam yığın izleme:

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) 

Bu bir sistem WebViewsorununa benziyor . Öykünücüler bunun için güncelleme alıp almadıklarını / ne zaman aldığını bilmiyorum. Donanımı denedin mi?
CommonsWare

@commonsware no Şu anda lolipop ile herhangi bir cihazım yok. Ancak kaza muhabiri bunun için birden fazla giriş gösteriyor.
Valerio

18
Bu soru 2016'ya aitti ancak bu sorun 2019'un sonlarında yeniden ortaya çıkıyor. Buraya bir web aramasından geldiyseniz, sizin için geçerli olan yanıtları seçtiğinizden emin olun.
user1032613

API seviyesi 21 olan fiziksel cihazım yok. Uygulamayı Genymotion ve Android emülatörlerinde API seviyesi 21 ile çalıştırmayı denedim ama çöküyor! Buradaki herkes bunun Fiziksel Cihazda çalışıp çalışmayacağını bana bildirin! Artık uygulamam risk altında!
Sumit Shukla

Benim için Google Play, sorunu Android 5.0 çalıştıran bir Huawei P8 Lite üzerinde bildirdi, ancak Android 6.0.1 çalıştıran gerçek bir Samsung Note 4 veya Android 4.4.2 çalıştıran bir Samsung Note 8 tablette ortaya çıkmadı.
FractalBob

Yanıtlar:


172

Eğer kullanıyorsanız androidx.appcompat:appcompat:1.1.0, androidx.appcompat:appcompat:1.0.2onun yerine deneyin . Android'deki 1.1.0hatayı düzeltmiyor gibi görünüyor .WebView5.1.1

Şubat-2020 güncellemesi: 1.0.2Birçok kişi için (uygulamam dahil) çalışmayı durdurma durumuna geri döndürmek , ancak uygulamasının mevcut sürümünü kullanmak androidx.appcompat:appcompat:1.2.0-alpha02çökmeyi düzeltti. (Google'ın otomatik "lansman öncesi raporu" testi sırasında Android 5.0 çalıştıran bir Huawei P8 Lite üzerinde görüyordum).

Haziran-2020 güncellemesi: Şubat-2020 güncellemesinde belirtilenden daha yeni sürümler mevcut, şu anda mevcut sürümleri burada görebilirsiniz:


3
1.1.0'ı korumak ve bunu düzeltmek için bir hata düzeltmesi var mı? 1.0.2'de bulunmayan bazı şeylere güveniyoruz ve 1.1.0'ın bazı alfa veya beta sürümlerinde bu hata yok gibi görünüyor.
PampaZiya

3
Evet temiz bir düzeltti teşekkür ederim! Beta01 kullanıyorum ve her şey yolunda görünüyor. Kullanmaya devam edeceğim çünkü zaten 1.1.0 kullanmanın bariz bir faydası yok.
PampaZiya

11
Bu regresyonla ilgili bir sorun var: issuetracker.google.com/issues/141132133
Brais Gabin

3
Bugün olduğu gibi, sürüm düşürme işe yaramıyor, benim durumumda issuetracker.google.com/issues/141132133'ün bu çözümü işe yarıyor: "Belki de bu sorunu çözmenin en basit yolu, Gradle'ı sürümü 1.1.0'a ayarlamaya zorlamaktır. rc01. Bunu gradle dosyanıza ekleyin. configuration.all {resolutionStrategy {force 'androidx.appcompat: appcompat: 1.1.0-rc01'}} "
Talu

3
androidx.appcompat:appcompat:1.2.0-alpha03çok çalışıyor
Artyom

45

Uyarı: Bu geçici çözüm bazı şeyleri bozabilir; ayrıntılar için yorumlara bakın

Web Görünümü'nü bir XML düzeninden şişirmek isterseniz, onu güzel bir küçük alt sınıfa sarabilirsiniz ( ikostet'in cevabına göre ):

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());
    }
}

DÜZENLEME: Kotlin ile şimdi daha da güzel

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

1
Aynı sorunu buldum ve düzeltmek için bu çözümü kullandım, teşekkür ederim
itsa04g9

Cihazda Android Web Görünümü'nü güncellemek de sorunu
görünen ad

2
Hala 2019'da bir sorun var ve işe yarıyor, ancak neden / nasıl olduğuna dair bir fikrim yok, açıklanırsa iyi olur. Ayrıca 4. yapıcı "public LollipopFixedWebView (Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
David

4
Bu geçici çözümle ilgili bir uyarı: boş bir Bağlamla bir Web Görünümü örneğinin oluşturulması, istenmeyen yan etkilere neden olabilir. Örneğin, WebView'daki ActionMode'lar muhtemelen artık çalışmayacaktır (yani metni vurgulamak için uzun basma).
Dmitry Brant

5
@DmitryBrant'ın dediği gibi, bunu uygularken çok dikkatli olun çünkü bu, açılır alanlar ve metni vurgulamak için uzun basma dahil olmak üzere birkaç şeyi bozar !
user5507535

42

Kullanıyorsanız androidx.appcompat:appcompat:1.1.0ve eski sürüme geçmek androidx.appcompat:appcompat:1.0.2veya yükseltmek istemiyorsanız , Google Sorun İzleyici'deki bu yorumdaandroidx.appcompat:appcompat:1.2.0-alpha03 açıklanan başka bir çözüm var .

Ben applyOverrideConfiguration çağrıldıktan sonra fark ettim, Context.getAssets()ve Context.getResources().getAssets()aynı AssetManager nesnesi dönen değildir. Geri dönen AssetManager Context.getAssets(), diğer paketlerdeki (sistem WebView paketi dahil) kaynaklara erişemiyor ve WebView’un çökmesine neden oluyor. Geri Context.getAssets()dönmek için geçersiz kılarsam getResources().getAssets()sorun ortadan kalkar.

Bu yoruma dayalı olarak , sorunu çözmek için getAssets()geri dönmesi için Web Görünümü Etkinliğinde geçersiz kılabilirsiniz getResources().getAssets().

Java

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

Kotlin

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

3
Harika cevap +1
Shirane85

Merhaba, eğer bu doğruysa, AssetManager ve web görünümünün kendisiyle ilgisi olmayan bir appCompact sürümüyle bu nasıl düzeltilebilir?
Sinapse

Baktığımızda bu değişiklik listesi bazı webview versiyonları ile ilgili sorunlar yaşıyorsanız görünüyor applyOverrideConfigurationAppCompat kütüphane içinde aramaları.
Prawira

34

benim tavsiyem, özel / yeniyi Configurationyalnızca "orijinal olan" sorunlara neden olduğunda, yani yalnızca Lollipop'ta kullanmaktır. @SpaceBizon kodu, Android 8.x'e, 9 ve Q'da (para birimi beta) kadar iyi çalışır, her seçme / açılır basışta AlertDialogseçiciyi göstermez , bu bellek sızıntısı yerine ... getFixedContext"iffed" uygun sürüm koduyla sabit yöntemin altında

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

Androidx.appcompat: appcompat: 1.1.0 kullanıyorsanız, androidx.appcompat: appcompat: 1.0.2 olarak değiştirin veya DayNight Theme kullanmak istiyorsanız, aşağıdaki gibi uygulamanızda applyOverrideConfiguration öğesini geçersiz kılın. (Not: Bu, Koyu Temadan Açık Temaya geçerken uygulamanın yeniden başlatılmasını gerektirir ve bunun tersi de geçerlidir).

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

Bu geçici çözüm işe yarıyor, ancak 21..22bunun yerine olması gerekmiyor 21..25mu? API 23 + 'da sorun ortaya çıkmıyor gibi görünüyor.
Dmitry Brant

5
Bu, bu çökmeye neden olan revizyondur - android.googlesource.com/platform/frameworks/support/+/… . Yani koda göre Google Play Store'un kurulu olmadığı ve Android Webview Versiyonunun <50 olduğu cihazlarda API 21..25'de kilitlenme meydana gelecektir.
AR Mythili Saran

Androidx.appcompat sürümüne geçiliyor: appcompat: 1.0.2 hile yapın, teşekkürler
Talu

3
Benim için işe yarayan java çözümüm şuna benzer (korkunç biçimlendirme için özür dilerim, ancak bu yeni bir cevap sadece bir bağlantı noktası değil):@Override public void applyOverrideConfiguration(Configuration overrideConfiguration) { if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT <= 25) { return; } super.applyOverrideConfiguration(overrideConfiguration); }
Mike Hardy

@ARMythiliSaran neden bunun yalnızca "Google Play Store'un yüklü olmadığı ve Android Webview Sürümünün <50 olduğu cihazlarda" olduğunu söylüyorsunuz?
andrei

20

DayNight tema geçişine (veya diğer UiMode olaylarına) güvenmiyorsanız, AppCompatDelegate'in Kaynaklar yapılandırmasını güncellemesini ve böylece web görünümü şişirmesini bozmasını önlemek için web görünümü etkinlik bildirimine android: configChanges = "uiMode" ekleyebilirsiniz .


Bu benim için çalıştı. Appcompat 1.1.0 gerektiren ConstraintLayout 1.1.3'e ihtiyacım var, bu yüzden geri almak bir seçenek değildi.
Matt Robertson

1.0.2'ye düşürmek benim için bir fark yaratmadı, ancak bu yöntem işe yaradı.
chrisbtoo

harika çözüm!
bojan

17

Web görünümü oluşturmak için kullanmayı deneyin:

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

ve xml dosyam?
Acauã Pitta

Bu, herhangi bir kitaplık sürümünü düşürmeden sorunumu çözdü
Bugs Happen

10

Ve sorunu çözmek için bir kez daha deneyin. Aktivitenizde bu yöntemi geçersiz kılmalısınız:

    @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

Öykünücüde API 21'deki çökmeyi yeniden oluşturabildim.

Bu yüzden, belgelerde açıklandığı gibi bunu uygulamaya eklemeye çalıştım :

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"
}

Ekleme appcompat-resourcesvermedi değil sorunu düzeltmek.

Belki gelecekteki bir sürüm gelecek, ancak bu sorunu ele alması beklenen tamamlayıcı bir kaynak kitaplığı var gibi göründüğünü belirtmek istedim. Bu nedenle, bunu yeni bir sürümüyle düzeltmeye çalışırken appcompat, appcompat-resourceskitaplığı aynı sürümle ekleyin .

'E geri döndürmek androidx.appcompat:appcompat:1.0.2sorunu bir çözüm olarak çözdü.


"androidx.appcompat:appcompat-resources:$appcompat_version"1.0.2 sürümüne geri dönemedim. "HATA: Çözümlenemedi: androidx.appcompat: appcompat-kaynakları: 1.0.2"
Murillo Comino

appcompat-resources 1.0.2 için mevcut değildir. Güncellenen cevabıma bakın.
Manuel

Çok teşekkür ederim, işe yaradı. Umarım gelecek sürümlerde bunu çözer.
Murillo Comino

5

Aşağıdaki kod sorunu çözecektir. Lütfen ekleyin Activity:

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

3

Bir yan not olarak, 1.0.2'ye düşürmeme rağmen bir süre mücadele ettim, çünkü appcompat'a geçişli bir bağımlılığım var gibi görünüyordu: 1.1.0, androidx.constraintlayout üzerinden: kısıtlama düzeni: 2.0.0-beta3. Bunu kısıtlamak için düşürdüğümde: 1.1.3 her şey yolunda gitti

( Https://issuetracker.google.com/issues/141351441'e göre sorun yakında appcompat: 1.2.0-alpha02 ile çözülecektir)


3

Bu kaynaktan en son sürümü kullandım . Lütfen en iyi olduğunu düşündüğünüz şeye göre kendiniz kontrol edin ve kullanın.

Atlamak istemeniz durumunda, aşağıdaki uygulama sorunu çözer:

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

2

戴 文锦 benim için de doğruydu. Ancak sadece androidx.appcompat: appcompat: 1.1.0'dan 1.0.2'ye düşürmek başarılı olmadı.

Daha önce yükseltilmiş tüm androidx sürümlerimi şuradan düşürdüm:

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'

geri dön

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'

Google kodunun açık ara hatasız olmadığını ve iyi test edildiğini ve birisinin sürümleri asla saygısız bir şekilde yükseltmemesi gerektiğini hatırlatan bir hatırlatma.


Androidx.appcompat: appcompat'ı 1.1.0-rc01'e düşürdünüz mü? 1.0.2'ye değil mi?
Zhebzhik Babich

1.0.2 ile denedim ama başarılı olamadı. Appcompat ile birlikte diğer bağımlılıklardan biri olmalıdır.
S. Gissel

Basitçe sürüm düşürme androidx.appcompat:appcompatbenim için çalıştı. Gelecekteki okuyucular için: Daha fazla şeyi eski sürüme geçirmeden önce "senkronizasyonu derecelendirdiğinizden" emin olun ve bunun sizin için yeterli olmadığını onaylayın.
user1032613

Eski

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 sorunu çözmemize yardımcı olan kod parçacığını yayınlıyor. Ancak bu ilk stackoverflow.com/a/57715955/2344192
görünen adı

2
Dikkatli olun, bu geçici çözüm açılır alanları ve Web Görünümü'ndeki metni seçmeyi bozar.
user5507535

2

AppCompat 1.2.0-alpha02 bugün yayınlandı, böylece kullanabilirsiniz

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

Bu, Lollipop'taki WebView sorunlarını çözecektir.


sorunu düzeltir ancak alfa sürümü olduğu için başka hatalara neden olabilir. Eğer denediyseniz, uygulamanızda başka bir sorunla karşılaşmadınız mı?
Soheil

@Soheil Hayır, herhangi bir sorun yaşamadım. Alpha sürümleri elbette her zaman biraz risklidir. Örneğin, alpha02 için bir hatadan burada bahsedilmektedir: issuetracker.google.com/issues/141351441#comment48
Dimitris Pattas

2

Ben sorunu alınan Android Sistem WebView'da ait tablet versiyonunu güncelleyerek sabittir 22. Nexus 7 API bu sorunu yeniden başardı sürümü 39 (2.237.560 kollu) için sürümüne 79.0.3945.136

Bu, bir kullanıcının bunu yapması benim kontrolümde değil, ancak birisinin uygulamanızı hemen kullanmasına yardım etmeniz gerekirse bir çözüm.


1

Sorun benim için 'androidx.appcompat: appcompat: 1.0.2' uygulamasına geçerek çözüldü.


1

Benim durumumda yöntemde bir sorun vardı

fun getUserId(): Int = userId

MainActivity. Neden etkilediğini bilmiyorum WebView. getUserId()ne geçersiz kılınmıştır ne de Activitysınıfın genel yöntemi . Bu yöntemi yeniden adlandırırsam veya kaldırırsam WebViewaçılmaya başlar. Ayrıca değişmeye çalışıyorum

private var userId: Int = 0

için

var userId: Int = 0
    private set

aynı istisnaya yol açar. Bir istisna gördüğü zaman anlaşılmaktadır: 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. Bu durumda kullanıcı = 123456 aslında içinde değil bazı isteklerde kullanılan yetkili kullanıcımdı WebView. Android'in userIdişlemleri için yerel bir user_id olarak kullandığından şüpheleniyorum .

Diğer birçok insanın fark ettiği gibi sınıfı kullanabilir appcompat:1.1.0veya 1.0.2uzatabiliriz WebView. Google Play Hizmetleri olmayan emülatör 21'de bu WebView, metin etiketlerine uzun dokunulduğunda çökecektir, ancak tipik cihazlarda her şey yolunda.


0

Herhangi bir bağımlılığın sürümünü değiştirmek yerine, bir çözüm olarak programlı olarak webView oluşturma uyguladım.

Sorun aslında xml dosyasından mizanpaj okumaya başlamaya benziyor. Bu nedenle, programatik yol sizin için uygun bir çözümse lütfen aşağıdaki örneğe bakın.

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;
}

Ebeveyn görünümünüze eklemek yerine:

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

-4

Sürümü kontrol edin. Androidx uygulama uyumluluğu ve Google materyal sürümü her zaman aynı kalır.

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"

görüntü açıklamasını buraya girin


1
Bağladığınız görsel daha sonra kullanılamaz hale gelirse diye örnek kodu doğrudan cevabınıza yapıştırmalısınız.
Louis Charette
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.