我在互联网上经常看到这个问题,但对我来说没有任何作用。
我的 Android 应用程序使用 Google 地图服务来显示地图。
我设置了两个变体:
debug
和release
。
debug 变体根本没有签名,而 release 则有。我创建了相应的 my_app.jks
密钥库,它放置在我的主
/app
文件夹中。我的发布版本配置为:
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
并且这些值在根级别的 release-keystore.properties
中设置。在 GCP 中,我生成了一个 API 密钥,并将其限制为 Android 应用程序:调试和发布指纹。
我的发布指纹是根据 Google 文档创建的:
keytool -list -v -keystore your_keystore_name -alias your_alias_name
我输入了请求的密码,它输出了 SHA-1 指纹。该指纹是我在 GCP 上设置的指纹,具有正确的软件包名称com.my_app
。然后,我运行命令
./gradlew :app:bundleGooglePlayRelease
创建我手动上传到 Google Play 商店进行内部测试的捆绑包。我下载了该应用程序,但地图仍然是灰色的。
据我了解,由于捆绑包已使用发布密钥库进行注册,因此 SHA-1 链接到该捆绑包,因此应该足以验证 API 密钥。
更新
按照
这个解决方案,我从代码中获取了 SHA-1 并将其打印出来。事实证明,它与我在本地使用 keytool
命令获取的不同。我将努力找出它们不同的原因。欢迎任何帮助。
GCP -> 设置 -> 应用签名共有三个指尖: