作为Oreo和支持库中新的可下载字体支持的一部分,我已经开始将这些功能整合到我开发的应用程序中。第一个应用程序是成功的-简单的应用程序,只需几个活动。第二个应用程序未成功。添加可下载字体后(基于此资源:
https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts.html
)我在启动活动时遇到此错误:
01-05 13:48:50.849 1112-16753/? I/ActivityManager: Start proc 22862:com.android.chrome:sandboxed_process0/u0i247 for webview_service edu.bsu.android.apps.traveler/org.chromium.content.app.SandboxedProcessService0
01-05 13:48:51.047 22862-22862/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.android.chrome:sandboxed_process0, PID: 22862 android.content.res.Resources$NotFoundException: Array resource ID #0x7f030030
at android.content.res.Resources.obtainTypedArray(Resources.java:618)
at android.content.res.Resources.preloadFonts(Resources.java:380)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5769)
at android.app.ActivityThread.-wrap1(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.WebViewZygoteInit.main(WebViewZygoteInit.java:146)
应用程序不会崩溃,但会出现两次弹出窗口,说明“Chrome已停止”-再次打开应用程序或发送反馈。
基于stacktrace,资源ID
#0x7f030030
是R.java中的以下条目(我希望是):
public static final int preloaded_fonts=0x7f030030;
我相信我已经确定了错误的原因-同样,错误表明Chrome有问题,但我的应用程序中出现了这种情况:
-
活动的布局包含
TextView
使用
autoLink
“web”、“map”或“all”属性。
-
我根据上面引用的文档在清单中预加载字体。
消除清单中的预加载声明或删除
自动链接
属性解决问题。
TextViews
不使用“web”、“map”或“all”作为
自动链接
属性不生成错误(“phone”工作,这是我所期望的,因为它不是基于web的意图)。显然,两者都不是理想的解决方案。这仅在应用程序首次启动时发生。
同样,第一个应用程序使用相同的字体工作良好,在清单中预加载,并使用自动链接属性。但是,工作和非工作应用程序之间存在差异:
-
非工作应用程序是一个大型应用程序,因此它使用multidex库,而工作应用程序则不使用。
-
该非工作应用程序是本地化的,专为多个设备设计,因此它包括英语和德语
values
目录以及屏幕大小取决于
价值观
目录。工作应用程序未使用多个
价值观
资源文件夹。
为了解决此问题,我尝试了以下方法:
-
认为ResourceID与某些内容冲突,我为字体数组创建了一个全新的资源,创建了一个新ID。错误仍然发生。
-
已将字体数组XML文件添加到所有
价值观
项目中的文件夹,无论屏幕大小或本地化。仍发生错误。
-
尝试了不同的字体,只使用了一种字体。仍发生错误。
-
删除了“web”、“map”和“all”
自动链接
值来自
文本视图
. 错误消失了。
-
已删除
preload_fonts
清单中的元标记。错误消失了。
我发现一个问题跟踪程序与此问题有一定的关联(我是跟踪程序上最新提交的内容,但在我完全理解问题的复杂性之前):
https://issuetracker.google.com/u/1/issues/65575496
我已经在以下设备上测试了产生错误的应用程序,“Chrome has stopped”错误仅出现在Oreo设备上。“easy”应用程序可在所有设备上运行,未报告任何错误。
-
像素2 XL,8.1.0-错误
-
Nexus 5X,8.1.0-错误
-
Nexus 6、7.1.1-任一应用程序均无错误
两个应用程序都具有以下渐变配置:
compileSdkVersion 27
buildToolsVersion '27.0.3'
minSdkVersion 16
targetSdkVersion 27
supportLibraryVersion = "27.0.2"
playServicesVersion = "11.8.0"
是否有此问题的解决方案(其他未预加载字体或使用web、map或all autoLink属性),或者这与前面提到的问题跟踪程序有关?