Google Maps API v2不适用于发布密钥

时间:2015-05-22 01:45:14

标签: android google-maps

我已经尝试了大约一个星期来解决这个问题。我有谷歌地图在调试中工作得非常好,但无论我在打包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.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.+'
}

我不知道出了什么问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

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

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

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

他们需要匹配,否则你会继续犯这个错误。

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