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
'Android > Google Map & 카카오 지도' 카테고리의 다른 글
Android 예제 - 현재 위치 주소 가져오기(Get current location without google map) (66) | 2019.11.21 |
---|---|
다음(카카오) 지도 안드로이드 API 사용하는 방법 & 현재 위치 표시 (97) | 2019.09.26 |
Android Google Map의 Marker Icon 변경하기 (2) | 2018.07.18 |
Android Google Map + Places API Web Service에서 Marker의 정보를 다른 Activity로 전달하기 (28) | 2017.11.27 |
GenyMotion 가상머신에 Google Apps설치하여 Google Maps Android API 테스트 하기 (7) | 2017.11.21 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!