안드로이드 코드는 dex라는 파일로 컴파일이 됩니다. dex는 65,535개의 메소드만 컴파일이 됩니다. 이를 초과하는 앱을 생성하면 MultiDex로 설정하여 Apk파일에 dex가 두개 이상으로 컴파일되도록 해야 합니다.
AndroidX를 사용할 때 앱을 MultiDex로 설정하는 방법을 소개합니다.
Gradle 설정
먼저 App의 build.gradle
파일에 다음과 같이 "multiDexEnabled true"
로 설정하고 라이브러리를 의존성에 추가합니다.
defaultConfig {
multiDexEnabled true
}
dependencies {
implementation 'androidx.multidex:multidex:2.0.1'
....
}
앱 코드 설정
멀티덱스를 사용하려면 AndroidManifest에 Application을 MultiDexApplication의 클래스로 지정해주어야 합니다.
Application 클래스를 따로 만들지 않을 때
"AndroidManifest.xml"
에 다음처럼 이름을 설정해주면 됩니다.
<application
android:name="androidx.multidex.MultiDexApplication" ... >
...
Custom Application 클래스를 만들 때
다음처럼 Application 클래스를 따로 만들 수 있습니다.
public class MyApplication extends MultiDexApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
}
}
이런 경우, "AndroidManifest.xml"
에 구현한 Application 객체의 이름을 설정해주면 됩니다.
<application
android:name=".MyApplication" ... >
...
만약 Application은 재정의하지만 MultiDexApplication
를 상속하지 않는 경우,
다음처럼 MultiDex.install(this)
를 호출하여 MultiDex를 사용하도록 만들 수 있습니다.
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Proguard 등으로 최적화를 할 때 주의해야 하는 점은 Android Developer를 참고해주세요.
참고
Recommended Posts:
- Android - 진동, Vibrator, VibrationEffect 예제
- Android - FusedLocationProviderClient으로 위치 정보 얻기
- Android - 시간, 날짜 변경 이벤트 받기
- Android - ACTION_BOOT_COMPLETED 이벤트 받기
- Android - Foreground Service 실행
- Android - GPS, Network 위치 정보 얻기 (LocationManager)
- Android - Screen On/Off 이벤트 수신, 상태 확인
- Android - 파일 입출력 예제 (Read, Write, 내부, 외부 저장소)
- Android - currentTimeMillis(), elapsedRealtime(), uptimeMillis()
- Android - PowerManager WakeLock
- Android - 다른 앱의 Service에 바인딩
- Android - Handler vs Executor
- Android - Darkmode 활성화하는 방법