2015-05-22 80 views
0

我已经尝试了大约一周的时间来解决此问题。我有谷歌地图的工作在调试完全正常,但无论怎样,当我打包APK我得到以下Google Maps API v2无法使用发布密钥

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 

,并在谷歌开发者控制台的SHA1取得API密钥。我甚至双重检查,以确保我有一个变量在main/res/values/google_maps_api.xmldebug/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

您确定您已经为您的发布API密钥启用Google地图吗? –

+0

我和我一样积极。我有两个SHA1密钥已注册。 –

+0

另一件要检查的事情是开发人员控制台中应用的软件包名称与应用的软件包名称相匹配。 –

回答

3

我以前用我的应用程序的调试版本和发行版本有同样的问题。 我在Google的开发者控制台中创建了两个条目。 一个用于使用调试版本的debug.keystore 中的SHA1值,您可以从Windows的主目录中找到该值。 例如

C:\Users\<UserName\.android\debug.keystore. 

而另一个发行版本是您在构建签名APK时使用的.jks文件中的SHA1值。

他们需要匹配,否则你将继续得到该错误。

最后,当您卸载应用程序时,请不要忘记清除数据和缓存,因为这有时会导致问题。

+0

晚了由“他们需要匹配,否则你会继续得到这个错误。” 你的意思是文件/变量名称,因为我这么做。 如何清除数据和缓存? –

+0

您正在使用的API密钥与您的清单和SHA1值 转到设置 - >应用程序 - >你会发现那里有按钮来删除缓存 –

+0

不幸的是清除缓存没有工作,而且我已经有2个条目在谷歌开发者一个用于调试,另一个用于发布。调试使用debug.keystore SHA1,Release使用我的密钥在google_maps_api.xml中使用相应的API键。仍然没有运气不幸没有运气 –