NoSuchMethodError com.google.android.gms.internal.gf

Tengo un problema difícil de resolver. He publicado mi aplicación en Play y todo está bien, pero el problema es que hay 2 dispositivos que bloquea la aplicación con el siguiente error:

java.lang.NoSuchMethodError: java.io.IOException.<init> at com.google.android.gms.internal.gf(Unknown Source) at com.google.android.gms.internal.gb(Unknown Source) at com.google.android.gms.internal.ea(Unknown Source) at com.google.android.gms.internal.ea(Unknown Source) at com.google.android.gms.internal.bq.ac(Unknown Source) at com.google.android.gms.internal.cg$1.run(Unknown Source) at com.google.android.gms.internal.ch$1.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) at java.lang.Thread.run(Thread.java:1096) 

Sólo sé este error porque Play me muestra, pero es imposible ver dónde está. Además, tengo otra información. Aquí está la cosa: Sucede cuando el usuario elige ver el mapa en un menú del cajón y el error está en la primera vez él elige.

Aquí está el código de este fragmento:

 package br.ufc.ondefica.fragments; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import br.ufc.ondefica.MainActivity; import br.ufc.ondefica.R; import br.ufc.ondefica.model.Placemark; import br.ufc.ondefica.utils.DataHelper; import br.ufc.ondefica.utils.ParserKML; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; public class UFCMapFragment extends FragmentWithSearch { private GoogleMap map; private int positionToShow = 3; private boolean isDefaultView = true; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.map_layout, container, false); ((MainActivity) getActivity()).setTitle(getResources().getStringArray(R.array.sliding_menu)[0]); return root; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); map = ((SupportMapFragment) getActivity().getSupportFragmentManager() .findFragmentById(R.id.map)).getMap(); map.setMapType(GoogleMap.MAP_TYPE_SATELLITE); map.setMyLocationEnabled(true); Bundle bundle = getArguments(); if (bundle != null && bundle.containsKey("positionToShow")) { isDefaultView = false; positionToShow = bundle.getInt("positionToShow"); } loadMap(); // Move the camera instantly to the default place to show with a zoom of // 15. map.moveCamera(CameraUpdateFactory.newLatLngZoom(DataHelper.data.places .get(positionToShow).getCoordinates(), 13)); // Zoom in, animating the camera. map.animateCamera(CameraUpdateFactory.zoomTo(16), 4000, null); } private void loadMap() { for (int i = 0; i < DataHelper.data.places.size(); i++) { Placemark place = DataHelper.data.places.get(i); Marker marker = map.addMarker(new MarkerOptions() .icon(BitmapDescriptorFactory.fromResource(ParserKML .loadMapOfIcons(place.getIconID()))) .title(place.getName()).snippet(place.getDescription()) .position(place.getCoordinates())); if (i == positionToShow && !isDefaultView) marker.showInfoWindow(); } } public void onDestroyView() { super.onDestroyView(); Fragment fragment = (getFragmentManager().findFragmentById(R.id.map)); FragmentTransaction ft = getActivity().getSupportFragmentManager() .beginTransaction(); ft.remove(fragment); ft.commit(); } } 

Los dispositivos que se bloquean son: Samsung Galaxy ACE (GT-S5830B) y Samsung Galaxy 5 (GT-I5500B). Gracias por adelantado,

La primera línea en el stracktrace le da una pista:

 java.lang.NoSuchMethodError: java.io.IOException.<init> 

Básicamente está diciendo que falta algún constructor para IOException . En cuanto a los javadocs , hay dos constructores que se agregaron en el nivel 9 de la API:

 public IOException (Throwable cause) public IOException (String message, Throwable cause) 

Eso debería responder a su pregunta. API nivel 9 es Android 2.3. Por lo tanto, el seguimiento de la pila es de un dispositivo con Android 2.2 o inferior, que está faltando a los dos constructores anteriores.

Hay al menos dos soluciones para resolver el problema:

  • Cambia la minSdkVersion en el manifiesto de tu aplicación a 9 .
  • No utilice la última biblioteca de Google Play Services, pero utilice la versión de Froyo en su lugar.

Este último se puede encontrar en el SDK Manager. Se agregó con la última actualización porque se eliminó el soporte para Froyo (Android 2.2). Cita de la entrada de blog vinculado:

Con más del 97% de los dispositivos que ejecutan Android 2.3 (Gingerbread) o versiones de plataformas más nuevas, dejaremos de admitir Froyo de esta versión del SDK de servicios de Google Play para poder ofrecer APIs más potentes en el futuro. Esto significa que no podrá utilizar estas nuevas API en dispositivos con Android 2.2 (Froyo).

  • Google Maps v2 no se muestra después de publicar en el mercado de juegos
  • La aplicación publicada no se actualiza en la tienda de juegos
  • ¿Hay una manera de consumir Google Play en la aplicación de productos del servidor backend?
  • Forzar la actualización de la aplicación a través del mercado, como si el usuario haga clic en "Actualizar"
  • No se puede procesar Google+ SignInButton
  • Actualizaciones de aplicaciones de Android Market
  • Error al agregar la biblioteca de facturación en la aplicación
  • Comprobar si la aplicación está instalada - Android
  • Publicar versión beta en el mercado de Android
  • Aplicaciones de Android
  • ¿Cómo se evalúan las principales aplicaciones de Google Play?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.