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

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

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

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

并在模拟器上安装一些 .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_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/map"
              android:name="com.google.android.gms.maps.MapFragment"
              android:layout_width="match_parent"
              android:layout_height="match_parent" />
</LinearLayout>

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

【问题讨论】:

标签: android google-maps android-emulator google-play google-play-services


【解决方案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

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

              【讨论】:

                猜你喜欢
                • 2013-09-23
                • 1970-01-01
                • 2013-10-21
                • 1970-01-01
                • 2012-11-21
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多