如何使用 gradle 替换 Google Maps API 密钥?

Khe*_*dar 4 api android google-maps android-studio android-gradle-plugin

我使用众多选项之一将我的 API 密钥存储在计算机/钥匙串中,而不是直接存储在云备份项目代码中(即gradle-credentials-plugin)。我想要的是能够以类似的方式管理 Google Maps 密钥,但它们在不同的文件中使用(Manage Google Maps API Key with Gradle in Android Studio)。

如果有人有一个简单(或复杂但可靠)的选项供我深入研究,我将不胜感激!

hb0*_*hb0 5

您可以使用manifestPlaceholders从您的build.gradle.

  1. 将您的 API 密钥插入到一个文件中,例如 local.properties
google.maps_api_key=SECRET_KEY
Run Code Online (Sandbox Code Playgroud)
  1. 使用以下命令确保忽略此文件.gitignore
local.properties
Run Code Online (Sandbox Code Playgroud)
  1. 使 API 密钥可用于您的AndroidManifest.xml. 使用withInputStream()确保InputStream 自动关闭
android{
  defaultConfig {

    // Load credentials.
    def properties = new Properties()
    file("../local.properties").withInputStream { properties.load(it) }

    // Share the key with your `AndroidManifest.xml`
    manifestPlaceholders = [ googleMapsApiKey:"${properties.getProperty('google.maps_api_key')}"]
Run Code Online (Sandbox Code Playgroud)
  1. 将 API 密钥加载到您的AndroidManifest.xml:
<application>

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="${googleMapsApiKey}" />
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你!你的建议对我有用!在我找到它之前,我曾尝试使用在 https://developers.google.com/maps/documentation/android-sdk/get-api-key 上找到的 Google 建议,但它们不起作用,因为他们没有说关于“manifestPlaceholders”的任何信息。 (2认同)

Khe*_*dar 0

Shadowsheep 的解决方案有效,但这并不是我真正想要做的。

我最终做了什么。

  • 首先,我错误地认为绝对有必要使用密钥填充google-maps-api.xml,而显然在清单中设置密钥就足够了。

  • 其次,我<meta-data android:name="com.google.android.geo.API_KEY" android:value"@string/GoogleMapsApiKey">在清单中添加了一行

  • 第三,我通过我选择的工具(etiennestuder的gradle-credentials-plugin)设置了mapsKey

  • 最后,我将这两行添加到应用程序的模块build.gradle部分中: buildTypes

defmapsKey=credentials.GOOGLE_MAPS_API_KEY?:“密钥丢失”

it.resValue“字符串”,“GoogleMapsApiKey”,mapsKey