【问题标题】:Eclipse exported apk crashingEclipse 导出的 apk 崩溃
【发布时间】:2013-01-28 14:19:04
【问题描述】:

我需要发布我的应用程序,我运行了 Eclipse 导出向导并导出了一个带有自签名证书的签名 apk,我还运行了 zipalign 工具。问题是在设备上安装这个包并运行它时,它直接崩溃,虽然我可以直接从 eclipse 运行应用程序没有问题。 这与 proguard 配置或其他任何东西有关吗?!

更新:问题出在proguard配置文件,这是异常的堆栈跟踪:

    01-28 17:49:03.510: E/AndroidRuntime(14897): FATAL EXCEPTION: main
    01-28 17:49:03.510: E/AndroidRuntime(14897): java.lang.ExceptionInInitializerError
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at com.actionbarsherlock.app.SherlockActivity.c(Unknown Source)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at com.actionbarsherlock.app.SherlockActivity.onPostCreate(Unknown Source)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1115)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1950)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at android.app.ActivityThread.access$600(ActivityThread.java:127)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at android.os.Handler.dispatchMessage(Handler.java:99)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at android.os.Looper.loop(Looper.java:137)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at android.app.ActivityThread.main(ActivityThread.java:4511)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at java.lang.reflect.Method.invokeNative(Native Method)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at java.lang.reflect.Method.invoke(Method.java:511)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at dalvik.system.NativeStart.main(Native Method)
    01-28 17:49:03.510: E/AndroidRuntime(14897): Caused by: java.lang.IllegalArgumentException: Class a is not annotated with @Implementation
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at com.actionbarsherlock.a.a(Unknown Source)
    01-28 17:49:03.510: E/AndroidRuntime(14897):    at com.actionbarsherlock.a.<clinit>(Unknown Source)

【问题讨论】:

  • 你能发布堆栈跟踪吗?
  • @Royi 我刚刚发布了堆栈跟踪

标签: android eclipse proguard


【解决方案1】:

有时 Eclipse 会被窃听。 您可以做什么,通常会有所帮助:

  1. 清理您的项目
  2. 清除 Eclipse 工作台设置

如何准确执行步骤 #2 取决于您的操作系统,但在 Mac 上是:

  1. 转到您的工作区
  2. 打开 .metadata(您需要能够看到隐藏文件夹)
  3. 打开 .plugins
  4. 打开 org.eclipse.e4.workbench
  5. 删除workbench.xmi

这将清除您的基本工作台设置,其中包括您的视图设置。

在重新进行工作台设置之前,尝试打包您的应用。 通常对我有用。

【讨论】:

    【解决方案2】:

    我通过将 -keep 添加到 actionbarsherlock 并支持库类和接口解决了这个问题

        -keep class android.support.v4.app.** { *; }
        -keep interface android.support.v4.app.** { *; }
        -keep class com.actionbarsherlock.** { *; }
        -keep interface com.actionbarsherlock.** { *; }
    

    并通过使用 -libraryjars 关键字添加相应的库 jars

    【讨论】:

    • 我知道这是旧的,但你能添加你指定的 -libraryjars 吗?
    【解决方案3】:

    使用来自 https://github.com/JakeWharton/ActionBarSherlock 的最新版本在 ADT 21.x 上构建良好,没有任何问题

    【讨论】:

      【解决方案4】:

      这偶尔会发生在 Eclipse 中。我建议您在将其上传到应用商店之前,始终在真实设备上试用 apk 文件。

      通过清理项目然后再次导出它来解决问题。

      【讨论】:

      • 好建议,谢谢。可惜它不是更可靠,因为我曾经有信心在没有 mail-apk-to-self-deinstall-old-install-new-and-run-smoke-test 步骤的情况下发布非正式的 sprint 演示版本。
      • @WilliamT.Mallard 我曾经将应用程序上传到我的服务器。在 bluestacks 上下载并安装它......幸运的是,我找到了一个更好的选择 - Geanymotion。您可以将 apk 拖放到模拟器上。看看吧。
      【解决方案5】:

      生成签名的apk时,必须排除任何外部jar文件和库 如下所示

      -libraryjars libs
      
      # The official support library.
      -keep class android.support.v4.app.** { *; }
      -keep interface android.support.v4.app.** { *; }
      
      # Library JARs.
      -keep class de.greenrobot.dao.** { *; }
      -keep interface de.greenrobot.dao.** { *; }
      -keep class org.joda.** { *; }
      -keep interface org.joda.** { *; }
      -keep class com.loopj.android.http.** { *; }
      -keep interface com.loopj.android.http.** { *; }
      
      # Library projects. 
      -keep class com.actionbarsherlock.** { *; }
      -keep interface com.actionbarsherlock.** { *; }
      -keep class com.viewpagerindicator.** { *; }
      -keep interface com.viewpagerindicator.** { *; }
      

      【讨论】:

        【解决方案6】:

        我相信 eclipse 会为你运行 zipalign,所以你不需要自己做。或许可以试试?

        是的,从 eclipse 运行处于调试状态,proguard 被忽略。导出将是一个发布版本,如果在 project.properties 中配置了 proguard,它可能会生效。

        【讨论】:

          【解决方案7】:

          也许你的 zipalign 不正确,我不相信 eclipse 会为你这样做。

          正确的语法是

          zipalign -v 4 /location/to/eclipse/exported/apk /location/of/where/to/output/aligned/apk
          

          【讨论】:

          • 虽然堆栈跟踪也很有用
          【解决方案8】:

          删除 proguard 优化。不要使用 zipalign。测试导出的包。如果它工作 - 很好,重新检查 zipalign/proguard 参数,如果没有 - 检查其他东西)

          【讨论】:

            猜你喜欢
            • 2012-07-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-06-17
            • 1970-01-01
            • 1970-01-01
            • 2013-11-17
            相关资源
            最近更新 更多