除非您(通过市集)更新Google Play服务,否则此应用将无法运行。


100

我正在测试适用于Android的新版Google Maps API V2,并且在应用启动时会收到以下消息:

MainActivity显示错误消息

它在4.1模拟器上运行。

这是我的AndroidManifest.xml文件:

<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>

文件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;
    }
}

文件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>

单击“更新”将使用以下堆栈跟踪使应用程序崩溃:

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)

我还引用了Google Play服务项目。我在这里做错了什么?

更新

Google问题追踪器(https://issuetracker.google.com/issues/35822258)中的相应错误已于一段时间前解决。

现在,您可以在模拟器中使用Google Maps Android API,并按照以下答案中的说明使用Play服务创建虚拟设备:

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


您是否将AVD与Google API或普通Android一起使用?
Selvin

普通的Android,尽管我只是尝试切换到4.1版的Google API,但还是一样。
soren.qvist 2012年

奇怪的是,我正在完全同时地看到完全相同的问题。到目前为止,我认为这是因为模拟器上未安装Google Play服务APK。该错误是因为该应用正在尝试启动Google Play(商店)以安装APK。它可能会在设备上正常工作。
gazreese,2012年


Answers:


42

根据 Google+上的Android开发人员的讨论,目前无法在模拟器上运行新的Map API。

(评论来自Zhelyazko Atanasov昨天23:18,我不知道如何直接链接到它)

同样,从实际设备运行时,您看不到“ (通过集市) ”部分,并且“更新”按钮打开了Play商店。我假设Bazaar打算在Android模拟器上提供Google Play服务,但尚未准备好...


15
好吧,这很不幸
soren.qvist 2012年

我尝试将最新的GmsCore.apk直接复制到仿真器,但这也不起作用。如果我确切知道要从根设备复制哪些APK,这可能会起作用。
詹姆斯·沃尔德

56

更新

现在,Google Maps API v2已安装在最新的Google系统映像(api:19 ARM或x86)上。
因此,您的应用程序应仅使用新图像。无需安装这些文件。

我一直在尝试在模拟器下运行Android Google Maps V2应用程序,一旦我终于运行了Google Play服务,便将我的SDK更新为Google Play服务修订版4,而我的模拟器将不再运行我的应用程序。

现在,我已经研究出如何从平板电脑更新模拟器。(您不需要平板电脑,因为您可以下载下面的文件。)

我使用Titanium Backup备份了华硕Eee Pad变压器(TF101),然后从备份中获取了com.android.vending和com.google.android.gms APK文件。

我将它们安装在配置了以下平台的仿真器上:4.1.2,API级别:16,CPU Intel / Atom x86),我的Google Maps V2应用程序再次运行。

那就是所有..关于/ system / app的其他步骤都不需要。

我的应用程序仅使用Google Maps API,毫无疑问,如果您使用其他Google Play服务,则需要执行更多步骤。

最新的Google Play服务的新文件:

与之前相同的说明:使用任何CPU / ABI,非Google API目标(版本10-19 均可)以及GPU仿真打开或关闭来创建一个新仿真器,然后安装文件:

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

如果要升级现有的模拟器,则可能需要通过以下方法来卸载以前的版本:

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

就这样。


模拟器是x86还是ARM都没有关系。平台:4.2也很好。
丹·布鲁夫

1
根据developer.android.com/google/play-services/index.html的说法。与Android 2.2(即API级别8)Deveices应足以只要设备还具有GL ES版本2
首领

1
我尝试安装这些文件,但adb向我显示了已安装文件的失败消息。我尝试重新安装,然后说证书不一致。那我该怎么办?
2013年

我可以使用adb uninstall com.android.vending和卸载预装的软件包adb uninstall com.google.android.gms。安装上述软件包后,我的应用程序运行,但是我EGL_emulation: eglSurfaceAttrib not implemented在日志中看到警告消息,并且在应用程序中看不到任何映射。我认为这是模拟器/ GPU问题。我的GPU是Radeon HD6870,我正在模拟器上运行没有Google API的Android 4.1.2。
dvim 2013年

关于“ EGL_emulation:eglSurfaceAttrib未实现”,请尝试在仿真选项下尝试“使用主机GPU”。
丹·布拉夫

39

我花了大约一天的时间在Android模拟器上配置新的gmaps API(Google Maps Android API v2)。我在Internet上找到的那些方法都无法正常工作。但是我还是做到了。方法如下:

  1. 使用以下配置创建一个新的模拟器:

在此处输入图片说明

在其他版本上,我在安装必要的应用程序时由于各种错误而无法配置。

2)启动模拟器并安装以下应用程序:

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

您可以使用以下命令执行此操作:

2.1)adb shell mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system
2.2)adb shell chmod 777 /system/app
2.3-2.5)adb push Each_of_the_3_apk_files.apk /system/app/

链接下载APK文件。我已经从根植的Android设备复制了它们。

3)在模拟器上安装Google Play服务Google Maps。如果我从Google Play商店安装它们,则会出现错误491 。我将应用程序上载到仿真器并在本地运行安装。(您可以adb用来安装它)。链接到应用程序:

4)这些步骤之后,我在模拟器上成功运行了一个演示示例。这是屏幕截图:

谷歌地图


我认为此方法具有一些不需要做的步骤。从另一个答案中尝试我的方法,只需安装两个apk ...
Nemanja Kovacevic

我尝试了您的方法,但是在将应用程序加载到system / app dir adb时,生成了一条错误消息,指出它的可用空间不足。创建具有大量内存的新仿真器无济于事。在其他版本的模拟器上,您的方法无效。
Paha 2012年

1
在步骤3)中,安装命令是adb install com.google.android.apps.maps-1.apkadb install com.google.android.gms-2.apk
sulai

并确保您获得适合您需求的Google Play服务版本。您可以从papktop.com/tag/google-play-services-apk下载它们。
sulai 2013年

只要确保您始终安装最新的Google Play APK版本即可,因为当前,Google Play v2不会让您安装更新(出现491错误),并且运行Google Maps应用程序需要此更新。
Serhiy 2013年

29

我第二次回答这个问题,因为我尝试过的解决方案最初不起作用,现在可以了,我可以重新创建使它起作用的步骤:)

我还感到缺乏Google Play商店是造成这种情况的罪魁祸首,因此我尝试通过此链接此链接的建议将Google Play商店安装到模拟器。我遇到了一些困难,但最后我成功安装了Google Play商店并通过下载一些随机应用程序对其进行了测试。但是地图活动始终使用“更新”按钮显示消息。该按钮会将我带到商店,但在那里我会收到一条有关“未找到项目”的消息,并且地图仍然无法正常工作。那时我放弃了。

昨天,我偶然启动了同一个测试应用程序,并且该应用程序正常工作!我很困惑,但是很快我就从它可以工作的模拟器和新的干净的模拟器中进行了区分,并在/ data / app /目录中的工作一个模拟器上确定了两个应用程序:com.android.vending-1。 apk和com.google.android.gms-1.apk。这很奇怪,因为当我按照这些站点的说明安装Google Play商店时,我将Phonesky.apk,GoogleServicesFramework.apk和GoogleLoginService.apk推送到了另一个文件夹/ system / app。

无论如何,现在Android Google Maps API v2正在我的模拟器上运行。这些是执行此操作的步骤:


创建一个新的模拟器

  • 对于设备,选择“ 5.1” WVGA(480 x 800:mdpi)”
  • 对于target,选择“ Android 4.1.2-API级别16”
  • 对于“ CPU / ABI”,选择“ ARM”
  • 将其余的保留为默认值

这些是对我有用的设置。我不知道不同。


启动模拟器


通过ADB安装命令安装com.android.vending-1.apkcom.google.android.gms-1.apk


Google Maps现在应该可以在您的模拟器中使用了。


这是指向我的博客的链接,其中描述了我为使这项工作成功
Nemanja Kovacevic

不幸的是,谷歌播放服务修订版4给出了新错误:谷歌播放服务已过期。需要2012100但找到2010110
Ilja S.

3
好的,如果您有Play服务的第4版,请查看@danbrough答案,然后下载评论中指定的apk:链接
Ilja S.

1
请注意,这也可以与x86一起使用,从而使仿真器更加灵活!
咖啡因

3

我已经创建了一个(德语)描述,说明如何使其工作。基本上,您需要一个至少具有API级别9且没有Google API的模拟器。然后,您必须从有设备获取APK :

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

并将它们安装在模拟器中:

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

如果您有一个至少具有API级别14的仿真器,并且您还可以安装本机,则甚至可以运行本机Google Maps App com.google.android.apps.maps-1.apk

玩得开心。


2

我一直在尝试在模拟器下运行Android Google Maps v2,但我发现有很多方法可以做到这一点,但是没有一个对我有用。我在Logcat中总是有此警告,Google Play services out of date. Requires 3025100 but found 2010110当我想在模拟器上更新Google Play服务时,什么也没发生。问题是com.google.android.gms APK与我的Android SDK中的库版本不兼容。

我在模拟器上安装了“ com.google.android.gms.apk”,“ com.android.vending.apk”这些文件,并且我的应用程序Google Maps v2正常运行。不需要有关/ system / app的其他步骤。


1
这些是要安装的文件:vending.apkgms.apk
Adil

2

除非您更新Google Play服务,否则该应用将无法运行。我已经尝试了很长时间了,但仍然没有得到地图。即使我修改了以下评论给出的Google Play服务,也只出现了空白屏幕。


检查您的播放服务清单文件,并检查APK文件com.google.android.gms的版本代码。在下面,它是“ 3136110”。下载这些APK文件并从DOS提示符下安装,但是在安装之前,请运行目标模拟器。

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

我从此链接获得了这些APK文件。


2

我通过执行以下步骤解决了这些问题:

  • 在模拟器中:

    您必须使用最新的API Google APIs(Google Inc.)-API Level 19

    完成屏幕快照本身中的其余操作。

    在此处输入图片说明

  • API密钥:

    创建新的API密钥,并仔细检查有关Google Map API密钥和SHA密钥的信息。

  • Google Play服务:

    您必须下载最新的Google Play服务 com.android.vending-4.8.20.apk。在该网站中,如果Google Play服务无法正常工作,则意味着您可以在Internet上找到很多名为的网站com.android.vending 4.8.20.apk

    您可以使用命令提示符运行Google Play服务 adb install com.android.vending 4.8.20.apk

    注意:您必须下载最新的Google Play服务,因为最新版本会在互联网上逐年更新。

    输出

    在此处输入图片说明


1
@JJD我被编辑了一下,它可以正常工作,谢谢指出。
2014年

0

由于Android私有库,更新到ADT 22.0.1后,Google Maps服务出现了一些错误,导致应用崩溃。所以我终于找到了解决方案,它对我有用。

只需安装Google Play服务库,然后google-play-service/libproject/google-play-services_lib从转到https://www.dropbox.com/sh/2ok76ep7lmav0qf/9XVlv61D2b。将其导入您的工作区。清理您要使用gogole-play-services-lib的项目,然后再次构建它,然后转到“ 项目” ->“ 属性” ->“ Java BuildPath” ->选择“ Android私有库,Android依赖关系,google-play-service”

在“属性”本身中,转到Android,然后选择任何版本,然后选择“添加”并选择“ google-play-service-lib”,然后按“应用”,最后按“确定”。

最后,转到项目-> Android工具-> Android支持库。接受许可证,安装后再运行您的项目。

它将正常工作。



0

在Android SDK Manager中,安装:其他功能:Google Play服务


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'

这对我有效当前版本为10.0.1

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.