为使用 Android Studio 3.0 编译的应用解决了错误的样式化资源值
Wrong styleable resource value resolved for app compiled with Android Studio 3.0
自从我们升级到 Android Studio 3.0(使用 Android Gradle 插件 3.0.0)后,我们遇到了一个奇怪的问题。
我们的应用程序使用 MaterialEditText 库。在 AS 3.0 之前一切正常。现在,在我们将项目迁移到 AS 3.0 并使用此版本的 Android Studio 和相关的 Gradle 插件编译应用程序后,当使用 MaterialEditText 组件时应用程序崩溃:
Caused by: java.lang.RuntimeException: Font asset not found res/drawable-mdpi-v4/ic_clear_search_api_holo_dark.png
at android.graphics.Typeface.createFromAsset(Typeface.java:304)
at com.rengwuxian.materialedittext.MaterialAutoCompleteTextView.getCustomTypeface(MaterialAutoCompleteTextView.java:488)
at com.rengwuxian.materialedittext.MaterialAutoCompleteTextView.init(MaterialAutoCompleteTextView.java:385)
at com.rengwuxian.materialedittext.MaterialAutoCompleteTextView.<init>(MaterialAutoCompleteTextView.java:325)
... 40 more
似乎 typedArray.getString(R.styleable.MaterialEditText_met_accentTypeface)
突然解析为 MaterialAutoCompleteTextView
行 383 中的一些随机可绘制路径。然而,这 仅 发生在 Android 低于 8.0 的设备上。在 Android 8.0 上,应用程序运行良好。
升级到AS 3.0期间我们的样式没有改变:
<item name="met_typeface">fonts/UnitRoundedOT.otf</item>
<item name="met_accentTypeface">fonts/UnitRoundedOT.otf</item>
另请参阅 MaterialEditText 库的相关 issue。
将 Android 项目迁移到 AS 3.0 时,似乎仅使用新的 Gradle 插件
classpath 'com.android.tools.build:gradle:3.0.0'
不更改 Gradle 文件的其余部分就足以引发此错误。然而,一个完全迁移的项目也有这个问题。
这可能是 Gradle 插件的错误吗?
显然,此问题的解决方法是将字体文件的路径放在字符串资源中,并从样式属性中引用这些资源
strings.xml:
<string name="font_unit_rounded">fonts/UnitRoundedOT.otf</string>
styles.xml:
<item name="met_typeface">@string/font_unit_rounded</item>
<item name="met_accentTypeface">@string/font_unit_rounded</item>
有关详细信息,请参阅 issue 346。目前尚不清楚为什么 Android Studio 3.0 会突然出现此问题,并且仅适用于 Android < 8.0 的设备。鉴于此问题的随机性,我认为这是 Android Gradle 插件的错误。
自从我们升级到 Android Studio 3.0(使用 Android Gradle 插件 3.0.0)后,我们遇到了一个奇怪的问题。
我们的应用程序使用 MaterialEditText 库。在 AS 3.0 之前一切正常。现在,在我们将项目迁移到 AS 3.0 并使用此版本的 Android Studio 和相关的 Gradle 插件编译应用程序后,当使用 MaterialEditText 组件时应用程序崩溃:
Caused by: java.lang.RuntimeException: Font asset not found res/drawable-mdpi-v4/ic_clear_search_api_holo_dark.png
at android.graphics.Typeface.createFromAsset(Typeface.java:304)
at com.rengwuxian.materialedittext.MaterialAutoCompleteTextView.getCustomTypeface(MaterialAutoCompleteTextView.java:488)
at com.rengwuxian.materialedittext.MaterialAutoCompleteTextView.init(MaterialAutoCompleteTextView.java:385)
at com.rengwuxian.materialedittext.MaterialAutoCompleteTextView.<init>(MaterialAutoCompleteTextView.java:325)
... 40 more
似乎 typedArray.getString(R.styleable.MaterialEditText_met_accentTypeface)
突然解析为 MaterialAutoCompleteTextView
行 383 中的一些随机可绘制路径。然而,这 仅 发生在 Android 低于 8.0 的设备上。在 Android 8.0 上,应用程序运行良好。
升级到AS 3.0期间我们的样式没有改变:
<item name="met_typeface">fonts/UnitRoundedOT.otf</item>
<item name="met_accentTypeface">fonts/UnitRoundedOT.otf</item>
另请参阅 MaterialEditText 库的相关 issue。
将 Android 项目迁移到 AS 3.0 时,似乎仅使用新的 Gradle 插件
classpath 'com.android.tools.build:gradle:3.0.0'
不更改 Gradle 文件的其余部分就足以引发此错误。然而,一个完全迁移的项目也有这个问题。
这可能是 Gradle 插件的错误吗?
显然,此问题的解决方法是将字体文件的路径放在字符串资源中,并从样式属性中引用这些资源
strings.xml:
<string name="font_unit_rounded">fonts/UnitRoundedOT.otf</string>
styles.xml:
<item name="met_typeface">@string/font_unit_rounded</item>
<item name="met_accentTypeface">@string/font_unit_rounded</item>
有关详细信息,请参阅 issue 346。目前尚不清楚为什么 Android Studio 3.0 会突然出现此问题,并且仅适用于 Android < 8.0 的设备。鉴于此问题的随机性,我认为这是 Android Gradle 插件的错误。