在Manifest和源代码android中隐藏API密钥

时间:2017-10-03 21:14:03

标签: android maps key proguard

我有一个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密钥的更多提示。

1 个答案:

答案 0 :(得分:4)

没有理由隐藏您的API密钥。它们直接从清单中解析。只是评论,而不是回答,但评论太长哈哈。所以我想我会发布答案。

为什么要隐藏API密钥? GMaps和Fabric和Firebase建议您直接加入Manfiest。

您发布的网站只是将其放在build.config文件中。您也可以嵌套在环境变量中并使用Gradle将其拉入,但重点是什么。您仍然将它们拉入将使用APK生成和打包的文件中。如果您能解释您的推理,我很乐意帮您找到隐藏钥匙的方法。

如果确实有必要,你可以随时将它作为一个远程API来拉取第一次并放入数据库,如果确实需要安全,你可以使用SQLCipher。存储后,您可以在运行时动态加载。当SDK从清单中解析它时,我不知道这会有多好。

当您使用SDK从清单文件中解析密钥时,这是很常见的,因此如果要在运行时加载它,SDK必须支持它而不是依赖于从清单中解析它。

所以我建议将它作为普通的可见API密钥保留在清单中。该软件包对您的应用程序而言是独一无二的,SDK将使用软件包以及可能的应用程序机密密码嵌套在SDK中以确保所有来自您的应用程序的调用。回到我原来的问题。为什么需要隐藏API密钥?