Eclipse Java Android - 如果没有 Google Play 服务,此应用程序将无法运行

Posted

技术标签:

【中文标题】Eclipse Java Android - 如果没有 Google Play 服务,此应用程序将无法运行【英文标题】:Eclipse Java Android - This app won't run without Google Play Services 【发布时间】:2015-08-14 23:27:22 【问题描述】:

我看过这个:android Emulator: This app won't run without Google Play services

看起来很相似,但它并没有解决我的情况。我已经导入了 google play services 项目,并添加到了库中,但它仍然给了我这个错误。

该链接的解决方案是更改为 Google API for emulator,但启动 avd 需要很长时间,当我尝试运行我的应用程序时,它需要很长时间..

我想显示谷歌地图,所以我关注了这个 Youtube 视频: https://www.youtube.com/watch?v=awX5T-EwLPc

我已经做了以下尝试让它工作:

1) 导入 google-play-services_lib 项目

2) 在 SDK 管理器中安装 Google Play 服务

3) 使用正确的 SHA1 创建 API_KEY

4) 模拟器目标:Android 4.4.2 - API 级别 19

5) 当我使用 cmd 运行应用程序时,安装了 com.android.vending-5.0.37-80300037-minAPI9.apk。

6) 使用上述方法在我的模拟器中安装了 Google Play Store 应用。

7) 在 Project --> Properties --> Android --> Library --> 中添加了对 google-play-service_lib 项目的引用(添加了 google-play-services_lib 项目)

8) 项目构建目标:标准Android平台4.4.2

9) 在 Google Developer Console 中,我启用了 Google Maps Android API v2

MainActivity.java

package com.rachel.googlemaprouting;

public class MainActivity extends Activity 

private final LatLng LOCATION_SG = new LatLng(1.3499391,103.7492432);

private GoogleMap map;

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

     map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();


@Override
public boolean onCreateOptionsMenu(Menu menu) 
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;


@Override
public boolean onOptionsItemSelected(MenuItem item) 
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) 
        return true;
    
    return super.onOptionsItemSelected(item);


public void onClick_Singapore(View v)
    map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    CameraUpdate update = CameraUpdateFactory.newLatLngZoom(LOCATION_SG, 9);
    map.animateCamera(update);


activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.rachel.googlemaprouting.MainActivity" >

<!--  <Button 
    android:id="@+id/btnSingapore"
    android:layout_
    android:layout_
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:onClick="onClick_Singapore"
    android:text="Singapore" />-->

    <fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_
android:layout_/>

 </RelativeLayout>

Manifest.xml

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


    <uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="19" />

    <permission
        android:name="com.rachel.googlemaprouting.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>
        <uses-permission    android:name="com.rachel.googlemaprouting.permission.MAPS_RECEIVE"/>

    <uses-permission android:name="android.permission.INTERNET"/>    
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <!-- The following two permissions are not required to use
         Google Maps Android API v2, but are recommended. -->
    <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:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >


        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="[MY_API_KEY]"/> // i did fill this up with the api key i gotten.
        <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

        <activity
            android:name=".MainActivity"
            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>

谁能帮我找出这里有什么问题? :/

    Lo​​gCat 中没有错误。

    当应用程序出现时,它显示以下内容: “如果没有 Google Play 服务,MapRouting 将无法运行,而您的手机中缺少这些服务。” [获取 Google Play 服务] - 按钮。

    运行应用程序时的控制台。

    [2015-06-01 18:54:48 - MapRouting] ------------------------------
    [2015-06-01 18:54:48 - MapRouting] Android Launch!
    [2015-06-01 18:54:48 - MapRouting] adb is running normally.
    [2015-06-01 18:54:48 - MapRouting] Performing com.rachel.googlemaprouting.MainActivity activity launch
    [2015-06-01 18:54:48 - MapRouting] Automatic Target Mode: using existing emulator 'emulator-5556' running compatible AVD 'myAVD'
    [2015-06-01 18:54:48 - MapRouting] Uploading MapRouting.apk onto device 'emulator-5556'
    [2015-06-01 18:54:51 - MapRouting] Installing MapRouting.apk...
    [2015-06-01 18:55:14 - MapRouting] Success!
    [2015-06-01 18:55:14 - MapRouting] Starting activity com.rachel.googlemaprouting.MainActivity on device emulator-5556
    [2015-06-01 18:55:17 - MapRouting] ActivityManager: Starting: Intent  act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.rachel.googlemaprouting/.MainActivity 
    

This app won't run without Google Play Services, which are missing from your phone

在此链接中,他们说我们无法在模拟器上查看地图,但在 Youtube 视频中,youtuber 能够..

请帮忙...

【问题讨论】:

您使用的是哪个版本的模拟器? @kaho Android 4.4.2 - API 级别 19 【参考方案1】:

您可能已经注意到,您应用中的谷歌地图需要手机安装谷歌播放服务。而且我认为在你的情况下,你的模拟器没有谷歌播放服务。

您过去必须手动将其单独安装到模拟器上,但 Google 在 4.4.2 之后拥有它officially supported。

您现在需要做的就是下载并将您的Emulator Target: 设置为Google APIs (Google Inc.) - API Level 19 而不是Android 4.4.2 - API Level 19

请注意,模拟器速度很慢,并且在您第一次运行应用程序时,它可能需要几分钟才能开始渲染您的地图。 (您会看到带有地图控制器的灰屏)

即使模拟器可以运行,最好还是在真实设备上测试您的应用,尤其是在您使用 google play 服务时。

希望对您有所帮助。

【讨论】:

以上是关于Eclipse Java Android - 如果没有 Google Play 服务,此应用程序将无法运行的主要内容,如果未能解决你的问题,请参考以下文章

Appium TestNg Maven Android Eclipse java自动化环境搭建

JAVA Eclipse开发Android程序会经常闪退是怎么回事

eclipse+android+opencv环境搭建的步骤

基于Eclipse的Android JNI层測试应用开发过程记录

android java.lang.Null.pointerException

怎样在eclipse中搭建android开发环境