混淆代码

时间:2012-04-18 12:30:58

标签: android obfuscation proguard

我被要求为Android安装一个简单的应用程序。第一个事实上我会得到报酬,所以我真的不想搞砸了:)。其中一个要求是必须对代码进行模糊处理。

我学会了混淆的一般想法,但我不想犯任何愚蠢的错误。

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

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

修改

从thewsers中建议的文章:

  

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

     

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

     

proguard.config = proguard.cfg

我确实在项目的目录中有 project.properties 文件。但是我没有 proguard.cfg 文件。相反,我有 proguard-project.txt 文件。我想这是替代品。

project.properties:

  

此文件由Android Tools自动生成。    不要修改此文件 - 您的更改将被删除!

     

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

     

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

     

要启用ProGuard缩小和混淆代码,请取消注释(可用属性:sdk.dir,user.home):

     

proguard.config = $ {sdk.dir} \工具\ proguard的\ proguard的-android.txt:proguard的-project.txt

     

项目目标。   目标=机器人-7

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

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

我想我已经迷失在这里,所以我会非常感激如果有人可以一步一步地告诉我我应该做什么,以及如何检查它是否真的有效。

2 个答案:

答案 0 :(得分:22)

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

他们拆分文件,以便Android团队认为相当标准的一般配置/标志位于proguard-android.txt文件中,并且可以使用每个SDK Tools修订版进行更新(基本上是静默的)。然后是任何开发人员/项目特定的标志,开发人员可以添加到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} \工具\ 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文件中。

答案 1 :(得分:2)