如何在多风格应用中添加多个 Google 地图 API 配置
How to add multiple Google Maps API configs in a multi-flavor app
我有一个多风格的 Android 应用程序,因为我需要具有不同 ID 的开发、质量检查和生产应用程序连接到不同的 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 文件,以便我可以检查其中是否有正确的文件?
从 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 生成新的映射键。
我想我明白了我错过了什么。我选择了 Google Play 应用签名,所以我使用上传密钥对我的应用进行签名,然后 Google 使用它保留的部署密钥对其进行签名。我发现 this piece of documentation,它说我必须从 Google 获取我的 SHA-1 指纹并在我的 Google 地图 API 密钥中使用它。所以我导出了 SHA-1 并将其粘贴到我的 Google 地图 API 密钥配置中,现在它似乎工作正常。
我能够使用不同的地图 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 中,使用此代码根据 flavor
引用 API 键
<application
<meta-data android:name="com.google.android.geo.API_KEY"
android:value="${google_maps_key}"/>
</application>
我有一个多风格的 Android 应用程序,因为我需要具有不同 ID 的开发、质量检查和生产应用程序连接到不同的 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 文件,以便我可以检查其中是否有正确的文件?
从 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 生成新的映射键。
我想我明白了我错过了什么。我选择了 Google Play 应用签名,所以我使用上传密钥对我的应用进行签名,然后 Google 使用它保留的部署密钥对其进行签名。我发现 this piece of documentation,它说我必须从 Google 获取我的 SHA-1 指纹并在我的 Google 地图 API 密钥中使用它。所以我导出了 SHA-1 并将其粘贴到我的 Google 地图 API 密钥配置中,现在它似乎工作正常。
我能够使用不同的地图 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 中,使用此代码根据 flavor
引用 API 键<application
<meta-data android:name="com.google.android.geo.API_KEY"
android:value="${google_maps_key}"/>
</application>