9

我被要求为 android 创建一个简单的应用程序。事实上,第一个我会得到报酬,所以我真的不想把它搞砸:)。其中一项要求是必须对代码进行混淆处理。

我了解了混淆的一般概念,但我不想犯任何愚蠢的错误。

我究竟要做什么才能使代码混淆?将其作为发布版本导出是否可以完成这项工作,还是需要一些其他步骤?任何评论也表示赞赏。

PS。如果重要的话,我正在使用 Eclipse。

编辑

从anwsers中建议的文章中:

要启用 ProGuard 使其作为 Ant 或 Eclipse 构建的一部分运行,请在 /project.properties 文件中设置 proguard.config 属性。路径可以是绝对路径,也可以是相对于项目根目录的路径。

如果您将 proguard.cfg 文件保留在其默认位置(项目的根目录),您可以像这样指定它的位置:

proguard.config=proguard.cfg

我的项目目录中确实有project.properties文件。但我没有proguard.cfg文件。相反,我有proguard-project.txt文件。估计是换了

项目属性:

此文件由 Android 工具自动生成。请勿修改此文件——您的更改将被删除!

必须在版本控制系统中检查此文件。

要自定义 Ant 构建系统使用的属性,请编辑“ant.properties”,并覆盖值以使脚本适应您的项目结构。

要使 ProGuard 能够缩小和混淆您的代码,请取消注释(可用属性:sdk.dir、user.home):

proguard.config=${sdk.dir}\tools\proguard\proguard-android.txt:proguard-project.txt

项目目标。目标=android-7

最初除了最后一行之外的所有内容都被注释掉了。

proguard-project.txt中,所有内容都被注释掉了。

我想我在这里迷路了,所以如果有人可以逐步告诉我应该做什么以及如何检查它是否真的有效,我将非常感激。

4

1 回答 1

23

官方开发网站上的文章已过时。从 SDK Tools r17 开始,他们改变了 ProGuard 配置的工作方式。基本上,他们将以前的文件拆分proguard.cfg为两个文件(并且还简单地将它们制作为 .txt 文件):proguard-android.txtproguard-project.txt. proguard-android.txt驻留在您的{SDK dir}\tools\proguard目录中,并且位于您proguard-project.txt的每个项目目录中。

他们拆分文件,以便 Android 团队认为非常标准的一般配置/标志将在proguard-android.txt文件中,并且可以随每个 SDK 工具修订版进行更新(基本上是静默更新)。然后任何开发人员/项目特定的标志,开发人员可以添加到proguard-project.txt文件中。

这就是为什么您注意到proguard-project.txt文件中的所有内容都被注释掉的原因,因为通常大多数人没有任何项目特定需求,他们只想使用标准设置运行 ProGuard 并完成它。

供参考(一个很好的解释):http ://tools.android.com/recent/proguardimprovements

一步一步(每天:P)

(使用 Eclipse IDE)启用 ProGuard 并仅使用默认设置进行收缩和混淆:

  • 首先将您的 SDK 工具更新到最新版本(撰写本文时为 r19)
  • project.properties取消注释的行中说:

proguard.config=${sdk.dir}\tools\proguard\proguard-android.txt:proguard-project.txt

如果您在 r17 之前创建了项目,那么您可能看不到相同的内容。如果是这种情况,我建议您创建一个新的虚拟项目(在更新 SDK 工具之后)并复制proguard-project.txtproject.properties文件。

就是这样!ProGuard 现在将启用并运行,但在发布版本上运行(当您使用 Android 工具并导出已签名/未签名的 apk 时)。

当您进行发布构建时,您会注意到将在您的项目文件夹中创建一个新的 ProGuard 文件夹。在此文件夹中,您可以找到四个文件,其中包含保留或删除的类/方法等内容。另请注意,当您进行混淆时,您还将在出现错误时混淆您的堆栈跟踪。

编辑:(9/4/12)只是想更新这个答案以反映工具 r20 的变化。

Android 团队现在添加了一个额外的 proguard 配置文件。它是proguard-android-optimize.txt并且它也驻留在{SDK dir}\tools\proguard目录中。这个文件和原来的proguard-android.txt配置文件一样,除了开启了proguard优化。

添加这个附加文件是为了方便那些想要打开优化的人(也许他们可以做一些事情,比如去除日志调用,这需要打开优化)。现在您可以简单地在文件中指向该文件,project.properties如下所示:

proguard.config=${sdk.dir}\tools\proguard\proguard-android-optimize.txt:proguard-project.txt

和以前一样,不要尝试更改任何proguard-android...配置文件。任何项目特定的标志都应该proguard-project.txt放在项目文件夹中的文件中。

于 2012-06-14T01:46:02.810 回答