2015-01-19 14 views
23

Tôi gặp phải lỗi này khi tôi cài đặt APK phát hành của mình trên thiết bị 5.x. Lỗi không xảy ra khi tôi đẩy cùng một mã từ Android Studio hoặc nếu tôi chạy nó trên thiết bị 4.x.java.lang.VerifyError: Lớp Verifier bị từ chối trên Lollipop khi sử dụng APK phát hành

java.lang.VerifyError: Verifier rejected class com.myapp.android.ui.activity.MainActivity$$ViewInjector due to bad method void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity) (declaration of 'com.myapp.android.ui.activity.MainActivity$$ViewInjector' appears in /data/app/com.myapp.android-2/base.apk) 
     at java.lang.Class.classForName(Class.java) 
     at java.lang.Class.forName(Class.java:308) 
     at java.lang.Class.forName(Class.java:272) 
     at butterknife.ButterKnife.findInjectorForClass(ButterKnife.java:298) 
     at butterknife.ButterKnife.inject(ButterKnife.java:271) 
     at butterknife.ButterKnife.inject(ButterKnife.java:184) 
     at com.myapp.android.ui.activity.MyDrawerActivity.onCreate(MyDrawerActivity.java:31) 

Tôi tiêm Thanh công cụ và Điều hướng tùy chỉnh trong lớp.

@InjectView(R.id.toolbar) Toolbar mToolbar; 
@InjectView(R.id.nav_drawer) MyNavigationDrawer mNavigationDrawer; 

Dòng 31:

ButterKnife.inject(this); 

Có cái gì đó sẽ khác với codegen Butterknife khi sử dụng gradle assembleRelease? Tôi không sử dụng ProGuard chút nào.

Dưới đây là Android khác của tôi xây dựng các thiết lập:

# Android SDK settings 
ANDROID_BUILD_MIN_SDK_VERSION=14 
ANDROID_BUILD_TARGET_SDK_VERSION=21 
ANDROID_BUILD_SDK_VERSION=21 
ANDROID_BUILD_TOOLS_VERSION=21.1.2 

Logcat

I/art  (21354): Verification error in void com.myapp.android.ui.activity.MainActivity$$ViewInjector.inject(butterknife.ButterKnife$Finder, com.myapp.android.ui.activity.MainActivity, java.lang.Object) 
I/art  (21354): void com.myapp.android.ui.activity.MainActivity$$ViewInjector.inject(butterknife.ButterKnife$Finder, com.myapp.android.ui.activity.MainActivity, java.lang.Object) failed to verify: register v4 has type Reference: com.myapp.android.ui.activity.MainActivity but expected Reference: com.myapp.android.ui.activity.LoggedInNavActivitya.lang.Object): [0x0] 
I/art  (21354): Verification error in void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity) 
I/art  (21354): void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity) failed to verify: register v1 has type Reference: com.myapp.android.ui.activity.MainActivity but expected Reference: com.myapp.android.ui.activity.LoggedInNavActivity 
E/art  (21354): Verification failed on class com.myapp.android.ui.activity.MainActivity$$ViewInjector in /data/app/com.myapp.android-1/base.apk because: Verifier rejected class com.myapp.android.ui.activity.MainActivity$$ViewInjector due to bad method void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity) 
+0

bạn có thể chỉ cho sản lượng logcat? Có thể có một số thông tin bổ sung trong nhật ký trước khi ngoại lệ. (Đã có trong Dalvik, không chắc chắn những gì nghệ thuật cho thấy.) – fadden

+0

Tôi đã thêm các bản ghi hiển thị ngay trước khi lỗi. Tôi thấy một vấn đề ngay lập tức. Dòng 2 cho thấy một lớp cha được gọi là 'LoggedInNavActivitya',' a' không có trong tên thực tế. Một vấn đề rõ ràng khác rằng 'LoggedInNavActivity' không còn trong codebase của tôi nữa ... Tôi đã xóa tập tin đó một lúc trước. –

Trả lời

55

sạch ra khỏi thư mục build giải quyết vấn đề. Không chắc tại sao ART lại có vấn đề nhưng Dalvik thì không.

Chạy một gradle clean tác vụ không xóa tất cả thư mục build của tôi. Tôi phải làm điều đó theo cách thủ công, nhưng clean có thể hoạt động đối với một số người.

+6

Đã thử quá nhiều lần, nhưng không hiệu quả. – Alexander

+2

Nếu dự án Clear không hoạt động, hãy thử với File -> Invalid Cache/Restart ... -> Invalidate and Restart – Pelanes

9

Trong trường hợp của tôi, nguyên nhân hơi khác.

Rõ ràng, việc đưa một tuyên bố synchronized bên trong một khối try/catch làm cho VerifyError, theo báo cáo here on SO và trên official bug tracker.

+0

+1. Điều này một giải quyết vấn đề của tôi và tôi chắc chắn sẽ không tìm thấy nguyên nhân gốc này một cách dễ dàng mà không có câu trả lời của bạn. Cảm ơn rất nhiều! – dbm

1

Trong trường hợp của tôi, nguyên nhân là bảo vệ. Ứng dụng tắt máy của tôi trên tiếng hót sumsung note3 là android 5.0.
tôi nhập khẩu các android-async-http-1.4.9.jar, các Proguard là:

-dontwarn com.loopj.android.http.** 
-keep class com.loopj.android.http.**{*;} 

Nó là không đủ. Tôi đã thêm:

-dontwarn cz.msebera.** 
-keep class cz.msebera.**{*;} 

lỗi này đã biến mất.

vì vậy nếu bạn gặp lỗi này, lý do sâu xa có thể không rõ ràng, cần lưu ý tệp proguard.

0

Tôi gặp sự cố tương tự được ném bởi GoogleTagManager.

java.lang.VerifyError: Verifier rejected class com.google.android.gms.tagmanager.TagManager: com.google.android.gms.common.api.PendingResult com.google.android.gms.tagmanager.TagManager.loadContainerDefaultOnly(java.lang.String, int) failed to verify: com.google.android.gms.common.api.PendingResult com.google.android.gms.tagmanager.TagManager.loadContainerDefaultOnly(java.lang.String, int): [0x11] returning 'Reference: com.google.android.gms.tagmanager.zzp', but expected from declaration 'Reference: com.google.android.gms.common.api.PendingResult'

Điều đó xảy ra sau khi hợp nhất. Đồng nghiệp của tôi đã cập nhật thư viện từ 10.0.1 thành 10.2.1. Xây dựng sạch sẽ không hoạt động.

Do hạn chế về thời gian, tôi quay lại phiên bản cũ hơn và đã hoạt động.

1

Trong trường hợp của tôi, tôi chỉ tắt tùy chọn "Chạy tức thì" từ cài đặt "Xây dựng, thực thi, triển khai" của tôi. Thật không may, tính năng Android Studio "Instant Run" vẫn còn xa để ổn định ...

Để thực hiện:

  1. vào "File"> "Cài đặt"> "Xây dựng, thi công, triển khai"> "Instant Run"
  2. bỏ chọn hộp "Bật tính năng Instant Run ..." và nhấp vào nút "OK"
1

Trong trường hợp phương pháp thông báo lỗi cho biết là 'xấu', có một số lỗi không xác định. Thay đổi từ một lambda Kotlin đến một vòng lặp thường xuyên giải quyết vấn đề của tôi.

Trước (Với Lỗi):

fun validZipCode(zipcode: String): Boolean { 
    val validRegexes = arrayOf(
      "0[0-9]{1}[0-9]{2}", 
      "1[0-2]{1}[0-9]{2}", 
      "1[3-4]{1}[0-9]{2}", 
      "19[0-9]{2}", 
      "2[0-1]{1}[0-9]{2}" 
    ) 
return validRegexes.any { zipcode.matches(it.toRegex()) } 

Sau:

fun validZipCode(zipcode: String): Boolean { 

    val validRegexes = arrayOf(
      "0[0-9]{1}[0-9]{2}", 
      "1[0-2]{1}[0-9]{2}", 
      "1[3-4]{1}[0-9]{2}", 
      "19[0-9]{2}", 
      "2[0-1]{1}[0-9]{2}" 
    ) 

    for (regex in validRegexes) { 
     if (zipcode.matches(regex.toRegex())) { 
      return true 
     } 
    } 

    return false 
} 
+0

Tôi đã có cùng một vấn đề với các chức năng stdlib. – urgentx

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