10

Androidサポートデザインライブラリ(バージョン23.0.1)およびクラスNavigationMenu(私はこのクラスをレイアウトへのXMLタグ)。NoClassDefFoundError:android.support.design.internal.NavigationMenu on Android 4.2.2(wiko)

Android 4.3またはAndroid 5.xまたは6.0のNexusでSamsungを実行すると、すべて正常に動作しますが、Android 4.2.2のWiko Rainbowでアプリを実行すると、次の例外:

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) 
[...] 

このエラーは、同様のもの、開発者は、Android 4.2.2にいくつかのWIKOとサムスンの携帯電話にAPPCOMPAT-V7のライブラリを使用して、数ヶ月前に持っていたについて私は考えさせます。

エラー:

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のように使用したり、アンドロイドコンポーネントの特定のルールを追加したりするためのライブラリです。

MenuBuilderクラスのNavigationMenuクラス継承は、私たちは問題を解決するために、このような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上で発生していこのソリューションバージョン)は次のようになります。

  • いくつかのコンストラクタがリフレクションで使用されています。
  • いくつかの空のコンストラクタがJacksonオブジェクトにあるか、またはFragmentにありません。

私のアプリをAndroid 4.2.2のWikoで実行するためのソリューションを知っていますか?使用しているか使用しているライブラリごとに特定のルールを追加する必要はありません未来 ?

ありがとうございました!

答えて

-4

Thxを!ここで私のために働くproguardファイル:

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod 

-dontobfuscate 
-dontoptimize 
-repackageclasses '' 

#Jackson 
-dontwarn com.fasterxml.jackson.databind.** 

#View Pager Indicator 
-dontwarn com.viewpagerindicator.** 

#Android 
-keep class android.support.v4.app.** { *; } 
-keep interface android.support.v4.app.** { *; } 
-keep class android.support.v7.app.** { *; } 
-keep interface android.support.v7.app.** { *; } 
-keep class android.support.v13.app.** { *; } 
-keep interface android.support.v13.app.** { *; } 

#droid4me 
-keep class com.smartnsoft.** { *; } 

#my app 
-keep class my.app.package.** { *; } 

#Critercism 
-keep public class com.crittercism.** 
-keepclassmembers public class com.crittercism.* { *; } 
+8

何もすることがないかもしれないこの設定ファイルにはたくさんのものがありますこの問題でNavigationViewでこの問題を正確に解決していることについて、具体的に説明できますか?私は、例えば、難読化を望んで、それをオフにしません - 私はこれが問題と関係しているとは思わない... – Zordid

5

私は同様のthreadに従っており、解決策を見つけるのに苦労していますが、デバイスはありません。

ProGuardのコンフィグ ビルドタイプに以下の私が追加したユーザーのコメントに基づか:

buildTypes { 
    release { 
     minifyEnabled true 
     proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-project.txt' 
    } 
} 

ProGuardの-project.txt

-repackageclasses '' 
-keep class android.support.v4.app.** { *; } 
-keep interface android.support.v4.app.** { *; } 

-keep class android.support.v7.app.** { *; } 
-keep interface android.support.v7.app.** { *; } 

-keep class android.support.v13.app.** { *; } 
-keep interface android.support.v13.app.** { *; } 

次の設定を試してくださいもらえますか? 私はこのソリューションに疑問を抱いています。なぜなら、生成されたクラスをundexedしたときに、同じパッケージにNavigationMenuViewが残っていたからです。それはパッケージのアクセス関係のために移動されていません。だから、しかし、非常に危険な、ProGuardの-project.txt設定に別のフラグを追加して役立つかもしれないもの:

-allowaccessmodification 

問題を修正しようとするための良いスタートすることができることを。

だからあなたの場合にはProGuardのプロジェクトは、次のようになります。助けのためのSzymon Klimaszewskiため

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod 

-dontobfuscate 
-dontoptimize 
-allowaccessmodification 
-repackageclasses '' 
-keep class your.package.name.** { *; } 
-keep class android.support.v4.app.** { *; } 
-keep interface android.support.v4.app.** { *; } 

-keep class android.support.v7.app.** { *; } 
-keep interface android.support.v7.app.** { *; } 

-keep class android.support.v13.app.** { *; } 
-keep interface android.support.v13.app.** { *; } 
+0

Thxです。私はあなたの解決策を試しました。 NoClassDefFoundError例外はありませんが、次のような例外があります。 '' ' 原因:java.lang.NoSuchMethodException: [クラスjava.lang.String、int] at java.lang.Class.getConstructorOrMethod .javaファイル:460)com.smartnsoft.droid4me.cache.Persistence.getInstanceでjava.lang.Class.getDeclaredConstructor(Class.java:588) (Persistence.java:460)で '' ' は、あなたが知っていますかNoClassDefFoundError例外を修正するソリューションで、プロジェクトで使用される各ライブラリのルールを追加する必要はありませんか? – rolandl

+0

repackageclassesは、コードで使用されているほとんどの反射を壊します。 [config](http://proguard.sourceforge.net/manual/usage.html#keep):-keep class your.package.name。** {*;}に追加する必要があります。 } –

+0

Thx!それは動作するようです。答えとして完全なproguardファイルを投稿します。 – rolandl

0

私はこれで行くつもりです。

-keep class !android.support.design.internal.NavigationMenu,!android.support.design.internal.NavigationMenuPresenter,!android.support.design.internal.NavigationSubMenu 

多くのサムスンのデバイスを支援し、このルールに加えて行く(http://goo.gl/ywG1c4を参照してください):私は、影響を受けたデバイスのいずれかを持っていないので、私は、まだ試していません

-keep class !android.support.v7.view.menu.**,android.support.** {*;} 
-1

-

-keep class !android.support.v7.internal.view.menu.**,** {*;} 
    -keep class android.support.v4.** { *; } 
    -keep interface android.support.v4.** { *; } 
    -keep class android.support.v7.** { *; } 
    -keep interface android.support.v7.** { *; } 
-1

com.android.support:appcompatバージョンを確認してください。たとえば、com.android.support:appcompat-v7:23.1.1の代わりに と入力してください。答えはcom.android.support:appcompat-v7:23.0.1

関連する問題