【发布时间】:2014-01-07 17:52:34
【问题描述】:
更新 ADT 到 22.3 后,有时可以对 APK 进行签名,但在测试时会抛出 ClassNotFoundException,如下所示(似乎总是影响扩展 Application 的类):
12-19 16:32:04.374: E/AndroidRuntime(25074): FATAL EXCEPTION: main
12-19 16:32:04.374: E/AndroidRuntime(25074): java.lang.RuntimeException: Unable to instantiate application com.innostreams.vieshow.ApplicationSettings: java.lang.ClassNotFoundException: com.innostreams.vieshow.ApplicationSettings
12-19 16:32:04.374: E/AndroidRuntime(25074): at android.app.LoadedApk.makeApplication(LoadedApk.java:501)
12-19 16:32:04.374: E/AndroidRuntime(25074): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4201)
12-19 16:32:04.374: E/AndroidRuntime(25074): at android.app.ActivityThread.access$1300(ActivityThread.java:140)
12-19 16:32:04.374: E/AndroidRuntime(25074): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1287)
12-19 16:32:04.374: E/AndroidRuntime(25074): at android.os.Handler.dispatchMessage(Handler.java:99)
12-19 16:32:04.374: E/AndroidRuntime(25074): at android.os.Looper.loop(Looper.java:137)
12-19 16:32:04.374: E/AndroidRuntime(25074): at android.app.ActivityThread.main(ActivityThread.java:4898)
12-19 16:32:04.374: E/AndroidRuntime(25074): at java.lang.reflect.Method.invokeNative(Native Method)
12-19 16:32:04.374: E/AndroidRuntime(25074): at java.lang.reflect.Method.invoke(Method.java:511)
12-19 16:32:04.374: E/AndroidRuntime(25074): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
12-19 16:32:04.374: E/AndroidRuntime(25074): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
12-19 16:32:04.374: E/AndroidRuntime(25074): at dalvik.system.NativeStart.main(Native Method)
12-19 16:32:04.374: E/AndroidRuntime(25074): Caused by: java.lang.ClassNotFoundException: com.innostreams.vieshow.ApplicationSettings
12-19 16:32:04.374: E/AndroidRuntime(25074): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
12-19 16:32:04.374: E/AndroidRuntime(25074): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
12-19 16:32:04.374: E/AndroidRuntime(25074): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
12-19 16:32:04.374: E/AndroidRuntime(25074): at android.app.Instrumentation.newApplication(Instrumentation.java:971)
12-19 16:32:04.374: E/AndroidRuntime(25074): at android.app.LoadedApk.makeApplication(LoadedApk.java:496)
12-19 16:32:04.374: E/AndroidRuntime(25074): ... 11 more
遇到这种情况时,生成另一个签名的 APK 通常可以解决问题,然后可以安装 APK 并运行而不会出现问题。两个签名的 APK 构建之间没有代码更改,项目不需要清理,创建“正确”签名 APK 所需要的只是导出签名的 APK(右键单击项目->Android 工具->导出签名应用程序包...),因此这不是代码或项目设置的问题。我想知道的是:
- 为什么会这样
- 如何一劳永逸地修复它
编辑:请注意,当安装并运行“未签名”(也就是使用调试证书签名)版本时,应用程序永远不会遇到上述问题。
【问题讨论】:
-
你在使用任何jar文件吗?
-
这可能有多种原因。尝试此线程中描述的解决方案:stackoverflow.com/questions/3781151/…
-
你的Activity名称是“ApplicationSettings”吗?
-
@AmitGupta 是的,它使用了一些 jar 库
-
尝试更改您的活动名称,看看会发生什么。
标签: android eclipse adt apk eclipse-adt