关于混淆:Android:非混淆APK的危险和/或缺点?

Android: dangers and/or downsides of non-obfuscated APK?

因此,我们都使用proguard混淆了我们的发布apk,以便更难对宝贵代码进行逆向工程。但我开始怀疑它是否真的是开源应用程序所必需的?

以电报为例-它们的源代码在Github上很容易获得,因此在这种情况下,逆向工程保护是不相关的。

我的问题是:除了更难的逆向工程,模糊还有其他好处吗?

编辑:这个问题是关于模糊,而不是一般的proguard。


如果您想为自己的代码提供一定程度的隐私,那么混淆就非常重要。

想象一下,你想出了一个非常好的库,它被许多渴望赚钱的潜在开发人员所垂涎。他们可以很容易地访问您的源代码(通过Github或APK反编译),将其撕掉并在自己的应用程序中使用,您将不会因此得到任何奖励。

输入:软件许可证通过指定一个软件许可证,您将通知任何潜在的开发人员您自己的知识产权的"做"和"不"是什么。如果你把你的代码放在私人事务中,这会使某人很难从中获得合法利益,但要记住,有些人不会尊重这一点,并且会试图复制代码。这就是混淆的地方。通过模糊你的代码,你使得别人很难察觉/阅读你的代码,从而提供某种程度的保护。

Android的标准模糊是通过使用proguard(以及他们的专业和更好的产品,如dexguard)来实现的。

请记住,Proguard不仅是一个模糊的工具,而且还用于:

代码收缩(减小代码大小并转储应用程序不需要的类)

In the shrinking step, ProGuard starts from these seeds and
recursively determines which classes and class members are used. All
other classes and class members are discarded.

代码优化

In the optimization step, ProGuard further optimizes the code. Among other optimizations,
classes and methods that are not entry points can be made private,
static, or final, unused parameters can be removed, and some methods
may be inlined.

混淆

In the obfuscation step, ProGuard renames classes and
class members that are not entry points. In this entire process,
keeping the entry points ensures that they can still be accessed by
their original names.

The preverification step is the only step that
doesn't have to know the entry points.

@非常重要的注意:混淆代码并不能完全保护您免受盗窃或复制。

有了适当的工具和一点耐心,一个经验丰富的开发人员最终可能会打破这种混乱局面(这取决于他们对代码的需求)。

@结论无论是小型项目还是复杂项目,都应该始终使用Proguard。在构建过程中删除未使用的代码的事实使APK所需的空间更少,性能更好(我已经开发了一些应用程序,由于缩减的过程,它们的大小减少了高达25%)。即使您的应用程序代码可以通过Github或其他存储库获得,您也应该保持您的Proguard脚本整洁(即使在收缩过程中只删除了少数类)。

但是回答你的主要问题:如果代码至少简单地优化并对每个人开放,你可以跳过混淆。