android - androidx.navigation 库更新到 2.2.2 版本发布构建问题
问题描述
我对 androidx.navigation 上次更新有疑问
我注意到,如果 build 是RELEASE 并出现类似错误,则在新更新(2.2.2)之后崩溃
Caused by: android.view.InflateException: Binary XML file line #12 in
com.somedomain.android:layout/activity_main: Binary XML file line #12 in
com.somedomain.android:layout/activity_main: Error inflating class
androidx.fragment.app.FragmentContainerView
Caused by: android.view.InflateException: Binary XML file line #12 in
com.somedomain.android:layout/activity_main: Error inflating class
androidx.fragment.app.FragmentContainerView
androidx.fragment.app.Fragment$e: Unable to instantiate fragment
androidx.navigation.fragment.NavHostFragment: make sure class name exists
我在用:
ext.versions = [
...
nav_version : '2.2.2',
]
ext.libs = [
...
nav_fragment : "androidx.navigation:navigation-fragment-ktx:$versions.nav_version",
nav_ui : "androidx.navigation:navigation-ui-ktx:$versions.nav_version",
]
在应用程序中
...
buildTypes {
debug {
manifestPlaceholders = [crashlyticsCollectionEnabled: "false"]
ext.enableCrashlytics = false
signingConfig signingConfigs.debug
debuggable = true
}
release {
manifestPlaceholders = [crashlyticsCollectionEnabled: "true"]
ext.enableCrashlytics = true
minifyEnabled true
shrinkResources true
debuggable = false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
...
implementation libs.nav_fragment
implementation libs.nav_ui
activity_main.xml 中的导航主机
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/main_nav_host"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/main_navigation" />
</FrameLayout>
</layout>
语言:科特林
有没有人遇到过这样的问题?
注意:使用 2.2.1 版本一切正常。调试版构建也可以
我认为这个问题与这个变化有关。根据官方 Android 导航组件发行说明
navigation-common-ktx ProGuard 规则现在正确地只保留使用的 NavArgs 类,而不是所有 NavArgs 实例。这之前在 Navigation 2.3.0-alpha03 中发布。(b/150213558
解决方案
该死。我发现。
它需要添加-keep class androidx.navigation.fragment.NavHostFragment
在proguard-rules.pro文件中。
推荐阅读
- sockets - boost async_accept 不适用于 boost asio use_future 选项
- javascript - 使用“GMT”获取“toISOString”字符串详细信息
- oracle - CURRENT_DATE 甲骨文
- firebase - Firedatabase.SetPersistent (true) minimiza 下载数据吗?
- python - 如何使用管道中的最佳估计器来预测测试集?
- python - AI 问题(即使不应该发生碰撞)
- awk - 将文本添加到由 sed 中的某些特殊字符定义的特定块
- angular - app-routing.module.ts 可以有 2 条路径:/id
- python - 如何检查键盘按钮是否收到垃圾邮件并在再次按下之前添加冷却时间
- firebase - Firebase,客户端服务器端与云功能服务器端