在Android 10/Android Q上使用捆绑的ttf字体时崩溃 [英] Crash when using bundled ttf font on Android 10 / Android Q

查看:131
本文介绍了在Android 10/Android Q上使用捆绑的ttf字体时崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

将我的Android应用的目标级别从28更新为29(Android 10)后,该应用在Pixel 3(使用Android 10)上崩溃了.

After I updated the target level for my Android app from 28 to 29 (Android 10) the app crashes on a Pixel 3 (with Android 10).

使用的版本

  • Android Gradle插件3.5.0
  • 5.5.1级

问题:这是一个已知问题吗?

详细信息

  • 崩溃发生在使用不同标签(TextView,androidx.appcompat.widget.AppCompatTextView等)的各种布局上
  • 我使用属性"android:fontFamily"并引用捆绑在我的一个外部库中的字体.
  • 字体文件opensans_regular.ttf被放置在res\font
  • The crash happens on various layouts using different tags (TextView, androidx.appcompat.widget.AppCompatTextView, etc)
  • I use the attribute "android:fontFamily" and reference a font bundled in one of my external libraries.
  • The font file, opensans_regular.ttf, is placed in res\font

下面的Stacktrace. 出于安全原因,我将应用程序包名称替换为x.y.z.

Stacktrace below. For security reasons I've replaced the apps package names with x.y.z.

2019-09-05 14:23:43.530 9060-9060/x.y.z E/AndroidRuntime: FATAL EXCEPTION: main
    Process: x.y.z, PID: 9060
    java.lang.RuntimeException: Unable to resume activity {x.y.z/x.y.main.devicefinder.BleFindActivity}: android.view.InflateException: Binary XML file line #73 in x.y.z:layout/fragment_add_devices: Binary XML file line #73 in x.y.z:layout/fragment_add_devices: Error inflating class TextView
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4205)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4237)
        at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: android.view.InflateException: Binary XML file line #73 in x.y.z:layout/fragment_add_devices: Binary XML file line #73 in x.y.z:layout/fragment_add_devices: Error inflating class TextView
     Caused by: android.view.InflateException: Binary XML file line #73 in x.y.z:layout/fragment_add_devices: Error inflating class TextView
     Caused by: java.lang.IndexOutOfBoundsException: index=0 out of bounds (limit=0, nb=4)
        at java.nio.Buffer.checkIndex(Buffer.java:564)
        at java.nio.DirectByteBuffer.getInt(DirectByteBuffer.java:570)
        at android.graphics.fonts.FontFileUtil.analyzeStyle(FontFileUtil.java:94)
        at android.graphics.fonts.Font$Builder.build(Font.java:364)
        at android.graphics.Typeface$Builder.build(Typeface.java:596)
        at android.content.res.ResourcesImpl.loadFont(ResourcesImpl.java:980)
        at android.content.res.Resources.getFont(Resources.java:400)
        at android.content.res.TypedArray.getFont(TypedArray.java:1035)
        at android.widget.TextView.readTextAppearance(TextView.java:3991)
        at android.widget.TextView.<init>(TextView.java:1064)
        at android.widget.TextView.<init>(TextView.java:968)
        at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:87)
        at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:83)
        at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:177)
        at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:102)
        at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1266)
        at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1316)
        at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:242)
        at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1061)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:997)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
        at x.y.main.devicefinder.BleFindFragment.onCreateView(BleFindFragment.java:62)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2439)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
2019-09-05 14:23:43.531 9060-9060/x.y.z E/AndroidRuntime:     at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
        at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3273)
        at androidx.fragment.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:3241)
        at androidx.fragment.app.FragmentController.dispatchResume(FragmentController.java:223)
        at androidx.fragment.app.FragmentActivity.onResumeFragments(FragmentActivity.java:538)
        at androidx.fragment.app.FragmentActivity.onPostResume(FragmentActivity.java:527)
        at androidx.appcompat.app.AppCompatActivity.onPostResume(AppCompatActivity.java:172)
        at android.app.Activity.performResume(Activity.java:7964)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4195)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4237)
        at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

更新1 :我从库模块复制了字体,并将其包含在app res文件夹中,但是仍然存在此问题.因此,我更改了标题以使这个问题更通用.

Update 1: I copied the font from the library module and included in the app res folder but still have this issue. So I changed the title to made this question more generic.

更新2 :使用.otf字体时有效

Update 2: When using a .otf font it works

推荐答案

我已将此报告给Google:

I've now reported this to Google: https://issuetracker.google.com/issues/140546806 So it now became a known issue I suppose :-)

更新

根本原因:我的ttf文件为空(!).我从未注意到,较老的Android会默默地忽略这一点.

The root cause: My ttf file was empty(!). I never noticed as older Androids would silently ignore this.

这篇关于在Android 10/Android Q上使用捆绑的ttf字体时崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆