Hardcoded app:fragment string in Preference crashes in Release - android

Below is the simplified version of the xml file for my settings screen.
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--hardcoded app:fragment crashes in release because of ClassNameNotFound -->
<Preference
app:allowDividerAbove="true"
app:fragment="com.flamyoad.tsukiviewer.ui.settings.preferences.ClearDataPreferences"
app:icon="#drawable/ic_delete_settings_24dp"
app:title="Clear data" />
</androidx.preference.PreferenceScreen>
It works well in debug version. But when I click on the preference on release apk, it crashes because of ClassNotFoundException.
Stacktrace here
Process: com.flamyoad.tsukiviewer, PID: 13647
androidx.fragment.app.Fragment$c: Unable to instantiate fragment com.flamyoad.tsukiviewer.ui.settings.preferences.ClearDataPreferences: make sure class name exists
at i.l.d.n.d()
at androidx.fragment.app.Fragment.a()
at i.l.d.r$c.a(:2)
at com.flamyoad.tsukiviewer.ui.settings.SettingsActivity.a(:2)
at i.s.f.b(:29)
at androidx.preference.Preference.a(:23)
at androidx.preference.Preference$a.onClick()
at android.view.View.performClick(View.java:4757)
at android.view.View$PerformClick.run(View.java:19769)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5289)
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:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.ClassNotFoundException: com.flamyoad.tsukiviewer.ui.settings.preferences.ClearDataPreferences
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:308)
at i.l.d.n.c(:2)
at i.l.d.n.d() 
at androidx.fragment.app.Fragment.a() 
at i.l.d.r$c.a(:2) 
at com.flamyoad.tsukiviewer.ui.settings.SettingsActivity.a(:2) 
at i.s.f.b(:29) 
at androidx.preference.Preference.a(:23) 
at androidx.preference.Preference$a.onClick() 
at android.view.View.performClick(View.java:4757) 
at android.view.View$PerformClick.run(View.java:19769) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5289) 
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:899) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.flamyoad.tsukiviewer.ui.settings.preferences.ClearDataPreferences" on path: DexPathList[[zip file "/data/app/com.flamyoad.tsukiviewer-1/base.apk"],nativeLibraryDirectories=[/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 java.lang.Class.classForName(Native Method) 
at java.lang.Class.forName(Class.java:308) 
at i.l.d.n.c(:2) 
at i.l.d.n.d() 
at androidx.fragment.app.Fragment.a() 
at i.l.d.r$c.a(:2) 
at com.flamyoad.tsukiviewer.ui.settings.SettingsActivity.a(:2) 
at i.s.f.b(:29) 
at androidx.preference.Preference.a(:23) 
at androidx.preference.Preference$a.onClick() 
at android.view.View.performClick(View.java:4757) 
at android.view.View$PerformClick.run(View.java:19769) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5289) 
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:899) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
Suppressed: java.lang.ClassNotFoundException: com.flamyoad.tsukiviewer.ui.settings.preferences.ClearDataPreferences
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)
... 21 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
To me, it looks like the cause is the apk being minified and class name is replaced with shorter string. What can I do in this situation? Is it best practice to replace the app:fragment with function calls in Activity? Or is there any other methods?
I'm using PreferenceFragmentCompat for my application.

The aapt2 generated proguard rules for preferences specifically look for the android:fragment attribute, not app:fragment. You'd want to use android:fragment to automatically keep preference fragments.

I added these lines into my proguard-rules.pro and it stopped crashing.
-keep public class * extends androidx.preference.Preference
-keep public class * extends androidx.preference.PreferenceFragmentCompat

Related

ClassNotFoundException when starting any new activity

When I try to start any activity beside MainActivity in application, I experience a crash in some devices.
as I can see in crashAnalytics it does not depend on the version or brand of the device or android version,
fatal exception don't refers to any line in my project.
already tried to delete .gradle folder / clear project, does not work.
03-30 19:13:46.458 7597-7597/ru.sberleasing E/AndroidRuntime: FATAL EXCEPTION: main
Process: ru.sberleasing, PID: 7597
java.lang.NoClassDefFoundError: java.lang.invoke.SerializedLambda
at libcore.reflect.InternalNames.getClass(InternalNames.java:55)
at java.lang.Class.getDexCacheType(Class.java:476)
at java.lang.reflect.AbstractMethod.getParameterTypes(AbstractMethod.java:166)
at java.lang.reflect.Method.getParameterTypes(Method.java:170)
at java.lang.Class.getDeclaredMethods(Class.java:673)
at java.io.ObjectStreamClass.computeSerialVersionUID(ObjectStreamClass.java:566)
at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:279)
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1087)
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:1055)
at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:268)
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1087)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1554)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
at android.os.Parcel.writeSerializable(Parcel.java:1442)
at android.os.Parcel.writeValue(Parcel.java:1395)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:665)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1330)
at android.os.Bundle.writeToParcel(Bundle.java:1079)
at android.os.Parcel.writeBundle(Parcel.java:690)
at androidx.fragment.app.FragmentState.writeToParcel(FragmentState.java:167)
at android.os.Parcel.writeTypedList(Parcel.java:1148)
at androidx.fragment.app.FragmentManagerState.writeToParcel(FragmentManagerState.java:51)
at android.os.Parcel.writeParcelable(Parcel.java:1416)
at android.os.Parcel.writeValue(Parcel.java:1322)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:665)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1330)
at android.os.Bundle.writeToParcel(Bundle.java:1079)
at android.os.Parcel.writeBundle(Parcel.java:690)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3152)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3417)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.lang.invoke.SerializedLambda" on path: DexPathList[[zip file "/data/app/ru.sberleasing-2/base.apk"],nativeLibraryDirectories=[/data/app/ru.sberleasing-2/lib/x86, /data/app/ru.sberleasing-2/base.apk!/lib/x86, /vendor/lib, /system/lib]]
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 libcore.reflect.InternalNames.getClass(InternalNames.java:53)
at java.lang.Class.getDexCacheType(Class.java:476) 
at java.lang.reflect.AbstractMethod.getParameterTypes(AbstractMethod.java:166) 
at java.lang.reflect.Method.getParameterTypes(Method.java:170) 
at java.lang.Class.getDeclaredMethods(Class.java:673) 
at java.io.ObjectStreamClass.computeSerialVersionUID(ObjectStreamClass.java:566) 
at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:279) 
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1087) 
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:1055) 
at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:268) 
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1087) 
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1554) 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497) 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461) 
at android.os.Parcel.writeSerializable(Parcel.java:1442) 
at android.os.Parcel.writeValue(Parcel.java:1395) 
at android.os.Parcel.writeArrayMapInternal(Parcel.java:665) 
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1330) 
at android.os.Bundle.writeToParcel(Bundle.java:1079) 
at android.os.Parcel.writeBundle(Parcel.java:690) 
at androidx.fragment.app.FragmentState.writeToParcel(FragmentState.java:167) 
at android.os.Parcel.writeTypedList(Parcel.java:1148) 
at androidx.fragment.app.FragmentManagerState.writeToParcel(FragmentManagerState.java:51) 
at android.os.Parcel.writeParcelable(Parcel.java:1416) 
at android.os.Parcel.writeValue(Parcel.java:1322) 
at android.os.Parcel.writeArrayMapInternal(Parcel.java:665) 
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1330) 
at android.os.Bundle.writeToParcel(Bundle.java:1079) 
at android.os.Parcel.writeBundle(Parcel.java:690) 
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3152) 
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3417) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Suppressed: java.lang.ClassNotFoundException: java.lang.invoke.SerializedLambda
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)
... 39 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
in my case problem was in Compile version.
probably voximplant-sdk conflicts with api 29, version downgrading solved the problem for now.

NoClassFoundError: java.util.stream.Stream

I am writing an Android app using Kotlin.
I am receiving NoClassFoundError for java.util.stream.Stream.
At no point in my app am I using that class.
It happens when I open an ad and appears to be part of the serialization process.
It does not happen on all my devices. Only on my older one (5.1.1).
It also does not happen on all the activities.
I'm guessing that it is to do with what it is trying to Serialize. However, I am not sure where to even start.
java.lang.NoClassDefFoundError: java.util.stream.Stream
at libcore.reflect.InternalNames.getClass(InternalNames.java:55)
at java.lang.Class.getDexCacheType(Class.java:479)
at java.lang.reflect.ArtMethod.getDexCacheType(ArtMethod.java:191)
at java.lang.reflect.ArtMethod.getReturnType(ArtMethod.java:145)
at java.lang.reflect.Method.getReturnType(Method.java:184)
at java.lang.Class.getDeclaredMethods(Class.java:771)
at java.io.ObjectStreamClass.computeSerialVersionUID(ObjectStreamClass.java:566)
at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:279)
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1087)
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:1055)
at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:268)
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1087)
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:1055)
at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:268)
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1087)
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:1055)
at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:268)
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1087)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1554)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:959)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:360)
at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1054)
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1384)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
at android.os.Parcel.writeSerializable(Parcel.java:1389)
at android.os.Parcel.writeValue(Parcel.java:1341)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:644)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1313)
at android.os.Bundle.writeToParcel(Bundle.java:1034)
at android.os.Parcel.writeBundle(Parcel.java:669)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:2919)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3296)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
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 "java.util.stream.Stream" on path: DexPathList[[zip file "/data/app/il.co.anykey.games.cardflip-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
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 libcore.reflect.InternalNames.getClass(InternalNames.java:53)
at java.lang.Class.getDexCacheType(Class.java:479) 
at java.lang.reflect.ArtMethod.getDexCacheType(ArtMethod.java:191) 
at java.lang.reflect.ArtMethod.getReturnType(ArtMethod.java:145) 
at java.lang.reflect.Method.getReturnType(Method.java:184) 
at java.lang.Class.getDeclaredMethods(Class.java:771) 
at java.io.ObjectStreamClass.computeSerialVersionUID(ObjectStreamClass.java:566) 
at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:279) 
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1087) 
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:1055) 
at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:268) 
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1087) 
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:1055) 
at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:268) 
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1087) 
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:1055) 
at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:268) 
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1087) 
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1554) 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497) 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461) 
at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:959) 
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:360) 
at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1054) 
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1384) 
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651) 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497) 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461) 
at android.os.Parcel.writeSerializable(Parcel.java:1389) 
at android.os.Parcel.writeValue(Parcel.java:1341) 
at android.os.Parcel.writeArrayMapInternal(Parcel.java:644) 
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1313) 
at android.os.Bundle.writeToParcel(Bundle.java:1034) 
at android.os.Parcel.writeBundle(Parcel.java:669) 
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:2919) 
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3296) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
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: java.util.stream.Stream
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)
... 45 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
As documentation says java.util.stream require API level 24 or higher. Android 5.1.1 is API 22, it doesn't have java.util.stream.Stream class.

"React Native with Android aar library" ClassNotFoundException: kotlin.LazyKt

I’m using my own Android library that done on Kotlin.
I build that library into the *.aar file and import in separate project on React Native.
The crash appears in Android React Native app when I start Service from that library, where some field initialized by lazy way.
I could not find an error similar to "Lkotlin / LazyKt" or "kotlin.LazyKt". Maybe someone faced a similar problem? I would be grateful for any tip.
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.project_mobile:sdmp, PID: 18913
java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/LazyKt;
at com.project.service.SdmService.<init>(SdmService.kt:27)
at java.lang.Class.newInstance(Native Method)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2859)
at android.app.ActivityThread.-wrap4(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.ClassNotFoundException: Didn't find class "kotlin.LazyKt" on path: DexPathList[[zip file "/data/app/com.project_mobile-2/base.apk"],nativeLibraryDirectories=[/data/app/com.project_mobile-2/lib/arm, /data/app/com.project_mobile-2/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
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 com.project.service.SdmService.<init>(SdmService.kt:27) 
at java.lang.Class.newInstance(Native Method) 
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2859) 
at android.app.ActivityThread.-wrap4(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Suppressed: java.lang.ClassNotFoundException: kotlin.LazyKt
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)
... 12 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

ClassNotFoundException exception after updating the minSdkversion to 21

Started getting this error after updating the value of minSdkVersion to 21 from 19. It occurs only on 5.0 devices, devices with OS 6+ works fine
Application has all the multidex properties included. Also as suggested by google that multidex is not require if minSdkVersion is 21 but that too does throws the similar error.
Tried cleaning the project, cache etc
Tried disabling the instant run but no luck so far.
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/agent/android/instrumentation/GsonInstrumentation;
at com.demo.app.persistence.Datastore.getMember(Datastore.java:142)
at com.demo.app.Application.initDatastore(Application.java:139)
at com.demo.app.Application.onCreate(Application.java:84)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1020)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5010)
at android.app.ActivityThread.access$1600(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1482)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5835)
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:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.newrelic.agent.android.instrumentation.GsonInstrumentation" on path: DexPathList[[zip file "/data/app/com.demo.apptracker-1/base.apk"],nativeLibraryDirectories=[/data/app/com.babycenter.pregnancytracker-1/lib/arm, /vendor/lib, /system/lib]]
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 com.demo.app.persistence.Datastore.getMember(Datastore.java:142) 
at com.demo.app.Application.initDatastore(Application.java:139) 
at com.demo.app.Application.onCreate(Application.java:84) 
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1020) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5010) 
at android.app.ActivityThread.access$1600(ActivityThread.java:172) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1482) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:145) 
at android.app.ActivityThread.main(ActivityThread.java:5835) 
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:1399) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
Suppressed: java.lang.ClassNotFoundException: com.newrelic.agent.android.instrumentation.GsonInstrumentation
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)
... 15 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

NoClassDefFoundError in random class

I have the following exception when launching my ap on API 22 and below (works very well on API 24, the target and compile API).
10-06 10:08:57.919 5014-5014/? E/UncaughtException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/ads/conversiontracking/AdWordsConversionReporter;
at com.myapp.androidapp.ui.splash.SplashActivity.onResume(SplashActivity.java:57)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1241)
at android.app.Activity.performResume(Activity.java:6019)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2940)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2982)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
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:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.ads.conversiontracking.AdWordsConversionReporter" on path: DexPathList[[zip file "/data/app/com.myapp.androidapp.preprod.debug-2/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp.androidapp.preprod.debug-2/lib/arm, /vendor/lib, /system/lib]]
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 com.myapp.androidapp.ui.splash.SplashActivity.onResume(SplashActivity.java:57) 
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1241) 
at android.app.Activity.performResume(Activity.java:6019) 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2940) 
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2982) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365) 
at android.app.ActivityThread.access$800(ActivityThread.java:144) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5221) 
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:899) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
Suppressed: java.lang.ClassNotFoundException: com.google.ads.conversiontracking.AdWordsConversionReporter
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)
... 16 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
It moves on another class if I comment the line where I use AdWordsConversionReporter (it can be library class or custom class).
Seems to be related with Multidexing but I'm pretty sure I'm using it well.
In my gradle I have this following lines :
multiDexEnabled true
and
compile('com.android.support:multidex:1.0.1') {
exclude group: 'com.android.support'
}
Here is a part of my application class:
public class MyApplication extends MultiDexApplication {
..
}
And a part of my manifest :
<application
android:name=".ui.MyApplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="#mipmap/icon"
android:label="#string/app_name"
android:theme="#style/AppTheme"
tools:replace="android:theme">
I tried a lot of solution found here on a lot of questions looking similar like adding MultiDex.install(this) on my Application class, clean my project, re-sync Gradle, enable minify on my gradle (and a lot more) but nothing works.
Any solution to resolve it ?
Works by adding
preDexLibraries false
to my gradle.

Categories

Resources