2015-05-28 18 views
13

Dopo aver aggiunto compile 'com.android.support:support-v13:21.0.+'-build.gradle, ho avuto alcuni conflitti sulla costruzione di mia app, quindi ho dovuto aggiungere multiDexEnabled = true-defaultConfig all'interno build.gradle. Coloro conflitto se ne sono andati, ma ho avuto un'altra eccezione (l'apertura del app) per la libreria calligrafia mancante:NoClassDefFoundError sulla calligrafia biblioteca

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) 

mio ultimo SDK costruire versione strumenti è 22.0.1. Qualcuno ha affrontato questo problema prima?

risposta

29

Se si supportano livelli API inferiori a 21, la classe Application deve estendere MultiDexApplication dalla libreria di supporto.

class MyApplication extends MultiDexApplication 

Se non si dispone di una classe personalizzata Application, quanto deve aggiungere la classe MultiDexApplication al manifestarsi direttamente

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

Vedi https://developer.android.com/tools/building/multidex.html

+0

thx per la risposta, ho fatto quello che hai detto, ma sollevare altre eccezioni, credo di shouldn Devo usare multiDexEnabled. –

+0

ottengo: Errore: esecuzione fallita per task ': app: dexDebug'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: processo 'comando' C: \ Programmi \ Java \ jdk1.8.0_40 \ bin \ java.exe '' terminato con valore di uscita diverso da zero 2, se non usa multiDexEnabled. –

+0

Hai ottenuto questa eccezione durante l'utilizzo di MultiDexApplication? Se no, quali eccezioni ha sollevato quando hai utilizzato MultiDexApplication? Si prega di fornire tutti i dettagli delle eccezioni. – Eran

4

Goodlife è di nuovo qui in soccorso. Aggiungi questa riga al tuo file java che estende l'applicazione.

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

Questo ha funzionato, MA, ho dovuto spostarlo prima di setContentView in quanto alcuni dei file di layout avevano la calligrafia al loro interno e hanno rotto l'app. Una volta prima di setContentView, le cose sembrano funzionare bene. Grazie per il consiglio. – Silmarilos

0

MultiDex.install(this);

questo può risolvere il problema.

6

Se l'applicazione si estende da Application poi ignorare attachBaseContext all'interno cioè Applicazione

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

anche bisogno di aggiungere la dipendenza

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

Grazie per la risposta completa! – Swindler

0

Quello che ho fatto è stato troppo aggiornare la libreria compilazione nel file di Gradle livello di app.

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

ho aggiornato troppo

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

e ha funzionato bene per me. Forse questo aiuta qualcuno.

1

Sì, l'aggiornamento a 1.0.2 multidex e aggiungere Mulitidex.install (questa) per la classe che estende l'applicazione