This one is strange. Happens to a few people but only Android 5.0 5.1 ?
It may just be a WebView problem we can't fix ourselves
https://couchdb.ankidroid.org/acralyzer/_design/acralyzer/index.html#/report-details/628eab19-4699-4f2a-94db-f1c6d4e6d270
android.content.res.Resources$NotFoundException: String resource ID #0x3040002
at android.content.res.HwResources.getText(HwResources.java:1252)
at android.content.res.Resources.getString(Resources.java:374)
at com.android.org.chromium.content.browser.ContentViewCore.setContainerView(ContentViewCore.java:948)
at com.android.org.chromium.content.browser.ContentViewCore.initialize(ContentViewCore.java:848)
at com.android.org.chromium.android_webview.AwContents.createAndInitializeContentViewCore(AwContents.java:649)
at com.android.org.chromium.android_webview.AwContents.setNewAwContents(AwContents.java:788)
at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:635)
at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:573)
at com.android.webview.chromium.WebViewChromium.initForReal(WebViewChromium.java:315)
at com.android.webview.chromium.WebViewChromium.access$100(WebViewChromium.java:100)
at com.android.webview.chromium.WebViewChromium$1.run(WebViewChromium.java:267)
at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.drainQueue(WebViewChromium.java:127)
at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue$1.run(WebViewChromium.java:114)
at com.android.org.chromium.base.ThreadUtils.runOnUiThread(ThreadUtils.java:144)
at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.addTask(WebViewChromium.java:111)
at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:264)
at android.webkit.WebView.<init>(WebView.java:548)
at android.webkit.WebView.<init>(WebView.java:483)
at android.webkit.WebView.<init>(WebView.java:466)
at android.webkit.WebView.<init>(WebView.java:453)
at android.webkit.WebView.<init>(WebView.java:443)
at com.ichi2.anki.AbstractFlashcardViewer$MyWebView.<init>(AbstractFlashcardViewer.java:2)
at com.ichi2.anki.AbstractFlashcardViewer.createWebView(AbstractFlashcardViewer.java:1)
at com.ichi2.anki.AbstractFlashcardViewer.setInterface(AbstractFlashcardViewer.java:3)
at com.ichi2.anki.AbstractFlashcardViewer.displayCardQuestion(AbstractFlashcardViewer.java:3)
at com.ichi2.anki.Reviewer.displayCardQuestion(Reviewer.java:2)
at com.ichi2.anki.AbstractFlashcardViewer$NextCardHandler.displayNext(AbstractFlashcardViewer.java:11)
at com.ichi2.anki.AbstractFlashcardViewer$NextCardHandler.onProgressUpdate(AbstractFlashcardViewer.java:1)
at com.ichi2.async.DeckTask$TaskListener.onProgressUpdate(DeckTask.java:1)
at com.ichi2.async.DeckTask.onProgressUpdate(DeckTask.java:3)
at com.ichi2.async.DeckTask.onProgressUpdate(DeckTask.java:1)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:648)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5538)
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:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Also showing up on Android 7.1 but with altered stack:
android.view.InflateException: Binary XML file line #5: Error inflating class android.webkit.WebView
at android.view.LayoutInflater.createView(LayoutInflater.java:652)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
at com.android.internal.policy.impl.HwPhoneLayoutInflater.onCreateView(HwPhoneLayoutInflater.java:75)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:701)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:760)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:825)
at android.view.LayoutInflater.inflate(LayoutInflater.java:523)
at android.view.LayoutInflater.inflate(LayoutInflater.java:425)
at com.ichi2.anki.Statistics$OverviewStatisticsFragment.onCreateView(Statistics.java:2)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:4)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:71)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:9)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:23)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:6)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:14)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:10)
at androidx.fragment.app.FragmentManagerImpl.execSingleAction(FragmentManagerImpl.java:5)
at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:2)
at androidx.fragment.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:2)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:51)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1)
at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:25)
at android.view.View.measure(View.java:17611)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5547)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1467)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:747)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:638)
at android.view.View.measure(View.java:17611)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5547)
at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:1)
at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:35)
at android.view.View.measure(View.java:17611)
at androidx.drawerlayout.widget.DrawerLayout.onMeasure(DrawerLayout.java:43)
at android.view.View.measure(View.java:17611)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5547)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:21)
at android.view.View.measure(View.java:17611)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5547)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17611)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5547)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17611)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5547)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1467)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:747)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:638)
at android.view.View.measure(View.java:17611)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5547)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2639)
at android.view.View.measure(View.java:17611)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2075)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1210)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1416)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1098)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6179)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:793)
at android.view.Choreographer.doCallbacks(Choreographer.java:606)
at android.view.Choreographer.doFrame(Choreographer.java:575)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:779)
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:5595)
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:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
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:626)
... 69 more
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x3040005
at android.content.res.HwResources.getText(HwResources.java:1326)
at android.content.res.Resources.getString(Resources.java:398)
at com.android.org.chromium.content.browser.ContentViewCore.setContainerView(ContentViewCore.java:733)
at com.android.org.chromium.content.browser.ContentViewCore.initialize(ContentViewCore.java:657)
at com.android.org.chromium.android_webview.AwContents.createAndInitializeContentViewCore(AwContents.java:649)
at com.android.org.chromium.android_webview.AwContents.setNewAwContents(AwContents.java:798)
at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:634)
at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:571)
at com.android.webview.chromium.WebViewChromium.initForReal(WebViewChromium.java:332)
at com.android.webview.chromium.WebViewChromium.access$100(WebViewChromium.java:102)
at com.android.webview.chromium.WebViewChromium$1.run(WebViewChromium.java:284)
at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.drainQueue(WebViewChromium.java:129)
at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue$1.run(WebViewChromium.java:116)
at com.android.org.chromium.base.ThreadUtils.runOnUiThread(ThreadUtils.java:144)
at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.addTask(WebViewChromium.java:113)
at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:281)
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)
... 72 more
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
This is in a close race for being our most frequent crash by user count, and it blocks reviewing totally I believe
Here's the upstream bug: https://issuetracker.google.com/issues/141132133
It's a problem with appcompat-1.1.0
apparently it should be reproducible on a lollipop emulator
apparently there are three possible workarounds, either reverting to beta01 or rc0 of appcompat, overriding a method, or wrapping the webview.
A work plan would be to reproduce first with no change
then in order of preference I think I'd try looking at dropping appcompat down to beta01 or rc0 to see if it fixed it while looking at the changelog between whatever it went to and 1.1.0 to see what we're losing
If that doesn't work or the changelog has other stuff we need, then trying the workaround of overriding the applyOverrideConfiguration method so we can stay on current appcompat releases, with a note on the appcompat dependency line in gradle pointing at this issue so we can remove whatever the workaround is in the futuer
By statistics this appears to affect android 5.0 through 7.1 which is I think 30% or so of our userbase and is a full-stop crash bug. @timrae I'll see if I can fix this today for a cherry-pick 2.9.1
For posterity, my work project also fell prey to this. But it only had one Activity class so I tried the alternative solution, and this was sufficient to work around the problem. I suppose it would need to be applied to each Activity subclass that used WebView:
// Workaround appcompat-1.1.0 bug https://issuetracker.google.com/issues/141132133
@Override
public void applyOverrideConfiguration(Configuration overrideConfiguration) {
if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT <= 25) {
return;
}
super.applyOverrideConfiguration(overrideConfiguration);
}
Not advocating this now because we appear to have other issues when using appcompat-1.1.0 that need investigation. I did see that there is apparently a new companion appcompat-resources-1.1.0 artifact that may be useful in conjunction
appcompat v1.2.0-alpha02 will be the first build with - hopefully - a fix for this that is not just reverting to an old library - https://issuetracker.google.com/issues/141351441#comment27
There was some delay in releasing alpha02 so we haven't been able to test the upgrade. They mentioned they would try to release it within a week, a couple days ago.
It will be visible here https://mvnrepository.com/artifact/androidx.appcompat/appcompat or primary source (but not deep-linkable) here when released https://maven.google.com/web/index.html
Despite using the old appcompat, this is still crashing on Huawei devices with Android 5.0, so re-opening. alpha03 of appcompat is out now - this should be scheduled for 2.10
Most helpful comment
For posterity, my work project also fell prey to this. But it only had one Activity class so I tried the alternative solution, and this was sufficient to work around the problem. I suppose it would need to be applied to each Activity subclass that used WebView:
Not advocating this now because we appear to have other issues when using appcompat-1.1.0 that need investigation. I did see that there is apparently a new companion appcompat-resources-1.1.0 artifact that may be useful in conjunction