2014-12-23 8 views
14

Einige Benutzer meiner App erleben diesen Absturz, es scheint möglicherweise mit Samsung-Geräten verwandt zu sein. Hat jemand anderes dieses Problem erlebt und eine Lösung gefunden?

java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$layout 
     at android.support.v7.app.ActionBarActivityDelegateBase.ensureSubDecor(ActionBarActivityDelegateBase.java:297) 
     at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:225) 
     at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102) 
     at com.afollestad.impression.ui.MainActivity.onCreate(MainActivity.java:160) 
     at android.app.Activity.performCreate(Activity.java:5451) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2359) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2453) 
     at android.app.ActivityThread.access$900(ActivityThread.java:173) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5579) 
     at java.lang.reflect.Method.invokeNative(Method.java) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
     at dalvik.system.NativeStart.main(NativeStart.java) 

Zeile 160 legt die Inhaltsansicht der Aktivität fest. Die Inhaltsansicht ist dies:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.afollestad.lessen.ui.MainActivity" 
    android:fitsSystemWindows="true"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" 
      android:minHeight="?attr/actionBarSize" 
      android:background="?colorPrimary" 
      app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      app:popupTheme="?popup_theme" /> 

     <FrameLayout 
      android:id="@+id/content_frame" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

    </LinearLayout> 

    <FrameLayout 
     android:layout_width="@dimen/navigation_drawer_width" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     android:layout_gravity="start"> 

     <fragment 
      android:id="@+id/navigation_drawer" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:name="com.afollestad.impression.fragments.NavDrawerFragment" 
      tools:layout="@layout/fragment_navdrawer" 
      android:tag="NAV_DRAWER" /> 

    </FrameLayout> 

</android.support.v4.widget.DrawerLayout> 

Das Fragment ist ein einfaches Listenfragment.

+1

Können Sie Code zeigen? im Grunde darauf hinweisen, was ist MainActivity.java:160? –

+0

Haben Sie die Verschleierung benutzt? (Proguard) –

+0

@ MagicalPhoenix Ich habe nicht, keine – afollestad

Antwort

7

fixierte ich das Problem, indem Proguard mit folgendem config:

-keep class !android.support.v7.internal.view.menu.**,** {*;} 
-dontwarn 
-ignorewarnings 
-dontshrink 

Um Proguard mit neueren Versionen von Gradle (in Android Studio) zu aktivieren:

android { 

    ... 

    buildTypes { 
     debug { 
      ... 
     } 
     release { 
      ... 
      minifyEnabled true 
      shrinkResources true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

proguard-rules.pro ist wo die Eigenschaften an der Spitze gehen.

+1

, können Sie mir bitte die Sache erklären, warum diese Art von Problem auftritt? und warum müssen Sie dies in die Proguard-Datei setzen, um es zu lösen. Ich brauche nur eine Erklärung. Danke –

+0

DANKE!Ich habe eine Stunde lang nach einer Lösung für dieses Problem gesucht und dies ist der einfachste Weg, um proguard zu implementieren, ohne alle meine Bibliotheken einbeziehen zu müssen. – mo13

1

wenn Sie api compat Support-v7 verwenden, keine Bibliotheken, dessen Verweis darauf markiert werden sollen Modul ausschließen: 'Support-v4'

zum Beispiel:

Kompilierung ('com.android. Unterstützung: cardview-v7: 22.2.0') { Modul ausschließen: ‚Support-v4‘ }

+2

Dies wurde bereits im letzten Jahr gelöst. Lol – afollestad

24

ich weiß, dass Problem gelöst wurde, aber wenn Sie auf diesem Thread kommen, könnte es sein, dass es nicht lösen Ihr Problem in einer bestimmten Kombination:

  • Alle Werke auf 5,0 Geräte
  • Es ist nicht auf 4.x funktioniert
  • Sie denken, Sie MultiDex
  • Proguard scheint nicht, um ein Problem

Es geschah zu ermöglichen Ich und ich suchten nach 3 Stunden. Ich hoffe, es wird einigen helfen. Um MultiDex auf 4.x-Geräten zu aktivieren, reicht es nicht aus, den Build zu ändern: Sie müssen die Klasse Application ableiten. Folge einfach that und that

Hoffe es hilft.

+2

hat es geholfen. Upvoted! – kiddouk

+0

Sie haben eine gute Antwort gezeigt. Danke Laurent. – Thirumalvalavan

3

Wenn Sie multidex in Ihrer Anwendung verwenden, verlängern Sie Ihre Anwendungsklasse von MultiDexApplication