Ta aplikacja nie będzie działać, dopóki nie zaktualizujesz usług Google Play (przez Bazaar)

100

Testuję nowy interfejs API Map Google w wersji 2 na Androida i po uruchomieniu aplikacji pojawia się następujący komunikat:

MainActivity pokazuje komunikat o błędzie

Działa na emulatorze 4.1.

Oto mój AndroidManifest.xmlplik:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.maptest"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <permission
        android:name="com.example.maptest.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>
    <uses-permission android:name="com.example.maptest.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"/>

    <!-- Require OpenGL ES version 2 -->
    <uses-feature
          android:glEsVersion="0x00020000"
          android:required="true"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name=".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>

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

    </application>
</manifest>

Plik MainActivity.java:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

Plik activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.MapFragment"/>
</RelativeLayout>

Kliknięcie „Aktualizuj” powoduje zawieszenie aplikacji z następującym śladem stosu:

E/Trace(1034): error opening trace file: No such file or directory (2)
W/GooglePlayServicesUtil(1034): Google Play services out of date.  Requires 2010100 but found 1
W/GooglePlayServicesUtil(1034): Google Play services out of date.  Requires 2010100 but found 1
W/GooglePlayServicesUtil(1034): Google Play services out of date.  Requires 2010100 but found 1
W/GooglePlayServicesUtil(1034): Google Play services out of date.  Requires 2010100 but found 1
W/GooglePlayServicesUtil(1034): Google Play services out of date.  Requires 2010100 but found 1
W/GooglePlayServicesUtil(1034): Google Play services out of date.  Requires 2010100 but found 1
D/gralloc_goldfish(1034): Emulator without GPU emulation detected.
D/AndroidRuntime(1034): Shutting down VM
W/dalvikvm(1034): threadid=1: thread exiting with uncaught exception (group=0x40a13300)

E/AndroidRuntime(1034): FATAL EXCEPTION: main
E/AndroidRuntime(1034): android.content.ActivityNotFoundException: No Activity found to handle Intent
  { act=android.intent.action.VIEW dat=http://play.google.com/store/apps/details? \
  id=com.google.android.apps.bazaar flg=0x80000 pkg=com.android.vending }
E/AndroidRuntime(1034):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1545)
E/AndroidRuntime(1034):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1416)
E/AndroidRuntime(1034):     at android.app.Activity.startActivityForResult(Activity.java:3351)
E/AndroidRuntime(1034):     at android.app.Activity.startActivityForResult(Activity.java:3312)
E/AndroidRuntime(1034):     at android.app.Activity.startActivity(Activity.java:3522)
E/AndroidRuntime(1034):     at android.app.Activity.startActivity(Activity.java:3490)
E/AndroidRuntime(1034):     at com.google.android.gms.internal.c$2.onClick(Unknown Source)
E/AndroidRuntime(1034):     at android.view.View.performClick(View.java:4084)
E/AndroidRuntime(1034):     at android.view.View$PerformClick.run(View.java:16966)
E/AndroidRuntime(1034):     at android.os.Handler.handleCallback(Handler.java:615)
E/AndroidRuntime(1034):     at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(1034):     at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(1034):     at android.app.ActivityThread.main(ActivityThread.java:4745)
E/AndroidRuntime(1034):     at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(1034):     at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(1034):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
E/AndroidRuntime(1034):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
E/AndroidRuntime(1034):     at dalvik.system.NativeStart.main(Native Method)

Odniosłem się również do projektu usług Google Play. Co ja tu robię źle?

AKTUALIZACJA

Odpowiedni błąd w narzędziu do śledzenia problemów Google ( https://issuetracker.google.com/issues/35822258 ) został rozwiązany jakiś czas temu.

Teraz możesz używać Google Maps Android API w emulatorze i tworzyć urządzenia wirtualne z usługami Play, jak opisano w tej odpowiedzi:

https://stackoverflow.com/a/46246782/5140781

soren.qvist
źródło
Czy używasz AVD z Google API lub zwykłym Androidem?
Selvin
Zwykły Android, chociaż właśnie próbowałem przejść na API Google w wersji 4.1 i jest tak samo.
soren.qvist
O dziwo, patrzę dokładnie na ten sam problem w tym samym czasie. Zakładam, że dzieje się tak dlatego, że pakiet APK usług Google Play nie jest zainstalowany na emulatorze. Błąd jest spowodowany tym, że aplikacja próbuje uruchomić Google Play (sklep), aby zainstalować APK. Prawdopodobnie będzie działać dobrze na urządzeniu.
gazreese

Odpowiedzi:

42

Według dyskusji z Android Developers w Google+, uruchomienie nowego Map API na emulatorze nie jest obecnie możliwe.

(Komentarz pochodzi od Zhelyazko Atanasova wczoraj o 23:18, nie wiem, jak bezpośrednio do niego linkować)

Ponadto nie widać części „ (przez Bazaar) ” podczas uruchamiania z rzeczywistego urządzenia, a przycisk aktualizacji otwiera Sklep Play. Zakładam, że Bazaar ma zapewniać usługi Google Play na emulatorze Androida, ale nie jest jeszcze gotowy ...

nicopico
źródło
15
Cóż, to niefortunne
soren.qvist
Próbowałem skopiować najnowszy GmsCore.apk bezpośrednio do emulatora, ale to też nie działa. Prawdopodobnie zadziałałoby, gdybym wiedział dokładnie, które pliki APK skopiować z mojego zrootowanego urządzenia.
James Wald,
56

AKTUALIZACJA

Interfejs API map Google v2 jest teraz instalowany na najnowszych obrazach systemu Google (api: 19 ARM lub x86).
Twoja aplikacja powinna więc działać z nowymi obrazami. Nie ma potrzeby instalowania tych plików.

Próbowałem uruchomić aplikację Android Google Maps V2 pod emulatorem i kiedy wreszcie uruchomiłem usługi Google Play, zaktualizowałem mój zestaw SDK do wersji 4 usług Google Play, a mój emulator nie uruchamiał już mojej aplikacji.

Teraz opracowałem, jak zaktualizować mój emulator z mojego tabletu Transformer. (Nie potrzebujesz tabletu, ponieważ możesz pobrać poniższe pliki).

Użyłem Titanium Backup do wykonania kopii zapasowej mojego Asus Eee Pad Transformer (TF101), a następnie pobrałem pliki APK com.android.vending i com.google.android.gms z kopii zapasowej.

Zainstalowałem je na emulatorze skonfigurowanym z platformą: 4.1.2, API Level: 16, CPU Intel / Atom x86) i moja aplikacja Google Maps V2 znów działa.

To wszystko… żadne inne kroki dotyczące / system / app nie były wymagane.

Moja aplikacja korzysta tylko z Google Maps API, bez wątpienia konieczne są dalsze kroki, jeśli korzystasz z innych usług Google Play.

Nowe pliki dla najnowszych usług Google Play:

Te same instrukcje co poprzednio: utwórz nowy emulator z dowolnym procesorem / ABI , celem interfejsu API innego niż Google (działają wersje 10-19) i włącz lub wyłącz emulację GPU , a następnie zainstaluj pliki:

adb install com.android.vending-20140218.apk
adb install com.google.android.gms-20140218.apk

Jeśli uaktualniasz istniejący emulator, może być konieczne odinstalowanie poprzednich wersji poprzez:

adb uninstall com.android.vending
adb uninstall com.google.android.gms

To wszystko.

danbrough
źródło
Nie ma znaczenia, czy Twój emulator to x86 czy ARM. Platforma: 4.2 też jest w porządku.
Dan Brough
1
Według developer.android.com/google/play-services/index.html . Urządzenia z Androidem 2.2 (czyli API na poziomie 8) powinny wystarczyć, o ile urządzenia mają również GL ES w wersji 2.
Jarl
1
Próbowałem zainstalować te pliki, ale adb pokazał mi komunikat o błędzie, że pliki są już zainstalowane. Próbowałem przeinstalować, ale okazało się, że certyfikaty są niespójne. Więc co powinienem zrobić?
huong
Udało mi się odinstalować wstępnie zainstalowane pakiety za pomocą adb uninstall com.android.vendingi adb uninstall com.google.android.gms. Po zainstalowaniu powyższych pakietów moja aplikacja działa, ale EGL_emulation: eglSurfaceAttrib not implementedw logu są wyświetlane komunikaty ostrzegawcze i żadna mapa nie jest widoczna w aplikacji. Uważam, że jest to problem z emulatorem / GPU. Mój procesor graficzny działa Radeon HD6870i korzystałem z Androida 4.1.2 bez interfejsów API Google na emulatorze.
dvim
Jeśli chodzi o „Emulację_EGL: eglSurfaceAttrib nie zaimplementowano”, może spróbuj użyć opcji „Użyj GPU hosta” w opcjach emulacji.
Dan Brough
39

Spędziłem około jednego dnia, aby skonfigurować nowy interfejs API gmaps (Google Maps Android API v2) na emulatorze Androida. Żadna z metod, które znalazłem w Internecie, nie działała poprawnie dla mnie. Ale nadal to zrobiłem. Oto jak:

  1. Utwórz nowy emulator z następującą konfiguracją:

Tutaj wprowadź opis obrazu

W innych wersjach nie mogłem skonfigurować z powodu różnych błędów podczas instalowania niezbędnych aplikacji.

2) Uruchom emulator i zainstaluj następujące aplikacje:

  • GoogleLoginService.apk
  • GoogleServicesFramework.apk
  • Phonesky.apk

Możesz to zrobić za pomocą następujących poleceń:

2, 1) 2, adb shell mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system
2) 2, 3 - 2, 5 adb shell chmod 777 /system/app
)adb push Each_of_the_3_apk_files.apk /system/app/

Linki do pobierania plików APK . Skopiowałem je z mojego zrootowanego urządzenia z Androidem.

3) Zainstaluj usługi Google Play i Google Maps na emulatorze. Mam błąd 491, jeśli instaluję je ze sklepu Google Play . Wgrałem aplikacje do emulatora i uruchomiłem instalację lokalnie. (Możesz użyć, adbaby to zainstalować). Linki do aplikacji:

4) Po wykonaniu tych czynności pomyślnie uruchomiłem próbkę demonstracyjną na emulatorze. Oto zrzut ekranu:

mapy Google

Paha
źródło
Myślę, że ta metoda ma kilka niepotrzebnych kroków. Wypróbuj moją metodę z jednej z innych odpowiedzi, mając tylko dwa apki do zainstalowania ...
Nemanja Kovacevic,
Wypróbowałem twoją metodę, ale podczas ładowania aplikacji do katalogu systemowego / aplikacji adb wygenerował błąd informujący, że nie ma wystarczającej ilości wolnego miejsca. Stworzenie nowego emulatora z dużą ilością pamięci nie pomogło. W innych wersjach emulatora Twoja metoda nie działała.
Paha
1
W kroku 3) polecenie instalacji to adb install com.google.android.apps.maps-1.apki adb install com.google.android.gms-2.apk.
sulai
I upewnij się, że masz wersję usługi Google Play, która odpowiada Twoim potrzebom. Możesz je pobrać ze strony papktop.com/tag/google-play-services-apk .
sulai
Tylko upewnij się, że zawsze instalujesz najnowszą wersję APK Google Play, ponieważ w tej chwili Google Play v2 nie pozwala na instalację aktualizacji (dając paskudny błąd 491) i ta aktualizacja jest wymagana do uruchamiania aplikacji Google Maps.
Serhiy
29

Odpowiadam na to pytanie po raz drugi, ponieważ rozwiązanie, które wypróbowałem, które na początku nie działało, teraz działa i mogę odtworzyć kroki, aby zadziałało :)

Miałem też przeczucie, że winowajcą jest brak sklepu Google Play, więc próbowałem zainstalować Google Play Store na emulatorze, kierując się radą pod tym linkiem i połączonym tym linkiem . Miałem pewne trudności, ale w końcu udało mi się zainstalować Google Play Store i przetestowałem go, pobierając losową aplikację. Jednak aktywność map nadal wyświetlała komunikat z przyciskiem „Aktualizuj”. Ten przycisk zaprowadziłby mnie do sklepu, ale tam otrzymywałbym komunikat „nie znaleziono przedmiotu”, a mapy nadal nie działały. W tym momencie poddałem się.

Wczoraj przez przypadek uruchomiłem tę samą aplikację testową i zadziałała! Byłem bardzo zdezorientowany, ale szybko zrobiłem różnicę z emulatora, w którym działa, i nowy, czysty i określiłem dwie aplikacje na działającym w / data / app / katalog: com.android.vending-1. apk i com.google.android.gms-1.apk. Jest to dziwne, ponieważ kiedy instalowałem Google Play Store zgodnie z instrukcjami z tych stron, wysyłałem Phonesky.apk, GoogleServicesFramework.apk i GoogleLoginService.apk i do innego folderu / systemu / aplikacji.

W każdym razie, teraz Android Google Maps API v2 działa na moim emulatorze. Oto kroki, aby to zrobić:


Utwórz nowy emulator

  • Na urządzeniu , wybierz "5.1 '' WVGA (480 x 800: MDPI)"
  • Jako cel wybierz „Android 4.1.2 - poziom interfejsu API 16”
  • W polu „CPU / ABI” wybierz „ARM”
  • Resztę pozostaw domyślną

To są ustawienia, które działają dla mnie. Nie znam innych.


Uruchom emulator


zainstaluj com.android.vending-1.apk i com.google.android.gms-1.apk za pomocą polecenia instalacji ADB


Mapy Google powinny teraz działać w Twoim emulatorze.

Nemanja Kovacevic
źródło
Oto link do mojego bloga z opisem tego, co próbowałem zrobić, aby ta praca nemanjakovacevic.net/blog/2012/12/...
Nemanja Kovacevic
Niestety, wersja 4 usług Google Play daje nowy błąd: Usługi Google Play są nieaktualne. Wymaga 2012100, ale znaleziono 2010110
Ilja S.
3
Ok, jeśli masz czwartą wersję usług Play, spójrz na odpowiedź @danbrough i pobierz apki określone w komentarzu: link
Ilja S.
1
zwróć uwagę, że działa to również z x86, dzięki czemu emulator jest znacznie bardziej zgryźliwy!
Kofeina
3

Stworzyłem (niemiecki) opis, jak to działa . Zasadniczo potrzebujesz emulatora z co najmniej poziomem API 9 i bez interfejsów API Google. Następnie musisz pobrać pakiety APK z zrootowanego urządzenia:

adb -d pull /data/app/com.android.vending-2.apk
adb -d pull /data/app/com.google.android.gms-2.apk

i zainstaluj je w emulatorze:

adb -e install com.android.vending-2.apk
adb -e install com.google.android.gms-2.apk

Możesz nawet uruchomić natywną aplikację Google Maps, jeśli masz emulator z co najmniej poziomem API 14 i dodatkowo zainstalować com.google.android.apps.maps-1.apk

Baw się dobrze.

Kurt Huwig
źródło
2

Próbowałem uruchomić Android Google Maps v2 pod emulatorem i znalazłem na to wiele sposobów, ale żaden z nich nie działał dla mnie. Zawsze mam to ostrzeżenie w Logcat Google Play services out of date. Requires 3025100 but found 2010110i gdy chcę zaktualizować usługi Google Play na emulatorze nic się nie stało. Problem polegał na tym, że plik APK com.google.android.gms nie był zgodny z wersją biblioteki w moim Android SDK.

Zainstalowałem te pliki „com.google.android.gms.apk”, „com.android.vending.apk” na moim emulatorze, a moja aplikacja Mapy Google v2 działała dobrze. Żaden z pozostałych kroków dotyczących / system / app nie był wymagany.

Adil
źródło
1
to są pliki zainstalować: vending.apk i gms.apk
Adil
2

Ta aplikacja nie będzie działać, dopóki nie zaktualizujesz Usług Google Play. Próbowałem tego przez tak długi czas, ale nadal nie dostałem mapy ... Pojawia się tylko pusty ekran, nawet jeśli zmodyfikowałem usługę Google Play podaną w poniższym komentarzu ..


Sprawdź plik manifestu usług Play i sprawdź kod wersji pliku APK com.google.android.gms. Poniżej jest to „3136110”. Pobierz te pliki APK i zainstaluj z wiersza poleceń DOS, ale przed instalacją uruchom docelowy emulator.

package="com.google.android.gms"
android:versionCode="3136110"
android:versionName="3.1.36 (673201-10)

Mam te pliki APK z tego linku .

użytkownik
źródło
2

Rozwiązałem ten problem, wykonując następujące kroki:

  • W emulatorze:

    Musisz korzystać z najnowszego API Google APIs(Google Inc.)-API Level 19.

    Zrób resztę rzeczy umieszczonych na zrzucie ekranu.

    wprowadź opis obrazu tutaj

  • Klucz API:

    Utwórz nowy klucz API i dokładnie sprawdź klucz Google Map API i klucz SHA.

  • Usługi Google Play:

    Musisz pobrać najnowsze usługi Google Play com.android.vending-4.8.20.apk. W tej witrynie, jeśli usługi Google Play nie działają, oznacza to, że możesz znaleźć wiele witryn w Internecie o nazwie com.android.vending 4.8.20.apk.

    możesz uruchomić usługi Google Play za pomocą wiersza polecenia adb install com.android.vending 4.8.20.apk.

    Uwaga: musisz pobrać najnowsze usługi Google Play, ponieważ z roku na rok najnowsza wersja będzie aktualizowana w Internecie.

    wyjście :

    wprowadź opis obrazu tutaj

Steve
źródło
1
@JJD Jestem redagowany sprawdź to, będzie działać.Dzięki za wskazanie.
Steve
0

Po aktualizacji do ADT 22.0.1, z powodu prywatnych bibliotek Androida, usługa Google Maps wyświetlała błąd i aplikacja uległa awarii. W końcu znalazłem rozwiązanie i zadziałało.

Wystarczy zainstalować bibliotekę usług Google Play, a następnie przejść do google-play-service/libproject/google-play-services_libz https://www.dropbox.com/sh/2ok76ep7lmav0qf/9XVlv61D2b. Zaimportuj to do swojego obszaru roboczego. Wyczyść projekt, w którym chcesz używać gogole-play-services-lib, a następnie utwórz go ponownie i przejdź do projektu -> Właściwości -> Java BuildPath -> wybierz „Prywatne biblioteki Androida, zależności systemu Android, usługa google-play”

W samych Właściwościach przejdź do Androida, a następnie wybierz dowolną wersję, a następnie wybierz dodaj i wybierz google-play-service-lib, a następnie naciśnij zastosuj i na koniec OK.

W końcu przejdź do Project -> Android Tools -> Android Support Libraries. Zaakceptuj licencję i po zainstalowaniu uruchom swój projekt.

Będzie działać dobrze.

Honey Shah
źródło
0

Z Menedżera Android SDK zainstaluj: Dodatki: usługi Google Play

Franck
źródło
0
 just change it to 

compile 'com.google.android.gms:play-services-maps:9.6.0'
compile 'com.google.android.gms:play-services-location:9.6.0'

to działa dla mnie aktualna wersja to 10.0.1

jagapathi
źródło