一点背景:
几个星期前,我正在用Android谷歌 Map api做一些事情,一周前我不得不重置我的电脑,之后我从我的私人存储库克隆了我的Android项目 . 现在,谷歌 Map 部分项目将无法正常工作,当我启动 Map 活动时,它会按预期显示布局,但 Map 未呈现,我只在左下角看到Google徽标 .
我检查了以下内容:
-
我有一个AIzaSyA形式的开发者控制台API KEY *****************
-
API KEY凭据用于包co.com.something.activities和由自动生成的google_maps_api.xml提供的SHA1证书
您还可以使用以下行将凭据添加到现有密钥:D6:76:DA:B5:##:##:##:##:##:##:##:##:##: ##:##:##:##; co.com.something.activities
- 我在我的清单中
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/google_maps_key" />
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
-
google_maps_api.xml上的API KEY与控制台API KEY相同
-
onMapReady(GoogleMap googleMap)方法在我的活动中被调用,我正在设置一些LatLng点并移动相机(仍然不会显示 Map )
-
我尝试了Android Studio中的以下操作:构建APK,生成签名APK,然后将这些apks上传到我的手机(无效) .
-
我已经在应用程序的项目文件夹下发布了我的密钥库,我删除了它并创建了它并使用新的SHA1重新创建了API KEY
-
我没有触及debug.keystore,因为我不知道它位于何处 .
-
我正在将 Map 加载到活动的片段中(它工作正常)
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:map="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
android:layout_height="fill_parent" android:id="@+id/map"
tools:context="co.com.wayfit.activities.RouteActivity"
android:name="com.google.android.gms.maps.SupportMapFragment" />
这是我的gradle文件
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
signingConfigs {
release {
storeFile file('C:/ProjectDir/app/wayfit.keystore')
storePassword "wayfit"
keyAlias "wayfit"
keyPassword "wayfit"
}
}
defaultConfig {
applicationId "co.com.wayfit"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
signingConfig signingConfigs.release
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
productFlavors {
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.google.android.gms:play-services:8.3.0'
compile 'com.google.android.gms:play-services-ads:8.3.0'
compile 'com.google.android.gms:play-services-identity:8.3.0'
compile 'com.google.android.gms:play-services-gcm:8.3.0'
}
编辑:
我认为我的问题是由于API KEY . 我尝试删除活动并创建一个新的 Map 活动,android studio为我生成了一个名为google_maps_api.xml的文件,它说你还可以使用以下行将你的凭据添加到现有密钥:D6:76:DA:B5:# #:##:##:##:##:##:##:##:##:##:##:##:##; co.com.something.activities
所以我想把它用于我的api凭证,但是当我运行命令提示符“keytool -v -list -keystore mykeystore.keystore”时,我正在使用它来签署apk,我收到了另一个不同的SHA1
D8:B2:29:2C:C5:##:##:##:##:##:##:##:##
我在开发人员控制台上的相同包下使用了相同的API KEY .
另一个让我感到困惑的是google_maps_api.xml在名称的右侧说(调试),这会影响某些东西吗?
2 回答
检查您的设备的日期和时间设置是否与您当前的时区相对应(不幸的是,日志输出不会返回很多建设性信息,以引导您考虑日期和时间)
检查您是否在API控制台中启用了正确的服务(如果您对此步骤执行了错误,则启用Google Maps API Android V2而非Google Maps API V2,日志将返回身份验证失败)
检查您是否使用了正确的密钥库来获取API密码(日志会给您一个提示,说明身份验证失败
检查是否包含了正确的库文件
有关空白谷歌 Map 的大量其他问题可以找到更多信息:https://stackoverflow.com/a/15636254/1099716
debug 的API_KEY存储在app \ src \ debug \ res \ values \ google_maps_api.xml中
将文件夹app \ src \ release \ res \ values的 release 的API_KEY放到google_maps_api.xml文件中,对我来说就像我提到的这个答案一样..
https://stackoverflow.com/a/42123330/2796625