我需要发布我的应用程序,我运行Eclipse导出向导并导出带有自签名证书的签名apk,我也运行了zipalign工具 . 问题是,当在设备上安装并运行它时,它会直接崩溃,虽然我可以直接从eclipse运行应用程序而没有任何问题 . 这会与proguard配置或其他什么有关吗?!
Update: 问题来自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)
8 回答
删除proguard优化 . 不要使用zipalign . 测试导出的包 . 如果它工作 - 很好,重新检查zipalign / proguard参数,如果没有 - 检查别的东西)
有时Eclipse会被淘汰出局 . 你可以做什么,这通常有助于:
清理您的项目
清除Eclipse工作台设置
如何准确地执行步骤#2取决于您的操作系统,但在Mac上它是:
转到您的工作区
打开.metadata(您需要能够看到隐藏文件夹)
打开.plugins
打开org.eclipse.e4.workbench
删除workbench.xmi
这将清除您的基本工作台设置,其中包括您的视图设置 .
在重新执行工作台设置之前,请尝试打包您的应用 . 通常适合我 .
我通过将-keep添加到actionbarsherlock并支持库类和接口来解决了这个问题
并通过使用-libraryjars关键字添加相应的库jar
使用最新的https://github.com/JakeWharton/ActionBarSherlock build在ADT 21.x上没有任何问题
这偶尔会发生在日食中 . 我建议你在将它上传到app商店之前,先在真实设备上试用apk文件 .
通过清理项目然后再次导出它来解决问题 .
生成签名的apk时,必须排除任何外部jar文件和库,如下所示
我相信eclipse为你运行zipalign,所以你不需要自己动手 . 也许尝试一下?
是的,从eclipse运行是在调试,proguard被忽略 . 导出将是一个发布版本,如果在project.properties中配置了proguard,它可能会生效 .
也许你做错了zipalign,我不相信eclipse会为你做这件事 .
正确的语法是