我有一个项目,当从eclipse运行时工作正常,但不是通过签名APK安装。
这个项目使用了一些库:
我不希望proguard触及任何这些库,所以我在proguard-project.txt中使用它:
-libraryjars libs
-keep class com.handmark.pulltorefresh.library.** { *; }
-keep interface com.handmark.pulltorefresh.library.** { *; }
-keep class com.nostra13.universalimageloader.** { *; }
-keep interface com.nostra13.universalimageloader.** { *; }
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class com.google.** { *; }
-keep interface com.google.** { *; }
这是我的project.properties
:
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
那些proguard代码正在运行,因为我添加它们后生成的APK有更大的尺寸。但是,当我从已签名的APK安装它时,该项目仍在破坏。
我试图通过这样做找到最新消息:
retrace.bat -verbose mapping.txt dump.txt
在那之后,我的cmd
疯狂输出一些东西,但我不知道错误在哪里。
请帮助我,我刚刚开始学习。提前谢谢。
修改 对不起伙计们,我的意思是“打破”是我的listview只是不显示任何数据/项目...永远加载。没有例外。
答案 0 :(得分:2)
Keep语句是一种告诉Proguard保留代码的方法,即使它们不是直接从应用程序代码中调用的。一个很好的例子是MainActivity Activity
。它不会从您的代码中调用,但您仍需要将其保留在最终包中,也不要更改其名称。
这些是您配置的唯一保留语句吗?如果是真的,你会错过一些基本的。以下是最小Android配置的基本示例(第7部分):http://proguard.sourceforge.net/index.html#manual/examples.html
Retrace是一种重建堆栈跟踪的方法。
首先,我们需要崩溃时的堆栈跟踪。在设备/模拟器上运行APK并获取崩溃异常和堆栈跟踪。它应该看起来像:a.b.m.a()中的NullPointerException。 使用GUI回溯(它更容易使用)来获得实际的堆栈跟踪,然后您可以转到原始代码并尝试调试崩溃。
Proguard打破流量的一个常见原因是Proguard需要通知反思。例如 - 布局XML中的方法调用是通过反射完成的,但由于代码本身没有调用,Proguard不知道它是否保留了相关的方法。
有关此主题的更多信息,请参阅此问题:Android, ProGuard, and keepclasseswithmembernames
如果您想排除反射问题,我建议您首先禁用Proguard代码缩小:http://proguard.sourceforge.net/index.html#FAQ.html。