Pergunta

Quero testar no emulador um aplicativo que depende do identificador do dispositivo (Android_ID).

Atualmente, obtenho identificador de dispositivo com o seguinte código:

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

Quando eu corro isso em um emulador, ele retorna null, o que me dá todo tipo de problema. Parece que as versões mais altas do Android retornam alguma coisa.

Existe uma maneira de obter um identificador de dispositivo no emulador Android? Estou obtendo o ID do dispositivo erroneamente?

Talvez seja possível definir o identificador do dispositivo do emulador através do console?

Foi útil?

Solução

No emulador, os valores de IMEI e IMSI são codificado:

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

Portanto, você sempre terá null.

Se você ainda Deseja usar esses números de ID para seus testes e você deseja manter o mesmo código para o emulador e o dispositivo real, você deve alterá -lo no emulador de alguma forma.

Existem pelo menos duas maneiras de fazer isso:

  1. Altere os valores no código e recomponha o código para o emulador. No entanto, isso pode ser muito complicado e demorado ... :-)

  2. "Hackear" o emulador binário (pois não é comprimido ou criptografado - você pode fazê -lo!) E modificar as cordas (no lugar certo) ali mesmo.

Veja como fazer:

  • Faça backup do emulador binário (para recuar! Mais tarde). No Windows, o binário pode ser encontrado sob o nome "Emulator.exe", localizado na sua pasta Android " Tools".

  • Abra o binário com seu editor Hex favorito

  • procure o +CGSN String seguida por um byte nulo (deve ser seguido por 15 dígitos do número IMEI - veja a tela impressa abaixo)

alt text

  • Edite o número (tenha cuidado para não alterar o número original de dígitos)

  • e salve o arquivo!

  • e talvez altere/ajuste seu código para usar o IMEI para o seu ID (como Falmari aponta) ou use esse truque para alterar alguns outros valores.

Outras dicas

Como Falmarri diz, o ID do dispositivo estará 0 no emulador. Eu uso esse método para gerar um ID de dispositivo exclusivo com base em uma combinação de parâmetros (parece funcionar para mim, embora eu não o tenha testado extensivamente - o emulador e um desejo HTC) - não é o meu método (não me lembro onde eu desenterrei - mas atribuição onde é devido)

/*
 * 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 isto ajude.

Se você quer o emulador não nulo UUID, inicie o emulador como este:

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

Não há problema em invadir o binário do emulador para colocar um valor alternativo. No entanto, ele deve começar com um dígito decimal porque, no reference-ril.c, ele chama at_send_command_numeric() para ler o valor. Eu acredito que isso tem que ser alterado para at_send_command_singleline() Para apoiar as cordas meid (que normalmente são 14 dígitos hexadecimais começando com 'A'). A menos que você seja realmente inteligente e possa encontrar e trocar os endereços de função no binário, você precisará construir a partir da fonte depois de corrigi -la para usar o mesmo valor que alguns telefones têm.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top