2012-07-18 153 views
0

我的Android应用程序是Cool阅读器的自定义版本。当我从eclipse运行应用程序或在手机上调试应用程序时,它运行良好。但是当我签署它时,将其导出,安装并从我的手机运行它会崩溃。Android应用程序导出时崩溃

在logcat中,我看到应用程序崩溃之前的情况如下:

07-17 21:40:40.371: D/Zygote(1218): Process 3136 terminated by signal (11) 
07-17 21:40:40.371: E/InputDispatcher(1331): channel '40b7d8a8 com.myCustomApp/org.coolreader.CoolReader (server)' ~ Consumer closed input channel or an error occurred. events=0x8 
07-17 21:40:40.371: E/InputDispatcher(1331): channel '40b7d8a8 com.myCustomApp/org.coolreader.CoolReader (server)' ~ Channel is unrecoverably broken and will be disposed! 
07-17 21:40:40.451: D/dalvikvm(1331): GC_FOR_MALLOC freed 758K, 35% free 9419K/14279K, external 2060K/2410K, paused 85ms 
07-17 21:40:40.451: I/WindowManager(1331): WIN DEATH: Window{40b7d8a8 com.myCustomApp/org.coolreader.CoolReader paused=false} 
07-17 21:40:40.451: I/ActivityManager(1331): Process com.myCustomApp (pid 3136) has died. 
07-17 21:40:40.471: E/ActivityManager(1331): fail to set top app changed! 

更新: 如果你不知道有关CoolReader(开源项目中,我使用),它JNI代码,有proGuard配置,并使用ndk。它也有普通的Java代码。我对jni/ndk或任何低级c \ C++代码没有太多的经验,所以我不确定我在那里可以做什么。

但最重要的是,它从eclipse运行时工作正常,但导出的版本自行关闭。

+0

该应用程序会产生大量的日志消息。如果你想要所有的消息,我可以提供。非常感谢! – harsimranb 2012-07-18 04:47:17

+1

有几个问题:关于缺少权限的日志消息中的任何内容?你使用任何JNI代码?如果它在调试模式下在手机上工作,但不在导出后,我还会怀疑ProGuard配置问题。您是否启用了ProGuard?如果是这样,作为测试,请尝试关闭并导出。 – 2012-07-18 04:56:05

+0

我已更新问题回答你的问题。没有权限相关的消息,如果有的话,我不认为它会从eclipse运行。我会考虑关闭ProGuard配置(不知道它是什么,所以将做一些研究) – harsimranb 2012-07-18 14:17:04

回答

5

由于去除ProGuard的清除了碰撞,有两种选择:

  1. 禁用的ProGuard
  2. 告诉ProGuard保持类/方法/变量,它(错误地)排除。

一件事是尝试以下规则添加到您的ProGuard配置:

-keepclasseswithmembers class * { 
    native <methods>; 
} 

这将告诉ProGuard保留任何具有本地代码。如果问题在于ProGuard正在删除不会从Java调用的本地方法,则应该解决该问题。

另一个问题可能是ProGuard正在移除仅由本机代码调用的Java回调方法。你可以把所有这些首先命名它们都使用一个标准的命名模式(例如,<something>Callback),然后将这样的规则:如果问题类变量被删除

-keepclasseswithmembers class * { 
    *** *Callback(...); 
} 

,你必须明确地列举那些:

-keep class com.example.MyClass { 
    *** aFieldName; 
} 

您可能能够找到什么ProGuard的可能是通过检查在运行时是ProGuard的生成usage.txt文件错误地删除其他线索。

+0

我会试一次3我回到家,并让你知道:) – harsimranb 2012-07-18 20:49:11