在Android Studio中使用Gradle管理谷歌MapAPI密钥

lqfhib0f  于 2022-12-27  发布在  Android
关注(0)|答案(4)|浏览(205)

我知道Gradle功能强大,我希望管理API密钥以开发/生产GoogleMap
目前,我总是需要手动注解一行并取消注解另一行才能正常工作。有没有办法在Gradle中使用一些自定义发布配置自动执行此操作?

<!-- MapView v2 API -->
<uses-library android:name="com.google.android.maps" />
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[MY_DEV_KEY]" />
<!-- PROD
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[MY_PROD_KEY]" />
-->
57hvy0tb

57hvy0tb1#

由于您使用的是gradle,因此可以执行以下操作:

    • 生成分级**
android {
  .. .. ...
    buildTypes {
       debug {
          resValue "string", "google_maps_api_key", "[YOUR DEV KEY]"
       }
       release {
           resValue "string", "google_maps_api_key", "[YOUR PROD KEY]"
       }
    }
  }

在你的机器人清单. xml

<meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="@string/google_maps_api_key"/>

这样,您只有一个AndroidManifest.xml,并且您可以根据构建类型设置值。

6mw9ycah

6mw9ycah2#

您可以使用清单占位符功能实现这一点:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support
在build.gradle文件中:

buildTypes {
    debug {
        manifestPlaceholders = [ google_map_key:"your_dev_key"]
    }
    release {
        manifestPlaceholders = [ google_map_key:"prod_key"]
    }
}

然后在清单中:

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="${google_map_key}"/>

对于不同风格的不同键也是如此,这是比使用字符串资源更干净的解决方案。
另一方面,我最好考虑从后端获取API密钥,不要在客户端硬编码它们。这是更安全和更灵活的方法。

1dkrff03

1dkrff033#

在Android Studio中(0.8.11版已勾选),您可以将Google Maps Activity(New-〉Google-〉Google Maps Activity)添加到您的项目中,Android Studio将为您生成必要的文件,您只需插入密钥。此外,还会生成一些说明。请在debug/res/values/和release/res/values文件夹中查找google_maps_api.xml文件。

fv2wmkja

fv2wmkja4#

在Android Studio中,有构建类型和风格的概念,您可以使用这些概念来获取所需内容。构建类型是功能相同但调试代码可能不同的应用的不同版本。默认情况下,所有Android Gradle项目都有调试和发布构建类型。
风味是功能不同的应用版本;例如,您可以选择免费和付费。默认情况下,您的Android Gradle项目没有任何风格,但您可以添加这些风格。
构建类型和风格是在构建时结合在一起的(被称为variant);在本例中,您可以拥有freeDebug、freeRelease、paidDebug和paidRelease构建版本。
构建系统允许您轻松地覆盖每个类型/风格/变体中的许多内容;你可以做的事情之一是覆盖AndroidManifest.xml文件的一部分。2当构建一个特定的变体时,构建系统会将清单的不同合格位合并到一个主清单中。
有了这些背景知识,您可能希望在应用的调试版本和发布版本中使用不同的API密钥。调试版本是您将在日常开发、调试和测试中使用的版本,而发布版本是您将部署给用户的版本。
为此,**do not将Google Maps API密钥放入src/main中主应用的AndroidManifest.xml文件;相反,添加两个新文件夹src/debugsrc/release,并在其中添加stub**AndroidManifest.xml文件。不要在这些新清单中包含完整信息,而只包含特定变体所需的唯一信息。您的源文件将如下所示:

您的src/debug/AndroidManifest.xml文件将包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[MY_DEV_KEY]" />
</manifest>

src/release/AndroidManifest.xml将具有以下内容:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[MY_PROD_KEY]" />
</manifest>

重申一下,不要在src/main/AndroidManifest.xml文件中放置任何API密钥。
如果出于某种原因,你不想使用构建类型来区分,你可以设置开发和生产风格,并以这种方式将其分开;清单重写以相同的方式工作。

相关问题