studio programacion móviles libros libro desarrollo desarrollar curso aprende aplicaciones android testing emulation identifier

móviles - manual de programacion android pdf



Identificador de dispositivo del emulador de Android (4)

Quiero probar en el emulador una aplicación que depende del identificador del dispositivo (ANDROID_ID).

Actualmente obtengo un identificador de dispositivo con el siguiente código:

final String deviceID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);

Cuando ejecuto esto en un emulador, devuelve null , lo que me da todo tipo de problemas. Parece que las versiones superiores de Android devuelven algo.

¿Hay alguna manera de obtener un identificador de dispositivo en el emulador de Android? ¿Estoy obteniendo la identificación del dispositivo incorrectamente?

¿Tal vez es posible establecer el identificador del dispositivo del emulador a través de la consola?


Como dice Falmarri, el ID del dispositivo será 0 en el emulador. Utilizo este método para generar un ID de dispositivo único basado en una combinación de parámetros (parece que funciona para mí, aunque no lo he probado exhaustivamente, el emulador y un HTC Desire), no es mi método (no recuerdo). donde lo desenterré, pero la atribución es debida)

/* * Creates a UUID specific to the device. There are possibly some instances where this does * not work e.g. in the emulator or if there is no SIM in the phone. */ public static void setDeviceUUID(Context context) { final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); final String tmDevice, tmSerial, androidId; tmDevice = "" + tm.getDeviceId(); tmSerial = "" + tm.getSimSerialNumber(); androidId = "" + Secure.getString(context.getContentResolver(), Secure.ANDROID_ID); deviceMobileNo = tm.getLine1Number(); UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode()); deviceUUID = deviceUuid.toString(); }

Espero que esto ayude.


En el emulador, los valores de IMEI e IMSI están hardcoded :

2325 { "+CIMI", OPERATOR_HOME_MCCMNC "000000000", NULL }, /* request internation subscriber identification number */ 2326 { "+CGSN", "000000000000000", NULL }, /* request model version */

por lo tanto, siempre obtendrás null .

Si aún desea utilizar estos números de identificación para su prueba y desea conservar el mismo código para el emulador y el dispositivo real, debe cambiarlo en el emulador de alguna manera.

Hay al menos dos formas de hacerlo:

  1. Cambie los valores en el código y vuelva a compilar el código para el emulador. Sin embargo, esto podría ser demasiado complicado y consumir mucho tiempo ... :-)

  2. "Hackear" el emulador binario (ya que no está ni comprimido ni encriptado, ¡puedes hacerlo!) Y modificar las cadenas (en el lugar correcto) allí mismo.

He aquí cómo hacerlo:

  • haga una copia de seguridad del emulador binario (¡para volver atrás más adelante). En Windows, el binario se puede encontrar bajo el nombre "emulator.exe", ubicado en su carpeta "/ tools" de Android.

  • abre el binario con tu editor hexadecimal favorito

  • busque la cadena + CGSN seguido de un byte nulo (debe ir seguido de 15 dígitos del número IMEI - vea la pantalla de impresión a continuación)

  • edite el número (tenga cuidado de no cambiar el número original de los dígitos)

  • y guarda el archivo!

  • y tal vez cambie / ajuste su código para usar el IMEI para su identificación (como señala Falmari ), o use este truco para cambiar algunos otros valores.


Está bien hackear el binario del emulador para poner un valor alternativo. Sin embargo, debe comenzar con un dígito decimal porque en reference-ril.c, llama a at_send_command_numeric() para leer el valor. Creo que tiene que cambiarse a at_send_command_singleline() para admitir cadenas MEID (que normalmente son 14 dígitos hexadecimales que comienzan con ''A''). A menos que sea realmente inteligente y pueda encontrar e intercambiar las direcciones de las funciones en el binario, tendrá que compilar desde la fuente después de parchear para usar el mismo valor que tienen algunos teléfonos.


Si quieres uuid emulador no nulo, inicia el emulador así:

emulator -avd jbx86 -prop emu.uuid=5ec33f90-a471-11e2-9e96-0800200c9a66