一、问题现象:
一个简单的APP项目,只有一个MainActivity,启动就报错,(上个月还是正常的):
FATAL EXCEPTION: main
Process: com.just.test, PID: 6115
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.just.test/com.just.test.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.just.test.MainActivity" on path: DexPathList[[],nativeLibraryDirectories=[/data/app/com.just.test-15AVhv_y7TNl1DbG_WVbEw==/lib/arm64, /system/lib64, /system/product/lib64]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2896)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3113)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6786)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.just.test.MainActivity" on path: DexPathList[[],nativeLibraryDirectories=[/data/app/com.just.test-15AVhv_y7TNl1DbG_WVbEw==/lib/arm64, /system/lib64, /system/product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2884)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3113)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6786)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
二、排查问题
各种检查,各种搜索,包含但不限于:dex分包问题?jdk配置问题?包名问题?混淆问题?设备问题?经过九九八十一分钟分析排查,仍然没有解决。既然上个月正常,说明最近修改了什么,仔细回忆,也没有做什么特别修改,只有逐行检查各项配置(而不是根据可能的问题检查对应配置)。在经过七七四十九分钟的排查,终于找到罪魁祸首:
android:hasCode="false"
该配置是在AndroidManifest.xml里面,application标签上面,代表该项目没有代码。是前段时间做overlay测试验证时,添加了该配置,然后发现打开的项目错误了,就直接切换了到overlay项目去了,该项目忘记去掉了。坑!!!
三、总结
1.项目添加git,并且及时提交,可以快速追溯修改(虽然这个项目只是练习demo);
2.不要随便修改代码,即使只是个demo,最后坑自己;
3.老了,记忆严重下降,无解。