разделяемые аргументы компонента Android — навигации не найдены в варианте выпуска

#android #parcelable

Вопрос:

у меня странная ошибка, я разрабатываю приложение и использую navigation component его , мне нужно передать пользовательские Parcelable объекты в некоторые фрагменты с помощью safeArgs , на самом деле приложение отлично работает при отладочных сборках, к сожалению, при попытке запустить приложение в режиме выпуска приложение выдает FATAL EXCEPTION . Модели находятся в отдельном модуле, нужно ли мне добавлять определенную конфигурацию в этот модуль?

это пример моделей

 @Parcelize
@Serializable
data class Article(
    val articleId: Int,
///
) : Parcelable
 

это трассировка стека исключений:

 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: ..., PID: 11381
    java.lang.RuntimeException: Unable to start activity ComponentInfo{...MainActivity}: android.view.InflateException: Binary XML file line #101 in .....:layout/activity_main: Binary XML file line #101 in ...:layout/activity_main: Error inflating class androidx.fragment.app.FragmentContainerView
        at.... //
     Caused by: android.view.InflateException: Binary XML file line #101 in ....:layout/activity_main: Binary XML file line #101 in ....:layout/activity_main: Error inflating class androidx.fragment.app.FragmentContainerView
     Caused by: android.view.InflateException: Binary XML file line #101 in ....:layout/activity_main: Error inflating class androidx.fragment.app.FragmentContainerView
     Caused by: java.lang.RuntimeException: Exception inflating ....:navigation/navigation line 168
       //....
E/AndroidRuntime:     at ...///
     Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: ......app_models.Article
        at p4.o.a(NavType.java:181)
        at androidx.navigation.g.e(NavInflater.java:191)
        at androidx.navigation.g.g(NavInflater.java:155)
        at androidx.navigation.g.b(NavInflater.java:128)
        at androidx.navigation.g.b(NavInflater.java:141)
        at androidx.navigation.g.c(NavInflater.java:88)
            ... 42 more
     Caused by: java.lang.ClassNotFoundException: ....app_models.Article
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:454)
        at java.lang.Class.forName(Class.java:379)
        at p4.o.a(NavType.java:169)
            ... 47 more
     Caused by: java.lang.ClassNotFoundException: Didn't find class "....app_models.Article" on path: DexPathList[[zip file "/data/app/~~Frr3Sf0kFWBoEFseLYT-jQ==/....-BW1tOT8d2hUlYJyi1fggPw==/base.apk"],nativeLibraryDirectories=[/data/app/~~Frr3Sf0kFWBoEFseLYT-jQ==/...-BW1tOT8d2hUlYJyi1fggPw==/lib/x86, /system/lib, /system_ext/lib]]
 

Nb: я заменил названия пакетов на 3 точки
, спасибо

Комментарии:

1. Вам необходимо добавить конфигурацию Proguard, чтобы сохранить имена ваших классов, которые снабжены @Parcelize аннотациями или реализуют Parcelable или около того

Ответ №1:

Вам необходимо добавить по крайней мере следующее в конфигурацию Proguard:

 -keepnames class * implements android.os.Parcelable
 

Хотя также может иметь смысл убедиться, что поле СОЗДАТЕЛЬ сохранено

 -keepnames class * implements android.os.Parcelable

-keepclassmembers class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}