Карта Google не загружается после подписания приложения? Как это решить?

Привет всем, я создал приложение для Android, которое отображает карту Google и устанавливает маркеры на карте Google. Приложение работает нормально, пока я не подпишу это приложение.

Моя проблема в том, что после подписания приложения карта Google не загружается.

В чем проблема?

Я использую Google Api v2 и фрагмент карты для просмотра карты.

Вот мой код манифеста....

       <?xml version="1.0" encoding="utf-8"?>
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="example.tranzlogix_map"
         android:versionCode="1"
         android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="4"
    android:targetSdkVersion="19" />



 <permission 
    android:name="example.tranzlogix_map.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature"></permission>

<uses-permission 
    android:name="example.tranzlogix_map.permission.MAPS_RECEIVE"/>
<uses-permission 
    android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission 
    android:name="android.permission.INTERNET"/>
<uses-permission 
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<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"/>



<application
    android:allowBackup="true"
    android:icon="@drawable/goo"
    android:label="@string/app_name"
    android:theme="@style/Translucent" >

    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="AIzaSyB6ut74Pvg8T2rs7jg5GSjD6Es4beyxSYI"/>


    <activity
        android:name="example.tranzlogix_map.LoginActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name="example.tranzlogix_map.HelpActivity"
        android:label="@string/app_name" >

    </activity>
      <activity
        android:name="example.tranzlogix_map.MainActivity"
        android:label="@string/app_name" >

       </activity>


     </application>

  </manifest>

person Rag-hul    schedule 21.11.2013    source источник


Ответы (3)


Вероятно, у вас все еще есть ключ API карт Google на основе хэша SHA1 сертификата DEBUG.

После подписания приложения для выпуска вам нужно будет установить ключ API Карт на основе хэша SHA1 сертификата RELEASE.

См. отображение отпечатка сертификата выпуска
https://developers.google.com/maps/documentation/android/start#getting_the_google_maps_android_api_v2

Получите хэш Release SHA1, сгенерируйте ключ API и установите его в качестве ключа в манифесте.

person agomes    schedule 21.11.2013

добавьте это meta_data под своим meta_data:

<meta-data android:name="com.google.android.gms.version" 
android:value="@integer/google_play_services_version" /> 

и добавьте это permission:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

------------- Редактировать---------------

вот ваш манифест с необходимой метой и разрешениями. Если у вас все еще есть ошибка, добавьте ее в вопрос как отредактированный

      <?xml version="1.0" encoding="utf-8"?>
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="example.tranzlogix_map"
         android:versionCode="1"
         android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="19" />



 <permission 
    android:name="example.tranzlogix_map.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature"></permission>

<uses-permission 
    android:name="example.tranzlogix_map.permission.MAPS_RECEIVE"/>
<uses-permission 
    android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<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_COARSE_LOCATION"/>
<uses-permission 
    android:name="android.permission.ACCESS_FINE_LOCATION"/>

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"/>



<application
    android:allowBackup="true"
    android:icon="@drawable/goo"
    android:label="@string/app_name"
    android:theme="@style/Translucent" >

    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="AIzaSyB6ut74Pvg8T2rs7jg5GSjD6Es4beyxSYI"/>
    <meta-data android:name="com.google.android.gms.version" 
    android:value="@integer/google_play_services_version" /> 


    <activity
        android:name="example.tranzlogix_map.LoginActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name="example.tranzlogix_map.HelpActivity"
        android:label="@string/app_name" >

    </activity>
      <activity
        android:name="example.tranzlogix_map.MainActivity"
        android:label="@string/app_name" >

       </activity>


     </application>

  </manifest>

глядя на это минимальный API уровень для карты 8, поэтому вам нужно изменить minSdkVersion на 8

person Coderji    schedule 21.11.2013
comment
я пытался добавить эти значения метаданных, но он выдает ошибки, если вы не возражаете, измените метаданные в моем манифесте и опубликуйте их здесь. Большое спасибо - person Rag-hul; 21.11.2013
comment
пожалуйста, проверьте отредактированную часть. надеюсь, что это работает, если это не так, пожалуйста, обновите ошибку logcat - person Coderji; 21.11.2013
comment
Я не получаю никаких ошибок ... Тем не менее серый цвет отображается вместо карты Google. Когда я подписываю приложение, отпечаток пальца sha изменяется, я создал новый ключ Android в консоли Google API с этим sha и моим именем пакета ... что делать после этого ... нужно ли мне использовать этот сгенерированный ключ API где-нибудь в моем манифесте ... все еще очень запутался .... - person Rag-hul; 21.11.2013

Вы пытались импортировать 'google-play-services'? Проблема может возникнуть при импорте другой версии google-play-services. Сначала я импортировал v29, и он не работал, поэтому иногда вам просто нужно оставаться на низком уровне. Я получил это при использовании v12.

person George Aykara    schedule 06.05.2016