Proguard를 사용한 코드 난독화 - 유닛 테스트에서 java.lang.VerifyError가 발생하는 경우
관련 글
- Proguard를 사용한 코드 난독화 - 라이브러리 프로젝트에 적용하기
- Proguard를 사용한 코드 난독화 - 모듈별 규칙 적용시 유의사항
- Proguard를 사용한 코드 난독화 - 자주 사용하는 라이브러리의 난독화 규칙, 규칙 분리 관리하기
프로가드를 적용한 후, 정상적으로 잘 동작하던 유닛 테스트가 아래와 유사한 에러 메시지와 함께 제대로 실행되지 않았습니다.
java.lang.VerifyError: Expecting a stackmap frame at branch target 17
Exception Details:
Location:
com/flurry/android/FlurryAgent.init(Landroid/content/Context;Ljava/lang/String;)V @5: if_icmpge
Reason:
Expected stackmap frame at this location.
Bytecode:
0x0000000: b200 4410 0aa2 000c b200 4512 08b8 0061
0x0000010: b12a c700 0dbb 0039 5912 12b7 0070 bf2b
0x0000020: c600 0a2b b600 729a 000d bb00 3659 1221
0x0000030: b700 6dbf b800 692a 2bb8 0058 a700 0d4d
0x0000040: b200 4512 012c b800 5fb1
이를 해결하려면, 유닛 테스트를 포함하는 모듈의 빌드 스크립트의 테스트 옵션에 다음과 같이 -noverify
옵션을 추가하면 됩니다.
android {
testOptions {
unitTests {
all {
jvmArgs '-noverify'
}
}
}
}
추가 참고자료: