android.view.InflateExceptionクラスandroid.webkit.WebViewの膨張エラー


130

Lollipop(API 22)では、アプリケーションで毎回、アプリケーションがクラッシュするwebviewを表示しています。このイベントに関連して、Android開発者コンソールで複数のクラッシュが発生しました。

Android 4、6、7で動作することは言うまでもありません。

スタックトレース(この投稿の最後に投稿)を読むと、何かが私を悩ませます

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

明らかにIDが存在しないため、生成されたR.javaを検索しましたが、運が悪かったのですが、試してみる価値はありました。

問題をググるのは、ロリポップがウェブビューを処理する方法に関連しているようです。GDCのクラッシュレポーターで見つけたデバイスに基づいて、ロリポップで新しいAVDを開始しました。問題を再現できます。


完全なスタックトレース:

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) 

これはシステムのWebView問題のようです。エミュレータがその更新を取得するかどうか、いつ取得するかはわかりません。ハードウェアを試しましたか?
CommonsWare

@commonswareいいえロリポップを使用するデバイスは現在ありません。しかし、クラッシュレポーターはこれについて複数のエントリを表示しています。
Valerio 2016

18
この質問は2016年のものでしたが、この問題は2019年後半にも表面化しています。ウェブ検索からここにたどり着いた場合は、該当する答えを選択してください。
user1032613

APIレベル21の物理デバイスを持っていません。APIレベル21のGenymotionおよびAndroidエミュレーターでアプリを実行しようとしましたが、クラッシュします!ここの誰もがそれが物理デバイスで動作するかどうかを知らせました!今、私のアプリは危険にさらされています!
Sumit Shukla、

私にとって、Google PlayはAndroid 5.0を実行しているHuawei P8 Liteで問題を報告しましたが、Android 6.0.1を実行している実際のSamsung Note 4またはAndroid 4.4.2を実行しているSamsung Note 8タブレットでは表面化しませんでした。
FractalBob

回答:


168

を使用する場合はandroidx.appcompat:appcompat:1.1.0androidx.appcompat:appcompat:1.0.2代わりに試してください。それはAndroidの1.1.0バグを修正していないようです。WebView5.1.1

2020年2月の更新:1.0.2多くの人(私のアプリを含む)の機能を停止に戻しましたが、現在のバージョンのを使用androidx.appcompat:appcompat:1.2.0-alpha02するとクラッシュが修正されました。(Googleの自動化された「リリース前レポート」テスト中に、Android 5.0を実行しているHuawei P8 Liteでそれを確認していました)。

2020年6月の更新:2020年2月の更新で言及されているものよりも新しいリリースが利用可能です。現在利用可能なバージョンは次の場所で確認できます。


3
1.1.0を維持し、これを修正するためのバグ修正はありますか?1.0.2に存在しないものに依存しており、1.1.0の一部のアルファ版またはベータ版にはこのバグがないようです。
PampaZiya

3
はい、きれいに修正しました。ありがとうございます。私はbeta01を使用していますが、すべて問題ありません。とにかく1.1.0を使用する明らかな利点がないので、私はそれを使い続けます。
PampaZiya

11
このregresionに関連する問題があります:issuetracker.google.com/issues/141132133
Braisギャバン

3
今日のように、ダウングレードが機能していません。私の場合、issuetracker.google.com / issues / 141132133のこのソリューションは機能します:「この問題を解決する最も簡単な方法は、Gradleにバージョンを1.1.0に設定させることです。 rc01。これをGradleファイルに追加します。configurations.all{resolutionStrategy {force 'androidx.appcompat:appcompat:1.1.0-rc01'}} "
Talu

3
androidx.appcompat:appcompat:1.2.0-alpha03作品も
Artyom

45

警告:この回避策もいくつかの問題を引き起こす可能性があります。詳細についてはコメントを参照してください

XMLレイアウトからWebViewを膨らませたい場合は、(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());
    }
}

編集:Kotlinでさらに快適に

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

1
私は同じ問題を見つけ、この解決策を使用してそれを修正しました。ありがとう
ita04g9

デバイスでAndroid WebViewを更新すると、問題も修正され
ます

2
2019年にはまだ問題があり、動作しますが、理由/方法がわからないので、これを説明すればよいでしょう。また、4番目のコンストラクター「public LollipopFixedWebView(Context context、AttributeSet attrs、int defStyleAttr、int defStyleRes){」で警告が使用されることはありません。」
David

4
この回避策に関する注意事項:空白のコンテキストでWebViewをインスタンス化すると、意図しない副作用が発生する可能性があります。たとえば、WebViewのActionModesはおそらく機能しません(つまり、長押ししてテキストを強調表示します)。
ドミトリーブラント

5
@DmitryBrantが言ったように、これを実装するときは非常に注意してください。ドロップダウンフィールド長押ししてテキストをハイライトするなど、いくつかの問題が発生します
user5507535

42

を使用androidx.appcompat:appcompat:1.1.0していて、にダウングレードandroidx.appcompat:appcompat:1.0.2またはアップグレードしたくない場合は、Google Issue Trackerのこのコメントandroidx.appcompat:appcompat:1.2.0-alpha03記載されている別の解決策があります。

私はapplyOverrideConfigurationを呼び出した後のことを気づいた、Context.getAssets()Context.getResources().getAssets()同じAssetManagerオブジェクトを返すされていません。から返されたAssetManagerはContext.getAssets()、他のパッケージ(システムWebViewパッケージを含む)のリソースにアクセスできないため、WebViewがクラッシュします。オーバーライドContext.getAssets()してreturnしたgetResources().getAssets()場合、問題は解決しました。

そのコメントに基づいてgetAssets()、WebViewのアクティビティでをオーバーライドしてgetResources().getAssets()、問題を解決するために代わりに返すことができます。

ジャワ

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

コトリン

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

3
すばらしい答え+1
Shirane85

こんにちは、これが本当だった場合、AssetManagerおよびWebView自体に関係のないappCompactのリリースでこれをどのように修正しますか?
シナプス

このチェンジリストを見ると、一部のWebViewバージョンでapplyOverrideConfigurationAppCompatライブラリ内の呼び出しに問題があるようです。
プラウィラ

34

私のアドバイスはConfiguration、「オリジナル」が問題を引き起こしている場合にのみカスタム/新規を使用することです。したがって、ロリポップのみです。@SpaceBizonコードは、Android 8.x、9およびQ(現在のベータ版)まで正常に機能しAlertDialog、メモリリークが発生する代わりに、すべての選択/ドロップダウンプレスでピッカーが表示されません... getFixedContext適切なバージョンコードが「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

androidx.appcompat:appcompat:1.1.0を使用している場合は、androidx.appcompat:appcompat:1.0.2に変更するか、DayNightテーマを使用する場合、次のようにアクティビティのapplyOverrideConfigurationをオーバーライドします。(注:ダークテーマからライトテーマに、またはその逆に切り替えると、アプリを再起動する必要があります)。

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

この回避策は機能しますが21..22、の代わりではあり21..25ませんか?問題はAPI 23以降では発生しないようです。
ドミトリーブラント

5
これは、このクラッシュを引き起こしたリビジョンです-android.googlesource.com/platform/frameworks/support/+/…。したがって、コードによると、Google Playストアがインストールされておらず、Android Webviewバージョンが50未満のデバイスでは、API 21..25でクラッシュが発生します。
AR Mythili Saran

androidx.appcompat:appcompat:1.0.2にダウングレードしてトリックを実行してください、ありがとう
Talu

3
私にとってうまくいくと思われるJavaでの私の回避策は次のとおりです(恐ろしい書式設定では申し訳ありませんが、単なるポートではありません):@Override public void applyOverrideConfiguration(Configuration overrideConfiguration) { if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT <= 25) { return; } super.applyOverrideConfiguration(overrideConfiguration); }
Mike Hardy

@ARMythiliSaranなぜこれは「Google Playストアがインストールされておらず、Android Webviewバージョンが50未満のデバイス」でのみ発生すると思いますか?
andrei

20

DayNightテーマの切り替え(または他のUiModeイベント)に依存していない場合は、android:configChanges = "uiMode"をwebviewアクティビティマニフェストに追加して、AppCompatDelegateがリソース構成を更新しないようにして、webviewインフレーションを台無しにすることができます。


これでうまくいきました。appcompat 1.1.0が必要なConstraintLayout 1.1.3が必要なので、元に戻すことはできませんでした。
マットロバートソン

1.0.2にダウングレードしても違いはありませんでしたが、この方法はうまくいきました。
chrisbtoo

素晴らしいソリューション!
ボジャン

17

webviewの作成に使用してみてください:

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

そして私のxmlファイル?
Acauãピッタ

これにより、ライブラリのバージョンをダウングレードすることなく、私の問題を解決しました
バグが発生

10

そしてもう1つ、問題を修正してみてください。アクティビティでこのメソッドをオーバーライドする必要があります:

    @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

エミュレータでAPI 21のクラッシュを再現することができました。

だから、ドキュメントに記載されているように、これを実装に追加しようとしました:

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

追加appcompat-resourcesして問題は解決しませんでした

たぶん、将来のバージョンでサポートされるでしょうが、この問題に対処することになっている補足的なリソースライブラリがあるようです。新しいバージョンのでこれを修正する場合appcompatは、appcompat-resourcesは、同じバージョンのライブラリをください。

に戻すとandroidx.appcompat:appcompat:1.0.2、回避策として問題が修正されました。


"androidx.appcompat:appcompat-resources:$appcompat_version"バージョン1.0.2に戻すことができませんでした。「エラー:解決に失敗しました:androidx.appcompat:appcompat-resources:1.0.2」
Murillo Comino

appcompat-resourcesは1.0.2では使用できません。私の更新された答えを見てください。
マヌエル

どうもありがとうございました。将来のバージョンでこれが解決することを願っています。
Murillo Comino、

5

以下のコードは問題を修正します。に追加してくださいActivity

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

3

余談ですが、私は1.0.2にダウングレードしましたが、androidx.constraintlayout:constraintlayout:2.0.0-beta3を介してappcompat:1.1.0への推移的な依存関係があるように見えたため、しばらく苦労しました。それをconstraintlayout:1.1.3にダウングレードすると、すべてがうまくいきました

https://issuetracker.google.com/issues/141351441によると、問題はappcompat:1.2.0-alpha02でまもなく修正される予定です)


3

このソースの最新バージョンを使用しました。あなたが一番良いと思うものに基づいて、自分のものをチェックして使用してください。

スキップしたい場合は、以下の実装で問題が解決します。

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

2

戴文锦も私にぴったりでした。しかし、androidx.appcompat:appcompat:1.1.0から1.0.2へのダウングレードは成功しませんでした。

以前にアップグレードしたandroidxバージョンをすべてダウングレードしました

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'

戻る

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のコードにはバグがなく、十分にテストされていないこと、およびバージョンをひっくり返してアップグレードしてはならないことを思い出させてください。


androidx.appcompat:appcompatを1.1.0-rc01にダウングレードしましたか?1.0.2ではない?
Zhebzhik Babich

1.0.2で試してみましたが、成功しませんでした。appcompatと組み合わせて、他の依存関係の1つでなければなりません。
S.ギッセル

ダウングレードするだけでandroidx.appcompat:appcompatうまくいきました。今後の読者へ:より多くのものをダウングレードする前に、「段階的同期」を行い、それが十分でないことを確認してください。
user1032613

プロジェクトに依存関係のバージョンを確認するために余計なことはありませんダウングレードした後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が問題の解決に役立つコードスニペットを投稿しました。ただし、必ず最初にこれを実行してください。stackoverflow.com/ a / 57715955/2344192
表示名

2
この回避策はドロップダウンフィールドを壊し、WebViewでテキストを選択することに注意してください。
user5507535

2

AppCompat 1.2.0-alpha02が本日リリースされたので、

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

LollipopのWebViewの問題を修正します。


問題は修正されますが、アルファ版であるため、他のバグが発生する可能性があります。試した場合、アプリで他の問題に直面していませんか?
ソハイル

@Soheilいいえ、私はグリッチを経験していません。もちろん、アルファ版は常に少し危険です。たとえば、alpha02のバグは次のとおりです。issuetracker.google.com
Dimitris Pattas

2

この問題はNexus 7 API 22で再現できました。この問題は、タブレットのAndroidシステムWebViewのバージョンをバージョン39(2237560アーム)からバージョン79.0.3945.136に更新することで修正されます。

これをユーザーが制御することはできませんが、誰かがアプリをすぐに使用できるようにする必要がある場合の解決策です。


1

この問題は、実装「androidx.appcompat:appcompat:1.0.2」にダウングレードすることで解決しました


1

私の場合、方法に問題がありました

fun getUserId(): Int = userId

MainActivityの。なぜ影響するのかわかりませんWebViewgetUserId()オーバーライドされておらず、Activityクラスのパブリックメソッドでもありません。このメソッドの名前を変更または削除WebViewすると、開き始めます。また変更しようとしています

private var userId: Int = 0

var userId: Int = 0
    private set

同じ例外が発生します。私は例外を見たときにそれを理解しました: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。その場合、user = 123456は実際には許可されたユーザーであり、でではなく、いくつかの要求で使用されましたWebView。Androidの使用が疑われるuserIdそのプロセスのローカルuser_idとしてているのでとます。

他の多くの人々が気づいたようにappcompat:1.1.0、クラスを使用したり1.0.2、拡張したりできますWebView。Google Play WebView開発者サービスのないエミュレータ21では、これはテキストラベルを長押しするとクラッシュしますが、通常のデバイスではすべて問題ありません。


0

依存関係のバージョンを変更する代わりに、プログラムとしてwebViewの生成をソリューションとして実装しました。

問題は、実際にはxmlファイルからレイアウトを読み取ることから始まります。プログラム的な方法が適切な解決策である場合は、以下のサンプルを確認してください。

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

親ビューに追加するだけではありません。

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

-4

バージョンを確認してください。Androidx appcompatとGoogleマテリアルバージョンは常に同じです。

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"

ここに画像の説明を入力してください


1
リンクした画像が後で利用できなくなった場合に備えて、サンプルコードを回答に直接貼り付けてください。
ルイシャレット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.