Multidex не работает после включения proguard и minifyEnabled = true

После включения proguard и установки minifyEnabled = true я получил эту ошибку при запуске активности:

java.lang.RuntimeException: Unable to instantiate application android.support.multidex.MultiDexApplication: java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/com.mypackage.code--fknQZuBbRxyDlzudklbZw==/base.apk"],nativeLibraryDirectories=[/data/app/com.mypackage.code--fknQZuBbRxyDlzudklbZw==/lib/arm64, /data/app/com.mypackage.code--fknQZuBbRxyDlzudklbZw==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
        at android.app.LoadedApk.makeApplication(LoadedApk.java:977)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6030)
        at android.app.ActivityThread.-wrap1(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1764)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6938)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/com.mypackage.code--fknQZuBbRxyDlzudklbZw==/base.apk"],nativeLibraryDirectories=[/data/app/com.mypackage.code--fknQZuBbRxyDlzudklbZw==/lib/arm64, /data/app/com.mypackage.code--fknQZuBbRxyDlzudklbZw==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)

это мой файл Gradle:

defaultConfig {
        applicationId "com.mypackage.code"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 17
        versionName "0.25"
        multiDexEnabled true
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        debug {
            minifyEnabled true

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

Я импортировал библиотеку multidex, потому что моя минимальная цель - 19

dependencies {
    implementation 'com.android.support:multidex:1.0.3'
}

и в манифесте Android я добавил MultiDexApplication в соответствии с документацией:

   <application
        android:name = "android.support.multidex.MultiDexApplication"

на самом деле все работает, но после включения прогарда начались проблемы.

это мое правило про multidex, которое я пробовал на proguard:

####multidex
-keep  class android.** { *; }
-keepclassmembernames class android.**
-dontnote android.**
-keep class android.support.multidex.**
-keepclassmembernames class android.support.multidex.**{*;}
-keepclassmembers class android.support.multidex.** {*;}
-keep public class android.support.multidex.**

у тебя есть идеи? Мне нужно запутать код, поэтому отключение proguard и minifyEnabled невозможно.

Благодарность!

multidex не нуждается в каких-либо правилах proguard, чтобы он работал без него.

Mohammed Junaid 27.10.2018 12:12

вы добавили MultiDex.install(this); в метод attachBaseContext вашего класса Application? и почистить и перестроить?

Mohammed Junaid 27.10.2018 12:14

@MohammedJunaid Я добавил эти правила, потому что withtout тоже не работает, ошибка остается прежней, с этими правилами или без них. о MultiDex.install (this) в соответствии с документом Google, не требуется, потому что я не переопределяю приложение, поэтому должно быть достаточно приложения, объявленного в манифесте Android: android: name = "android.support.multidex.MultiDexApplication. и да, я много раз пытался очистить и перестроить: (

Tobia 27.10.2018 12:19

Вы пробовали Clean and Rebuild, и иногда, как ни странно, disabling instant run тоже помогает?

Mohammed Junaid 27.10.2018 12:25

да, я много раз пытался очистить и перестроить, и мгновенный запуск уже отключен, на данный момент я застрял.

Tobia 27.10.2018 12:47

вы используете какие-либо библиотеки androidX?

Mohammed Junaid 27.10.2018 13:58

нет, я не использую библиотеки androidX, но я обнаружил, что проблема заключалась в следующих правилах proguard: -overloadaggressively теперь у меня эта проблема, конечно, без proguard все работает: java.lang.RuntimeException: невозможно запустить активность ComponentInfo {com. mypackage / com.mypachage.SplashScreenActivi‌ ty}: java.lang.NoSuchMethodException: getInstance [] в android.app.ActivityThread.performLaunchActivity (ActivityThr‌ ead.java:2955)

Tobia 27.10.2018 14:15

Обновите свой вопрос, указав соответствующую информацию, например, о рассматриваемом действии.

Mohammed Junaid 27.10.2018 14:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
561
0

Другие вопросы по теме