2020-05-14 15:55:49.560 16983-16983/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: chat.yee.android, PID: 16983
java.lang.RuntimeException: Unable to instantiate application chat.yee.android.base.CCApplication: java.lang.ClassNotFoundException: Didn't find class "chat.yee.android.base.CCApplication" on path: DexPathList[[zip file "/data/app/chat.yee.android-BlBBBkg9WqZ9dn-uMPftsg==/base.apk"],nativeLibraryDirectories=[/data/app/chat.yee.android-BlBBBkg9WqZ9dn-uMPftsg==/lib/arm64, /data/app/chat.yee.android-BlBBBkg9WqZ9dn-uMPftsg==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
at android.app.LoadedApk.makeApplication(LoadedApk.java:979)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6036)
at android.app.ActivityThread.-wrap1(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1764)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6942)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.ClassNotFoundException: Didn't find class "chat.yee.android.base.CCApplication" on path: DexPathList[[zip file "/data/app/chat.yee.android-BlBBBkg9WqZ9dn-uMPftsg==/base.apk"],nativeLibraryDirectories=[/data/app/chat.yee.android-BlBBBkg9WqZ9dn-uMPftsg==/lib/arm64, /data/app/chat.yee.android-BlBBBkg9WqZ9dn-uMPftsg==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.Instrumentation.newApplication(Instrumentation.java:1094)
at android.app.LoadedApk.makeApplication(LoadedApk.java:973)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6036)
at android.app.ActivityThread.-wrap1(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1764)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6942)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
遇到了一个神坑,坑了一天 ,特此记录下
遇到这个坑 各种Google:java.lang.RuntimeException: Unable to instantiate application
网上各种说法都有,各种尝试都测试了 其中一种解释有些道理 就是说项目 分包错误 应该使用multidex,但是项目中也确实使用了multidex,全部都配置好了,而且还升级到了最新版本 感觉怀疑人生了。
既然网上的方法不行,就从自身代码找问题,仔细排查代码,发现切换到老版本可以,新的版本不行,那就逐渐缩小排查范围,最后竟然发现是一个自定义注解的问题,之前发现一个自定义注解存在崩溃的情况,于是乎加了一个Try catch,正是这个小小的Try Catch 造成整个项目组delay了一天
之前Work 的情况:
package chat.yee.android.mvp.widget.annotation; import android.view.View; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import java.lang.reflect.Method; @Aspect public class SingleClickAspect { private static final long DEFAULT_TIME_INTERVAL = 5000; /** * 定义切点,标记切点为所有被@SingleClick注解的方法 * 注意:这里me.baron.test.annotation.SingleClick需要替换成 * 你自己项目中SingleClick这个类的全路径哦 */ @Pointcut("execution(@chat.yee.android.mvp.widget.annotation.SingleClick * *(..))") public void methodAnnotated() {} /** * 定义一个切面方法,包裹切点方法 */ @Around("methodAnnotated()") public void aroundJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable { // 取出方法的参数 View view = null; for (Object arg : joinPoint.getArgs()) { if (arg instanceof View) { view = (View) arg; break; } } if (view == null) { return; } // 取出方法的注解 MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); Method method = methodSignature.getMethod(); if (!method.isAnnotationPresent(SingleClick.class)) { return; } SingleClick singleClick = method.getAnnotation(SingleClick.class); // 判断是否快速点击 if (!XClickUtil.isFastDoubleClick(view, singleClick.value())) { // 不是快速点击,执行原方法 joinPoint.proceed(); } } }
出问题后的代码:
package chat.yee.android.mvp.widget.annotation; import android.view.View; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import java.lang.reflect.Method; @Aspect public class SingleClickAspect { private static final long DEFAULT_TIME_INTERVAL = 5000; /** * 定义切点,标记切点为所有被@SingleClick注解的方法 * 你自己项目中SingleClick这个类的全路径哦 */ @Pointcut("execution(@chat.yee.android.mvp.widget.annotation.SingleClick * *(..))") public void methodAnnotated() {} /** * 定义一个切面方法,包裹切点方法 */ @Around("methodAnnotated()") public void aroundJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable { // 取出方法的参数 try { View view = null; for (Object arg : joinPoint.getArgs()) { if (arg instanceof View) { view = (View) arg; break; } } if (view == null) { return; } // 取出方法的注解 MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); Method method = methodSignature.getMethod(); if (method == null) { return; } if (!method.isAnnotationPresent(SingleClick.class)) { return; } SingleClick singleClick = method.getAnnotation(SingleClick.class); // 判断是否快速点击 if (!XClickUtil.isFastDoubleClick(view, singleClick.value())) { // 不是快速点击,执行原方法 joinPoint.proceed(); } } catch (Throwable throwable) { throwable.printStackTrace(); } } }
一个Try Catch 引发的翻车😭