签名APK有时会工作,其他时间则不会

时间:2013-12-19 08:47:06

标签: android eclipse adt apk eclipse-adt

将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( righ click项目 - > Android工具 - >导出已签名的应用程序包... ),所以这不是代码的问题也不是项目设置。我想知道的是:

  1. 为什么会这样?
  2. 如何一劳永逸地修复
  3. 修改:请注意,当" unsigned"时,应用永远不会遇到上述问题(也称为使用调试证书签名)版本已安装并运行。

1 个答案:

答案 0 :(得分:0)

如果您正在使用库项目和jar文件,请尝试以下方法:

从项目中删除所有jar文件和库项目,然后添加它们并在每次要创建签名的apk时构建项目。

我有一个类似的问题,它对我有用。