我应该使用ProGuard吗?

23
我想在Android Studio中生成签名APK,并且它提供了一个选项来运行ProGuard。它要求我提供配置文件路径,但是我没有配置文件。该如何创建一个?我应该使用ProGuard吗? 如果未使用ProGuard,您能否轻松解包APK文件?
编辑: 感谢您的回答,但我无法找到proguard.cfg文件。在项目的根目录中,我只有local.properties文件,当我在Android Studio中打开它时,我得到了这个:
# This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.

# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=C:/.../...
4个回答

19

如果你想防止Android应用程序被反向工程,那么使用ProGuard的主要功能混淆是很容易做到的。

除此之外,ProGuard还有两个重要的功能:缩减可以消除未使用的代码,非常实用;优化则是通过Java字节码来操作的,但由于Android运行在Dalvik字节码上,而该字节码是从Java字节码转换而来的,所以一些优化可能不会发挥作用,需要谨慎考虑。

在Android网站上提供了使用ProGuard的说明。你需要检查的主要事项是是否有以下这行代码:

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

在您的project.properties文件中。由于您提到您使用Android Studio并且没有此文件,但是您被要求提供配置文件,请尝试选择位于Android SDK中的文件(tools/proguard/proguard-android.txt)。


谢谢您的解释,但是我没有Android网站上提到的project.properties文件和proguard.cfg文件。我只有local.properties文件。 - user2687045
@user2687045 我已经更新了答案。不过,我个人没有使用过Android Studio,所以这只是一个猜测。 - Malcolm

12

使用ProGuard是可选的,无论您是否使用它,都很容易解压apk并获取资源(图形和其他资产)。如果您不使用ProGuard,则应用程序代码也可以相当容易地重建,在使用ProGuard后,尝试理解发生在哪里变得非常困难和繁琐(虽然在足够的时间和精力下并非不可能)。

在混淆之后,请务必仔细测试您的应用程序,因为这是对应用程序的更改,有时可能会发生意外情况,特别是如果您经常使用反射。


8

进行ProGuard混淆的一个重要原因是,有些坏人会解压APK并将购买模块注入/替换为他们自己的。我们无法期望所有用户只从Play Store下载APK,而且用户的购买账户可能会被盗窃。


哇,从来没有想过在使用Proguard时要考虑用户安全性。这绝对是使用它的又一个理由。谢谢。 - HopefullyHelpful

2

运行ProGuard是完全可选的,但强烈推荐。

你可以在这里找到所有需要的内容: http://developer.android.com/tools/help/proguard.html

同时,你可以从项目根文件夹的default.properties文件中删除以下行:

proguard.config=proguard.cfg


它说:“当您创建Android项目时,proguard.cfg文件会自动在项目的根目录中生成。”但是我在那里或任何其他项目目录中都没有proguard.cfg文件。 - user2687045
@user2687045,你也可以从项目根目录下的default.properties文件中删除以下行:proguard.config=proguard.cfg - Laser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接