티스토리 뷰

안드로이드에서 java.lang.VerifyError: Rejecting class와 같은 에러가 발생 할 때가 있습니다.


제 경우에는 안드로이드 OS중 5.x버전에서 위와 같은 에러가 발생 되면서 특정 class에서 Rejecting 되었습니다. 기타 버전 (4.x,6.x,7.x)에서는 해당 Rejecting없이 정상적으로 동작 하여 에러를 해결하기 더 어려웠던 것 같습니다. 인터넷을 통해 검색 해 보면 해당 에러에 대한 해결방법으로 여러가지가 검색 됩니다.


1.제대로 빌드가 되지 않은 경우에 발생 할 수 있는 에러로 project를 clean,build 후 다시 설치 하기
 ▷제 경우에서는 해결 되지 않았습니다.


2.synchronized를 사용 하는 경우  try-catch 처리


수정 전

1
2
3
4
5
6
try {
    synchronized (mLock) {
        updateState();
    }
catch (IllegalStateException e) {
}
cs


수정 후

1
2
3
4
5
6
synchronized(mLock) {
    try {
        updateState();
    } catch (IllegalStateException e) {
    }
}
cs

▷제 경우에서는 해결 되지 않았습니다.



3.오류 나는 library를 사용 하는 경우 해당 library의 버전에 에러발생으로 인해 library 버전 변경
▷제 경우에서는 library로 인해 문제가 발생 되지 않아 이 경우는 해당 되지 않았습니다.


4.안드로이드 studio에서 "Instant Run" 체크 해제
▷제 경우에서는 해결 되지 않았습니다.


5.문제가 된 class 객체지향(분할화) 처리
▷제 경우에서 해결 된 방법 이었습니다. 문제가 발생 된 class는 개발을 진행 하면서 여러곳의 소스를 복사/붙어넣기하여 만든것으로 class 파일의 소스 코드가 많이 길어져 있던 class였습니다.
안드로이드 5.x에서는 한 클래스에서 너무 많은 라인이 있는(코드가 긴)경우에는 컴파일 시에 해당 class를 Rejecting 시켜 버립니다. 그래서 문제가 발생된 class를 객체지향의 관점에서 분할화 하여 변경 하여 해당 에러가 해결 되었습니다.


댓글