IT 프로그래밍-Android

[Retrofit] java.lang.IllegalStateException: Expected Android API level 21+ but was 29 에러 해결

godsangin 2022. 1. 18. 22:15
반응형

애플리케이션을 개발하는 동안 전혀 발생하지 않았던 다음 에러가 스토어에 출시하자마자 발생하였습니다.

 

java.lang.ExceptionInInitializerError

 at okhttp3.internal.platform.Platform.get(Platform.java:85)
        at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:263)
        at okhttp3.OkHttpClient.<init>(OkHttpClient.java:229)
        at okhttp3.OkHttpClient$Builder.build(OkHttpClient.java:1015)
        at com.myhome.smoketimer.repository.retrofit.RetrofitAPI.<clinit>(RetrofitAPI.kt:21)

Caused by: java.lang.IllegalStateException: Expected Android API level 21+ but was 29

 

이는 개발당시에는 전혀 발생하지 않았던 오류인데 제가 테스트용도로 사용하는 기기는 API 28을 사용하고 있으니, 이러한 오류가 발생하지 않는 것이 당연했습니다..(저는 API 28의 테스트기기를 사용합니다.)

해당 오류는 Okhttp3 API가 과거 안드로이드 API 21+ 기기를 타겟으로 하는 버전으로 업데이트하였는데 API 29이상의 기기에서는 이를 21 이하의 기기로 오해(?)하고 있어서 발생하는 오류로 보입니다.(Retrofit의 일부 API는 OkHttp API를 포함하고 있어 이같은 오류가 발생할 수 있습니다.)

 

때문에 OkHttp API의 최신버전(4.9.0 이상)을 gradle에 추가하는 방식으로 이같은 오류를 해결할 수 있었습니다.(Retrofit API와 별도로 추가해줍니다.)

//retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.6.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.7.1'
    implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
    implementation 'com.squareup.retrofit2:converter-scalars:2.6.0'
    implementation 'com.squareup.okhttp3:okhttp:4.9.2' // 이부분 추가

앱개발을 하면서 출시 이전에는 기기에 대한 예외처리에 대해 간과하는 경우가 빈번히 일어나곤 합니다. 하지만 여러기기를 가지고 개발하는 1인 개발자가 얼마나 있을까요..ㅜㅜ 이번일을 계기로 최신 가성비기기 구매를 고려해봐야 할 것 같습니다.(가상머신은 너무 답답하네요.....ㅎㅎ_)

그럼 오늘도 다들 좋은코드 작성하시고 많은버그 잡기를 바랍니다 !!!

 

감사합니다~~!