我已经尝试了大约一个星期来解决这个问题。我有谷歌地图在调试中工作得非常好,但无论我在打包apk时做什么,我都会在下面看到此错误
05-21 21:00:21.338 31534-31613/? E/Google Maps Android API﹕ Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).
我运行以下命令
keytool -list -v -keystore ~/Documents/keys/phillybikeshare.jks -alias "pbs"
在两个不同的密钥库上,使用了看起来像
的SHA1指纹F9:DB:33:A2:05:02:80:5A:21:9A:19:E6:8A:E4:C4:XX:XX:XX:XX:XX
并在google开发者控制台中为SHA1制作了api密钥。我甚至仔细检查过以确保我在main/res/values/google_maps_api.xml
和debug/res/values/google_maps_api.xml
都有变量,但仍然没有。
的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.peterchappy.phillybikeshare" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<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" />
<permission
android:name="com.peterchappy.phillybikeshare.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="com.peterchappy.phillybikeshare.MAPS_RECEIVE"/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" >
</uses-feature>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<activity
android:name=".activities.MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".services.AlarmService"
android:exported="false" >
</service>
</application>
的build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.peterchappy.phillybikeshare"
minSdkVersion 17
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.google.android.gms:play-services:7.0.0'
compile 'com.mcxiaoke.volley:library:1.+'
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.android.support:cardview-v7:21.0.+'
}
我不知道出了什么问题。任何帮助将不胜感激。
答案 0 :(得分:3)
在我的应用程序的调试和发布版本之前,我遇到了同样的问题。 我在Google的开发者控制台中创建了两个条目。 一个用于调试版本,使用debug.keystore中的SHA1值 您可以在Windows的主目录中找到它。 e.g。
C:\Users\<UserName\.android\debug.keystore.
另一个版本是发布版本,是您在构建签名APK时使用的.jks文件中的SHA1值。
他们需要匹配,否则你会继续犯这个错误。
最后,在卸载应用程序时不要忘记清除数据和缓存,因为这可能会导致问题。