android - tutorial - multidex powder para que sirve
No encontré la clase "android.support.multidex.MultiDexApplication" en la ruta: DexPathList (4)
Estaba usando la última versión de Android Studio y siguiendo el documento oficial para agregar compatibilidad con https://developer.android.com/studio/build/multidex.html multidex. Pero todavía tengo la misma excepción. Pasé mucho tiempo resolviéndolo. Finalmente, encontré la causa en la que habilité "Puntos de corte de excepción de Java: cualquier excepción" y "Puntos de interrupción de excepción: cuando se lanza alguno". Después de deshabilitarlos, la aplicación se ejecutó sin problemas.
Simplemente siga el documento oficial sobre multidex https://developer.android.com/studio/build/multidex.html . Funciona.
Estoy probando el nuevo soporte MultiDex en mi aplicación y hasta ahora he logrado compilar mi aplicación correctamente, pero cuando la ejecuto , obtengo la siguiente excepción:
java.lang.RuntimeException: Unable to instantiate application android.support.multidex.MultiDexApplication: java.lang.ClassNotFoundException: Didn''t find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me..main-2, /vendor/lib, /system/lib]]
at android.app.LoadedApk.makeApplication(LoadedApk.java:507)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4382)
at android.app.ActivityThread.access$1500(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5086)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn''t find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me.myapp.main-2, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
at android.app.Instrumentation.newApplication(Instrumentation.java:998)
at android.app.LoadedApk.makeApplication(LoadedApk.java:502)
Este es mi archivo gradle:
apply plugin: ''com.android.application''
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
minSdkVersion 16
targetSdkVersion 21
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.txt''
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.txt''
}
}
packagingOptions {
exclude ''META-INF/LICENSE.txt''
exclude ''META-INF/NOTICE.txt''
}
}
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
compile ''com.android.support:multidex:1.0.0''
compile fileTree(include: [''*.jar''], dir: ''libs'')
compile ''com.android.support:support-v4:21.0.0''
compile ''com.android.support:support-v13:21.0.0''
compile ''com.android.support:appcompat-v7:21.0.0''
}
Y mi AndroidManifest.xml:
<application
android:name="android.support.multidex.MultiDexApplication">
No entiendo cuál es el problema. Creo que estoy haciendo todo de acuerdo con la documentación. ¿Hay algo más que me falta? Me aseguré de tener instalada la última biblioteca de soporte y repo desde el administrador de SDK.
Hace poco tuve este problema. A pesar de no haber cambiado mi configuración, este error comenzó a ocurrir. Probé todas las soluciones sugeridas, incluida la eliminación del dispositivo virtual y la creación de uno nuevo.
Sin embargo, sí noté que si construía una APK y la arrastraba al emulador para instalarla, funcionaba bien.
Al final limpiar el proyecto y volver a ejecutarlo y luego funcionó.
La configuración de su proyecto de aplicación para usar una configuración multidex requiere que realice las siguientes modificaciones a su proyecto de aplicación, dependiendo de la versión mínima de Android compatible con su aplicación.
Si su minSdkVersion está configurada en 21 o más, todo lo que necesita hacer es establecer multiDexEnabled en verdadero en su archivo build.gradle de nivel de módulo, como se muestra aquí:
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
Sin embargo, si su minSdkVersion está configurada en 20 o menos, entonces debe usar la biblioteca de soporte multidex de la siguiente manera:
Modifique el archivo build.gradle de nivel de módulo para habilitar multidex y agregue la biblioteca multidex como una dependencia, como se muestra aquí:
android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 26 multiDexEnabled true } ... } dependencies { compile ''com.android.support:multidex:1.0.1'' }
Dependiendo de si anula la clase de la Aplicación, realice una de las siguientes acciones:
Si no anula la clase de la Aplicación, edite su archivo de manifiesto para configurar Android: nombre en la etiqueta de la siguiente manera:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <application android:name="android.support.multidex.MultiDexApplication" > ... </application> </manifest>
Si reemplaza la clase de la Aplicación, cámbiela para extender la Aplicación MultiDex (si es posible) de la siguiente manera:
public class MyApplication extends MultiDexApplication { ... }
O si anula la clase de la aplicación, pero no es posible cambiar la clase base, puede reemplazar el método attachBaseContext () y llamar a MultiDex.install (esto) para habilitar multidex:
public class MyApplication extends SomeOtherApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
Mi configuración:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath ''com.android.tools.build:gradle:0.14.+'' // 0.14.1, 2014-11-6
}
}
dependencies {
compile ''com.android.support:multidex:1.0.0''
}
android {
compileSdkVersion = 21
buildToolsVersion = "21.1.0"
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
multiDexEnabled true
}
}
Desafortunadamente, tengo el mismo problema. Pero encontré una situación extraña:
build / intermediate / dex / debug:
-rw-rw-r-- 1 andrew andrew 2221176 Nov 6 20:18 classes2.dex
-rw-rw-r-- 1 andrew andrew 8357596 Nov 6 20:18 classes.dex
descomprimir apk, construir / salidas / apk:
-rw-rw-r-- 1 andrew andrew 8357596 Nov 6 20:18 classes2.dex
-rw-rw-r-- 1 andrew andrew 2221176 Nov 6 20:18 classes.dex
En apk, las clases principales de classes.dex deberían ser más grandes que classes2.dex, pero no es así. También hago dex2jar y descomprimir jar para verificar clases, la clase de aplicación no está en classes.dex, está en classes2.dex por el contrario.
Sin embargo, debería haberlo arreglado. Aquí está mi plugin de gradle android parcheado que puedes probar:
buildscript {
repositories {
mavenCentral()
maven { url ''https://github.com/yongjhih/android-gradle-plugin.m2/raw/master/'' }
}
dependencies {
classpath ''com.infstory.tools.build:gradle:0.14.+''
}
}
El parche está en: https://github.com/yongjhih/android-gradle-plugin/commit/9c2212e3b1b4c6e1f7b47f2086aba1903a6258bf o https://android-review.googlesource.com/#/c/113331/
problema: https://code.google.com/p/android/issues/detail?id=78761
El parche oficial es https://android-review.googlesource.com/#/c/113201/ que ya se ha fusionado, creo que podría solucionarse en la próxima versión.
Ya se ha corregido 0.14.2 (2014/11/10). (de http://tools.android.com/tech-docs/new-build-system )
Release notes:
0.14.2 (2014/11/10)
Fix potential multi-dex issue where the dex files could be renamed during packaging, leading to the wrong main dex file being used.
Fix versionNameSuffix support
Fix BuildType.initWith to copy shrinkResources flag
setup default proguard rule file if none are provided (SDK/tools/proguard/proguard-android.txt)
BuildType.pseudoLocalesEnabled flag to include fake locales in apk.