我正在处理的应用程序显示出一种奇怪的症状-如果清理应用程序的数据和缓存,则该应用程序将在第一次下一次运行时崩溃,但是在第二次运行时它将正常运行。是否有人知道会发生什么情况以及如何解决它。
我已经做了:
可悲的是没有帮助...
我正在使用最新的Android Studio 3.2.1。编译和目标SDK为28,最小为21。该应用程序用Kotlin编写。支持库为28.0.0,构建工具为28.0.3。
第一次运行时抛出的异常(更改应用程序名称以保护无辜者):
2018-11-26 18:18:38.780 17135-17135/com.myapp.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.myapp.app, PID: 17135
java.lang.RuntimeException: Unable to instantiate service service.ServerNotificationService: java.lang.ClassNotFoundException: Didn't find class "service.ServerNotificationService" on path: DexPathList[[zip file "/data/app/com.myapp.app-YIEEjJIdfXs58PSDfpg4Ew==/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp.app-YIEEjJIdfXs58PSDfpg4Ew==/lib/arm64, /data/app/com.myapp.app-YIEEjJIdfXs58PSDfpg4Ew==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3459)
at android.app.ActivityThread.-wrap4(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1702)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6710)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)
Caused by: java.lang.ClassNotFoundException: Didn't find class "service.ServerNotificationService" on path: DexPathList[[zip file "/data/app/com.myapp.app-YIEEjJIdfXs58PSDfpg4Ew==/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp.app-YIEEjJIdfXs58PSDfpg4Ew==/lib/arm64, /data/app/com.myapp.app-YIEEjJIdfXs58PSDfpg4Ew==/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.ActivityThread.handleCreateService(ActivityThread.java:3456)
at android.app.ActivityThread.-wrap4(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1702)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6710)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)
答案 0 :(得分:0)
所以我设法修复了它。这与Android工具如何合并 AndroidManifest.xml 文件有关。
让我解释一下(后代):
我正在构建的应用程序由一个核心组成-它是一个android库和实际的应用程序。类 service.ServerNotificationService 是该库的一部分,并在该库的 AndroidManifest.xml 中声明为:
<service android:name="service.ServerNotificationService" />
这是正确的,并且该应用程序将运行-只是不使用干净的缓存(我仍然不了解这部分,但是我认为它与黑魔法有关,即Android ART)。为了解决该问题,我将行更改为:
<service android:name="com.myapp.app.core.service.ServerNotificationService" />
该类的全名。此处吸取的教训是始终在库中使用完整的类名...