Google maps not showing on android in release mode

11,475

Solution 1

if you already tried @Budius answer and still facing this error, it might be caused by the following situation:

When you add your MapFragment, Android Studio create 2 files google_maps_api.xml: one inside src/debug/res/values folder and the other inside src/release/res/values.

But for some reason only the debug folder file is showed on Android Studio. So, when you change the APIkey value, it is done only at debug folder file.

So just copy the google_maps_api.xml file to release folder and assure that both are with same APIKey.

this worked for me after all other attempts.

Solution 2

in the map API V2, the ONLY thing that change between a release version and a debug version is the Key that you register here https://code.google.com/apis/console/

If debug is working and final release is not, it's the only change necessary.

So I suggest you to double check the hash code of your release keystore and make sure that it's properly input on the Google API Console.

Solution 3

I was also facing the same problem since last few days and it took me around 2-3 days to figure out the problem. You need to add your API key at 2 places one in app/src/debug/res/values/google_maps_api.xml and other in app/src/release/res/values/google_maps_api.xml.

You can find the release/google_maps_api.xml in the project mode not in the Android/application mode.

You can check the pic here that where the release/google_maps_api.xml is available

Share:
11,475
user1851212
Author by

user1851212

Updated on June 05, 2022

Comments

  • user1851212
    user1851212 about 2 years

    I am trying to release my app, but having a problem with google maps. The app contains an activity (MapActivity) that displays a map. When running in debug mode, the map works fine. I signed my app in release mode, and got SHA1. I created a new android key on Google console as required (SHA1;packageName). Got the API Key

    In my App, I referenced a copy of google-play-services-lib as required. I am using ADT.

    map.xml

    <?xml version="1.0" encoding="utf-8"?>
    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.google.android.gms.maps.SupportMapFragment" />
    

    MapActivity.java

    public class MapActivity extends FragmentActivity {
    
    private GoogleMap map;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map);
    
        map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                            .getMap();
      }
    

    AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.rentalcar"
    android:versionCode="1"
    android:versionName="1.0" >
    
    
    
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    
    <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-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
    <uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"/>
    
    <permission
          android:name="com.example.rentalcar.permission.MAPS_RECEIVE"
          android:protectionLevel="signature"/>
        <uses-permission android:name="com.example.rentalcar.permission.MAPS_RECEIVE"/>
    
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
         >
    
        <activity
            android:name="com.example.rentalcar.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
             <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter> 
        </activity>      
    
        <activity
            android:name="com.example.rentalcar.MapActivity"
            android:label="@string/title_activity_map"
            android:screenOrientation="portrait" >
        </activity>
    
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="My_Key"/>
    
    </application>
    
    </manifest>
    

    The only weird thing is that when I use keytool to get SHA1 I get "Signature Algorithm name: SHA256withRSA. can this be the problem? If yes, how can I change it?

    using keytool to get the certificate fingerprints

    I am kind of stuck here! Thank you for any help!

  • user1851212
    user1851212 over 11 years
    can it be that the signature algorithm should be SHA1withRSA rather than SHA256withRSA?
  • Hermann Klecker
    Hermann Klecker about 10 years
    Just to add an aspect to this very helpful answer. You can create an API key for both at once, debug and release key. Doing so you don't have to hassle with changes to the manifest or gradle config or so. Just use the one api key that works with all your app keys.
  • Shihab Uddin
    Shihab Uddin almost 7 years
    thanks ... i have been working 48 hours to solve this. no i got the solution.
  • Gaurav Arora
    Gaurav Arora about 5 years
    @Tarciso. My debug apps are working fine. but release apk maps is not working. I have checked google_maps_api files well.. they all have updated key.. still not visible maps
  • Tarciso Junior
    Tarciso Junior about 5 years
    @GauravArora, did it showed something in console output ? had you checked in you google API Key if its enabled for production ?