【问题标题】:FragmentContainerView with SupportMapFragment crashes when minify is enabled启用 minify 时,带有 SupportMapFragment 的 FragmentContainerView 崩溃
【发布时间】:2020-09-04 13:22:37
【问题描述】:

我有以下布局:

<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/map"
    tools:context=".map.MapActivity"
    android:name="com.google.android.gms.maps.SupportMapFragment" />

它适用于我的调试版本,但我的发布版本启用了 minify 崩溃了。

09-04 15:14:06.727 15555 15555 E AndroidRuntime: android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class androidx.fragment.app.FragmentContainerView
09-04 15:14:06.727 15555 15555 E AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class androidx.fragment.app.FragmentContainerView
09-04 15:14:06.727 15555 15555 E AndroidRuntime: Caused by: androidx.fragment.app.Fragment$c: Unable to instantiate fragment com.google.android.gms.maps.SupportMapFragment: make sure class name exists

关于如何修复它的任何建议?如果我用旧的片段视图替换FragmentContainerView,它就可以工作。

【问题讨论】:

  • appcompat 1.2.0 版是否也有同样的问题(我在升级到 1.3.0 后看到了这个崩溃)

标签: android android-layout androidx


【解决方案1】:

问题可能与缩小有关。如果你启用了 minify,你可能需要在你的 proguard 中添加类似的东西: -keep class com.google.android.gms.maps.** { *; }

【讨论】:

    【解决方案2】:

    这是由 aapt2 中的一个错误引起的,谷歌正在跟踪一个错误:https://issuetracker.google.com/issues/142601969

    与此同时,解决此问题的最简单方法是将@Keep 添加到您以这种方式使用的任何片段中。

    如果它是您无法修改代码的库中的片段,您可以将其作为规则添加到您的proguard.cfg

    -keep class om.google.android.gms.maps.** { *; }

    【讨论】:

    • 您无需手动保留整个谷歌地图库。您只需要保留 SupportMapFragment 构造函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多