【问题标题】:Proguard keep breaking signed APK [closed]Proguard 不断破坏已签名的 APK [关闭]
【发布时间】:2014-05-27 07:58:03
【问题描述】:

我有一个项目,从 Eclipse 运行时运行良好,但通过签名的 APK 安装时运行良好。

这个项目使用了一些库:

  1. 拉新鲜
  2. UniversalImageLoader
  3. android 支持 v4 (JAR)
  4. gson (JAR)
  5. youtubeandroidplayerapi (JAR)

我不想让 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疯狂输出了一些东西,但是我不知道哪里出错了

请帮帮我,我刚开始proguard。提前致谢。

编辑 对不起,伙计们,我所说的“破坏”是我的列表视图只是不显示任何数据/项目......永远加载。一点也不例外。

【问题讨论】:

  • Define “当我从签名的 APK 安装项目时,项目仍在中断”。你有例外吗?如果有,什么异常?
  • 如果您希望 SO 社区为您调试问题,至少提供错误详细信息(日志、堆栈跟踪等)。就像现在一样,它的范围很广。
  • @OlegEstekhin 我曾尝试使用retrace.bat,但错误在哪里?谢谢
  • @Michael 完成,请查看我编辑的问题。完全没有例外。对不起
  • 我已经修改了答案。

标签: java android eclipse proguard


【解决方案1】:

Grouguard 保留语句

Keep 语句是一种告诉 Proguard 保留代码位的方法,即使它们不是从应用程序代码直接调用的。 MainActivity Activity 就是一个很好的例子。它不会从您的代码中调用,但您仍需要将其保留在最终包中,并且不要更改其名称。

这些是您配置的唯一 keep 语句吗?如果为真,那么您缺少一些基本的。这是一个最低限度的 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

【讨论】:

  • 谢谢。我还使用存储在我的 SDK 中的默认 proguard 配置。对于 Retrace,您的意思是使用 logcat 吗?我的 logcat 没有错误
  • GUI 回溯在哪里?
  • 图形界面:proguard.sourceforge.net/manual/gui.html
  • logcat 应该声明一个崩溃。你过滤掉什么了吗?
猜你喜欢
  • 2021-02-06
  • 2018-05-26
  • 2014-04-02
  • 2016-11-05
  • 2017-10-17
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多