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 引發的翻車😭