Не удалось найти класс "com.jambod.user.model.ProcessModel" по пути: ошибка DexPathList только в выпуске apk - PullRequest
0 голосов
/ 16 октября 2019

Я пишу приложение и использую dagger-android и компонент навигации на нем. Для уменьшения размера apk я включаю minifyEnabled и shrinkResources. Но когда я генерирую apk и открываю приложение, приложение падает. Я проследил logcat, и ошибка была Caused by java.lang.ClassNotFoundException Didn't find class "com.jambod.user.model.ProcessModel" on path: DexPathList. Это код ProcessModel:

    data class ProcessModel(
    var id: String,
    var state: String ,
    var originLat: Double,
    var originLon: Double,
    var originAddress: String,
    var city: String ,
    var client: User ,
    var broker: Broker,
    var handover: HandOver ,
    var startTime: Long ,
    var endTime: Long ,
    var clientScore: Int,
    var role:String,
    var isFirstFinishedProcess:Boolean

) : Serializable {
}

И это мой класс приложения:

    class MyApplication : DaggerApplication() {

    val TAG="MyApplication"
    @Inject
    lateinit var mapboxMap: CedarMaps

    override fun applicationInjector(): AndroidInjector<out DaggerApplication> {

        Log.e(TAG,"applicationInjector")
        return DaggerAppComponent.builder().application(this).build()

    }

    override fun onCreate() {
        super.onCreate()
        Log.e(TAG,"onCreate")
        setMapview()
    }

    override fun attachBaseContext(base: Context) {
        super.attachBaseContext(base)
        Log.e(TAG,"attachBaseContext")
        MultiDex.install(this)
    }

    private fun setMapview() {
        mapboxMap.setClientID("jambod-3804728105994932624")
                .setClientSecret("b37qDGphbWJvZLqxi8hCuQhrjCXtqKs9V536SyiAAHQP01FzTg3G0iat")
                .setContext(this)
    }

}

И эта часть кода файла мобильной навигации, которая в logcat содержит ошибку:

  <fragment android:id="@+id/detailProcessFragment" android:name="com.jambod.user.ui.DetailProcessFragment"
          android:label="fragment_detail_process" tools:layout="@layout/fragment_detail_process">
    <argument android:name="KEY_PROCESS"
        app:argType="com.jambod.user.model.ProcessModel"
        app:nullable="true"
        android:defaultValue="@null"/>
</fragment>

Согласно документу я создаю файл multidex-config.txt и добавляю его на build.gradle Но проблема не решилась. Это файл build.gradle:

 defaultConfig {
    applicationId "com.jambod.user"
    minSdkVersion 16
    targetSdkVersion 29
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}
buildTypes {
    release {
        multiDexKeepFile file('multidex-config.txt')
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

1 Ответ

0 голосов
/ 16 октября 2019

Как вы используете "minifyEnabled true" и Proguard. "minifyEnabled true" через некоторое время удалит классы моделей, которые вы использовали в своем приложении. Добавьте строку ниже в Сценарии Gradle -> proguard-rules.pro . Ниже строки будет держать класс и его членов в вашем окончательном APK.

-keepclasseswithmembernames  class  com.jambod.user.model.ProcessModel.** { *; }
...