Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在清单和源代码中隐藏API密钥_Android_Maps_Key_Proguard - Fatal编程技术网

Android 在清单和源代码中隐藏API密钥

Android 在清单和源代码中隐藏API密钥,android,maps,key,proguard,Android,Maps,Key,Proguard,我有一个谷歌地图API密钥,当你使用反向工程反编译我的应用程序时,可以很容易地看到它。这一点都不好。另外,我在源代码中使用了一个WeatherAPI键,通过字符串进行访问 我找到了这个网站 我想问你,这篇文章是推荐的还是你有更好的想法 有没有人有过这方面的经验 我正在使用ProGuard,但ProGuard不会混淆AndroidManifest(据我所知,这甚至是不可能的),也不会混淆任何字符串API键(我不知道为什么) 我对DexGuard没有任何经验 你能告诉我这个网站是否正常工作,或者你能

我有一个谷歌地图API密钥,当你使用反向工程反编译我的应用程序时,可以很容易地看到它。这一点都不好。另外,我在源代码中使用了一个WeatherAPI键,通过字符串进行访问

我找到了这个网站

我想问你,这篇文章是推荐的还是你有更好的想法

有没有人有过这方面的经验

我正在使用ProGuard,但ProGuard不会混淆AndroidManifest(据我所知,这甚至是不可能的),也不会混淆任何
字符串
API键(我不知道为什么)

我对DexGuard没有任何经验


你能告诉我这个网站是否正常工作,或者你能给我一些关于如何在清单和源代码中隐藏api密钥的更多提示。

没有理由隐藏你的api密钥。它们直接从清单中解析。只是想评论,不是回答,但是评论太长了哈哈。所以我想我会贴出答案

为什么要隐藏API密钥?GMAP、Fabric和Firebase建议您直接将其添加到Manfiest中

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

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

当您让SDK从清单文件解析密钥时,这是很常见的,因此如果打算在运行时加载密钥,SDK必须支持这一点,而不是依赖于从清单解析密钥


所以我的建议是将它作为普通的可见API键保留在清单中。该软件包是您的应用程序独有的,SDK将使用该软件包和可能的应用程序机密,并将密钥嵌套在SDK中,以确保所有呼叫都来自您的应用程序。回到我原来的问题。为什么需要隐藏API密钥?

谢谢您的回答。老实说,我可以将Google MAP API密钥保留在清单中。为什么?因为我通过谷歌用SHA-1指纹保护了这把钥匙。因此,为任何人使用谷歌地图api密钥是不可能的。问题在于天气api密钥。有人可以使用此api密钥,服务器(OpenWeather)可以发现大量活动并阻止我的api密钥。因此,我的应用程序的用户无法使用天气功能。这是我的问题。@Blnpwr不能隐藏纯文本字符串。获取API密钥的最佳方法是让服务器在正确的身份验证后将其检索给您。查看Facebook的隐藏API,它可能也会有帮助。@GuilhE好吧,连接到服务器还需要一个密钥,它不能按照您的逻辑隐藏。反向工程可以使您的api密钥可见已经很糟糕了,如果您使用服务器连接,您到该服务器的密码也可见。我认为这不是一个好主意。明白了,如果他们需要安全,他们不会要求它出现在清单中,如果你想将来使用,你可以通过API从https服务器检索并存储在SQLite中。另一种选择是使用加密对其进行加密,您可以使用应用程序特有的、只有您知道如何使用的salt在代码中取消加密。然后,您可以在运行时取消对字符串的加密,其他人也不会知道任何更好的方法,因为我在某些登录系统(用户/pwd)中考虑了适当的身份验证,但由于这是一个天气应用程序(或天气API,它只是一个功能?),我想这是过分了。试试Facebook隐藏;)手动加密将失败,因为您必须提供salt、pwd等,并且也将对其进行硬编码。Facebook API为您节省了时间。“隐藏为执行数据的快速加密和身份验证提供了简单的Android API。”相关