AVD无法使用AVDtesting任何应用程序

我有一个非常奇怪的问题,我使用我的HTC One V运行4.0.3操作系统开发我的应用程序。 现在,应用程序在我的和其他几个随机的2.2和2.3和4+设备上运行的很好,但是在一些设备上,尽pipe他们有GooglePlayStore,应用程序启动并加载,但是不会在其他设备上显示地图,尽pipe他们在应用程序上有GPStore崩溃说GPStore /服务不存在。

我试图在AVD Devies上testing应用程序,但是没有安装GooglePlayStore。 我尝试了Android 4.0仿真器上的Google Play ,将GPStore推向了他们,但没有成功。

我的droid SDK已经完全更新:
在这里输入图像说明

我编译我的应用程序 在这里输入图像说明

在我的主要活动中,我检查是否存在Google Play服务/商店,以确定是否可以使用GoogleMaps:

public class Map extends FragmentActivity implements Observer { private MapAgent agent; private Locator locator; private Spinner spinner; private Button gps; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Get a new instance of Locator agent locator = new Locator(); // Register as Observer to Locator agent locator.addObserver(this); // Check if Internet connection is available if(Services.connectivityServiceState(this)) { // We have a working Internet connection // Check if we have a GooglePS in operating mode if(Services.playServiceState(this)) { // Load the map setContentView(R.layout.activity_map); // Fetch dropdown list & gps button reference spinner = (Spinner) findViewById(R.id.bankslist); gps = (Button) findViewById(R.id.gpsbttn); // Register event listener with gps button gps.setOnClickListener(new GpsAction(this)); // Register event listener with spinner spinner.setOnItemSelectedListener(new SpinnerAction()); // Fetch our map agent = new MapAgent(this); // Move map camera to initial position agent.initialPosition(); } else { // GooglePS is not in operating mode Messages.playNotificationMessage(this); } } else { // No Internet connection // Prompt user to turn on WiFi or Mobile Messages.internetConnectionRequestMessage(this); } } 

检查GooglePlay服务状态的方法位于我的Services.java下面:

 public class Services { /** * OPERATING CODES */ private static final int GPS_ERR_REQUEST = 9000; /** * Test device for GooglePlayServices, required for * GoogleMaps API V2. * * @param Activity * @result boolean */ public static boolean playServiceState(Activity context) { // Fetch GooglePS operating code int code = GooglePlayServicesUtil.isGooglePlayServicesAvailable(context); // Check if GooglePS is operating if(code == ConnectionResult.SUCCESS) { // We have GooglePS in working condition return true; } // We have an error, check if it can be resolved by user /*if(GooglePlayServicesUtil.isUserRecoverableError(code)) { // We can solve this error pull up GooglePS guide dialog Dialog guide = GooglePlayServicesUtil.getErrorDialog(code, context, GPS_ERR_REQUEST); // Show the guide dialog guide.show(); // Dispose of our activity context.finish(); }*/ // We do not have GooglePS in operating mode // solve error and retry return false; } /** * Tests devices Wi-Fi and Mobile network for a * working Internet connection. * * @param Activity * @return boolean */ public static boolean connectivityServiceState(Activity context) { // Fetch a CM instance ConnectivityManager con = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); // Test both carriers for a working Internet connection NetworkInfo wifi = con.getNetworkInfo(ConnectivityManager.TYPE_WIFI); NetworkInfo mobi = con.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); // Check for Internet connection if(wifi.isConnected() || mobi.isConnected()) { // We have a working internet connection return true; } // No internet connection return false; } /** * Test NETWORK service to determine if Google Location * services are enabled or not. */ public static boolean networkServiceState(Activity context) { // Fetch a LM instance LocationManager provider = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); // Return true for enabled GLS return provider.isProviderEnabled(LocationManager.NETWORK_PROVIDER); } /** * Tests GPS service to determine if GPS * is enabled or not. * * @param Activity * @result boolean */ public static boolean gpsServiceState(Activity context) { // Fetch a LM instance LocationManager provider = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); // Return true for enabled GPS return provider.isProviderEnabled(LocationManager.GPS_PROVIDER); } /** * Checks if a GPS Radio is present * within the device. * * @param Activity * @return boolean */ public static boolean hasGPS(Activity context) { // Refere to devices package manager for GPS service return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS); } } 

而我的地图只是在我的MapAgent类中处理,没有什么令人印象深刻的只是处理标记。

  public MapAgent(FragmentActivity context) { // Fetch the map support fragment SupportMapFragment fragment = ((SupportMapFragment) context.getSupportFragmentManager().findFragmentById(R.id.map)); // Fetch map and view map = fragment.getMap(); // Set initial zoom zoom = 7; // Check if this is the first run final SharedPreferences prefs = context.getSharedPreferences("slo.bankomati.core", Context.MODE_PRIVATE); if(prefs.getBoolean("firstrun", true)) { // Check if database exists and delete it if(Database.exists(context)) { Database.delete(context); } prefs.edit().putBoolean("firstrun", false); } // Fetch all atms try { db = new Database(context); atms = db.getAtms(); db.close(); } catch (Exception e) { // TODO: Temporary solution } // Create an empty array for filtered results filtered = new ArrayList<Atm>(); markers = new HashMap<Marker, Atm>(); // Reference the resources and context this.resources = context.getResources(); this.context = context; // Register camera & info window listener with the map map.setOnCameraChangeListener(this); //map.setOnInfoWindowClickListener(new ShowDetails(context, resources)); map.setOnMarkerClickListener(new ShowDetails(context)); } 

我没有任何想法,我无法让GooglePlay服务在AVD 2.2+上运行。我尝试了AVD 4.4 Google Play API,它带有GPService,但是不会显示地图。 所以直接指出我的问题:

1)如果所有的AVD从2.2到4.4都没有使用GooglePlay服务,那么我们如何testing多个电话和操作系统版本的应用程序,而不需要多个电话。

2)是否有一个肯定的方式或更适当的方式来显示旧的设备上的GoogleMap我说的是Android 2.2+我用最平凡的方式来显示我的地图我有一个在我的布局xml中的SupportMap Fragment元素。 我遇到的问题是,有些GooglePlayStore的2.2和2.3手机会打开应用程序,但不会打开应用程序,而是显示地图缩放控件和Google徽标。

3)我添加了我的布局文件,但我没有我的Android手机了,而AVD不让我testing需要GooglePlayServices的应用程序是否有可能我的布局显示在下方由于重叠布局导致的问题。

我基本上有一个框架布局在我有谷歌地图的背景,在顶部angular落顶部我有一个微调和一个button。 当我上次testing这个应用程序,它工作在我的手机HTC One V的Android 4.0.3。

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:map="http://schemas.android.com/apk/res-auto" android:id="@+id/root_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <Button android:id="@+id/gpsbttn" android:layout_width="28dp" android:layout_height="28dp" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:background="@drawable/gps" android:minHeight="28dip" android:minWidth="28dip" android:text="" /> <Spinner android:id="@+id/bankslist" android:layout_width="match_parent" android:layout_height="36dp" android:layout_marginLeft="48dp" android:layout_marginRight="10dp" android:layout_marginTop="10dp" android:entries="@array/banks_list" android:prompt="@string/banks_prompt" /> </FrameLayout> 

最简单的解决scheme:
对于所有遇到这个问题的朋友,如果无法通过AVD来完全testing您的应用程序,则切换到Genymotion Emulator,这是一种挽救生命的方法。 它速度更快,不太麻烦,它支持真正的手机所做的每一个function,并从2.2开始testingAndroid应用程序变得如此简单。

我去了Genny,从不回头。

Solutions Collecting From Web of "AVD无法使用AVDtesting任何应用程序"

根据这个问题的答案: Google地图 – “App不会运行,除非您更新Google Play服务” ,它引用了Google+信息: https : //plus.google.com/+AndroidDevelopers/posts/Tyz491d96Ci ,使用地图在您的应用程序中不被模拟器支持; 那个post里有一些痛苦的答复。

其中一个回复引用了这个问题: 除非您更新Google Play服务(通过Bazaar) , 否则该应用将无法运行,该服务描述了某些模拟器黑客攻击,如果没有其他工作正常,则可以尝试使用该模拟器。

除了Scott提到的解决方法之外,根据Play Services文档,所有针对4.2.2或更高版本的AVD都将支持Play服务: http : //developer.android.com/google/play-services/setup.html

还有几个人已经能够在较老的AVD上安装Play服务,但合法性可能是有问题的:

  • 如何在Android模拟器中下载Google Play服务?
  • 如何在Android模拟器上显示Google Map V2?

目前,Android模拟器不支持Google地图,因为它不支持Maps API工作所需的Google Play服务应用程序(设备<4.2.2)。 我假设你正在使用Google地图。 看起来像http://www.genymotion.com/提供了一个支持Google Play服务function的模拟器。 尝试,如果它不起作用,尝试得到一个真正的设备。 在模拟器上testing地图应用程序对我来说没有什么意义。 我会build议把一点钱投入开发设备。 它将为自己付出代价,并在处理这些types的情况时减less你的头痛。

UPDATE

尝试将您的Android Target切换到Google API(相同的目标号码)

我也拉动谷歌播放services.apk从根源设备,并通过命令行安装在模拟器上。 这不是完全推荐,可能有点麻烦。

在Scott提供的链接文档中,它告诉你需求是Google Play StoreGoogle Play Services.