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

时间:2012-12-03 21:22:48

标签: android google-maps android-mapview google-maps-android-api-2

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

MainActivity showing error message

这是在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

12 个答案:

答案 0 :(得分:55)

<强>更新

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

我一直在尝试在模拟器下运行Android Google Maps V2应用程序,一旦我最终运行Google Play服务,我将我的SDK更新为Google Play Services版本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

就是这样。

答案 1 :(得分:42)

根据Google+上的a discussion with Android Developers,目前无法在模拟器上运行新的Map API。

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

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

答案 2 :(得分:39)

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

  1. 使用以下配置创建新的模拟器:
  2. Enter image description here

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

    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/

    download APK files的链接。我已经从我的root设备中复制了它们。

    3)在模拟器上安装 Google Play服务 Google地图。我有错误491,如果我从 Google Play 商店安装它们。我将应用程序上传到模拟器并在本地运行安装。 (您可以使用adb来安装它)。应用程序的链接:

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

    Google Maps

答案 3 :(得分:29)

我第二次回答这个问题,因为我尝试过的解决方案现在无法正常工作,我可以重新创建步骤使其工作:)

我还觉得缺少Google Play商店是罪魁祸首,所以我尝试通过this linkthis link的建议将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以及其他文件夹/系统/应用程序。

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


创建新的模拟器

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

这些是适合我的设置。我不知道不同的。


启动模拟器


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


Google地图现在可以在您的模拟器中使用。

答案 4 :(得分:3)

我创建了一个(German) description how to get it working。 您基本上需要一个至少具有API级别9且没有Google API的模拟器。然后,您必须从 rooted 设备获取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并另外安装com.google.android.apps.maps-1.apk

,您甚至可以运行原生Google地图应用

玩得开心。

答案 5 :(得分: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的其他步骤是必需的。

答案 6 :(得分: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)

我从this link获得了这些APK文件。

答案 7 :(得分:2)

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

  • 在模拟器中:

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

    其他内容放在屏幕截图中。

    enter image description here

  • API密钥:

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

  • Google Play服务:

    您必须下载最新的Google Play服务    com.android.vending-4.8.20.apk。如果谷歌播放该网站    服务没有工作意味着你可以找到很多网站    互联网名为com.android.vending 4.8.20.apk

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

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

    <强>输出

    enter image description here

答案 8 :(得分:0)

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

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

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

最后,转到项目 - &gt; Android工具 - &gt; Android支持库。接受许可证,安装完成后再运行项目。

它会正常工作。

答案 9 :(得分:0)

我找到了一个很好的解决方案,可以让你在模拟器中测试你的应用程序,也不需要你恢复到旧版本的库。请参阅an answer to Stack Overflow question Running Google Maps v2 on the Android emulator

答案 10 :(得分:0)

从Android SDK Manager安装: 附加功能:Google Play服务

答案 11 :(得分: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