2015-05-28 3 views
13

После добавления compile 'com.android.support:support-v13:21.0.+' к build.gradle, у меня были некоторые конфликты на строительство моего приложения, так что я должен был добавить multiDexEnabled = истина к defaultConfig внутри build.gradle. Те конфликты ушли, но я получил еще одно исключение (при открытии приложения) для недостающей библиотеки каллиграфии:NoClassDefFoundError на каллиграфии библиотеке

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) 

Мой последний SDK инструменты для сборки версии 22.0.1. Кто-нибудь сталкивался с этим вопросом раньше?

ответ

29

Если вы поддерживаете уровни API ниже 21, ваш класс Application должен расширять MultiDexApplication из библиотеки поддержки.

class MyApplication extends MultiDexApplication 

Если у вас нет пользовательского класса Application, чем вы должны добавить класс MultiDexApplication в манифесте непосредственно

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

См https://developer.android.com/tools/building/multidex.html

+0

ТНХ для ответа, я сделал то, что вы сказали, но поднять другие исключения, я думаю, что я не должен Не нужно использовать multiDexEnabled. –

+0

i get: Ошибка: выполнение выполнено для задачи ': app: dexDebug'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command' C: \ Program Files \ Java \ jdk1.8.0_40 \ bin \ java.exe '' завершен с ненулевое значение выхода 2, если не используется multiDexEnabled. –

+0

Получили ли вы это исключение при использовании MultiDexApplication? Если нет, какие исключения он сделал, когда вы использовали MultiDexApplication? Пожалуйста, предоставьте подробные сведения об исключениях. – Eran

4

Goodlife здесь снова на помощь. Добавьте эту строку в ur Java-файл, который расширяет приложение.

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

Это сработало, НО я должен был переместить его перед setContentView, так как некоторые из файлов макета имели в них каллиграфию и сломали приложение. Как только это было до setContentView, все работает нормально. Спасибо за совет. – Silmarilos

0

MultiDex.install(this);

Это может исправить эту проблему.

6

Если ваше приложение распространяется из приложения затем переопределить attachBaseContext внутри т.е. Application

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

необходимо также добавить DEPENDENCY

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

Спасибо за полный ответ! – Swindler

0

Что я сделал тоже обновить сводную библиотеку в Gradle файле уровня приложения.

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

Я обновил его слишком

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

и она работала хорошо для меня. Возможно, это кому-то помогает.

1

Да, обновление multidex 1.0.2 и добавить Mulitidex.install (это) в класс расширение применения