2015-05-28 7 views
13

Nach der Zugabe von compile 'com.android.support:support-v13:21.0.+'-build.gradle, hatte ich einige Konflikte auf meine app bauen, also musste ich multiDexEnabled = true-defaultConfig innerhalb build.gradle hinzuzufügen. Diejenigen Konflikte sind weg, aber ich habe eine andere Ausnahme (beim Öffnen der App) für die fehlende Kalligraphie Bibliothek:NoClassDefFoundError auf Kalligraphie Bibliothek

java.lang.NoClassDefFoundError: uk.co.chrisjenx.calligraphy.R$attr 
     at uk.co.chrisjenx.calligraphy.CalligraphyConfig$Builder.<init>(CalligraphyConfig.java:150) 
     at com.taxiyaab.android.util.ApplicationClass.onCreate(ApplicationClass.java:120) 
     at newapp.com.taxiyaab.taxiyaab.PassengerApplication.onCreate(PassengerApplication.java:68) 
     at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007) 
     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4462) 
     at android.app.ActivityThread.access$1500(ActivityThread.java:144) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1306) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:212) 
     at android.app.ActivityThread.main(ActivityThread.java:5135) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
     at dalvik.system.NativeStart.main(Native Method) 

Meine neueste sdk Build-Tools Version 22.0.1 ist. Hat jemand schon einmal mit diesem Problem zu tun gehabt?

Antwort

29

Wenn Sie API-Stufen unter 21 unterstützen, sollte Ihre Application-Klasse MultiDexApplication aus der Support-Bibliothek erweitern.

class MyApplication extends MultiDexApplication 

Wenn Sie keine benutzerdefinierten Application Klasse haben, als Sie die MultiDexApplication Klasse Ihr Manifest

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

direkt Siehe https://developer.android.com/tools/building/multidex.html

+0

thx erstreckt, ich tat, was Sie gesagt haben, aber es andere Ausnahmen erhöhen, denke ich shouldn i muss nicht multiDexEnabled verwenden. –

+0

Ich bekomme: Fehler: Ausführung fehlgeschlagen für Task ': app: dexDebug'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Prozess 'command' C: \ Programme \ Java \ jdk1.8.0_40 \ bin \ java.exe '' beendet mit Nicht-Null-Exit-Wert 2, wenn multiDexEnabled nicht verwendet wird. –

+0

Haben Sie diese Ausnahme bei der Verwendung von MultiDexApplication erhalten? Wenn nein, welche Ausnahmen hat es ausgelöst, wenn Sie MultiDexApplication verwendet haben? Bitte geben Sie die vollständigen Details zur Ausnahme an. – Eran

4

Goodlife hier ist wieder zur Rettung hinzufügen sollten. Fügen Sie diese Zeile zu Ihrer Java-Datei hinzu, die die Anwendung erweitert.

public void onCreate() { 
    super.onCreate(); 

    mInstance = this; 

    //ADD MULTIDEX.INSTALL(THIS) SOLVED MY SIMILAR PROBLEM 
    MultiDex.install(this); 
    CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() 
        .setDefaultFontPath("fonts/Roboto-Regular.ttf") 
        .setFontAttrId(R.attr.fontPath) 
        .build() 
    ); 
} 
+1

Das funktionierte, ABER, ich musste es vor setContentView verschieben, da einige der Layout-Dateien Kalligraphie in ihnen hatten und die App kaputt machten. Sobald es vor der setContentView war, scheinen die Dinge gut zu funktionieren. Danke für den Tipp. – Silmarilos

0

MultiDex.install(this);

Dies kann das Problem beheben.

6

Wenn Ihre Anwendung von Anwendung erstreckt sich dann außer Kraft setzen attachBaseContext innerhalb Anwendung d.h

@Override 
protected void attachBaseContext(Context base) { 
    super.attachBaseContext(base); 
    MultiDex.install(this); 
} 

müssen auch die Abhängigkeit

compile 'com.android.support:multidex:1.0.1' 
+0

Danke für die vollständige Antwort! – Swindler

0

hinzufügen Was ich tat das Kompilieren Bibliothek in App-Ebene gradle Datei zu aktualisieren war.

compile 'com.android.support:multidex:1.0.0' 

ich es auch aktualisiert

compile 'com.android.support:multidex:1.0.1' 

und es funktionierte gut für mich. Vielleicht hilft das jemandem.

1

Ja, Update 1.0.2 und fügen Mulitidex.install (this) auf die Klasse multidex Anwendung für die Antwort