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

Posted

技术标签:

【中文标题】除非您更新 Google Play 服务错误,否则此应用将无法运行【英文标题】:This app won't run unless you update Google Play services error 【发布时间】:2014-06-20 10:17:24 【问题描述】:

我现在有点迷路了。 我正在使用 Google 地图实现一个 android 应用程序。

为了使它工作,我遵循了一些非常有效的教程。但是我坚持这个“:

为了解决这个问题,我发现了一些技巧 here 或 here 告诉你要解决这个问题你必须对模拟器进行特殊配置,这是我的:

并在模拟器上安装一些 .apk。

魔术应该完成,地图应该出现,这不是我的情况。

我检查了我的附加功能是否安装良好:

这是我的 AndroidManifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="mypack"
          android:versionCode="1"
          android:versionName="1.0">

    <uses-sdk android:minSdkVersion="16"/>

    <permission android:name="mypack.permission.MAPS_RECEIVE"
                android:protectionLevel="signature"/>
    <uses-permission android:name="mypack.permission.MAPS_receive"/>

    <!-- Permission pour utiliser la connexion internet -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- Permission permettant de vérifier l'état de la connexion -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- Permission pour stocker des données en cache de la map -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <uses-feature
            android:glEsVersion="0x00020000"
            android:required="true" />

    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <meta-data
                android:name="com.google.android.maps.v2.API_KEY"
                android:value="MYKEY" />

        <meta-data android:name="com.google.android.gms.version"
                   android:value="@integer/google_play_services_version" />

        <activity android:name="Home"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

这是我的 MainActivity

import android.app.Activity;
import android.os.Bundle;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;

public class Home extends Activity 
    /**
     * Called when the activity is first created.
     */
    private GoogleMap map;
    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
    

以及对应的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_
              android:layout_
        >
    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/map"
              android:name="com.google.android.gms.maps.MapFragment"
              android:layout_
              android:layout_ />
</LinearLayout>

希望找到一些修复或我在这里错过的东西,提前谢谢你。

【问题讨论】:

This app won't run unless you update Google Play Services (via Bazaar)的可能重复 事实上,我遵循了应该修复此错误的步骤,但对我没有任何帮助。所以我想知道我可能错过了什么 他们你的问题有点误导,因为该错误是通过尝试在模拟器中运行 GPS 应用程序引起的,无论哪种方式 ***.com/questions/2279647/… 它都可以帮助你 现在我不确定我使用 GPS 只是为了显示随机地图。 【参考方案1】:

在 Android SDK Manager 中,您必须在“Android 4.4.2 (API 19)”下安装“Google APIs (x86 System Image)”。退出 Eclipse 并重新启动它。

然后在 AVD 管理器中创建一个新的 android 虚拟设备并选择“Google APIs x86 (Google Inc.) - API Level 19”作为目标。勾选“Use Host GPU”,保证地图绘制会加速。

就是这样,这个新的模拟器将预装 Play Services,运行速度会更快,因为它是 x86 映像。

【讨论】:

知道如何使用 ADK 获得安装了 Play 的模拟器吗?应该是可以的,但是我没看到....【参考方案2】:

使用android studio,唯一对我有帮助的就是将gradle文件中的google play services版本从上一个版本减少到这个:

compile 'com.google.android.gms:play-services:4.2.+'

(当然,这是一个临时的“绕过”,让您可以继续运行)

【讨论】:

在我尝试过的所有事情中(运行具有不同操作系统映像的不同设备),这是最终奏效的一个!谢谢 它适用于 Lollipop (Android 5.1.1),但不适用于 JelliBeans (Android 4.2)。请有人解释这段代码背后的逻辑,如果我想在 JellyBeans 甚至更小版本的 android APIs 上运行应用程序怎么办。谢谢【参考方案3】:

我遇到了这个错误,点击“更新”按钮什么也没做,它卡在一个循环中,有效的方法如下(在 Android Studio 中):

转到工具 > Android > SDK 管理器 选中“显示包裹详情”选项 在您想要的 Android 版本下(我现在是 7.1.1),检查 Google Play Intel x86 Atom 系统映像 点击应用/确定并安装映像 现在转到工具 > Android > AVD 管理器 创建虚拟设备 选择带有 Google Play 徽标的设备之一: 在新的模拟器中运行您的应用程序。现在,您可以在收到错误消息时点击“更新”,通过设备上的 Play 商店更新 Google Play 服务,然后安心地测试您的应用。

【讨论】:

【参考方案4】:

为了省去配置不支持 google play 的模拟器的麻烦,请始终使用带有 playicon 的模拟器

如图所示:播放图标显示在 Playstore 行下方。

安装 google play 兼容模拟器后...再次在模拟器中运行您的应用程序...当您收到通知“应用程序不会运行,除非......”点击通知并按照屏幕提示操作:“使用 gmail 帐户登录...电子邮件和密码等”,一旦您同意 google 许可证,您将获得 google play 更新屏幕:

更新您的 google play 并再次启动您的应用。 还要确保您的应用级别 gradle 和 gradle 中有 google 依赖项:

应用级分级 build.gradle(Module:app)

dependencies 



    apply plugin: 'com.google.gms.google-services'

项目级 Gradle "build,gradle(Project:AppName)"

依赖

    classpath 'com.google.gms:google-services:3.2.1'

【讨论】:

【参考方案5】:

虽然提供的答案适用于模拟器,但这在真实设备上可能是一个真正的问题,并且这些解决方案不适用于真实设备。这可能发生在具有过时版本的 Google Play 服务的旧设备上。

为了解决这个问题,Google Play 服务库有一组 API 来检查 Google Play 服务的可用性,主要是 GoogleApiAvailability 类提供了一些方法来处理可用性问题,例如过时的版本。

现在,为了检测设备是否有可用的 Google Play 服务,我通常做的是创建一个辅助方法来运行检查

private boolean checkPlayServices()
    GoogleApiAvailability gaa = GoogleApiAvailability.getInstance();
    int result = gaa.isGooglePlayServicesAvailable(getApplicationContext());

    if(result != ConnectionResult.SUCCESS)
        if(gaa.isUserResolvableError(result))
            gaa.getErrorDialog(this,result, REQUEST_PLAY_SERVICES_RESOLUTION).show();
        

        return false;
    

    return true;

此帮助方法通过检查从isGooglePlayServicesAvailable 返回的错误代码来检查 Google Play 服务是否可用。然后它调用isUserResolvableError 来确定用户是否可以解决错误(例如,通过更新 Google Play 服务)。如果它是可解决的,则会显示一个对话框供用户确认他希望系统解决该错误。然后在 Activity 的 onCreate 方法上调用它,我运行检查如下

//I normally assume Google Play services is available
private boolean playServicesAvailable = true;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map_selector);

    //check for rare case where Google Play Services is not available
    playServicesAvailable = checkPlayServices();

    if(!playServicesAvailable)
        //hide UI elements and turn off features that rely on Google Play Services
    

希望对大家有所帮助

【讨论】:

【参考方案6】:

我只有在使用 Android Studio 中的 android 模拟器时才遇到这个问题。 我通过将 google-services 插件添加到 gradle:app 解决了这个问题

apply plugin: 'com.google.gms.google-services'

然后在依赖项上 添加

compile 'com.google.android.gms:play-services:9.0.0'

以前我用过

compile 'com.google.android.gms:play-services:9.4.0'

但它给出了版本不匹配的错误,并建议使用 com.android.gms 版本 9.0.0

【讨论】:

如果你想用这个版本编译 compile 'com.google.android.gms:play-services:9.4.0' 那么你应该使用 API 级别 24 的模拟器【参考方案7】:

我有同样的错误。通过更新 Android Studio 及其相关的 Android SDK 工具来修复它。

【讨论】:

【参考方案8】:

在 Android Studio 3 中,转到 Tools -&gt; SDK Manager 并安装 Google Play 服务

【讨论】:

【参考方案9】:

我在尝试在 Android 7.0 上构建时遇到了同样的错误。我在 6.0 下重建,没有任何问题。恢复 1 个 API 级别也可能对您有所帮助。

【讨论】:

【参考方案10】:

我通过以下方式解决了这个问题:

1- 确保在 SDK 工具 中安装了“Google Play 服务”,如下图所示:

2- 确保 AndroidManifest.xml 文件包含以下行:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

3- 在 build.gradledependencies 中添加这一行:

classpath 'com.google.android.gms:play-services-maps:17.0.0'

注意:您可能需要将 play-services-maps 的版本从 17 更改为最新版本,但 17 是 2019 年 8 月的最新版本...

如下图:

别忘了重建项目(如果你使用flutter在终端执行这个命令flutter clean

然后你会看到地图在模拟器上运行:

【讨论】:

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

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

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

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

是否可以在Google Play商店中设置发布日期?

除非清除缓存,否则 Google chrome css 不会更新

发布时出现“Google Play 服务正在更新”错误,而不是模拟器(Google Play 服务 12.6.73,华为设备)