我有一个Google MAPS API KEY,当您使用逆向工程反编译我的应用时,可以很容易地看到它。这根本不好。另外,我在源代码中使用Weather API KEY通过字符串访问。
我找到了这个网站https://medium.com/@cassioso/a-strategy-to-secure-your-api-keys-using-gradle-b9c107272860
并且想问你,如果推荐这篇文章或者你有更好的想法吗?
有没有人对此问题有任何经验?
我正在使用ProGuard,但ProGuard并不会混淆AndroidManifest(就我所读甚至是不可能)而且它也不会混淆任何String
API KEY(我不知道为什么)
我对DexGuard没有任何经验。
您能告诉我这个网站是否正常工作,或者请您提供一些如何在清单和源代码中隐藏api密钥的更多提示。
答案 0 :(得分:4)
没有理由隐藏您的API密钥。它们直接从清单中解析。只是评论,而不是回答,但评论太长哈哈。所以我想我会发布答案。
为什么要隐藏API密钥? GMaps和Fabric和Firebase建议您直接加入Manfiest。
您发布的网站只是将其放在build.config文件中。您也可以嵌套在环境变量中并使用Gradle将其拉入,但重点是什么。您仍然将它们拉入将使用APK生成和打包的文件中。如果您能解释您的推理,我很乐意帮您找到隐藏钥匙的方法。
如果确实有必要,你可以随时将它作为一个远程API来拉取第一次并放入数据库,如果确实需要安全,你可以使用SQLCipher。存储后,您可以在运行时动态加载。当SDK从清单中解析它时,我不知道这会有多好。
当您使用SDK从清单文件中解析密钥时,这是很常见的,因此如果要在运行时加载它,SDK必须支持它而不是依赖于从清单中解析它。
所以我建议将它作为普通的可见API密钥保留在清单中。该软件包对您的应用程序而言是独一无二的,SDK将使用软件包以及可能的应用程序机密密码嵌套在SDK中以确保所有来自您的应用程序的调用。回到我原来的问题。为什么需要隐藏API密钥?