[java] Android java.lang.VerifyError?

내 Android 앱에서는 항상 VerifyErrors가 발생합니다! 그리고 나는 이유를 알 수 없습니다. 외부 JAR을 포함 할 때마다 앱을 시작하려고 할 때 항상 VerifyErrors가 발생합니다 (Apache Log4j를 포함한 경우는 한 번 제외).

나는 일반적으로 라이브러리의 소스를 가져와 내 프로젝트에 추가 하여이 문제를 해결하지만 GData 클라이언트 라이브러리 를 넣으려고합니다 .

나는 이것을 소스에서 얻을 수 있지만 종속성 (mail.jar, activation.jar, servlet-api.jar)입니다. 할 수 없으므로 확인 오류가 발생합니다. 이 문제의 근원에 대해 단번에 이해하고 싶습니다. 인터넷에서 봤는데 모두 불완전한 수업 파일에 대해 이야기하는 것 같나요? 내가 모르는.



답변

Android는 다른 클래스 파일 형식을 사용합니다. Android SDK와 함께 제공되는 “dx”도구를 통해 타사 JAR 파일을 실행하고 있습니까?


답변

LogCat을보고 확인 오류의 원인을 확인하십시오. 사용중인 Android SDK 수준 (예 : String.isEmpty ())에서 지원되지 않는 java.lang 클래스의 일부 메서드 일 수 있습니다.


답변

에서 안드로이드 개발자 :

“adb logcat”의 출력은 찾을 수없는 클래스와 잘못된 참조가있는 클래스를 나타냅니다. 위치는 특정 Dalvik 지침에 따라 식별됩니다. 트릭은 예외 위의 로그를 살펴 보는 것입니다.


답변

작동하게하려면 라이브러리의 jar를 소스 폴더 중 하나에 추가해야합니다 (이미 eclipse 라이브러리로 추가 한 경우에도 소스로 추가해야합니다).

  1. 프로젝트에 디렉토리 (예 : “libs”)를 만들고 거기에 라이브러리 jar를 넣습니다.
  2. (폴더에서 마우스 오른쪽 버튼을 클릭하고 “빌드 경로”-> “소스 폴더로 사용”을 선택)하여 빌드 클래스 경로에 디렉토리를 추가하십시오.
  3. 프로젝트를 다시 빌드하십시오.

답변

바로 지금 나에게 일어났습니다. 내 장치에있는 최신 SDK의 메서드를 사용했기 때문에 오류가 발생했습니다.

Android 1.5 기기는 다음을 사용하여 apk를 설치했습니다.

<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"/>


답변

흥미로운 사례를 찾았습니다. 나는 사용한다:

<uses-sdk
   android:minSdkVersion="9"
   android:targetSdkVersion="18" />

따라서 새로운 Android 4 기능 중 일부는 Android 2.3에서 ImageView.setLayerType. 런타임 오류를 방지하려면 다음을 수행하십시오.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
   setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

이 접근 방식은 예외 처리에도 사용해야합니다.

} catch (NetworkOnMainThreadException nomte) {
   // log this exception
} catch (SocketTimeoutException socketTimeoutException) {
   // log this exception
}

NetworkOnMainThreadExceptionAndroid 2.3에서는 구현되지 않으므로 클래스가로드 될 때 (이전이 아님) 예외 java.lang.VerifyError가 발생합니다.


답변

Retrolambda를 사용하는 경우 인터페이스에 정적 메서드를 추가했을 수 있습니다 (Java 8에서만 허용됨).