【问题标题】:How to add multiple Google Maps API configs in a multi-flavor app如何在多风格应用中添加多个 Google Maps API 配置
【发布时间】:2018-03-08 09:55:09
【问题描述】:

我有一个多风格的 Android 应用,因为我需要具有不同 ID 的 dev、qa 和 prod 应用来连接到不同的 Firebase 项目。

flavorDimensions "env"
productFlavors {
    dev {
        dimension "env"
        applicationId "com.myapp.debug"
    }
    qa {
        dimension "env"
        applicationId "com.myapp.beta"
    }
    prod {
        dimension "env"
        applicationId "com.myapp"
    }
}

我还在相应的源文件夹中添加了 3 个版本的 google_maps_api.xml,如下所示:

在开发版中,一切正常,地图显示正常。但是,当我在使用 release/qa 变体生成签名版本后以封闭 Alpha 版发布应用时,地图不会显示在应用中。

由于我还是 Android 新手,我不知道我可能错过了什么,甚至不知道如何解决这个问题?有没有一种简单的方法可以查看在封闭 alpha 中发布的 qa 版本的日志?我错过了一些明显的东西吗?我应该在签名的 APK 中的哪里找到 google_maps_api.xml 文件,以便我可以检查其中是否存在正确的文件?

【问题讨论】:

    标签: android google-maps google-maps-android-api-2


    【解决方案1】:

    google_map_api.xml 文件中删除您的google_maps_key 并在gradle 文件中声明它,如下所述

    flavorDimensions "env"
        productFlavors {
            dev {
                dimension "env"
                applicationId "com.myapp.debug"
                resValue 'string', 'google_maps_key', 'google_maps_key_for_dev'  // update your actual key
            }
            qa {
                dimension "env"
                applicationId "com.myapp.beta"
                  resValue 'string', 'google_maps_key', 'google_maps_key_for_qa'  // update your actual key
            }
            prod {
                dimension "env"
                applicationId "com.myapp"
                  resValue 'string', 'google_maps_key', 'google_maps_key_for_prod' // update your actual key
            }
        }
    

    您必须为每个 applicationId 生成新的映射键。

    【讨论】:

    • 我已经为每个 applicationId 设置了不同的密钥。我会尝试像你提到的那样将它们添加到 gradle 构建中。
    • 我尝试将 google maps 键添加到 gradle 构建文件中,但结果是一样的:地图没有显示,它只是灰色的。我在 Android Studio 中检查了该应用程序的 logcat,并连接了手机,它没有显示任何错误消息。
    • 我认为签名证书有问题,您正在生成具有不同签名的 apk,用于测试全新安装 apk,它将在 logcat 中显示错误消息以上传具有该 SHA 值的 SHA
    【解决方案2】:

    我想我知道我错过了什么。我选择加入 Google Play 应用签名,因此我使用上传密钥对我的应用进行签名,然后 Google 使用它保留的部署密钥对其进行签名。我找到了this piece of documentation,它说我必须从 Google 获取我的 SHA-1 指纹并在我的 Google Maps API 密钥中使用它。所以我导出了 SHA-1 并将其粘贴到我的 Google Maps API 密钥配置中,现在它似乎可以正常工作了。

    【讨论】:

      【解决方案3】:

      我能够使用不同的 Maps API 密钥来实现不同的风格,如下所示

      第 1 步:在 app/build.gradle 的 manifestPlaceholders 中添加不同的键

        flavorDimensions "default"
          productFlavors {
              dev {
                  dimension "default"
                  manifestPlaceholders.google_maps_key = "Dev API key here"
              }
              staging {
                  dimension "default"
                  manifestPlaceholders.google_maps_key = "Staging API key here"
              }
          }
      

      第 2 步:在应用程序标签内的 AndroidManifest.xml 中,使用此代码根据风格引用 API 密钥

      <application    
      <meta-data android:name="com.google.android.geo.API_KEY"
                      android:value="${google_maps_key}"/>
      
      </application>
      

      【讨论】:

        猜你喜欢
        • 2013-03-14
        • 2015-08-14
        • 1970-01-01
        • 2016-09-12
        • 2015-07-09
        • 1970-01-01
        • 2011-10-26
        • 2015-06-19
        • 1970-01-01
        相关资源
        最近更新 更多