简体   繁体   中英

NoClassDefFoundError on Calligraphy library

After adding compile 'com.android.support:support-v13:21.0.+' to build.gradle , I had some conflicts on building my app, so I had to add multiDexEnabled = true to defaultConfig inside build.gradle . Those conflict are gone, but i got another exception (on opening the app) for the missing calligraphy library:

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)

My latest sdk build tools version is 22.0.1 . Has anybody faced this issue before?

If you support API levels under 21, your Application class should extend MultiDexApplication from the support library.

class MyApplication extends MultiDexApplication

If you do not have a custom Application class, than you should add the MultiDexApplication class to your manifest directly

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

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

If your application extends from Application then override attachBaseContext inside Application ie

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

Also need to add dependency

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

Goodlife is here again to the rescue . Add this line to ur java file that extends application.

 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()
    );
}

是的,更新到multidex 1.0.2并将Mulitidex.install(this)添加到类扩展应用程序

MultiDex.install(this);

这可以解决问题。

What i did was too update the compiling library in app level gradle file.

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

I updated it too

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

and it worked fine for me. Maybe this helps someone.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM