android - 为使用 Android Studio 3.0 编译的应用程序解决了错误的样式化资源值

标签 android android-studio android-gradle-plugin 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) 突然解析为 MaterialAutoCompleteTextView383 中的一些随机可绘制路径.但是,这发生在 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>

另请参阅相关的issue MaterialEditText 库。

将 Android 项目迁移到 AS 3.0 时,似乎只使用新的 Gradle 插件

classpath 'com.android.tools.build:gradle:3.0.0'

如果不更改 Gradle 文件的其余部分就足以引发此错误。然而,一个完全迁移的项目也有这个问题。

这可能是 Gradle 插件的错误吗?

最佳答案

显然,这个问题的解决方法是将字体文件的路径放在字符串资源中,并从样式属性中引用这些资源

字符串.xml:

<string name="font_unit_rounded">fonts/UnitRoundedOT.otf</string>

样式.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 - 为使用 Android Studio 3.0 编译的应用程序解决了错误的样式化资源值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47075964/

相关文章:

android - 在 Android Studio 中添加 Caldroid 库

android - 在 RelativeLayout 的 subview 上设置参数

Android Studios RuntimeException : Unexpected exception in dex writer thread

android - 如何将aidl文件添加到Android工作室(来自应用内计费示例)

Android Gradle - 在哪里添加 "android.debug.obsoleteApi=true"

java - 在 Appium 中,如何使用 Java 方法滚动和验证所需的元素集在 Android 屏幕中是否可用?

android - 增强现实 3D 模型渲染

android - 没有 C++ 源文件的 JNI

android-studio - 无法在伊朗的 Android Studio 中同步 Gradle

android - 如何禁用Android Studio代码风格警告 "... can be simplified to ..."