Приложение Cra sh вызвано ленивым API 19 - PullRequest
1 голос
/ 04 августа 2020

Я использую одноэлементный объект в своем приложении и предоставляю ему контекст из класса Application. И я использую делегат by lazy {} для набора sharedPreferences поля. Он работает с API 21 и выше, но в API 19 у меня есть NoClassDefFoundError:

08-04 16:20:24.075 5576-5576/ru.maxim.barybians E/AndroidRuntime: FATAL EXCEPTION: main
    Process: ru.maxim.barybians, PID: 5576
    java.lang.NoClassDefFoundError: ru.maxim.barybians.repository.local.PreferencesManager$sharedPreferences$2
        at ru.maxim.barybians.repository.local.PreferencesManager.<clinit>(PreferencesManager.kt:15)
        at ru.maxim.barybians.App.onCreate(App.kt:14)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4344)
        at android.app.ActivityThread.access$1500(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)

объект Singleton

object PreferencesManager {
    
    lateinit var context: Context
    private val sharedPreferences: SharedPreferences by lazy { PreferenceManager.getDefaultSharedPreferences(context) }

класс приложения

class App : Application() {

    override fun onCreate() {
        super.onCreate()
        PreferencesManager.context = applicationContext
    }
compileSdkVersion 29
buildToolsVersion "29.0.0"
minSdkVersion 19
targetSdkVersion 29
kotlin_version = '1.3.72'
Gradle Version = 6.1.1
Gradle Plugin Version = 4.0.1

Изменение версии Gradle или аннулирование кеша у меня не работает. Буду признателен за любую помощь

1 Ответ

0 голосов
/ 12 августа 2020

Я наконец нашел решение. Приложение вылетает из-за того, что класс App унаследован от Application. После того, как я изменил его на MultiDexApplication, приложение начало нормально работать.

class App : MultiDexApplication()

...