问题标签 [proguard]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
22826 浏览

android - Android Proguard 跳过外部 jar

我尝试在我的 Android 项目中使用 Proguard,我使用命令行“android update project /path/to/project”设置 Proguard,并在项目的根目录中创建了文件 proguard.cfg。(在我的带有 Android 2.3 sdk 的 Eclipse 中,当创建一个新项目时,proguard.cfg 文件不会自动创建,所以我必须使用命令行手动添加它)。

当我导出项目时,出现以下错误

这些错误消息指向我项目中使用的四个外部 jar

(.classpath)

这是我的 proguard.cfg 文件

我通过添加“-libraryjars”选项尝试了一些在网上找到的解决方案,例如:

但这无济于事。

有什么解决办法吗?

0 投票
3 回答
8146 浏览

java - jar 文件的 Proguard 问题,如何找到丢失的 jar?

当我尝试使用 Proguard 导出我的 apk 时,出现很多错误(超过 400 个),类似于:

我正在使用Jackson Json 库,错误似乎与此有关。

研究这个错误,我从Proguards FAQ中发现了以下内容:

如果存在对类或接口的未解析引用,您很可能忘记指定基本库。为了正确处理,必须指定代码引用的所有库,包括 Java 运行时库。要指定库,请使用 -libraryjars 选项。

在 SO 上搜索我发现了很多与此相关的未回答问题,但一般意义上是我使用的 jar 文件(在本例中为 Jackon JSON)依赖于更多库,需要将它们添加到 Proguard 的配置文件中如何。

但是,我不知道如何确定需要哪些罐子以及它们在哪里。警告中提到了很多不同的包,例如 javax.ws.rs.ext、org.joda.time、org.codehaus.stax2、javax.xml.stream 等。

  1. 我如何确定哪些 jar 包含这些包?例如,javax.ws.rs.ext.** 类需要什么 jar?
  2. 我如何确定这些罐子在哪里以及 Proguard 中的 -libraryjars 将使用什么路径?

非常感谢


编辑: 我还应该提到我正在使用Android Library Project设置。jar 位于主 Library 项目中,实际工作项目具有其构建路径,包括 Library 项目中的 jar。不知道这是否有区别,但我想我应该提一下。


更新 只是为了测试,我从构建路径和我的代码中完全删除了杰克逊,现在 Proguard 成功完成。问题仍然存在......处理这些错误的正确方法是什么?

Eclipse 中的 Android 导出向导是否会自动将 /lib/ jar 添加到 proguard 中,还是必须手动将它们添加到 proguard 配置文件中,如下所示:

我确实为杰克逊一号尝试过,但没有任何区别。这是否意味着我还必须找到警告中提到的类所需的所有 jar 并添加它们?它们会在 sdk 中还是在 java 安装中?

对不起,如果这些是愚蠢的问题,但在过去的几个小时里我一直在试图解决这个问题,但不知道该怎么做。

再次感谢


再次更新

于是再多搜索,结合Benjamin的建议,我发现有些缺失的类在rt.jar中,在jdk的lib文件夹中。所以我最终添加了

到 proguard.cfg 文件,并将警告从 485 降低到 204。嘿,我想这是……其余的警告描述了我根本找不到的类。该应用程序在不运行 proguard 的情况下运行良好,所以这些类必须在某个地方吗?还是我应该使用这些警告-dontwarn

其余的类在这些包中:

所以现在我只需要一种方法来弄清楚:

  1. 什么罐子有这些类
  2. 这些罐子在哪里,所以我可以将它们包含在 proguard 配置文件中
0 投票
2 回答
1957 浏览

java - ProGuard 破坏 Java 应用程序 - 没有文本,没有图像

我正在尝试使用ProGuard来混淆 Java 应用程序。我遇到了一个问题,我的所有文本和图像都从 GUI (Swing) 表单中消失了。我尝试禁用优化并包含更多库,但似乎没有任何效果。

我用反编译器检查了混淆器生成的输出,我的资源路径似乎仍然正确。

  1. 我是否需要在 jre/lib/rt.jar 之外包含更多核心 Java 库?
  2. 我应该禁用更多设置吗?
  3. ...其他建议?

谢谢。

0 投票
2 回答
1352 浏览

java - 如何将日志记录添加到被 Proguard 剥离的 Android Java 应用程序?

我在应用程序中添加了大量的日志记录以简化调试,但我想确保只有最少的日志进入生产应用程序。我的理解是编译器不会删除未使用的代码,Android 没有条件编译,但 Proguard 会删除未使用的代码。这是一个示例跟踪类:

然后在应用程序本身中记录如下:

这会成功让 Proguard 识别未使用的语句并删除它们吗?这句话很丑陋,但它是我能看到的最短的。

是否有更简洁的方法来包括登录 Android 应用程序,但是否会自动将其剥离以用于生产构建?我怀疑可以配置 Proguard 本身以删除代码的特定方面,但不确定这是否是比这更好的解决方案。

0 投票
1 回答
424 浏览

jar - 如何防止proguard重新打包injars?

给出以下参数时,

proguard 会将处理后的 a.jar 和 b.jar 生成到 C:\Temp 中。非常聪明,但有时没有必要。有没有办法禁用 proguard 打包 *.jar 并将实际类复制到 C:\Temp?

0 投票
2 回答
5052 浏览

android - 带有方法签名的 Proguard 错误

在尝试制作我的 Android 应用程序的 Proguard 版本时,我遇到了一个奇怪的错误。错误是:

方法“setGpsLocation”具有以下签名:

我最终摆脱了错误,通过将方法更改为:

并且错误消失了。虽然这让我过去了,但我不明白第一个方法签名有什么问题。我的 proguard.cfg 有 -optimizationpasses 2。如果我将此值增加到 3 或更多,我开始在其他代码区域看到类似的错误。如果我使用 3,会发生以下情况:

我很难找到有关此错误可能意味着什么的信息。

有没有其他人见过类似的东西?

更新

虽然更改签名似乎可以解决问题,但我遇到了运行时崩溃:

我开始阅读更多的 Proguard 手册,发现通过添加 -dontoptimize,构建时错误和运行时崩溃消失了。有点违背了使用 Proguard 的目的,不是吗?

-凯文

0 投票
1 回答
3569 浏览

java - 如何在 Proguard 中混淆依赖的 .jar?

我有一个名为 BizLogic.jar 的 Jar 库,我在我的 UI 项目中引用它。所以当我混淆时,我想先混淆 BizLogic.jar,然后再混淆 UI,而不破坏它们之间的任何引用?

这可能与 Proguard 吗?如果没有,还有其他产品可以支持吗?

谢谢

0 投票
2 回答
10592 浏览

android - 如何使用 Ant 构建 Android 项目?(IntelliJ IDE)

我在 IntelliJ IDEA IDE 中有一个项目,我想设置一个并行的生产 Ant 构建过程,我可以随着时间的推移进行扩展。

我使用 IntelliJ 的功能创建了一个 Ant 构建文件,它位于 Build 菜单上,因此 Ant 构建过程正在运行,并且在 IDE 中工作。都好。

但是 IntelliJ 创建的 Ant 脚本仅编译为类文件,并没有通过 APK 执行完整的 Android 构建过程(据我所知)。

您能否向我指出参考源(或示例)以帮助我了解如何获取 ANT 脚本来完成 Android 项目的完整构建?

如果您知道,那么知道如何将其扩展为包括 Proguard、生产签名和插入生产 Maps 密钥也会很有用 :)

0 投票
2 回答
8891 浏览

java - 如何在 Android 中使用 Proguard 并保护应用程序的功能完整性?

我有一个使用下面的 Proguard 配置的 Ant 构建,它是由“android”命令行工具生成的,看起来很简单。但是当我使用这个脚本构建应用程序时,应用程序在设备上执行时会爆炸,并出现一系列空指针异常(混淆过程以某种方式向代码添加错误)。为了修复应用程序,我只是重建它而不通过 Proguard 运行它。

您会向在 Android 应用程序中使用 Proguard 的人提供什么建议,以便 a) 应用程序在合理程度上得到优化和混淆,但 b) 功能完整性不会受到损害?

0 投票
3 回答
15639 浏览

android - 在 Eclipse 中使用 Proguard 进行 Android 开发时,如何检查/升级 Proguard 版本?

这方面的文档非常差。我知道可以通过在项目的 rot 目录中手动编辑“default.properties”来启用 ProGuard。所有设置都进入同一个位置的“proguard.cfg”文件,但我想知道正在使用哪个版本的 ProGuard(我使用的是 Eclise Indigo)。我还希望能够在发布时将其升级到最新版本。但我找不到任何关于如何做到这一点的参考。