반응형

Android KitKat(4.4) 이하 버전에서 Google Map관련 API를 사용한 앱을 실행하려 할 경우 Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException 에러가 나거나

com.tistory.webnautes.googlemap E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.tistory.webnautes.googlemap, PID: 13179

java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[zip file "/data/app/com.tistory.webnautes.googlemap-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.tistory.webnautes.googlemap-1, /vendor/lib, /system/lib]]


빌드시 다음과 같은 에러가 납니다. 

Error:Execution failed for task ':app:transformClassesWithDexForDebug'.

> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536



자바에서 소스코드를 가지고 최종적으로 dex 파일을 생성하는데  하나의 dex 파일에 함수의 개수가 65536개로 제한되어 있어서 발생하는 문제입니다.  간단한 앱 작성시에는 문제가 안되나 라이브러리를 추가하다보면 발생합니다.  이번 포스팅에서는 이 경우에 대한 해결 방법에 대해 설명하도록 하겠습니다.




안드로이드 6.0 이전 버전의 디바이스가 없어서 태스트를 못해보다가 Nexus 5에 KitKat(4.4)의 Factory Image를 올리게 되어 기존에 포스팅했던 앱들을 태스트해보았습니다.

[구입한 것들] - nexus 5에 Factory Image 올리기



킷캣올린 넥서스5에서 구글맵 관련 포스팅의 코드들을 돌려보았는데..

[Android/Google Map] - Google Maps Android API v2 예제

[Android/Google Map] - GoogleApiClient와 FusedLocationApi를 사용하여 Android Google Map에 현재 위치 표시하기

[Android/Google Map] - Places API Web Service를 사용하여 Android Google Map에 현재 위치 주변의 음식점 표시하기



위에서 언급한 에러가 발생합니다..

해결방법은  두가지입니다.  진행하기 전에 SDK Manager에서 Support Repository 항목에 있는 Android Support Repository를 설치해줘야 합니다.



첫번째 방법은 구글 플레이 서비스 라이브러리 전체를 올리지 않고 구글맵을 위헤 필요한 라이브러리만 추가하는 것입니다.  아래 포스팅을 참고하세요..

[Android/Google Map] - Google Maps Android API v2 예제



두번째 방법은 dex 파일이 가질수 있는 함수 갯수 제한을 해결하는 것입니다.

1.  app 모듈을 위한 build.gradle 파일의 (app/build.gradle)  defaultConfig에 multiDexEnabled true를 추가합니다.

android {

    compileSdkVersion 24

    buildToolsVersion "25.0.0"

    defaultConfig {

         ....................

         multiDexEnabled true

    }



2.  app 모듈을 위한 build.gradle 파일의 (app/build.gradle) dependencies에 com.android.support:multidex를 추가해줍니다.

dependencies {

     ...........................................................................................

    compile 'com.android.support:multidex:1.0.1'

}




3.  매니페스트 파일 AndroidManifest.xml의 application 태그에 name 속성으로 android.support.multidex.MultiDexApplication을 추가합니다.

1
2
    <application
        android:name="android.support.multidex.MultiDexApplication"
cs



참고

https://developer.android.com/studio/build/multidex.html


반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
개선 사항을 댓글로 남겨주면 가능한 빨리 반영하도록 하겠습니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 ~~

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts