Eclipse导出apk崩溃

时间:2013-01-28 14:19:05

标签: android eclipse proguard

我需要发布我的应用程序,运行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)

8 个答案:

答案 0 :(得分:5)

有时Eclipse会被淘汰出局。 你能做什么,这通常会有所帮助:

  1. 清理项目
  2. 清除Eclipse工作台设置
  3. 如何准确地执行步骤#2取决于您的操作系统,但在Mac上它是:

    1. 转到您的工作区
    2. 打开.metadata(您需要能够看到隐藏文件夹)
    3. 打开.plugins
    4. 打开org.eclipse.e4.workbench
    5. 删除workbench.xmi
    6. 这将清除您的基本工作台设置,其中包括设置视图的内容。

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

答案 1 :(得分:2)

我通过将-keep添加到actionbarsherlock并支持库类和接口

来解决了这个问题
    -keep class android.support.v4.app.** { *; }
    -keep interface android.support.v4.app.** { *; }
    -keep class com.actionbarsherlock.** { *; }
    -keep interface com.actionbarsherlock.** { *; }

并使用-libraryjars关键字

添加相应的库jar

答案 2 :(得分:2)

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

答案 3 :(得分:1)

偶尔会发生这种情况。我建议你在将它上传到应用程序商店之前,先在真实设备上试用apk文件。

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

我相信eclipse为你运行zipalign,所以你不需要自己动手。也许尝试一下?

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

答案 6 :(得分:0)

也许你做错了zipalign,我不相信eclipse会为你做这件事。

正确的语法是

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

答案 7 :(得分:0)

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

相关问题