studio lollipop descargar apis java android gradle android-5.0-lollipop android-5.1.1-lollipop
demo

java - lollipop - Android 5.x ClassNotFoundException funciona bien en 6.0+



apis de android studio (11)

¿Necesita multidex habilitado? Siempre me he encontrado con problemas con él. Siempre entendí que multidex se usaría como último recurso si aún estás alcanzando el límite del método de 65k. Si no se está ejecutando en este límite de método, no necesita multidex. Si se está topando con este límite, sugeriría usar progaurd para solucionar el problema primero. Si aún está por encima del límite del método, incluso después de usar proguard, use multidex.

He actualizado minSdkVersion de mi proyecto de 19 a 21. Esto ha causado un problema en los dispositivos 5.0 / 5.1 donde no puedo ejecutar la aplicación. Sigo recibiendo una excepción ClassNotFoundException en mi clase de aplicación. El registro completo, la clase de aplicación y el archivo de gradle se encuentran a continuación. Si vuelvo mi proyecto a minSdkVersion 19, la aplicación se ejecutará en 4.4+ sin problemas.

Lo que he intentado

  • Limpieza / Reconstrucción

  • Actualizando y degradando la versión de las herramientas de construcción.

  • Todas las bibliotecas de soporte en todos los proyectos tienen el mismo número de versión

  • Haciendo todas mis clases manifiestas relativas y luego absolutas.

  • Actualización de todas las herramientas SDK y compilación.

Iniciar sesión

04-27 14:37:07.152 6278-6278/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.package.testapp, PID: 6278 java.lang.RuntimeException: Unable to instantiate application com.package.TestApplication: java.lang.ClassNotFoundException: Didn''t find class "com.package.Application" on path: DexPathList[[zip file "/data/app/com.package.testapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.package.testapp-1/lib/x86_64, /vendor/lib64, /system/lib64]] at android.app.LoadedApk.makeApplication(LoadedApk.java:563) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4526) at android.app.ActivityThread.access$1500(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.ClassNotFoundException: Didn''t find class "com.package.TestApplication" on path: DexPathList[[zip file "/data/app/com.package.testapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.package.testapp-1/lib/x86_64, /vendor/lib64, /system/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) at android.app.Instrumentation.newApplication(Instrumentation.java:980) at android.app.LoadedApk.makeApplication(LoadedApk.java:558) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4526)  at android.app.ActivityThread.access$1500(ActivityThread.java:151)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:135)  at android.app.ActivityThread.main(ActivityThread.java:5254)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  Suppressed: java.lang.ClassNotFoundException: com.package.testapp.welcome.TestClaimApplication at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 13 more Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

Gradle

buildscript { repositories { maven { url ''https://maven.fabric.io/public'' } } dependencies { classpath ''io.fabric.tools:gradle:1.+'' } } apply plugin: ''com.android.application'' apply plugin: ''io.fabric'' repositories { maven { url ''https://maven.fabric.io/public'' } } android { compileSdkVersion 25 buildToolsVersion ''25.0.3'' defaultConfig { applicationId "com.package.testapp" minSdkVersion 21 multiDexEnabled = true targetSdkVersion 25 versionCode 2 versionName "0.7" renderscriptTargetApi 18 // support mode not supported 21+ renderscriptSupportModeEnabled true testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } dexOptions { javaMaxHeapSize "4g" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } } lintOptions { checkReleaseBuilds false abortOnError false } productFlavors { companylocal companymaven } } dependencies { def ext = rootProject.ext; compile fileTree(include: [''*.jar''], dir: ''libs'') compile "com.android.support:appcompat-v7:${ext.supportLibraryVersion}" compile "com.android.support:design:${ext.supportLibraryVersion}" compile ''com.romandanylyk:pageindicatorview:0.0.9'' compile "com.jakewharton:butterknife:${ext.butterknifeLibraryVersion}" annotationProcessor "com.jakewharton:butterknife-compiler:${ext.butterknifeLibraryVersion}" compile "uk.co.chrisjenx:calligraphy:2.2.0" compile ''com.android.support:multidex:1.0.1'' // Crashlytics Kit - for crash handling compile(''com.crashlytics.sdk.android:crashlytics:2.5.2@aar'') { transitive = true } androidTestCompile(''com.android.support.test.espresso:espresso-core:2.2.2'', { exclude group: ''com.android.support'', module: ''support-annotations'' }) testCompile ''junit:junit:4.12'' testCompile ''org.robolectric:robolectric:3.0'' testCompile "com.squareup.okhttp3:mockwebserver:${ext.okHttp3LibraryVersion}" testCompile(''com.squareup.assertj:assertj-android:1.1.1'') { exclude module: ''support-annotations'' } }

Solicitud

public class TestApplication extends Application { Engine engine; @Override public void onCreate() { super.onCreate(); String privateServerUrlLocal = getString(R.string.server_url); ProfileLauncher profileLauncher = getProfileLauncher(); LoginLauncher loginLauncher = getLoginLauncher(); // Set up Crash Analytics final CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder().disabled(DEBUG).build(); Fabric.with(this, new Crashlytics.Builder().core(crashlyticsCore).build()); Intent intent = new Intent(this, LogoutService.class); startService(intent); CertificatePinner certificatePinner = new CertificatePinner.Builder() .add("") .add("") .build(); engine = new Engine.Builder(privateServerUrlLocal, getString(R.string.other_server_url)) .setCertificatePinner(certificatePinner) .setSDKPartnerSetupManager(getSdkPartnerManager()) .setLogoutActionHandler(getLogoutActionHandler()) .setVLocationManager(new VLocationManagerImp()) .setDebug(DEBUG) .addDeepLinkHandler(new ClaimDeepLinkHandler(loginLauncher, profileLauncher)) .addDeepLinkHandler(new LinkGiftCodeDeeplinkHandler(loginLauncher, profileLauncher)) .addDeepLinkHandler(new OpenLinkDeepLinkHandler()) .addDeepLinkHandler(new DetailsDeepLinkHandler()) .addClaimConfig(new ClaimConfig(false, false, false, false, true)) .build(); engine.startup(this); } @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(base); } }

Manifiesto

<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.package.testapp"> <uses-feature android:name="android.hardware.camera" android:required="true" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> <uses-feature android:name="android.hardware.camera.flash" android:required="false" /> <!-- Required for g+ login --> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <application android:name=".TestApplication" android:allowBackup="false" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher" android:supportsRtl="true" android:theme="@style/AppTheme"> <service android:name="com.package.companycommon.ui.LogoutService" android:stopWithTask="true" /> <activity android:name=".LaunchActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".welcome.WelcomeActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme.NoActionBar.ClearStatus" /> <activity android:name=".RegisterActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme.NoActionBar.ClearStatus" android:windowSoftInputMode="adjustResize" /> <activity android:name=".LoginActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme.NoActionBar.ClearStatus" android:windowSoftInputMode="adjustResize" /> <activity android:name=".ActivationActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme.NoActionBar.ClearStatus" android:windowSoftInputMode="adjustResize" /> <activity android:name=".AddPhoneNumberActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme.NoActionBar.ClearStatus" android:windowSoftInputMode="adjustResize" /> <activity android:name=".ForgotPasswordActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme.NoActionBar.ClearStatus" android:windowSoftInputMode="adjustResize" /> <activity android:name=".GiftHistoryActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme.NoActionBar.ClearStatus" /> <activity android:name="com.package.PartnerLoginHiddenActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme.NoActionBar.ClearStatus" /> <activity android:name=".tutorial.TutorialActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme.NoActionBar.ClearStatus" /> <activity android:name=".CreateNewPasswordActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme.NoActionBar.ClearStatus" /> <activity android:name=".settings.SettingsActivity" android:screenOrientation="portrait"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".GiftHistoryActivity" /> </activity> <activity android:name=".settings.ExtraSettingsActivity" android:label="@string/settings" android:screenOrientation="portrait"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".settings.SettingsActivity" /> </activity> <activity android:name="companyapp.company.NewsActivity" android:label="@string/notifications" android:screenOrientation="portrait" android:theme="@style/AppTheme" /> <activity android:name=".termsandconditions.CompanyTermsAndConditionsActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme" /> <activity android:name="com.package.companycommon.ui.PhotoViewerActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme" /> <activity android:name="com.package.company.details.CompanyDetailActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme" /> <activity android:name="com.package.company.details.CompanyDetailActivityLocation" android:screenOrientation="portrait" android:theme="@style/AppTheme"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.package.company.details.CompanyDetailActivity" /> </activity> <activity android:name="com.package.company.ClaimActivity" android:theme="@style/AppTheme.NoActionBar" tools:replace="android:theme" /> </application> </manifest>


Cree multidex-config.txt para mantener estas clases en el archivo DEX primario:

com/package/Application.class com/package/TestApplication.class com/package/testapp/welcome/TestClaimApplication.class

Agregue multiDexKeepFile a la sección android.buildTypes.release de su build.gradle como esto:

android { buildTypes { release { multiDexKeepFile file ''multidex-config.txt'' } } }


Cuando se dirige a la api 21, el compilador tiene un límite de 100 archivos dex que leerá. Entonces, una solución simple que encontré fue agregar esto a sus descripciones en su archivo de gradle. Esto fusionará todos sus archivos dex en la menor cantidad posible.

En su archivo build.gradle agregue lo siguiente

android { ... dexOptions { preDexLibraries = false } }


Esto significa que su multiDex no funciona correctamente, por lo que faltan algunos archivos. Creo que Android 5.0 tiene una forma diferente de usar el multiDex. ¿Anulaste algo en tu clase de aplicación?


He hecho una demo de su código y configuración y está funcionando en el siguiente malvavisco

Descárgalo y compruébalo y compara con tu código. Y una cosa más, cómo ha creado el proyecto con el nombre del paquete com.package.testapp. No puedo crear un proyecto con el mismo nombre de paquete


Intenta dar el camino completo en manifiesto.

<application android:name=".TestApplication"

También elimine la carpeta de compilación manualmente; a veces la limpieza no funciona. También desinstale la aplicación manualmente y comience.


Intenta eliminar la compile ''com.android.support:multidex:1.0.1'' . El documento de Google says

Por lo tanto, si su minSdkVersion es 21 o superior, no necesita la biblioteca de soporte multidex.

No estoy seguro de si esto ayuda, pero vale la pena intentarlo.


Intente deshabilitar la opción Ejecución instantánea y luego ejecute la aplicación. Funcionó para mí después de probar muchas soluciones, finalmente resolví esto.


Intente habilitar Progaud y deshabilitar multidex.

No solo resolverá este problema, sino que también tendrá una apk más pequeña con tiempos de instalación y ejecución más rápidos.

Nota: si necesita ayuda con esto, simplemente deje un comentario y podemos resolverlo.

  • Ok, entonces no es Progaurd o MultiDex

El error es que com.package.Application no se encuentra. Ninguno de los códigos que publicaste (o el manifiesto) contiene una referencia a esa clase. ¿Dónde estás definiendo com.package.Application? y si no estás en tu proyecto, ¿se está haciendo referencia? (Haría una búsqueda en todo el proyecto para "com.package.Application" para desentrañar esto).


Necesita agregar su nombre de android: con una ruta completa como esta.

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

Y su aplicación de prueba debería extender la aplicación MultiDex.

De acuerdo con la documentación, por favor refiérase si necesita más detalles. says