Android 9.0 : Google Map, Volley 관련 이슈

지난주 금요일 (18일) 기준으로 Galaxy S8에 9.0 Beta가 시작되어 업데이트 하여 사용하고 있었으나, 구글 맵을 불러오면 아래 오류가 노출되면서 앱이 죽는 문제가 있었다.

2019-01-21 10:38:14.551 31596-31686/com.*** E/AndroidRuntime: FATAL EXCEPTION: Thread-7
    Process: com.***, PID: 31596
    java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion;
        at ez.b(:[email protected]@14.7.99 (100408-223214910):3)
        at ey.a(:[email protected]@14.7.99 (100408-223214910):3)
        at fa.a(:[email protected]@14.7.99 (100408-223214910):15)
        at com.google.maps.api.android.lib6.drd.al.a(:[email protected]@14.7.99 (100408-223214910):6)
        at ed.a(:[email protected]@14.7.99 (100408-223214910):21)
        at ed.run(:[email protected]@14.7.99 (100408-223214910):8)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.ProtocolVersion" on path: DexPathList[[zip file "/data/user_de/0/com.google.android.gms/app_chimera/m/0000006a/MapsDynamite.apk"],nativeLibraryDirectories=[/data/user_de/0/com.google.android.gms/app_chimera/m/0000006a/MapsDynamite.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at ad.loadClass(:[email protected]@14.7.99 (100408-223214910):4)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at ez.b(:[email protected]@14.7.99 (100408-223214910):3) 
        at ey.a(:[email protected]@14.7.99 (100408-223214910):3) 
        at fa.a(:[email protected]@14.7.99 (100408-223214910):15) 
        at com.google.maps.api.android.lib6.drd.al.a(:[email protected]@14.7.99 (100408-223214910):6) 
        at ed.a(:[email protected]@14.7.99 (100408-223214910):21) 
        at ed.run(:[email protected]@14.7.99 (100408-223214910):8) 

이 문제인데, 이 문제에 대해 제기된 이슈가 구글쪽 이슈 트래커에 존재하나 wont fix라 적혀있었다.

즉, 이 행동은 정상 행동으로 AndroidManifest.xml 의 application 태그 내부에 아래 코드를 적어주면 된다는 것이다.

  <uses-library
      android:name="org.apache.http.legacy"
      android:required="false" />

다만, Apache Http가 Android 6.0 부터 삭제되었음에도 불구하고 아직까지 사용하는지는 아직도 의문이긴 하다.

추가 1. Volley

Google 의 Http 통신 라이브러리인 Volley도 같은 문제가 발생하는 것 같다. 마찬가지로 해결 방법은 위와 같다.