如何在 AndroidManifest.xml 中隐藏 API 键

How to hide API Keys in AndroidManifest.xml

我刚刚开始 Google Maps plugin Flutter,它要求我将生成的 API 密钥插入 android/app/src/main/AndroidManifest.xml 中的 AndroidManifest.xml 文件。片刻之后,我将其提交到我的回购协议中,并立即收到 Google 和 Git 的警告,要求更改生成新密钥等(不知道你不应该那样做,所以我'我现在很清楚)。

之后,我开始寻找隐藏API键的方法。一种解决方案是使用 Flutter Secure Storage plugin 但这仅在 .dart 文件中有帮助(我认为)。另一种方法是创建一个单独的文件并将其添加到 .gitignore 但是当我构建 APK 时该文件不会也被捆绑吗?

理想情况下,我想发布它,但我不希望密钥易于访问,因此如何在不使用明文的情况下将 API 密钥加载到 AndroidManifest.xml 文件中?我想避免使用后端,所以我想我可以手动散列它然后在运行时取消散列,但我仍然不知道如何动态更改 AndroidManifest.xml 文件。

您无法混淆存储在清单中的密钥,因为存储的(静态)值将直接由 Google 地图 API 本身使用。为了保护您的密钥,请考虑在您的 GCP 控制台中添加限制,以便只有授权的客户端才能使用您的密钥。

有关详细信息,请参阅此 link:https://developers.google.com/maps/documentation/android-sdk/get-api-key#restrict_key

以下是有关保护 API 密钥的最佳做法的更多信息: https://developers.google.com/maps/api-key-best-practices#api_key_table