Android MultiDex 란 무엇입니까?


111

MultiDex에 대한 많은 게시물이 있습니다. 가끔 오류가 포함 해결, 경험 multiDexEnabled truedefaultConfig내 build.gradle의 섹션을 참조하십시오.

그러나이 기능은 정확히 무엇입니까? 그것을 사용하는 시나리오는 무엇입니까?

답변:


166

문서 인용 :

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

2
이것이 얼마나 큰 코드베이스 (LOC 또는 대략적인 화면 수)인지 아십니까? 간단한 5 ~ 6 개 화면 앱에서이 제한에 도달 할 건가요, 아니면 실제로 도달했을 가능성이 훨씬 더 낮
나요

20
@Marchy : 일반적으로 라이브러리를 너무 많이 추가하면 발생합니다. 라이브러리가없는 프로젝트는이 한계에 도달하기 어렵습니다.
CommonsWare

3
약 5 개의 Google 지원 라이브러리와 Fabric.io 및 2 ~ 3 개의 다른 타사 라이브러리를 사용하는 작은 앱이 있으며 multi-dex를 사용해야합니다.
c.dunlap

1
multidex를 활성화하는 데 단점이 있습니까? 왜 기본값으로 놔두지 않습니까?
Rafael Lima

1
@RafaelLima : Android 5.0 이전 기기 용 multidex의 유사 백 포트에 보안 문제가 있습니다. IIRC, 아직로드되지 않은 DEX 파일에있는 클래스를 사용하려는 경우 앱에 문제가 발생할 수도 있습니다.
CommonsWare

43

이렇게 간단합니다

하나의 .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입니다. 방법은 단 하나 덱스 방법의 한계를 건너


7

Android에서 MultiDex 란 무엇입니까?

Dex 는 Dalvik Executable의 약자로, Google의 가상 머신 프로세서 (Dalvik)가 Android 애플리케이션을 처리하는 데 사용하는 것입니다. Android는 작고 단순한 앱을 염두에두고 빌드되었으며 하나의 Dalvik Executable에 대한 제약 조건으로 인해 65,536 개의 메서드에서 코드 참조 지붕이 고정되었습니다. 이 문제와 Dalvik 머신이 코드 실행을 처리하는 방식으로 인해 Monkey Patch 또는 MultiDex 통합 까지 컴파일 및 호출 문제가있었습니다 . Android Studio의 MultiDex 통합을 통해 Android 개발자는 65,536 개 이상의 메서드로 코드 기반을 컴파일하고 실행할 수 있습니다!


1

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.

1
답변 해주셔서 감사합니다. 이것은 2015 년의 질문으로 그 이후로 많은 것이 바뀌 었습니다.
Roberto Tellez Ibarra

-2

또한 허용되는 것은 Google (및 기타)이 대부분의 개발자가 아닌 사람들에게 문제를 일으키는 코드 조각에 DRM, 예를 들어 widevine을 적용하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.