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.