gpt4 book ai didi

java - Proguard 不断破坏签名的 APK

转载 作者:行者123 更新时间:2023-12-02 05:47:48 25 4
gpt4 key购买 nike

我有一个项目,从 eclipse 运行时工作正常,但通过签名的 APK 安装时工作不正常。

该项目使用一些库:

  1. 拉刷新
  2. 通用图像加载器
  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疯狂输出一些东西,但我不知道错误在哪里

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

编辑抱歉,我的意思是“破坏”是我的 ListView 只是不显示任何数据/项目......永远加载。一点也不异常(exception)。

最佳答案

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 retrace(更容易使用)来获取实际的堆栈跟踪,然后您可以转到原始代码并尝试调试崩溃。

反射和 Proguard

流被 Proguard 破坏的一个常见原因是 Proguard 需要收到反射通知。例如 - 布局 XML 的方法调用是通过反射完成的,但由于代码本身没有调用,Proguard 不知道它具有保留相关方法。

请参阅此问题以获取有关该主题的更多信息:Android, ProGuard, and keepclasseswithmembernames

如果您想排除反射问题,我建议您首先禁用 Proguard 代码收缩: http://proguard.sourceforge.net/index.html#FAQ.html .

关于java - Proguard 不断破坏签名的 APK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23883978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com