Android admite la implementación de bibliotecas multidexuales

He alcanzado el límite mágico de dex porque mi aplicación usa muchos flasks (drive api, greendao, text to pdf, support ..).

Mi solución actual fue que literalmente creé un segundo apk solo para google drive al que llamé desde la aplicación principal. Pero ahora descubrí que Android finalmente lo admite con esta biblioteca. Mi problema es solo que no sé cómo implementarlo (preferiblemente sin gradle). No puedo encontrar buenos tutoriales para eso.

Okey estoy perdiendo la cabeza tratando de implementar esto .. He encontrado esto: http://blog.osom.info/2014/10/multi-dex-to-rescue-from-infamous-65536.html

Y agregué:

android:name="android.support.multidex.MultiDexApplication" 

Para mi archivo manifiesto y

 protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } 

Para mi mainactivity.java

También instalé el complemento gradle para eclipse, exporté gradle para obtener el archivo build.gradle al que cambié:

 apply plugin: 'android' dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile project(':android-support-v7-appcompat') compile project(':Sync') compile project(':gdrive:google-play-services_lib') } android { compileSdkVersion 14 buildToolsVersion "21.1.1" sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src-gen','src'] resources.srcDirs = ['src-gen','src'] aidl.srcDirs = ['src-gen','src'] renderscript.srcDirs = ['src-gen','src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } // Move the tests to tests/java, tests/res, etc... instrumentTest.setRoot('tests') // Move the build types to build-types/ // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src//... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } dexOptions { preDexLibraries = false } } afterEvaluate { tasks.matching { it.name.startsWith('dex') }.each { dx -> if (dx.additionalParameters == null) { dx.additionalParameters = ['--multi-dex'] } else { dx.additionalParameters += '--multi-dex' } } } 

Pero el error sigue siendo el mismo 🙁

El blog fue la solución anterior.

Con Android Studio 0.9.2 y Gradle Plugin 0.14.1, solo necesita:

  1. Agregar a AndroidManifest.xml:

.

 android:name="android.support.multidex.MultiDexApplication" 

o

Añadir

 MultiDex.install(this); 

en el método attachBaseContext su aplicación personalizada

o su aplicación personalizada extender aplicación MultiDexApplication

  1. agrega multiDexEnabled = true en tu build.gradle

.

 android { defaultConfig { ... multiDexEnabled = true } } 

Hecho.

Disculpa mi pobre ingles

Recursos Relacionados:

http://developer.android.com/tools/building/multidex.html

https://plus.google.com/+XavierDucrohet/posts/1FnzwdcBnyC

Hay algunas cosas que debes hacer,

1- En su gradle necesita especificar multidex y agregar la biblioteca de soporte:

 android { defaultConfig { ... multiDexEnabled true ... } } dependencies { ... compile 'com.android.support:multidex:1.0.0' ... } 

2- En su manifiesto, debe configurar su aplicación en una aplicación multidex:

 < ?xml version="1.0" encoding="utf-8"?>   ...   

3.1- En su clase de aplicación, debe extender la aplicación MultiDexApplication :

 public class my_application extends MultiDexApplication { ... } 

3.2- O bien, sobre el método attachBaseContext() :

 public class my_application extends Application { protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } } 

Limitaciones de la biblioteca de soporte multidexial

La biblioteca de soporte multidex tiene algunas limitaciones conocidas que debe tener en cuenta y probar cuando las incorpore en la configuración de comstackción de su aplicación:

  • La instalación de archivos .dex durante el inicio en la partición de datos de un dispositivo es compleja y puede dar como resultado errores de aplicación no responde (ANR) si los archivos secundarios dex son grandes. En este caso, debe aplicar técnicas de reducción de código con ProGuard para minimizar el tamaño de los archivos dex y eliminar porciones de código no utilizadas.
  • Es posible que las aplicaciones que usan multidex no se inicien en dispositivos que ejecutan versiones de la plataforma anteriores a Android 4.0 (API nivel 14) debido a un error Dalvik linearAlloc (Problema 22586). Si se dirige a niveles de API anteriores a 14, asegúrese de realizar pruebas con estas versiones de la plataforma, ya que su aplicación puede tener problemas al inicio o cuando se cargan grupos de clases particulares. La reducción del código puede reducir o posiblemente eliminar estos posibles problemas.
  • Las aplicaciones que usan una configuración multidex que realizan solicitudes de asignación de memoria muy grandes pueden bloquearse durante el tiempo de ejecución debido a un límite de Dal lineal lineal (Problema 78035). El límite de asignación se aumentó en Android 4.0 (nivel de API 14), pero las aplicaciones aún pueden alcanzar este límite en las versiones de Android anteriores a Android 5.0 (API de nivel 21).
  • Existen requisitos complejos con respecto a qué clases se necesitan en el archivo dex primario cuando se ejecuta en el tiempo de ejecución Dalvik. Las actualizaciones de herramientas de construcción de Android manejan los requisitos de Android, pero es posible que otras bibliotecas incluidas tengan requisitos de dependencia adicionales, incluido el uso de la introspección o la invocación de métodos Java desde el código nativo. Es posible que algunas bibliotecas no se puedan usar hasta que las herramientas de comstackción multidex se actualicen para permitirle especificar las clases que deben incluirse en el archivo dex principal.

recursos: http://developer.android.com/tools/building/multidex.html

De acuerdo con los documentos en https://developer.android.com/studio/build/multidex.html#avoid

Si su minSdkVersion tiene 21 años o más, todo lo que necesita hacer es

 android { defaultConfig { ... minSdkVersion 21 targetSdkVersion 25 multiDexEnabled true } ... } 

Si su minSdkVersion tiene 20 o menos, necesita usar la biblioteca de soporte

 android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 25 multiDexEnabled true } ... } dependencies { compile 'com.android.support:multidex:1.0.1' } 

Junto con

 < ?xml version="1.0" encoding="utf-8"?>   ...