O que é Android MultiDex?

111

Existem muitos posts sobre MultiDex. Eu experimentei, às vezes, erros resolvidos, incluindo multiDexEnabled truena defaultConfigseção do meu build.gradle.

Mas, o que exatamente é esse recurso? Quais são os cenários para usá-lo?

Roberto Tellez Ibarra
fonte

Respostas:

166

Citando a documentação :

Os arquivos de aplicativos Android (APK) contêm arquivos de bytecode executáveis ​​na forma de arquivos Dalvik Executable (DEX), que contêm o código compilado usado para executar seu aplicativo. A especificação Dalvik Executable limita o número total de métodos que podem ser referenciados em um único arquivo DEX a 65.536, incluindo métodos de estrutura Android, métodos de biblioteca e métodos em seu próprio código. Ultrapassar esse limite requer que você configure o processo de compilação do seu aplicativo para gerar mais de um arquivo DEX, conhecido como configuração multidex.

Portanto, o recurso é: ele permite que seu aplicativo complexo seja compilado. Os cenários para usá-lo são quando seu aplicativo falha ao compilar devido a atingir o limite de referência do método DEX de 64K. Isso aparece como um erro de compilação, como:

Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
CommonsWare
fonte
2
Alguma ideia de quão grande seria uma base de código (LOC ou número aproximado de telas)? Você vai atingir esse limite em um aplicativo simples de 5 a 6 telas ou é realmente muito mais adiante (ou seja: 10 a 20 telas) que provavelmente o atingirá
Marchy
20
@Marchy: Normalmente, isso vem da adição de muitas bibliotecas. É difícil para um projeto sem biblioteca atingir esse limite.
CommonsWare
3
Eu tenho um pequeno aplicativo que usa cerca de 5 bibliotecas de suporte do Google, bem como Fabric.io e 2 ou 3 outras bibliotecas de terceiros e tenho que usar multi-dex.
c.dunlap de
1
Há alguma desvantagem de habilitar o multidex? por que não deixá-lo verdadeiro como padrão?
Rafael Lima
1
@RafaelLima: Existem problemas de segurança com o quase backport do multidex para dispositivos anteriores ao Android 5.0. IIRC, ele também pode causar alguns problemas com seu aplicativo, se você estiver tentando usar classes que estão em um arquivo DEX ainda não carregado.
CommonsWare
43

É tão simples quanto isso

Um único arquivo .dex pode ter 65.536 métodos (referências), portanto, se o número de referências exceder 65.536, escolha o multidex.

Mais explicação!

Um programa de aplicativo Android é compilado em um arquivo .dex que, por sua vez, é compactado em um único arquivo .apk.
DVM (Dalvik Virtual Machine) usa arquivo / arquivos .dex para executar bytecodes.

O que faz com que o número de referências exceda os limites de 65.536?
Métodos escritos por você + métodos do Android Framework + métodos de biblioteca de terceiros (por exemplo, Volley, Retrofit, SDK do Facebook, etc.).
Eu li "em algum lugar"
App Compat 24.2.1 contém métodos de 16,5k
Google Play Services GCM 9.6.1 contém 16,7k métodos
Então, se você criou um aplicativo Hello world simples que tem App Compat 24.2.1, você já tem 1/4 maneira de cruzar o limite único de métodos dex

Rohit Singh
fonte
7

O que é MultiDex no Android?

Dex significa Dalvik Executable, que é o processador da máquina virtual do Google (Dalvik) usado para lidar com aplicativos Android. O Android foi construído com aplicativos pequenos e simples em mente e as restrições em um único Dalvik Executable fixaram o teto de referências de código em 65.536 métodos. Por causa desse problema e da maneira como a máquina Dalvik lida com a execução do código, houve alguns problemas de compilação e invocação, até o Monkey Patch ou integração MultiDex . A integração MultiDex no Android Studio permite aos desenvolvedores Android a capacidade de compilar e executar uma base de código com mais de 65.536 métodos!

Farhana
fonte
1

Criando site oficial do desenvolvedor Android.

If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.
Masum
fonte
1
Obrigado pela resposta. Essa é uma pergunta do ano de 2015, tantas coisas mudaram desde então.
Roberto Tellez Ibarra
-2

O que também permite é que o Google (e outros) aplique DRM, digamos .. widevine, em pedaços de código onde isso causa problemas para a maioria dos não desenvolvedores ..

anônico
fonte