2015-05-28 14 views
13

Sau khi thêm compile 'com.android.support:support-v13:21.0.+'-build.gradle, tôi đã có một số mâu thuẫn về việc xây dựng ứng dụng của tôi, vì vậy tôi đã phải thêm multiDexEnabled = true-defaultConfig bên build.gradle. Những cuộc xung đột đã mất hết, nhưng tôi đã nhận ngoại lệ khác (trên mở ứng dụng) cho các thư viện thư pháp mất tích:NoClassDefFoundError trên Thư pháp thư viện

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 mới nhất của tôi xây dựng các công cụ phiên bản là 22.0.1. Có ai phải đối mặt với vấn đề này trước đây không?

Trả lời

29

Nếu bạn hỗ trợ cấp API dưới 21, lớp học Application của bạn nên mở rộng MultiDexApplication từ thư viện hỗ trợ.

class MyApplication extends MultiDexApplication 

Nếu bạn không có một lớp tùy chỉnh Application, hơn bạn nên thêm lớp MultiDexApplication đến biểu hiện của bạn trực tiếp

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

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

+0

thx cho câu trả lời, tôi đã làm những gì bạn nói, nhưng nó nâng cao ngoại lệ khác, tôi nghĩ rằng tôi shouldn không phải sử dụng multiDexEnabled. –

+0

tôi nhận được: Lỗi: Thực hiện không thành công cho công việc ': app: dexDebug'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Xử lý 'lệnh' C: \ Program Files \ Java \ jdk1.8.0_40 \ bin \ java.exe '' xong với giá trị thoát khác 0, nếu không sử dụng multiDexEnabled. –

+0

Bạn có ngoại lệ này trong khi sử dụng MultiDexApplication không? Nếu không, ngoại lệ nào nó tăng khi bạn sử dụng MultiDexApplication? Vui lòng cung cấp đầy đủ chi tiết ngoại lệ. – Eran

4

Goodlife là ở đây một lần nữa để giải cứu. Thêm dòng này vào tệp java java mở rộng ứng dụng.

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

Điều này làm việc, NHƯNG, tôi đã phải di chuyển nó trước khi setContentView như một số các tập tin bố trí có thư pháp trong họ và phá vỡ các ứng dụng. Một khi nó đã được trước khi setContentView, mọi thứ dường như làm việc tốt. Cảm ơn vì tiền hỗ trợ. – Silmarilos

0

MultiDex.install(this);

Điều này có thể khắc phục vấn đề.

6

Nếu ứng dụng của bạn kéo dài từ ứng dụng sau đó ghi đè attachBaseContext bên trong ứng dụng tức là

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

Cũng cần thêm sự phụ thuộc

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

Cảm ơn câu trả lời hoàn chỉnh! – Swindler

0

Những gì tôi đã làm là quá cập nhật thư viện biên soạn trong tập tin gradle mức ứng dụng.

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

tôi cập nhật nó quá

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

và nó làm việc tốt cho tôi. Có thể điều này giúp ai đó.

1

Vâng, cập nhật cho multidex 1.0.2 và thêm Mulitidex.install (này) để các lớp mở rộng ứng dụng

Các vấn đề liên quan