【问题标题】:Signed APK sometimes work, other times doesn't签名的 APK 有时有效,有时无效
【发布时间】: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 工具->导出签名应用程序包...),因此这不是代码或项目设置的问题。我想知道的是:

  1. 为什么会这样
  2. 如何一劳永逸地修复它

编辑:请注意,当安装并运行“未签名”(也就是使用调试证书签名)版本时,应用程序永远不会遇到上述问题。

【问题讨论】:

  • 你在使用任何jar文件吗?
  • 这可能有多种原因。尝试此线程中描述的解决方案:stackoverflow.com/questions/3781151/…
  • 你的Activity名称是“ApplicationSettings”吗?
  • @AmitGupta 是的,它使用了一些 jar 库
  • 尝试更改您的活动名称,看看会发生什么。

标签: android eclipse adt apk eclipse-adt


【解决方案1】:

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

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

我遇到了类似的问题,它对我有用。

【讨论】:

  • 这样做所花费的时间与重新生成签名的 APK 和测试所花费的时间大致相同,我想知道一些可以永久解决问题的修复(如果存在这样的修复)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-19
  • 2015-02-11
  • 2012-08-02
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多