MultiDex에 대한 많은 게시물이 있습니다. 가끔 오류가 포함 해결, 경험 multiDexEnabled true
에 defaultConfig
내 build.gradle의 섹션을 참조하십시오.
그러나이 기능은 정확히 무엇입니까? 그것을 사용하는 시나리오는 무엇입니까?
MultiDex에 대한 많은 게시물이 있습니다. 가끔 오류가 포함 해결, 경험 multiDexEnabled true
에 defaultConfig
내 build.gradle의 섹션을 참조하십시오.
그러나이 기능은 정확히 무엇입니까? 그것을 사용하는 시나리오는 무엇입니까?
답변:
문서 인용 :
Android 애플리케이션 (APK) 파일에는 Dalvik Executable (DEX) 파일 형식의 실행 가능한 바이트 코드 파일이 포함되며, 여기에는 앱을 실행하는 데 사용되는 컴파일 된 코드가 포함됩니다. Dalvik Executable 사양은 Android 프레임 워크 메서드, 라이브러리 메서드 및 자체 코드의 메서드를 포함하여 단일 DEX 파일 내에서 참조 할 수있는 총 메서드 수를 65,536 개로 제한합니다. 이 제한을 초과하려면 multidex 구성이라고하는 둘 이상의 DEX 파일을 생성하도록 앱 빌드 프로세스를 구성해야합니다.
따라서 기능은 복잡한 앱을 컴파일 할 수 있다는 것입니다. 이를 사용하는 시나리오는 64K DEX 메서드 참조 제한에 도달하여 앱이 컴파일에 실패하는 경우입니다. 다음과 같은 빌드 오류로 나타납니다.
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
하나의 .dex 파일은 65,536 개의 메서드 (참조)를 가질 수 있으므로 참조 수가 65,536 개를 초과하면 multidex를 사용합니다.
안드로이드 응용 프로그램은 .dex 파일로 컴파일되며, 차례로 단일 .apk 파일로 압축됩니다.
DVM (Dalvik Virtual Machine)은 .dex 파일 / 파일을 사용하여 바이트 코드를 실행합니다.
참조 수가 65,536 개를 초과하는 원인은 무엇입니까?
귀하가 작성한 메소드 + Android 프레임 워크 메소드 + 타사 라이브러리 (예 : Volley, Retrofit, Facebook SDK 등) 메소드.
나는 "어딘가에"
App Compat 24.2.1에 16.5k 메소드가 포함되어 있음을 읽었습니다.
Google Play 서비스 GCM 9.6.1에는 16.7k 메소드가 포함되어 있습니다.
따라서 App Compat 24.2.1이 포함 된 간단한 Hello world 애플리케이션을 만들었다면 이미 1/4입니다. 방법은 단 하나 덱스 방법의 한계를 건너
Dex 는 Dalvik Executable의 약자로, Google의 가상 머신 프로세서 (Dalvik)가 Android 애플리케이션을 처리하는 데 사용하는 것입니다. Android는 작고 단순한 앱을 염두에두고 빌드되었으며 하나의 Dalvik Executable에 대한 제약 조건으로 인해 65,536 개의 메서드에서 코드 참조 지붕이 고정되었습니다. 이 문제와 Dalvik 머신이 코드 실행을 처리하는 방식으로 인해 Monkey Patch 또는 MultiDex 통합 까지 컴파일 및 호출 문제가있었습니다 . Android Studio의 MultiDex 통합을 통해 Android 개발자는 65,536 개 이상의 메서드로 코드 기반을 컴파일하고 실행할 수 있습니다!
Accroding Android 개발자 공식 사이트.
If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.