因此,我们都使用ProGuard对我们的发布APK进行模糊处理,以便更加难以对我们的宝贵代码进行逆向工程。但我想知道开源应用程序是否真的有必要吗?
让我们以Telegram为例 - 他们的source code is readily available at GitHub,因此逆向工程保护在这种情况下无关紧要。
我的问题是:除了更难的逆向工程之外,混淆还有其他好处吗?
编辑:问题主要是关于混淆,而不是关于ProGuard。
答案 0 :(得分:2)
如果您想为自己的代码提供一定程度的隐私,则混淆非常重要。
想象一下,你想出了一个非常好的图书馆,这是许多渴望赚钱的潜在开发者所垂涎的。他们可以轻松访问您的源代码(通过github或apk反编译),将其删除并在自己的应用程序上使用它,您将不会获得任何信用。
输入:软件许可
通过指定软件许可证,您将告知任何潜在的开发人员您自己的知识产权的作用和不作为。
如果你将你的代码保存在私人事务中,那将使某人难以从中获得合法利益,但请记住,有些人不会尊重这一点,并会尝试复制该代码。这就是混淆的地方。
通过混淆代码,您很难让别人感知/阅读,从而获得某种程度的保护。
Android中的标准混淆是通过使用Proguard(及其专业和更好的产品,如DexGuard)实现的。
请注意,Proguard不仅是混淆工具,也适用于:
代码缩小(减少代码大小并转储应用程序不需要的类)
在缩小的步骤中,ProGuard从这些种子开始 递归地确定使用哪些类和类成员。所有 其他类和类成员将被丢弃。
代码优化
在优化步骤中,ProGuard进一步优化了代码。在其他优化中, 非入口点的类和方法可以是私有的, 某些方法可以删除静态或最终未使用的参数 可以内联。
<强>模糊处理强>
在混淆步骤中,ProGuard重命名类和 不是入口点的类成员。在整个过程中, 保持入口点确保仍然可以访问它们 他们原来的名字。
预验证步骤是唯一的步骤 不必知道切入点。
@非常重要的注意事项:对代码进行模糊处理并不能完全防止被盗或复制。
使用适当的工具和一点耐心,经验丰富的开发人员最终可能会破坏混淆(这取决于他们想要代码的程度)
<强> @Conclusion 强>
无论是小项目还是复杂项目,都应始终使用ProGuard。在构建期间删除未使用的代码这一事实可以减少apk所需的空间和更好的性能(由于缩小的过程,我的ProGuarded应用程序的大小减少了25%)。
即使您的应用程序代码可能通过Github或其他存储库可用,您也应该保持ProGuard脚本的整洁和清洁(即使在缩小过程中只删除了少数几个类)。
但是回答您的主要问题:如果代码至少只是优化并向所有人开放,则可以跳过混淆