Android Eclipse导出apk崩溃

Android Eclipse导出apk崩溃,android,eclipse,proguard,Android,Eclipse,Proguard,我需要发布我的应用程序,我运行了Eclipse导出向导并导出了带有自签名证书的签名apk,我还运行了zipalign工具。问题是,当在设备上安装并运行这个包时,它会直接崩溃,尽管我可以直接从eclipse运行应用程序而没有问题。 这与proguard配置或其他任何东西有关吗 更新:问题来自proguard配置文件,这是异常的堆栈跟踪: 01-28 17:49:03.510: E/AndroidRuntime(14897): FATAL EXCEPTION: main 01-28

我需要发布我的应用程序,我运行了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)
01-2817:49:03.510:E/AndroidRuntime(14897):致命异常:main
01-28 17:49:03.510:E/AndroidRuntime(14897):java.lang.ExceptionInInitializeError
01-28 17:49:03.510:E/AndroidRuntime(14897):在com.actionbarsherlock.app.SherlockActivity.c(未知来源)
01-28 17:49:03.510:E/AndroidRuntime(14897):位于com.actionbarsherlock.app.SherlockActivity.onPostCreate(未知来源)
01-28 17:49:03.510:E/AndroidRuntime(14897):在android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1115)上
01-28 17:49:03.510:E/AndroidRuntime(14897):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1950)上
01-28 17:49:03.510:E/AndroidRuntime(14897):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
01-28 17:49:03.510:E/AndroidRuntime(14897):在android.app.ActivityThread.access$600(ActivityThread.java:127)
01-28 17:49:03.510:E/AndroidRuntime(14897):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
01-28 17:49:03.510:E/AndroidRuntime(14897):在android.os.Handler.dispatchMessage(Handler.java:99)上
01-28 17:49:03.510:E/AndroidRuntime(14897):在android.os.Looper.loop(Looper.java:137)上
01-28 17:49:03.510:E/AndroidRuntime(14897):位于android.app.ActivityThread.main(ActivityThread.java:4511)
01-28 17:49:03.510:E/AndroidRuntime(14897):位于java.lang.reflect.Method.Invokenactive(本机方法)
01-28 17:49:03.510:E/AndroidRuntime(14897):位于java.lang.reflect.Method.invoke(Method.java:511)
01-28 17:49:03.510:E/AndroidRuntime(14897):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
01-28 17:49:03.510:E/AndroidRuntime(14897):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
01-28 17:49:03.510:E/AndroidRuntime(14897):在dalvik.system.NativeStart.main(本机方法)
01-28 17:49:03.510:E/AndroidRuntime(14897):由以下原因引起:java.lang.IllegalArgumentException:类a未使用@Implementation注释
01-28 17:49:03.510:E/AndroidRuntime(14897):在com.actionbarsherlock.a.a(未知来源)
01-28 17:49:03.510:E/AndroidRuntime(14897):在com.actionbarsherlock.a.(未知来源)

我相信eclipse会为您运行zipalign,所以您不需要自己去做。也许试试看


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

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

正确的语法是

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

有时Eclipse会被窃听出来。 您可以做什么,这通常有助于:

  • 清理你的项目
  • 清除Eclipse工作台设置
  • 如何准确执行步骤2取决于您的操作系统,但在Mac上则是:

  • 转到您的工作区
  • Open.metadata(您需要能够看到此文件的隐藏文件夹)
  • 打开插件
  • 打开org.eclipse.e4.workbench
  • 删除workbench.xmi
  • 这将清除基本的工作台设置,其中包括视图设置

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

    删除proguard优化。不要使用zipalign。测试导出的包。如果工作正常,请重新检查zipalign/proguard参数,如果没有,请检查其他参数)

    我通过添加-keep-to-actionbarsherlock和support库类和接口解决了这个问题

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

    通过使用-libraryjars关键字添加相应的库jar,在ADT 21.x上使用最新版本fine,不会出现任何问题,eclipse偶尔会出现这种情况。我建议你在将apk文件上传到应用商店之前,一定要在真实设备上试用


    这个问题可以通过清理项目然后再次导出来解决。

    在生成已签名的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.** { *; }
    

    你能发布stacktrace吗?@Royi我刚刚发布了stacktrace虽然stack trace也很有用,但我知道它很旧,但是你能添加你指定的
    -libraryjars
    吗?很好的建议,谢谢。遗憾的是,这并不是更可靠,因为我曾经自信地发布非正式的sprint演示版本,而不使用mail apk来自行卸载旧的安装新的并运行烟雾测试步骤。@WilliamT.Mallard我曾经将应用程序上载到我的服务器。在Bluestack上下载并安装它。。。幸运的是,我找到了一个更好的选择——Geanymotion。您可以在模拟器上拖放apk。过来看。