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

Posted

技术标签:

【中文标题】除非您更新 Google Play 服务(通过 Bazaar),否则此应用将无法运行【英文标题】:This app won't run unless you update Google Play Services (via Bazaar) 【发布时间】:2012-11-21 10:21:57 【问题描述】:

我正在测试新的适用于 android 的 Google Maps API V2,当应用启动时我收到以下消息:

这是在 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_
    android:layout_ >

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map"
        android:layout_
        android:layout_
        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://***.com/a/46246782/5140781

【问题讨论】:

你是使用 avd 和 google api 还是普通的 android? Plain Android,虽然我刚刚尝试切换到 4.1 的 Google API,但结果是一样的。 奇怪的是,我在完全相同的时间看到完全相同的问题。到目前为止,我假设这是因为模拟器上没有安装 Google Play Services APK。该错误是因为应用程序正在尝试启动 Google Play(商店)来安装 APK。它可能会在设备上正常工作。 募集 - code.google.com/p/gmaps-api-issues/issues/detail?id=4627 @soren.qvist How to set up a fast emulator for Android on Linux? 【参考方案1】:
 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

【讨论】:

【参考方案2】:

从 Android SDK 管理器中,安装: 附加功能:Google Play 服务

【讨论】:

【参考方案3】:

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

在模拟器中:

您必须使用最新的 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.In that site if google play 服务不工作意味着你可以找到很多网站 互联网名为com.android.vending 4.8.20.apk

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

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

输出

【讨论】:

@JJD 我正在编辑检查一下。它会起作用的。谢谢你的指出。【参考方案4】:

更新

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 服务的新文件:

com.google.android.gms-20140218.apk

com.android.vending-20140218.apk

与以前相同的说明:使用任何 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也可以。 根据developer.android.com/google/play-services/index.html。只要设备还具有 GL ES 版本 2,使用 Android 2.2(即 API 级别 8)的设备就足够了。 我尝试安装这些文件,但 adb 向我显示文件已安装的失败消息。我尝试重新安装,然后它说证书不一致。那我该怎么办? 我能够使用adb uninstall com.android.vendingadb uninstall com.google.android.gms 卸载预安装的软件包。安装上述软件包后,我的应用程序运行,但我在日志中看到 EGL_emulation: eglSurfaceAttrib not implemented 警告消息,并且在应用程序中看不到任何地图。我相信这是模拟器/GPU 问题。我的 GPU 是 Radeon HD6870,我在模拟器上运行的是没有 Google API 的 Android 4.1.2。 关于“EGL_emulation: eglSurfaceAttrib not implemented”也许可以在仿真选项下尝试“Use Host GPU”。【参考方案5】:

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

我也觉得缺少 Google Play Store 是这里的罪魁祸首,所以我尝试通过 this link 和 this link 的建议将 Google Play Store 安装到模拟器。我遇到了一些困难,但最后我成功安装了 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)” 对于target,选择“Android 4.1.2 - API level 16” 对于“CPU/ABI”,选择“ARM” 将其余部分保留为默认值

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


启动模拟器


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


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

【讨论】:

这里是我博客的链接,其中描述了我为这项工作所做的努力nemanjakovacevic.net/blog/2012/12/… 不幸的是,谷歌播放服务修订版 4 给出了新错误:谷歌播放服务已过期。需要 2012100 但找到 2010110 好的,如果你有play services 4th revision,看@danbrough的回答,下载评论里指定的apk:link 请注意,这也适用于 x86,使模拟器更加灵活!【参考方案6】:

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

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

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

【讨论】:

我尝试将最新的 GmsCore.apk 直接复制到模拟器,但这也不起作用。如果我确切地知道要从我的根设备复制哪些 APK,它可能会起作用。【参考方案7】:

除非您更新 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 文件。

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

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

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

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

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

它会正常工作的。

【讨论】:

【参考方案10】:

我一直在尝试在模拟器下运行 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 的其他任何步骤。

【讨论】:

这些是要安装的文件:vending.apk 和 gms.apk【参考方案11】:

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

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

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

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。我已经从我的根 Android 设备上复制了它们。

GoogleLoginService.apk GoogleServicesFramework.apk Phonesky.apk

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

Google Maps Google Play services

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

【讨论】:

我认为这种方法有一些不必要的步骤。从另一个答案中尝试我的方法,只需安装两个 apk... 我尝试了你的方法,但是在将应用程序加载到系统/应用程序目录时 adb 生成一个错误,说它没有足够的可用空间。创建具有大量内存的新模拟器并没有帮助。在其他版本的模拟器上,您的方法不起作用。 在步骤 3) 中,安装命令是 adb install com.google.android.apps.maps-1.apkadb install com.google.android.gms-2.apk 并确保您获得适合您需求的 google play 服务版本。你可以从papktop.com/tag/google-play-services-apk下载。 只要确保您始终安装最新的 Google Play APK 版本,因为目前,Google Play v2 不会让您安装更新(给出令人讨厌的 491 错误)并且此更新是需要运行 Google 地图应用程序。【参考方案12】:

我创建了一个(German) description how to get it working。 您基本上需要一个至少具有 API 级别 9 且没有 Google API 的模拟器。然后,您必须从 root 设备获取 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 地图应用程序

玩得开心。

【讨论】:

以上是关于除非您更新 Google Play 服务(通过 Bazaar),否则此应用将无法运行的主要内容,如果未能解决你的问题,请参考以下文章

除非您更新 Google Play 服务错误,否则此应用将无法运行

使用 Google Maps API android studio “除非您更新 Google Play 服务,否则应用程序将无法运行”

Google Play 更新一览

除非清除 Google Play 缓存,否则 Google Play 不会显示新版本的应用

在模拟器中更新 Google Play 服务

Google Play 服务库更新和缺少符号 @integer/google_play_services_version