Я пытаюсь использовать библиотеку Android Support Design (в версии 23.0.1) и класс NavigationMenu
(я использую этот класс как XML-тег в макет).NoClassDefFoundError: android.support.design.internal.NavigationMenu на Android 4.2.2 (wiko)
Когда я выполняю свое приложение на Samsung на Android 4.3 или на Nexus на Android 5.x или 6.0, все работает хорошо, но когда я запускаю приложение на Wiko Rainbow на Android 4.2.2, он падает с следующее исключение:
java.lang.RuntimeException: Unable to start activity ComponentInfo{applicationId/package.MainActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class <unknown>
[...]
Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class <unknown>
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:587)
[...]
Caused by: java.lang.NoClassDefFoundError: android.support.design.internal.NavigationMenu
at android.support.design.widget.NavigationView.<init>(NavigationView.java:99)
at android.support.design.widget.NavigationView.<init>(NavigationView.java:92)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:587)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
[...]
Эта ошибка заставляет меня думать о схожих разработчиках были несколько месяцев назад, используя библиотеку AppCompat-v7 на некоторых телефонах WIKO и Samsung на Android 4.2.2.
Ошибка:
java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
at android.support.v7.app.ActionBarActivityDelegateBase.initializePanelMenu(ActionBarActivityDelegateBase.java:914)
at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:964)
at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1182)
at android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.java:79)
at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:118)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5391)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
Решение было использовать следующий файл Proguard в проект:
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-dontobfuscate
-dontoptimize
-keep class !android.support.v7.internal.view.menu.**, ** { *; }
Это решение было здорово, потому что не нужно добавлять определенные правила (только некоторые строки -dontwarn
) для других библиотек, которые я использую как Jackson или для добавления определенных правил для компонентов Android.
Поскольку NavigationMenu
класс наследуется в MenuBuilder
классе, я думал, что мы можем изменить файл Proguard, как это исправить вопрос:
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-dontobfuscate
-dontoptimize
-keep class !android.support.design.internal.**, ** { *; }
К сожалению, это не работает ... Так что я попробовал другое решение :
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-dontobfuscate
-dontoptimize
-keep class !android.support.v7.internal.view.menu.*MenuBuilder*, android.support.v7.** { *; }
этого решение работ но ... на самом деле, я не имею NoClassDefFoundError
исключения больше, но у меня есть другие исключения (что происходит на всех Android версии):
- некоторые отсутствующие конструкторы используют с отражением;
- некоторые отсутствующие пустые конструкторы на объектах Джексона или на
Fragment
.
Итак, вы знаете решение, которое позволяет мне выполнять мое приложение на Wiko на Android 4.2.2, и в котором я не должен добавлять определенные правила для каждой библиотеки, которую я использую или использую в будущее ?
Заранее благодарю вас за помощь!
В этом файле конфигурации есть много чего, что может не иметь ничего общего с этим вопросом. Не могли бы вы уточнить, что именно вылечит эту проблему с помощью NavigationView? Я хочу, например, обфускацию и не отключать ее - я не думаю, что это связано с проблемой ... – Zordid