¿Dónde está el estudio multidex?
Los métodos más utilizados actualmente son: (1) Aplicar complementos, como utilizar el marco de complementos en el que participo. Si tiene alguna sugerencia o pregunta relacionada, bienvenido a participar activamente; en Github (2) Split Dex, múltiples proyectos: necesarios para la compilación. Archivo de clase o archivo Jar, genera un archivo Jar con algún código fuente. Luego use la herramienta dx proporcionada por el SDK de Android para convertir el archivo Jar en un archivo Dex. Podemos realizar operaciones ODex con anticipación, de modo que al cargarlo con DexClassLoader, podamos omitir parte del trabajo de DexOpt, acelerando así el proceso de carga. No hay conflicto entre estos dos métodos y los complementos tienen muchas otras ventajas además de resolver la explosión de aplicaciones. Consulte mi artículo anterior y no lo repita.
Por supuesto, Google parece ser consciente de la actual explosión de métodos de aplicación. Se ha proporcionado una solución general en API 21, a saber, Android-support-multidex.jar. Este paquete jar puede admitir al menos la versión API 4 (Android L y superiores admitirán multidex de forma predeterminada).
Echemos un vistazo a cómo aplicar android-support-multidex.jar (los siguientes son ejemplos en Anroid Studio):
Primero, puede configurarlo a través de - multi-dex (build.gradle), el Apk generado contendrá varios archivos dex, como clases.dex, clases2.dex de la siguiente manera, build.gradle debe modificarse:
afterEvaluate {
Task.Match {
it.name.startsWith('dex ')
}.Cada { dx ->
if(dx . parámetros adicionales = = null){
dx.additionalParameters = []
}
dx parámetros adicionales+= '-multi-dex '//Habilitar multidex
/ /opcional
//dx parámetros adicionales+=-main-dex-list = $ directorio del proyecto/. toString() //Habilitar la lista de índice principal
}
}
Sin embargo, el cargador de clases predeterminado de Dalvik solo busca clases.dex, por lo que deben fusionarse para ser reconocido.
Por supuesto, con el soporte de android.support.multidex.jar, todo será muy sencillo. Primero echemos un vistazo al directorio del código fuente relevante. Explicaré el análisis del principio específico en el siguiente artículo:
Android/support/multi dex/build config
Android/support/multi dex/multi dex $ v 19 . clase multi dex $ v4
Android/soporte/multi dex/clase multi dex
aplicación Android/soporte/multi dex/multi dex. Android/support/multi dex/multi dex extractor $ 1 clase
Android/support/multi dex/multi dex extractor
Android/support/multi dex/ZipUtil$central. directorio . class
Android/support/multi dex/ziputil . class
Integración específica:
Agregue la siguiente configuración a la ruta de clase de su proyecto.
Repositorio {
jcenter()
}
Dependencias {
Compilar "com.Google . Android :multi dex:0.1”
}
La siguiente integración tiene dos pasos:
1. Eliminar android-support-multidex.jar de sdkextrasandroidsupport Importar multidexlibraryibs. directorio en el proyecto.
2. Si tu proyecto ya contiene una clase de aplicación, deja que herede Android. soporte de clase de aplicación multi dex.
Si tu aplicación ya hereda otras clases y no quieres hacer cambios, hay otra forma de usarla, que es anular el método adjuntoBaseContext():
Público class MyApplication extiende FooApplication {
@override
protected void addBaseContext(Context base){
super .attachbasecontext(base);
multi dex .install(this);
}
}
Finalmente, la configuración completa se proporciona en build.gradle:
Construir script {
Repositorio{
jcenter()
}
Dependencias {
Classpath' com . Herramientas de Android . build:gradle:0.13.3 '
Classpath' jp .
}
Complemento de aplicación: "com.android.application"
Complemento de aplicación: "jp.leafytree.android-scala"
repositorio {
jcenter()
}
android {
compileSdkVersion 21
buildToolsVersion '21.0. 2 '
defaultConfig {
ApplicationId 'some.app '
minSdkVersion 19
targetSdkVersion 19
Versión código 1
Nombre de la versión ' 1.0 '
}
}
Dependencias {
Compilar "com . Google Android:multi dex:0.1"
Compilar "Android". :play-services:5 . 0 . 77"
Compilar 'org . Scala-lang:Scala-library:2.11.2'
Compilar 'org . scalo id :scalo id _ 2.11:3.4-10”
}
La idea de usar múltiples indicadores
1. Si heredas MutiDexApplication o reescribes el método adjuntoBaseContext(). .
Notas sobre la lógica de clases de la aplicación:
Las variables globales estáticas en la aplicación se cargarán antes que el método install() de MutiDex, por lo que se recomienda evitar el uso de clases principales que puedan ser en la clase Aplicación Las variables estáticas utilizadas en archivos .dex se pueden modificar de la siguiente manera:
@override
public void onCreate() {
super oncreate(. );
Contexto final mContext = this
Nuevo Runnable() {
@Override
Public void Runnable(){< / p>
//¡Pon tu lógica aquí!
//Utiliza mContext aquí en lugar de esto
}
}.run();
}
Preguntas frecuentes
Dexexcepción: los archivos de índice de la biblioteca no son compatibles con el modo de índice múltiple; es posible que vea el siguiente error:
Error: Error en la ejecución de la tarea: Aplicación: dexDebug.
& gtcom . ide común . loggedErrorException: No se puede ejecutar el comando:
$ANDROID_SDK/build-tools/ANDROID-4.4W/dx-dex-num - hilos = 4-multi-dex
...
Código de error:
2
Salida:
Excepción inesperada de nivel superior:
com.Android.dex.dexException: los archivos de índice de la biblioteca no son compatibles con el modo de índice múltiple
en com.Android.dx.command.dexer . principal . runmultidex(main . Java:322)
en com .dx . .dx .comando dx .main(principal .Java:103)