Moje kroki:
- dostałem kod SHA1 z debug.keystore
- stwórz aplikację w konsoli Google API
- włączona mapa google api v2
- wprowadź SHA1; my.package.name
- pobierz klucz API
utworzono plik AndroidManifest:
<permission android:name="my.package.name.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> <uses-permission android:name="my.package.name.permission.MAPS_RECEIVE"/> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15"/> <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-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <uses-feature android:glEsVersion="0x00020000" android:required="true"/> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:hardwareAccelerated="true"> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="MY_API_KEY_HERE" /> <activity android:name="MyActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
utworzony układ
- wstaw „google-play-services.jar” do biblioteki libs
Po kompilacji mam awarię:
ERROR/AndroidRuntime(10182): FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
at com.google.android.gms.maps.MapFragment.onInflate(Unknown Source)
at android.app.Activity.onCreateView(Activity.java:4716)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
at android.app.Activity.setContentView(Activity.java:1881)
at com.example.gm2.MyActivity.onCreate(MyActivity.java:16)
at android.app.Activity.performCreate(Activity.java:5104)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5039)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Potem zmieniłem układ na:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" />
i zmienił MyActivity na
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.map, MapFragment.newInstance());
transaction.commit();
W rezultacie aplikacja została uruchomiona, ale nie widziałem mapy.
Dziennik konsoli:
ERROR/Google Maps Android API(10369): Authorization failure.
Odpowiedzi:
Kroki :
android.library.reference.1=google-play-services_lib
YOUR_PROJECT/proguard-project.txt
.
Teraz możesz stworzyć własną aplikację Google Map przy użyciu interfejsów API Map Google V2 dla Androida.
Jeśli tworzysz aplikację z min SDK = 8, użyj biblioteki obsługi Androida v4 + SupportMapFragment zamiast MapFragment.
źródło
to enable "Google Maps Android API v2"
-krok rozwiązał mój problem.Sprawdź również ten post: Przykładowy kod Google Map Android Api V2 nie działa , jeśli jesteś całkowicie pewien, że wykonałeś właściwe kroki, postępuj zgodnie z drugą odpowiedzią, uwierzytelnianie zostanie gdzieś zapisane w pamięci podręcznej, spróbuj ręcznie odinstalować aplikację (tak jak w przypadku normalna aplikacja), a następnie ponownie „Uruchom” projekt
źródło
bin
igen
. Wyczyść, odbuduj, a buforowane poświadczenia zostaną odnowione.Ponieważ zmarnowałem dużo czasu, aby API działało, spróbuję przeprowadzić weryfikację krok po kroku dla Map API v2:
Krok 1: Złóż wniosek o klucz API
Jeśli nie znasz konsoli Google API, przeczytaj bardzo dobrą odpowiedź Rusfearuth powyżej.
Krok 2: Sprawdź SHA Hash (w tym przypadku używam klucza debugowania eclipse):
Na komputerze z systemem Windows dostałem się do katalogu użytkownika w wierszu polecenia:
Otrzymasz coś takiego:
Następnie spójrz na nazwę swojego pakietu działania mapy, np. Com.example.mypackagename
Łączysz to i sprawdzasz ze swoimi ustawieniami w konsoli Google API:
gdzie otrzymujesz swój klucz API:
Krok 3. Manifestuj metadane
Sprawdź, czy metadane są obecne i zawierają właściwy klucz. Jeśli wydasz aplikację, potrzebujesz innego klucza.
Krok 4. Manifest cechy:
Potrzebujesz tego wpisu, ponieważ interfejs API map wymaga obsługi grafik:
Nie martw się, 99,7% urządzeń to obsługuje.
Krok 5. Biblioteka manifestów:
Dodaj bibliotekę Google.
Krok 6. Manifest uprawnień:
Sprawdź dwukrotnie nazwę pakietu: com.example.yourpackage
Dodaj następujące uprawnienia:
Poniższe uprawnienia są opcjonalne i nie są wymagane, jeśli wyświetlasz tylko mapę. Staraj się ich nie używać.
Krok 7. Dołącz fragment mapy do swojego układu:
Jeśli Twoja wersja na Androida to 2.x, musisz dodać obsługę w swojej Aktywności:
Do mapy: wpisy do pracy obejmują
w układzie działania (np. LinearLayout).
W moim przypadku muszę wyczyścić projekt za każdym razem, gdy zmieniam coś w layoucie. Wydaje się, że to błąd.
Krok 8: Użyj Eclipse - Project - Clean.
Cieszyć się!
źródło
Musisz użyć projektu biblioteki znajdującego się pod adresem: ANDROID-SDK-DIRECTORY / extras / google / google_play_services / libproject
To rozwiąże Twój pierwszy problem.
Nie jestem pewien co do twojego drugiego, ale może to być efekt uboczny pierwszego. Nadal staram się, aby mapa działała we własnej aplikacji :)
źródło
Dziś stanąłem przed tym problemem. Użyłem Android Studio 2.1.3, Windows 10. Podczas debugowania działa dobrze, ale jeśli zaktualizuję do trybu wydania, to nie działa. Usunąłem wszystkie warunki proguard, zaktualizowałem, ale to nie było rozwiązanie.
Rozwiązanie jest związane ze strukturą projektu. Plik google_maps_api.xml był inny w plikach app \ src \ debug \ res i app \ src \ release \ res. Zrobiłem ręczne kopiowanie wklejania z debugowania do folderu wydania.
Teraz działa.
źródło
Postępowałem zgodnie z większością, jeśli nie wszystkimi, sugestiami Gunnara Bernsteina wspomnianymi powyżej i nadal nie działały. Jednak zaczęło działać po tym, jak zastosowałem się do jego sugestii ORAZ następujących:
Utworzyłem nową MapActivity za pomocą listy opcji dostępnych po kliknięciu prawym przyciskiem myszy w Android Studio: Nowy -> Google -> Aktywność w Mapach Google
Następnie otworzyłem plik google_maps_api.xml , który jest generowany automatycznie i użyłem podanego linku do utworzenia nowego KLUCZA API. Wykonałem wszystkie kroki i zapisałem nowy klucz w bieżącym projekcie. Następnie usunąłem mój stary zarejestrowany klucz API, ponieważ nie był już potrzebny.
W pliku Manifest zastąpiłem starą wartość KLUCZA API ciągiem skrótów utworzonym przez ten nowy plik XML:
android:value="@string/google_maps_key
"zamiast bezpośredniego podawania KEY.Na koniec usuń nowy MapActivity, ale zachowaj plik xml, który został utworzony w tym procesie.
Uwaga: Tworząc w ten sposób KLUCZ API, kolumna Ograniczenia w obszarze Poświadczenia zawiera teraz nazwę „Aplikacje na Androida”. Wcześniej, gdy to nie działało, w kolumnie było napisane „Aplikacje na Androida, 1 API” lub coś podobnego. Nie wiem, czy to robi różnicę, czy nie.Uwaga: Nie, to po prostu oznacza, że nie mam określonego API wybranego dla tego klucza API (Konsola -> Klucz API -> Ograniczenia klucza -> Ograniczenia API).Uwaga: wygląda to tak, jak tag metadanych w pliku manifestu:
został zastąpiony przez:
Wydaje mi się, że można użyć obu, ale od początku lepiej jest używać tego drugiego.
Uwaga: Podana wartość w pliku build.gradle w obszarze android -> defaultConfig -> applicationId musi być zgodna z tekstem Nazwa pakietu na stronie Poświadczenia.
źródło
Solved!!!
Po prostu dodaj to do swojego pliku manifestu:
Na przykład...
I zaktualizuj bibliotekę usługi Google Play ... Przejdź do okna -> Menedżer sdk systemu Android -> zaktualizuj usługę Google Play ... zainstaluj ją ... usuń starą i zachowaj tę. Weź to z ANDROID-SDK-DIRECTORY / extras / google / google_play_services /
Dzięki. Głosuj proszę
źródło
Rozwiązałem ten błąd, sprawdzając nazwę pakietu w manifeście i aplikacji
build.gradle
.W oczywisty sposób:
Używam nazwy pakietu jako:
W aplikacji build.gradle:
Po zmianie na
com.app.triapp
wbuild.gradle
rozwiązano mój problem.źródło
Migracja z wersji 1 do wersji 2 Map Google. Otrzymywałem ten błąd podczas próby uruchomienia aplikacji przez Eclipse. Główną przyczyną dla mnie było użycie mojego magazynu kluczy certyfikatów wydania, a nie magazynu kluczy debugowania Androida, który jest używany, gdy uruchamiasz go przez Eclipse. Następujące polecenie (OSX / Linux) zapewni ci klucz SHA1 do magazynu kluczy debugowania:
Jeśli zamiast tego używasz systemu Windows 7, użyj tego polecenia:
Prawdopodobnie najlepiej jest całkowicie odinstalować aplikację z urządzenia, zanim spróbujesz użyć nowego klucza, ponieważ system Android buforuje dane uwierzytelniające.
źródło
„java.lang.NoClassDefFoundError: com.google.android.gms.R $ styleable”
A miał również ten błąd, musisz: Plik -> Importuj -> Istniejący kod Androida do obszaru roboczego -> Przeglądaj -> Android sdks -> dodatki -> google -> google_play_services -> lib_project -> google_play_services_lib i OK. Sprawdź projekt i zakończ.
Projekt trafia do Eksploratora pakietów. Teraz przejdź do swojego projektu (z błędem) -> właściwości -> Android iw Bibliotece kliknij Dodaj ... google_play_services_lib powinno tam być! dodaj i spróbuj ponownie :)
źródło
Miałem ten sam problem, ale okazało się, że jest to spowodowane tym, że stworzyłem dwa różne klucze API mapy z tym samym odciskiem palca SHA-1 z prawie podobną nazwą pakietu
com.bla.bla
i drugimcom.bla.bla.something
.źródło
Miałem dokładnie ten sam problem i po prostu musiałem ustawić SDK dla projektu biblioteki MapsApiV2 na Androida 2.3.3 (API lvl 10)
źródło
Miałem ten sam problem. Po około dwóch godzinach wyszukiwania w Google, ponownych prób, wielokrotnego generowania klucza API itp. Odkryłem, że włączyłem niewłaściwą usługę w Google APis Console. Włączyłem usługę Google Maps API v2 , ale w przypadku aplikacji na Androida musisz używać Google Maps Android API v2 . Po włączeniu odpowiedniej usługi wszystko zaczęło działać.
źródło
TWÓJ ECLIPSE MOŻE ZMIENIĆ KLUCZ SHA1, więc musisz zregenerować swój klucz Google za pomocą nowego klucza SHA1 tutaj: https://console.developers.google.com/project/watchful-net-796/apiui/credential Następnie skopiuj nowy klucz do manifestu i przeładuj tę stronę Google kilka razy, a twój klucz zostanie zaktualizowany, odbuduj swój projekt, będzie działać. P / S: Z powodu mojego błędu usunąłem folder .android, więc zaćmienie regen SHA1.
źródło
Wykonałem ten sam krok, co w dokumencie Google, ale otrzymałem ten sam błąd. Później zdałem sobie sprawę, że podpisuję moją aplikację za pomocą mojego app.keystore, a klucz SHA, którego użyłem do wygenerowania klucza API, był kluczem debugowania.
Więc po prostu usunąłem
signingConfig signingConfig.generic
from bybuild.gradle
file i moja mapa zaczęła działać dobrze.Mam nadzieję, że to komuś pomoże.
źródło
Miałem ten sam problem.
Jeśli wydałeś interfejs API dla swojej wersji aplikacji. Wtedy ten interfejs API będzie działał tylko dla wersji wydania, a nie dla wersji debugowania. Upewnij się więc, że używasz wersji wydania w telefonie lub emulatorze.
źródło
U mnie wszystko działało zarówno w emulatorze, jak i na fizycznym urządzeniu.
Jednak przestało działać dla mnie, gdy skonfigurowałem drugą maszynę do debugowania tej samej aplikacji w emulatorze z nowszym poziomem API.
Nie zdawałem sobie sprawy, że odcisk palca tej maszyny się zmienił. Po zobaczeniu dziennika błędu uwierzytelniania w dzienniku urządzenia dokładnie porównałem odcisk palca w mojej Konsoli programisty Google z tym w komunikacie o błędzie. Wtedy zobaczyłem różnicę. Po dodaniu nowego odcisku palca do Developer Console (w połączeniu z nazwą pakietu) moja aplikacja zaczęła działać zgodnie z oczekiwaniami w emulatorze w nowym systemie.
Jeśli więc skonfigurujesz nowy system, sprawdź ponownie swoje odciski palców!
źródło
SDK for Android
są włączone w konsoli API.źródło