自 11 月 25 日以来,我开始在我的应用程序中看到以下崩溃:
Fatal Exception: java.lang.RuntimeException
Unable to create application com.doximity.doximitydroid.bases.DoxApp:
java.lang.RuntimeException: Using WebView from more than one process at once with the
same data directory is not supported.
https://crbug.com/558377 : Current process com.doximity.doximitydroid (pid 9862),
lock owner com.doximity.doximitydroid (pid 8728)
Run Code Online (Sandbox Code Playgroud)
它仅发生在运行 Android 12 的 Samsung Galaxy S21 设备的后台。我的应用程序当前针对 Android 11,它似乎与我的应用程序中的任何更改无关。我在 Samsung Galaxy S21 设备上进行了测试,但无法重现(似乎只是部分用户)。
仔细阅读具体的崩溃,这似乎是由于我们的应用程序中创建了多个进程并尝试写入 WebView 的默认数据目录。同样,这种情况突然出现,并且只发生在非常特定的用户子集上,所以我不确定这是我的应用程序的问题。
希望有人能够对这个问题有一些见解。
我确实发现这篇 SO 帖子讨论了类似的问题,但我从未在 Android 11 上看到过,不幸的是,作者似乎尚未达成任何解决方案。
我正在尝试为我的应用程序生成基线配置文件,但我看到以下错误:
:benchmark:connectedReleaseAndroidTest
java.io.FileNotFoundException: META-INF/native/libnetty_tcnative_osx_aarch_64.jnilib
java.io.FileNotFoundException: META-INF/native/libnetty_tcnative_aarch_64.jnilib
java.io.FileNotFoundException: META-INF/native/libnetty_tcnative.jnilib
Shell command failed (255): appops set androidx.test.services MANAGE_EXTERNAL_STORAGE allow
No UID for androidx.test.services in user 0
Run Code Online (Sandbox Code Playgroud)
基线测试确实在设备上运行,但无法成功从设备复制输出文件:
started: startup(com.doximity.benchmark.BaselineProfileGenerator)
Moving /storage/emulated/0/Android/media/com.doximity.benchmark/BaselineProfileGenerator_startup-baseline-prof.txt to /sdcard/Android/media/com.doximity.benchmark/additional_test_output/BaselineProfileGenerator_startup-baseline-prof.txt
Pull Baseline Profile with: `adb pull "/storage/emulated/0/Android/media/com.doximity.benchmark/BaselineProfileGenerator_startup-baseline-prof-2023-08-22-18-48-56.txt" .`
Moving /storage/emulated/0/Android/media/com.doximity.benchmark/BaselineProfileGenerator_startup-baseline-prof-2023-08-22-18-48-56.txt to /sdcard/Android/media/com.doximity.benchmark/additional_test_output/BaselineProfileGenerator_startup-baseline-prof-2023-08-22-18-48-56.txt
finished: startup(com.doximity.benchmark.BaselineProfileGenerator)
Run Code Online (Sandbox Code Playgroud)
此基线配置文件测试之前在更新 Android 目标 SDK 和 AGP 版本之前有效:
config.target_sdk_version = 34 // was 31
config.compile_sdk_version = 34 // was 33
versions.android_gradle_plugin = '8.1.1' // was 7.3.1
versions.kotlin = '1.9.0' // was 1.8.10
Run Code Online (Sandbox Code Playgroud)
我尝试了几种不同的设备和模拟器,并看到了相同的行为。
似乎WebInClcept方法(如shouldInterceptRequest(),onPageStarted()和shouldOverrideUrlLoading())仅侦听导致WebView加载新页面的URL更改.有没有办法在WebView上检测片段ID的URL更改,即index.html#fragment_id?