Multidex
- 안드로이드 프로젝트 규모가 커지면서 앱 또는 앱이 참조하는 라이브러리의 메서드가 64K(65,536개)를 초과하면 앱이 Android 빌드 아키텍처의 제한에 도달했음을 알리는 빌드 오류가 발생한다.
trouble writing output:
Too many field references: 131000; max is 65536.
You may try using --multi-dex option.
- Multidex는 이러한 상황에서 메서드가 64K개를 초과하지 않도록 Dex 파일을 여러개로 쪼개준 뒤, 다시 쪼개진 Dex를 읽을 수 있도록 해준다.
gradle
dependencies {
val multidex_version = "2.0.1"
implementation("androidx.multidex:multidex:$multidex_version")
}
How to use it?
- Application 클래스 생성 여부에 따라 방법이 상이하다.
- Application 클래스를 별도로 생성하지 않았다면 Manifest 파일을 수정한다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="androidx.multidex.MultiDexApplication" >
...
</application>
</manifest>
- Application 클래스를 생성하여 사용중에 있다면, 다음과 같이 적용한다.
class AppCore : MultiDexApplication() {
init {
instance = this
}
companion object AppInstance {
lateinit var instance: AppCore
fun applicationContext() : Context {
return instance.applicationContext
}
}
}
- 만일 Application 클래스를 생성하였으나, 기본 클래스 변경이 불가능한 경우에는 attachBaseContext() 메서드를 재정의하고, 다음과 같이 install() 메서드로 Multidex 사용을 설정한다.
class MyApplication : SomeOtherApplication() {
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this)
}
}