7

Ich versuche, meine App zu veröffentlichen, aber ein Problem mit Google Maps. Die App enthält eine Aktivität (MapActivity), die eine Karte anzeigt. Wenn die Karte im Debug-Modus ausgeführt wird, funktioniert sie gut. Ich habe meine App im Freigabemodus signiert und SHA1 bekommen. Ich habe einen neuen Android-Schlüssel in der Google-Konsole nach Bedarf erstellt (SHA1; Paketname). Got the API KeyGoogle Maps erscheint nicht auf Android im Freigabemodus

In meiner App referenzierte ich eine Kopie von google-play-services-lib wie erforderlich. Ich benutze 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> 

Das einzige seltsame Sache ist, dass, wenn ich keytool verwenden SHA1 zu bekommen erhalte ich " Name des Signaturalgorithmus: SHA256withRSA.kann das das Problem sein? Wenn ja, wie kann ich es ändern?

using keytool to get the certificate fingerprints

Ich bin hier irgendwie festgefahren! Danke für jede Hilfe!

+0

dies kann helfen http://stackoverflow.com/questions/13696620/google-maps-android-api-v2-authorization-failure – Waqas

+0

Versuchen Sie erneut, Ihren Freigabeschlüssel zu generieren: http://chocotech.blogspot.com/2012 /10/get-debug-key-and-release-key-for.html – svlzx

+0

https://Stackoverflow.com/a/46418176/2898708 –

Antwort

10

in der Karte API V2, die NUR Sache, die zwischen einer Release-Version und einer Debug-Version zu ändern ist der Schlüssel, den Sie hier https://code.google.com/apis/console/

registrieren Wenn debug und endgültige Version arbeiten, ist nicht, es ist der einzige ist Änderung notwendig.

Ich schlage also vor, dass Sie den Hash-Code Ihres Release-Keystores überprüfen und sicherstellen, dass er ordnungsgemäß in der Google API-Konsole eingegeben wird.

+1

kann es sein, dass der Signaturalgorithmus SHA1withRSA anstatt SHA256withRSA sein sollte? – user1851212

+0

Nur um einen Aspekt zu dieser sehr hilfreichen Antwort hinzuzufügen. Sie können einen API-Schlüssel für beide gleichzeitig erstellen, debuggen und freigeben. Auf diese Weise müssen Sie sich nicht mit Änderungen an der Manifest- oder Gradle-Konfiguration herumärgern. Verwenden Sie einfach die eine API-Taste, die mit all Ihren App-Tasten funktioniert. –

0

Löschen Sie einfach Daten (Einstellung-> App-App auswählen-Daten löschen-> deinstallieren) und versuchen Sie es. Das hat für mich funktioniert. Stellen Sie sicher, dass der Paketname derselbe wie in der Google Developer Console ist. Wenn Sie SHA1-Code aus benutzerdefinierten Keystore erstellt werden, verwenden Sie das gleiche im Freigabemodus. oder generiere apk, indem du mit demselben Schlüsselspeicher signierst.

0

1- Erstellen Sie eine apk-Datei mit "Verwenden Sie den Export-Assistenten" in "Android Manifest" -Datei Ihres Projekts.

2- als Nach dem Einfügen werden Schlüssel und vor der Fertigstellung, MD5 und SHA1 Tasten angezeigt für Android-Projekt für neue SHA1 gezeigt ist dies gegeben PIC-

3- neue API-Schlüssel erstellen, die in Punkt abgerufen 2.

4- Verwenden Sie die API-Schlüssel in Manifest-Datei wie unten

5- Reinigen Sie Ihr Projekt und bauen APK-Datei erneut gezeigt.

6- Sie können Google Maps jetzt in dieser apk sehen.

10

, wenn Sie bereits versucht @Budius Antwort und noch dieser Fehler auftritt, könnte es durch die folgende Situation verursacht werden:

Wenn Sie Ihre MapFragment hinzufügen, Android Studio 2 google_maps_api Dateien erstellen.xml: Eins innerhalb des Verzeichnisses src/debug/res/values ​​und das andere innerhalb src/release/res/values.

Aber aus irgendeinem Grund wird nur die Debug-Ordner-Datei in Android Studio angezeigt. Wenn Sie also den APIkey-Wert ändern, wird dies nur in der Debug-Ordnerdatei durchgeführt.

Kopieren Sie einfach die Datei google_maps_api.xml, um den Ordner freizugeben, und stellen Sie sicher, dass beide mit demselben APIKey arbeiten.

dies funktionierte für mich nach allen anderen Versuchen.

+1

Danke! behebe mein Problem – user3722523

+0

danke ... ich habe 48 Stunden gearbeitet, um das zu lösen. Nein, ich habe die Lösung. –