我目前使用 LVL 和 Proguard 的组合作为防范盗版的第一道防线。
但是,资源字符串呢? 例如,如果存在“许可证检查失败”之类的资源字符串,那么盗版者只需将该资源 ID 追溯到代码中使用它的位置即可。
如果定义资源字符串,您可能会在以下位置定义或使用它:
编译后,资源字符串、名称和整数代码最终为:
ProGuard 将完全删除 R$string.class,但 Android 反编译器可以从 resources.arsc 重建所有信息。这仍然需要一些工作,但字符串可能确实暗示了代码的目的(以及某些 API 调用)。
您可以通过加密/混淆代码中的字符串以及使用反射来访问某些 API 来改进这一点,如 Google 演示文稿中所建议的逃避海盗和阻止吸血鬼。
ProGuard 的 Android 闭源同级工具 DexGuard 可以为您加密字符串(以及 API 调用和整个类),可能比您手动实现的效果更有效,并且不会增加源代码的负担。
(我是ProGuard和DexGuard的开发者)
当我想隐藏 Android 中的重要字符串时,我将它们放入 C/C++ 库中。然后我使用 JNI 调用来检索它们。 在c库中,我更进一步,我将字符串转换为十六进制,当我检索相同的字符串时,我再次将其从十六进制转换为整数。 当黑客尝试查看 c/c++ 库时,将很难找到您的秘密字符串(特别是如果转换为十六进制)。
这是一篇不错的文章以及如何开始这样做。