MultiDex 오류 해결하기
Error:Cannot fit requested classes in a single dex file. Try supplying a main-dex list. # methods: 66826 > 65536 |
이 오류는 65536(64K)바이트 이상의 함수(Method)를 초과할 경우에 발생 한다고 합니다.
65536(64K)은 단일 DEX(Dalvik Executable) 바이트코드 파일 내에서 코드가 호출할 수 있는 참조의 총 개수를 나타냅니다. 그래서 DEX 파일은 함수를 64K를 초과할 수 없습니다. 이를 해결위해 Multidex 활성화 해야 합니다. Multidex는 dex파일을 여러개로 나눠주고 나눠진 여러개의 DEX 파일을 빌드하고 읽을 수 있게 해줍니다.
안드로이드 개발자 페이지에도 MultiDex에 대해 명시되어 있네요.
이제 Multidex 적용을 해보도록 하겠습니다.
build.gradle 파일편집
1. android에 multiDexEnabled true 추가
2. dependenciesd에 implementation 'com.android.support:multidex:1.0.3' 추가
android {
compileSdkVersion 27
defaultConfig {
minSdkVersion 19
targetSdkVersion 27
//multi-dex
multiDexEnabled true
}
}
dependencies {
//multi-dex
implementation 'com.android.support:multidex:1.0.3'
}
매니페스트 파일편집
3. <application> 태크에 android:name 추가
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
</manifest>
Application 클래스를 재정의할 경우 다음과 같이 MultiDexApplication을 확장하도록 변경
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name=".GlobalApplication" >
...
</application>
</manifest>
저는 카카오톡 로그인 API 를 사용해야 하기때문에 GlobalApplication 클래스에 MultiDexApplication을 확장하였습니다.
public class GlobalApplication extends MultiDexApplication {
private static volatile GlobalApplication obj = null;
private static volatile Activity currentActivity = null;
@Override
public void onCreate() {
super.onCreate();
obj = this;
KakaoSDK.init(new KaKaoSDKAdapter());
}
public static GlobalApplication getGlobalApplicationContext() {
return obj;
}
public static Activity getCurrentActivity() {
return currentActivity;
}
// Activity가 올라올때마다 Activity의 onCreate에서 호출해줘야한다.
public static void setCurrentActivity(Activity currentActivity) {
GlobalApplication.currentActivity = currentActivity;
}
}
적용완료되었고 프로젝트를 시작하니 정상적으로 작동하였습니다.
'Android' 카테고리의 다른 글
[Android] 액션바(타이틀바)와 상태바 색상 변경하기 (0) | 2018.12.08 |
---|---|
[Android] 액티비티(화면) 가로, 세로모드 고정하기 (0) | 2018.11.23 |