Как определить правила MultiDex и ProGuard для предотвращения «NoClassDefFoundError» в Android с помощью входа в GooglePlus? - PullRequest
0 голосов
/ 17 января 2019

В моей игре есть кнопка GooglePlus, позволяющая пользователям войти в систему с помощью Google. После нажатия на кнопку появляется всплывающее окно с пользовательскими учетными записями Google. После выбора одного из них приложение вылетает.

Эта ошибка появляется после того, как я обновил все зависимости Google Play с версии 10.2.1 до 16.0.0. Моя игра использует как MultiDex, так и ProGuard.

Возможно, мне нужно добавить правила в multidex keep и proguard config. Я старался изо всех сил, но не смог найти решение.

Вот журналы:

Fatal Exception: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/plus/internal/zzg;
       at com.google.android.gms.plus.internal.zzh.createServiceInterface(Unknown Source)
       at com.google.android.gms.common.internal.BaseGmsClient$zzf.zzm(Unknown Source:17)
       at com.google.android.gms.common.internal.BaseGmsClient$zza.zza(Unknown Source:12)
       at com.google.android.gms.common.internal.BaseGmsClient$zzc.zzo(Unknown Source:11)
       at com.google.android.gms.common.internal.BaseGmsClient$zzb.handleMessage(Unknown Source:48)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6316)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)

Caused by java.lang.ClassNotFoundException: com.google.android.gms.plus.internal.zzg
       at java.lang.VMClassLoader.findLoadedClass(VMClassLoader.java)
       at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:742)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:362)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
       at com.google.android.gms.plus.internal.zzh.createServiceInterface(Unknown Source)
       at com.google.android.gms.common.internal.BaseGmsClient$zzf.zzm(Unknown Source:17)
       at com.google.android.gms.common.internal.BaseGmsClient$zza.zza(Unknown Source:12)
       at com.google.android.gms.common.internal.BaseGmsClient$zzc.zzo(Unknown Source:11)
       at com.google.android.gms.common.internal.BaseGmsClient$zzb.handleMessage(Unknown Source:48)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6316)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)

Caused by java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/internal/plus/zza;
       at com.google.android.gms.plus.internal.zzh.createServiceInterface(Unknown Source)
       at com.google.android.gms.common.internal.BaseGmsClient$zzf.zzm(Unknown Source:17)
       at com.google.android.gms.common.internal.BaseGmsClient$zza.zza(Unknown Source:12)
       at com.google.android.gms.common.internal.BaseGmsClient$zzc.zzo(Unknown Source:11)
       at com.google.android.gms.common.internal.BaseGmsClient$zzb.handleMessage(Unknown Source:48)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6316)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)


Caused by java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.internal.plus.zza" on path: DexPathList[[zip file "/data/app/com.example.mobile.example.android-2/base.apk"],nativeLibraryDirectories=[/data/app/com.example.mobile.example.android-2/lib/arm, /data/app/com.example.mobile.example.android-2/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
       at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
       at com.google.android.gms.plus.internal.zzh.createServiceInterface(Unknown Source)
       at com.google.android.gms.common.internal.BaseGmsClient$zzf.zzm(Unknown Source:17)
       at com.google.android.gms.common.internal.BaseGmsClient$zza.zza(Unknown Source:12)
       at com.google.android.gms.common.internal.BaseGmsClient$zzc.zzo(Unknown Source:11)
       at com.google.android.gms.common.internal.BaseGmsClient$zzb.handleMessage(Unknown Source:48)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6316)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)

В документации Google сказано, что ниже:

Примечание: Директивы ProGuard включены в клиент сервисов Play библиотеки для сохранения необходимых классов. Плагин Android для Gradle автоматически добавляет файлы конфигурации ProGuard в AAR (Android ARchive) и добавляет этот пакет в ProGuard конфигурации. При создании проекта Android Studio автоматически создает файлы конфигурации ProGuard и свойства build.gradle для использования ProGuard. Чтобы использовать ProGuard с Android Studio, необходимо включить настройка ProGuard в ваших build.gradle buildTypes. Для большего информацию см. в руководстве ProGuard.

Есть предложения?

...