Exception Study

Error : Cause by : java.lang.ClassNotFoundException: com.google.firebase.provider.FirebaseInitProvider (feat. Android)

85chong 2019. 2. 18. 11:00
728x90
반응형
SMALL

에러상황 : 해당기기는  OS Versioni:16 / 앱 minVersion:16 /  테스트가 잘 안되어 있는 OS 대상으로 앱을 실행한 결과 앱이 죽는 현상 발생 . 에러문구는 아래와같다.


"Cause by : java.lang.ClassNotFoundException: com.google.firebase.provider.FirebaseInitProvider"



- 문제접근 방향:  DEX 의 제한성과 연관이 있다고 판단함


- 이유 : DEX(Dalik Executable) 기본 제약조건은 65,563 가지의 방법으로 코드의 양(SDK , 라이브러리 , 프레임 워크 와 같은 모든 메소드)을  고정한다.

  이때 모든 코드의 양이 위의 고정값을 초과하였을때 나머지 초과되는 부분을 컴파일 하지 않아서 위에서 찾을 수 없다고 생긴 에러이다.

  그래서 MultiDex 를 제안 해제를 활성화 시키면 고정값 이상을 열어주는 것 이기 때문에 모든 부분을 컴파일 시켜서 찾지 못한다는 에러를 잡아 줄 수 있다고 생각함


- 해결방법 : 


< 1.  app : build.gradle > 아래의 라이브러리 추가===============

dependencies {
...


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

}

< 2.  app : build.gradle > 코드추가==========================

defaultConfig {
    ...


multiDexEnabled true
...
}

< 3.  AndroidManifest.xml > 코드추가======================

<application
    ...
android:name="android.support.multidex.MultiDexApplication">
    ...

<application>



위의 3. 에서 이미 개인의 커스텀 Application 이 이미 있는 경우가 있다. 그래서 위의 코드를 추가할 곳이 없다. 이때에는 당황하지 않고, 해당 클래스로 들어간다.



예를 들어 android:name="android.test.BaseApplication" 이라고 하면 BaseApplication 클래스로 들어가서

BaseApplication 의 상속을 받고있는(아마 기본적으로 Application 을 받고 있을것이다.) 여기서

Application 을 MultiDexApplication 으로 바꿔주면 된다.


public class BaseApplication extends MultiDexApplication {

...

}

이상태로 MultiDex 를 제대로 활성화 시켜주면 위의  문제는 해결된다.




* 여기서잠깐! MultiDex 란???

- Dex 란?? 

- 안드로이드 응용프로그램은 .dex 파일로 컴파일된다.  .dex 파일은 차례로 단일 .apk 파일로 압축된다.

   DVM (Dalvik Virtual Machine)  은 .dex 파일을 사용하여 바이트 코드를 실행하는 구조로 되어있음.


- Dalvik 이란(Dalvik 가상머신)??

- JAVA 는 OS 위에 바로 돌아가는 다른언어와 달리 소스코드->(변환)->바이트코드->(변환)->OS 위에 존재하는 VM을 기반으로 작동한다.

          즉, OS 와 VM 이어주는 역할을 하는 응용프로그램이 Dalvik 이다. 현재는 안드로이드4.4.4(킷캣) 버전 이전의 플렛폼에적용(이후 부터는 ART(Android Run Time) 

         적용 되어있다.)되어있다. 

- Dalvik 장점 : 

- 그때 그때 앱을 컴파일 해서 어플을 실행시킨다. 그래서 다양한 기기에 대한 호환성이 높다는 장점이 있다.

- Dalvik 단점 : 

- 앱 실행시 컴파일-> CPU -> 사용증가 -> 배터리사용 ->성능저하 라는 단점이 있다.


    

-끝-