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

Bln*_*pwr 9 maps android 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(就我所读甚至是不可能)而且它也不会混淆任何StringAPI KEY(我不知道为什么)

我对DexGuard没有任何经验.

您能告诉我这个网站是否正常工作,或者您能否提供一些如何在清单和源代码中隐藏api密钥的技巧.

Sam*_*Sam 5

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

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

您发布的网站只是将其放在build.config文件中。您也可以嵌套在环境变量中,然后使用Gradle将它们引入,但这是什么意思。您仍将它们拉入一个将与APK生成并打包在一起的文件中。如果您可以解释自己的理由,我们很乐意帮助您找到隐藏密钥的方法。

如果确实有必要,可以始终使它成为首次拉入并放入数据库的远程API,如果确实需要安全,则可以使用SQLCipher。存储后,您可以在运行时动态加载。我不知道当SDK从清单中解析它时这将如何工作。

创建SDK来从清单文件中解析密钥是很常见的,因此,如果要在运行时加载密钥,则SDK必须支持它,而不是依赖从清单中进行解析。

因此,我的建议是将其保留在清单中作为常规的可见API密钥。该程序包是您的应用程序所独有的,SDK将使用该程序包以及可能包含密钥的应用程序机密以及嵌套在SDK中的密钥,以确保所有调用均来自您的应用程序。回到我原来的问题。为什么需要隐藏API密钥?