Cómo evitar el límite de 65k método al utilizar Google Play Services

Si te encuentras escribiendo una gran aplicación de Android que depende de muchas bibliotecas diferentes (que recomendaría en lugar de reinventar la rueda), es muy probable que ya hayas encontrado el límite de 65k del archivo ejecutable de classes.dex Dalvik. Además, si depende de bibliotecas grandes como el SDK de Google Play Services que ya contenía más de 20k métodos en la versión 5.0 , se ve obligado a utilizar trucos como paquetes de eliminación o soporte multidex para evitar errores durante el proceso de empaquetado. Con el nuevo ARV de ejecución de Android, que está disponible públicamente, ya que Android Lollipop múltiples archivos dex son más fáciles de manejar, pero actualmente los desarrolladores todavía se ven obligados a hacer el método de contar.

¿Cuál es la forma más sencilla de reducir el recuento de métodos de su aplicación mientras utiliza Google Play Services?

El mayor cambio para los desarrolladores que vino con la versión 6.5 de los servicios de Google Play fue probablemente la administración de dependencia granular . Google logró dividir su biblioteca para permitir a los desarrolladores depender sólo de ciertos componentes que realmente necesitan para sus aplicaciones.

Dado que los desarrolladores de la versión 6.5 ya no están obligados a implementar la biblioteca completa de Google Play Services en su aplicación, sino que pueden depender selectivamente de componentes como este:

 compile 'com.google.android.gms:play-services-fitness:6.5.+' compile 'com.google.android.gms:play-services-wearable:6.5.+' compile 'com.gogole.android.gms:play-services-maps:6.5.+' ... 

Si desea compilar la biblioteca completa en su aplicación, todavía puede hacerlo:

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

Puede encontrar una lista completa de paquetes disponibles en el sitio de desarrolladores de Android .

Para alguien que no utilice Android Studio w/gradle o no quiera implementar ProGuard en su proyecto.

Es posible evitar 65k mientras usa google-play-services manteniendo algunos paquetes que realmente desea usar usando jarjar. Por ejemplo, en mi proyecto quiero implementar sólo google map y google ubicación, inclino mi google-play-services.jar como este.

  1. Descargar jarjar AQUÍ

  2. Crear nueva llamada de archivo 'services.rules'

  3. Editarlo como sigue

Mantenga com.google.android.gms.maps. *

Mantenga la ubicación com.google.android.gms. *

  1. Copia tus google-play-services.jar / jarjar-1.4.jar / services.rules originales en la misma carpeta

  2. Inicie el símbolo del sistema y escriba ..

Java -jar jarjar-1.4.jar proceso services.rules google-play-services.jar google-lean.jar

Eso es lo que obtendrá un nuevo .jar que el tamaño se redujo mucho (método también)

Usarlo instalado de google-play-services.jar y dex más de 56k se ha ido.

Aquí está .jar que era magra ya como mención arriba.

Sé que esta pregunta es vieja, pero para aquellos de ustedes que se enfrentan a este problema mientras se trabaja en eclipse y no puede utilizar la respuesta anterior

Por favor siga los pasos

Si no desea descargar android studio para obtener los proyectos lib puede descargar archivos lib desde aquí https://www.dropbox.com/s/1pf73czcn7pyqgi/com.google.android.gms.rar?dl=0 y Salte al paso 4

1 – en primer lugar que todavía necesita el estudio de Android para descargar sus dependencias se puede descargar desde aquí

https://developer.android.com/sdk/index.html

2 – entonces en tu build.gradle dentro de tu aplicación agrega las líneas abajo

 dependencies { compile 'com.google.android.gms:play-services-maps:7.5.0' //map , gcm or any specific api for a hole list visit the below link //https://developers.google.com/android/guides/setup } 

Y luego pulse el proyecto de sincronización con el archivo gradle

Después de que usted llegará a los proyectos de lib

Play-services-base play-servicios-mapas

Haga clic derecho sobre ellos para obtener su ruta

4 – crear proyecto dentro de eclipse eliminar los archivos generados dentro de la carpeta src, la carpeta res y el manifiesto

5- copia res y manifiestos de play-services-base a su proyecto

6 – copie el archivo dentro de play-services-base / jars a la carpeta libs de su proyecto normalmente denominada classes.jar (cambie el nombre a cualquier otro nombre para que no entre en conflicto con otro proyecto)

7- agregar este tarro para construir caminos luego haga clic derecho en proyecto / propiedades / java construir ruta / ordenar y exportar ficha check the added jar

8- clic derecho sobre proyecto / propiedades / android / check is lib

9- hacer los mismos pasos para play-services-maps

10 – ahora tienes a lib proyectos uno se llama googleBase y el otro se llama googleMaps (o cualquier otro nombre)

11 – agregarlos a su proyecto como bibliotecas

Ahora agregue las siguientes líneas a su manifiesto

 <!-- Include required permissions for Google Maps API to run--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-feature android:glEsVersion="0x00020000" android:required="true"/> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="" /> 

Para un tutorial completo con imágenes, consulte el siguiente enlace http://androidninja.quora.com/Prevent-65-K-Methods-Count-When-Using-Google-Lib-on-Android-with-eclipse-adt

  • Plus.PeopleApi.getCurrentPerson obsoleta en los servicios de Play 8.4. ¿Cómo obtener el nombre, apellido y sexo del usuario usando GoogleSignInApi?
  • ProGuard falla después de actualizar Google Play Services a la versión 5.0 (revisión 18)
  • No se puede resolver el símbolo 'LocationRequest' en el proyecto Android
  • Enviar extra a requestLocationUpdates intentService rompe las actualizaciones de ubicación
  • Google Play: la suscripción mensual de mi aplicación se cobra diariamente
  • ¿Cuándo debo usar el permiso ACCESS_COARSE_LOCATION?
  • Las siguientes clases no se pudieron instanciar: - com.google.android.gms.plus.PlusOneButton
  • GooglePlayServicesUtil: servicios de Google Play desactualizados. Requiere 5089000 pero fue encontrado 5077534
  • Android Wear y Google Fit: ¿Cómo forzar la actualización de datasets entre smartwatch y smartphone?
  • Falta la clave api_key / actual con Google Services 3.0.0
  • Android: compruebe si los servicios de ubicación están habilitados utilizando el proveedor de ubicación fusionado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.