101

我正在测试适用于 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 Services 项目。我在这里做错了什么?

更新

Google 问题跟踪器 ( https://issuetracker.google.com/issues/35822258 ) 中的相应错误已在不久前解决。

现在您可以在模拟器中使用 Google Maps Android API 并使用 Play 服务创建虚拟设备,如本答案所述:

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

4

12 回答 12

56

更新

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

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

我现在已经弄清楚如何从我的变压器平板电脑更新我的模拟器。(您不需要平板电脑,因为您可以下载以下文件。)

我使用 Titanium Backup 来备份我的Asus Eee Pad Transformer (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

就这样。

于 2012-12-13T22:07:01.200 回答
42

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

(评论来自昨天23:18的Zhelyazko Atanasov,不知道怎么直接链接)

此外,在实际设备上运行时,您看不到“ (通过 Bazaar) ”部分,并且更新按钮会打开 Play 商店。我假设 Bazaar 旨在在 Android 模拟器上提供 Google Play 服务,但它还没有准备好......

于 2012-12-04T10:25:19.363 回答
39

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

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

在此处输入图像描述

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

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

  • 谷歌登录服务.apk
  • GoogleServicesFramework.apk
  • 电话天空.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 ServicesGoogle Maps 。如果我从Google Play商店安装它们,我会遇到错误 491。我将应用程序上传到模拟器并在本地运行安装。(您可以使用它adb来安装它)。应用程序链接:

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

谷歌地图

于 2012-12-07T14:32:09.143 回答
29

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

我也有一种感觉,缺少 Google Play 商店是这里的罪魁祸首,所以我尝试通过此链接上的建议将 Google Play 商店安装到模拟器上,结合此链接。我遇到了一些困难,但最后我成功安装了 Google Play Store 并通过下载一些随机应用程序对其进行了测试。但是地图活动继续显示带有“更新”按钮的消息。该按钮会将我带到商店,但在那里我会收到有关“找不到项目”的消息,并且地图仍然无法使用。那一刻我放弃了。

昨天,我不小心启动了同一个测试应用程序,它成功了!我很困惑,但很快我就从它正在工作的模拟器和新的干净的模拟器中做了一个差异,我已经确定了 /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)”
  • 对于目标,选择“Android 4.1.2 - API level 16”
  • 对于“CPU/ABI”,选择“ARM”
  • 将其余部分保留为默认值

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


启动模拟器


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


谷歌地图现在应该可以在你的模拟器中运行了。

于 2012-12-06T00:19:03.623 回答
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 应用程序com.google.android.apps.maps-1.apk

玩得开心。

于 2013-05-08T05:49:16.340 回答
2

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

  • 在模拟器中:

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

    执行屏幕截图本身中的其余操作。

    在此处输入图像描述

  • API 密钥:

    创建新的 API 密钥并仔细检查 Google Map API 密钥和 SHA 密钥。

  • 谷歌播放服务:

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

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

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

    输出

    在此处输入图像描述

于 2014-05-30T13:34:24.063 回答
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 的其他步骤。

于 2013-03-11T12:32:23.570 回答
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 文件。

于 2013-08-23T13:18:59.047 回答
0

更新到 ADT 22.0.1 后,由于 Android 私有库,谷歌地图服务出现错误,应用程序崩溃。所以我终于找到了解决方案,它对我有用。

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

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

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

它会正常工作。

于 2013-06-03T07:06:50.017 回答
0

我找到了一个很好的解决方案,它可以让您在模拟器中测试您的应用程序,并且不需要您恢复到旧版本的库。查看Stack Overflow 问题的答案Running Google Maps v2 on the Android emulator

于 2013-06-11T04:11:52.310 回答
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

于 2016-12-03T11:32:20.370 回答
0

从 Android SDK Manager 安装:Extras: Google Play services

于 2015-11-21T14:48:03.633 回答