Идентификатор устройства эмулятора Android - PullRequest
26 голосов
/ 09 декабря 2010

Я хочу протестировать в эмуляторе приложение, которое зависит от идентификатора устройства (ANDROID_ID).

В настоящее время я получаю идентификатор устройства со следующим кодом:

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

Когда я запускаюэто в эмуляторе возвращает null, что дает мне все виды проблем.Похоже, что в более высоких версиях Android он что-то возвращает.

Есть ли способ получить идентификатор устройства в эмуляторе Android?Я неправильно получаю идентификатор устройства?

Может быть, можно установить идентификатор устройства эмулятора через консоль?

Ответы [ 4 ]

39 голосов
/ 10 декабря 2010

В эмуляторе значения IMEI и IMSI равны в жестком коде :

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

, поэтому вы всегда получите null.

Если вы все еще хотите использовать эти идентификаторы для тестирования, и вы хотите сохранить один и тот же код для эмулятора и реального устройства, вы должны как-то изменить его в эмуляторе.

Есть как минимум два способа сделать это:

  1. Изменить значения в коде и перекомпилировать код для эмулятора.Однако это может быть слишком сложно и отнимает много времени ...: -)

  2. «Взломать» двоичный файл эмулятора (поскольку он не сжат и не зашифрован - вы можете это сделать!) Иизмените строки (в нужном месте) прямо здесь.

Вот как это сделать:

  • сделайте резервную копиюЭмулятор бинарный (откатиться! позже).В Windows двоичный файл можно найти под именем «emulator.exe», который находится в папке «\ tools» вашего android.

  • , откройте двоичный файл с помощью вашего любимого шестнадцатеричного редактора

  • поиск строки + CGSN , за которой следует нулевой байт (за ним должны следовать 15 цифр номера IMEI - см. Экран печати ниже)

alt text

  • отредактируйте номер (будьте осторожны, чтобы не изменить исходное число цифр)

  • исохраните файл!

  • и, возможно, измените / настройте свой код, чтобы использовать IMEI для своего идентификатора (как указывает Falmari), или используйте этот трюк для изменения некоторых других значений.

2 голосов
/ 13 апреля 2013

Если вы хотите использовать ненулевой эмулятор uuid, запустите эмулятор так:

emulator -avd jbx86 -prop emu.uuid=5ec33f90-a471-11e2-9e96-0800200c9a66
2 голосов
/ 10 декабря 2010

Как говорит Фальмарри, идентификатор устройства в эмуляторе будет равен 0. Я использую этот метод для генерации уникального идентификатора устройства, основанного на комбинации параметров (кажется, он мне подходит, хотя я не тестировал его подробно - эмулятор и HTC Desire) - это не мой метод (я не могу вспомнить где я это откопал - но атрибуция там, где надо)

/*
 * 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();    
}

Надеюсь, это поможет.

0 голосов
/ 16 сентября 2011

Хорошо взломать двоичный файл эмулятора, чтобы ввести альтернативное значение. Однако он должен начинаться с десятичной цифры, потому что в файле reference-ril.c он вызывает at_send_command_numeric(), чтобы прочитать значение. Я считаю, что это должно быть изменено на at_send_command_singleline() для поддержки строк MEID (обычно это 14 шестнадцатеричных цифр, начинающихся с 'A'). Если вы не очень умны и не можете найти и поменять адреса функций в двоичном файле, вам придется строить из исходного кода после исправления, чтобы использовать то же значение, которое есть в некоторых телефонах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...