androidx.navigation 库更新到 2.2.2 版本发布构建问题

标签 android android-fragments kotlin android-architecture-navigation android-navigation

我对 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>

语言: Kotlin

有人遇到过这样的问题吗?

注意:使用 2.2.1 版本一切正常。 调试版构建也可以

我认为问题与此更改有关。 根据官方 Android 导航组件 release notes

navigator-common-ktx ProGuard 规则现在正确地只保留使用的 NavArgs 类,而不是所有 NavArgs 实例。这之前在 Navigation 2.3.0-alpha03 中发布。 (b/150213558

最佳答案

该死的。我发现。

需要添加-keep class androidx.navigation.fragment.NavHostFragment

proguard-rules.pro 文件中。

关于androidx.navigation 库更新到 2.2.2 版本发布构建问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61364790/

相关文章:

java - LibGDX RTL 字体渲染?

java - 尝试将 editText 输出到 shareIntent

android - 错误 ':android:transformKotlinClassesWithJillForDebug' 。在构建用 Kotlin + LibGDX 编写的 Android 应用程序时

generics - 除了上限之外,Kotlin 是否还有任何通用约束?

java - 将图像加载到 imageView 中

android - 如何在android中创建侧边栏

android - 插入android日历事件后返回android中的上一个 Activity

android - 致命异常 : java. lang.IllegalStateException:保存状态失败: Activity fragment 已从 FragmentManager 中删除

Java继承: is the parent class instantiantiated every time a child class extends it?

gradle - Gradle Kotlin DSL 无法识别 buildscript 中的 ext