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 引发的翻车????