반응형
이전 프로젝트를 AndroidX로 변경하고 그에 따른 아티팩트들과 최신 안드로이드 스튜디오에 맞게 Gradle 등 빌드 환경을 조정해주고 빌드한 것 실행해보니 몇가지 런타임 오류가 발생하였습니다.
[오류 #1 ]
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/appcompat/R$drawable;
먼저 오류 해결하는데 시간이 제일 많이 걸린 androidx/appcompat/R$drawable 클래스를 찾지 못하는 문제는 결론적으로 Realm 쪽 문제였습니다.
일반적으로 새로운 버전이 나오면 Lint에서 체크해서 하이라이트해서 보여주는데 Realm은 하이라이트가 되어 있지 않아서 이게 문제될 거라고는 생각하지 못했습니다.
나중에 문제 재확인차 이전 버전으로 돌리니 그제서야 아래처럼 하이라이트되어서 표시되네요.
build.gradle (project 레벨)에서 realm 플러그인을 7.0.0 버전으로 변경해주면 문제가 해결됩니다.
[오류 #2]
java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of java.lang.invoke.LambdaMetafactory' appears in /apex/com.android.art/javalib/core-oj.jar)
이번에는 메서드를 찾지 못해서 발생한 문제였는데, 오류 메시지에 Lambda 가 보이는 걸로 봐서 JAVA 1.8 지원하지 안하서 발생한 것으로 판단이 되었습니다.
이 런타임오류는 아래 compileOPtions를 build.gradle (app 레벨)에 추가해주면 해결됩니다.
주의할 점
오류 수정한 코드에 해당하는 build.gradle 파일에서 Sync now(또는 File-Sync Project with Gradle Files)를 해준 후에 Build-Clean Project 후 빌드하시면 됩니다. (정리하면 Sync - Clean - Build)
이상입니다. 도움이 되셨기를...