android.view.InflateException 클래스 android.webkit.WebView 팽창 오류


132

Lollipop (API 22)에서는 애플리케이션에서 매번 애플리케이션 충돌이 발생하는 웹뷰를 보여줍니다. 이 이벤트와 관련된 Android 개발자 콘솔에 여러 충돌이 있습니다.

Android 4, 6 및 7에서 작동한다고 말할 필요가 없습니다.

스택 추적 읽기 (이 게시물 끝에 게시 됨), 뭔가 버그가 있습니다.

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

나는 ID가 존재하지 않기 때문에 운없이 생성 된 R.java에서 검색했지만 시도해 볼 가치가있었습니다.

문제를 검색하는 것은 Lollipop이 웹뷰를 처리하는 방법과 관련이있는 것 같습니다. 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

18
이 질문은 2016 년의 질문이지만이 문제는 2019 년 말에 다시 떠오르고 있습니다. 웹 검색을 통해 여기에 도착한 경우 해당하는 답변을 선택해야합니다.
user1032613

API 레벨 21의 물리적 장치가 없습니다. Genymotion 및 API 레벨 21의 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

답변:


172

을 사용하는 경우 대신 androidx.appcompat:appcompat:1.1.0시도하십시오 androidx.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 {힘을 'androidx.appcompat : APPCOMPAT : 1.1.0-RC01을'}} ".
탈루

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
난 당신을 감사합니다, 같은 문제를 발견하고 해결하기 위해이 솔루션을 사용
itsa04g9

장치에 안드로이드 웹보기를 업데이트하면 문제가 해결
표시 이름

2
2019 년에도 여전히 문제가 있고 작동하지만 이유 / 방법을 모르겠습니다. 이것이 설명되면 좋을 것입니다. 또한 경고가 4 번째 생성자 "public LollipopFixedWebView (Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"에서 사용되지 않습니다. "
David

4
이 해결 방법에 대한주의 사항 : 빈 컨텍스트로 WebView를 인스턴스화하면 의도하지 않은 부작용이 발생할 수 있습니다. 예를 들어 WebView의 ActionModes는 더 이상 작동하지 않을 것입니다 (예 : 길게 눌러 텍스트를 강조 표시).
Dmitry Brant

5
@DmitryBrant가 말했듯이 이것을 구현할 때 매우 조심해야합니다. 드롭 다운 필드길게 눌러 텍스트를 강조하는 등 몇 가지 문제가 발생하기 때문입니다 !
user5507535

42

을 사용 androidx.appcompat:appcompat:1.1.0중이고로 다운 그레이드 androidx.appcompat:appcompat:1.0.2하거나로 업그레이드 하지 않으려 androidx.appcompat:appcompat:1.2.0-alpha03는 경우 Google Issue Tracker 의이 주석 에 설명 된 다른 솔루션 있습니다.

나는 applyOverrideConfiguration를 호출 한 후 그 눈치 Context.getAssets()Context.getResources().getAssets()같은 AssetManager 개체를 반환하지 않습니다. 에서 반환 된 AssetManager는 Context.getAssets()다른 패키지 (시스템 WebView 패키지 포함)의 리소스에 액세스 할 수 없으므로 WebView가 충돌합니다. Context.getAssets()반환하도록 재정의 getResources().getAssets()하면 문제가 사라집니다.

해당 주석을 기반으로 getAssets()WebView의 활동에서을 재정 getResources().getAssets()의하여 문제를 해결하기 위해 대신 반환되도록 할 수 있습니다 .

자바

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

Kotlin

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

3
Great answer +1
Shirane85

안녕하세요, 이것이 사실이라면 AssetManager 및 webview 자체와 관련이없는 appCompact 릴리스로 어떻게 해결 될까요?
Sinapse

보면 이 변경 목록 은 일부 웹보기 버전은 문제가있는 것 같다 applyOverrideConfigurationAPPCOMPAT 라이브러리 내부의 호출을.
Prawira

34

내 조언은 Configuration"원본"이 문제를 일으킬 때만 사용자 지정 / 새로 만들기를 사용하는 것이므로 Lollipop에서만 사용할 수 있습니다. (9) Q (currenly 베타) 표시되지마다 선택 / 드롭 눌러 잘 안드로이드 8.x 사용까지 @SpaceBizon 코드 일, 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 이상에서는 문제가 발생하지 않는 것 같습니다.
Dmitry Brant

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
나를 위해 작동하는 것 같은 자바의 해결 방법은 다음과 같습니다 (끔찍한 형식에 대해 죄송하지만 새로운 답변은 아닙니다.)@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 인 기기"에서만 발생한다고 말하는 이유는 무엇입니까?
안드레이

20

DayNight 테마 전환 (또는 기타 UiMode 이벤트)에 의존하지 않는 경우 webview 활동 매니페스트에 android : configChanges = "uiMode" 를 추가하여 AppCompatDelegate가 리소스 구성을 업데이트하여 웹뷰 인플레이션을 엉망으로 만들 수 있습니다.


이것은 나를 위해 일했습니다. Appcompat 1.1.0이 필요한 ConstraintLayout 1.1.3이 필요하므로 되돌리기는 옵션이 아닙니다.
Matt Robertson

1.0.2로 다운 그레이드해도 아무런 차이가 없었지만이 방법은 효과가있었습니다.
chrisbtoo

멋진 솔루션!
bojan

17

webview를 만드는 데 사용해보십시오.

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

그리고 내 XML 파일?
Acauã Pitta 19 년

이것은 라이브러리 버전을 다운 그레이드하지 않고 내 문제를 해결했습니다
버그는

10

그리고 한 번 더 문제를 해결하십시오. 활동에서이 메서드를 재정의해야합니다.

    @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않았다 없는 문제를 해결.

향후 버전이 될 수도 있지만,이 문제를 해결해야하는 보완 리소스 라이브러리가있는 것 같다는 점을 언급하고 싶었습니다. 따라서 새 버전의으로이 문제를 해결하려는 경우 동일한 버전 appcompatappcompat-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에서 사용할 수 없습니다. 업데이트 된 답변을 참조하십시오.
Manuel

정말 감사합니다. 향후 버전에서이 문제가 해결되기를 바랍니다.
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와 함께 다른 종속성 중 하나 여야합니다.
S. Gissel

단순히 다운 그레이드 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가 문제 해결에 도움이 된 코드 스 니펫을 게시했습니다. 하지만
표시 이름

2
이 해결 방법은 WebView에서 드롭 다운 필드와 텍스트 선택을 구분합니다.
user5507535

2

AppCompat 1.2.0-alpha02가 오늘 출시되었으므로 다음을 사용할 수 있습니다.

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

Lollipop의 WebView 문제를 해결합니다.


문제를 해결하지만 알파 버전이기 때문에 다른 버그가 발생할 수 있습니다. 시도해 본 적이 있다면 앱에서 다른 문제에 직면하지 않았습니까?
Soheil

@Soheil 아니요, 나는 어떤 결함도 경험하지 않았습니다. 물론 알파 버전은 항상 약간 위험합니다. 예를 들어 alpha02에 대한 버그가 여기에 언급되어 있습니다. issuetracker.google.com/issues/141351441#comment48
Dimitris Pattas

2

Nexus 7 API 22에서이 문제를 재현 할 수있었습니다.이 문제는 태블릿의 Android System WebView 버전버전 39 (2237560-arm) 에서 버전 79.0.3945.136 으로 업데이트하여 해결되었습니다.

사용자가이 작업을 수행하는 것은 내가 제어 할 수 없지만 누군가가 앱을 즉시 사용하도록 도와야하는 경우 솔루션입니다.



1

제 경우에는 문제가 방법에있었습니다

fun getUserId(): Int = userId

MainActivity의. 왜 영향을 미치는지 모르겠습니다 WebView. getUserId()대체되지도 않고 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 서비스가없는 에뮬레이터 21에서는 WebView텍스트 레이블을 길게 터치하면 충돌이 발생하지만 일반적인 장치에서는 모든 것이 정상입니다.


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
링크 한 이미지를 나중에 사용할 수 없게되는 경우를 대비하여 예제 코드를 답변에 직접 붙여 넣어야합니다.
Louis Charette
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.