2015-09-15 26 views
8

Tôi đã có một ứng dụng Android mà tôi vừa nâng cấp lên hệ thống Gradle Êđê dựng trong số những thứ khác, chẳng hạn như sử dụng một phiên bản mới của công cụ xây dựng vvjava.lang.NoClassDefFoundError trên Android 4.4 trở xuống

My targetSdkVersion là 19, vì vậy tôi nên sử dụng Android 4.4 trở lên. Khi tôi chạy bằng thiết bị 5.0+, tất cả đều tốt; tuy nhiên Android 4.4 luôn bị treo với lỗi java.lang.NoClassDefFoundError của một số loại.

Khi kiểm tra, tôi đã xóa lớp gốc mà nó đã phàn nàn về việc chỉ bị mất khi có sự cố khi trỏ đến một lớp khác.

Lớp đầu tiên mà nó gặp phải là lớp riêng tư nội bộ trong thư viện của bên thứ ba. Sau khi xóa thư viện đó, nó chỉ ra một lớp riêng bên trong trong chính ứng dụng.

Nói tóm lại:

  • ứng dụng chạy tốt trên Android 5.0+. Nó treo với java.lang.NoClassDefFoundError trên bất kỳ thứ gì nhỏ hơn 5.0.
  • Trong các thử nghiệm cho đến nay, NoClassDef dường như luôn đề cập đến một lớp bên trong - điều này chỉ dựa trên hai bài kiểm tra, vì vậy nó có thể không có gì cụ thể.

Dưới đây là tập tin android.manifest tôi: https://gist.github.com/rscott78/19dd88ccde66172d9332

Trả lời

19

Đối với những gì nó có giá trị, điều này có thể xảy ra khi bạn kích hoạt hỗ trợ đa dex mà không cần thêm mã đúng trong lớp ứng dụng của bạn.

Tạo một lớp, có nó kế thừa từ ứng dụng, sau đó thêm ghi đè này:

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

Trong AndroidManifest của bạn, thêm một thuộc tính name vào thẻ ứng dụng của bạn:

<application name=".MyApplication" 
+0

đối với những người vẫn còn cần phải thêm đa kết nối trong khi sửa lỗi này cùng một lúc, giải pháp này sẽ hoàn toàn tiết kiệm trong ngày của bạn! – user724861

+0

Nhưng thêm mã này thì sao? chỉ muốn biết. Và có bất cứ ai muốn kích hoạt multidex cùng với sửa chữa, thì đây là giải pháp. +1 –

+0

Chúng tôi thực sự đã triển khai ứng dụng theo cách này nhưng chúng tôi vẫn gặp sự cố. Tại sao? –

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