Изменить идентификатор устройства на эмуляторе Android? - PullRequest
5 голосов
/ 14 января 2011

Есть ли способ изменить IMEI, который будет возвращен эмулятором TelephonyManager?Кроме того, есть ли способ изменить идентификатор, возвращаемый Settings.Secure.ANDROID_ID?

. Я использую эти идентификаторы, чтобы отличать своих пользователей друг от друга при хранении их данных на стороне сервера.Было бы хорошо, если бы моя команда QA смогла изменить эти идентификаторы, чтобы они не все использовали один и тот же набор пользовательских данных.

Ответы [ 6 ]

2 голосов
/ 09 февраля 2018

ответ Zyc Zyc является лучшим до Android 7.1.1 (25). С android 8 правила android_id изменились, как описано в официальной документации разработчика: https://android -developers.googleblog.com / 2017/04 / изменения к устройству-идентификаторы-in.html

В O идентификатор Android (Settings.Secure.ANDROID_ID или SSAID) имеет разные значения для каждого приложения и каждого пользователя на устройстве. Разработчики, которым требуется идентификатор области устройства, должны вместо этого использовать сбрасываемый идентификатор, такой как Рекламный идентификатор, предоставляя пользователям больший контроль. Рекламный идентификатор также предоставляет пользователю возможность ограничить отслеживание рекламы. Дополнительно в Android O: Значение ANDROID_ID не изменится при удалении / переустановке пакета, если имя пакета и ключ подписи совпадают. Приложения могут полагаться на это значение для поддержания состояния при переустановках. Если приложение было установлено на устройстве под управлением более ранней версии Android, идентификатор Android остается неизменным при обновлении устройства до Android O, если только приложение не удалено и не установлено заново. Значение Android ID изменяется только в том случае, если устройство сбрасывается до заводских настроек или ключ подписи вращается между событиями удаления и переустановки. Это изменение требуется только для производителей устройств, которые используют сервисы Google Play и ID рекламы. Другие производители устройств могут предоставить альтернативный сбрасываемый идентификатор или продолжать предоставлять идентификатор ANDROID.

2 голосов
/ 14 марта 2014

Что касается Settings.Secure.ANDROID_ID, это должно сработать:

adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "UPDATE secure SET value='newid' WHERE name='android_id' "

Где newid - это обычно 16-значный шестнадцатеричный код (т. Е. Не добавляйте к нему «Android_»). Я только попробовал это на эмуляторе. Я полагаю, что сначала нужно рутировать настоящий телефон.

2 голосов
/ 19 января 2011

Я не пробовал, но на этой странице описывается метод, который предполагает ручное изменение файла emaultor.exe.Это кажется довольно простым, хотя вам придется создать отдельный эмулятор для каждого члена команды QA.

1 голос
/ 16 июня 2017

запрос android_id используйте эту команду в оболочке adb:

настройки становятся безопасными android_id

изменить android_id используйте эту команду в оболочке adb:

настройки поставить безопасный android_id xxxxxxxxxxxxxxxx

0 голосов
/ 11 июня 2019

Если вам все еще нужно изменить IMEI и сделать это из скрипта:

EMU=$ANDROID_BASE/emulator/qemu/linux-x86_64/qemu-system-x86_64
p=$$ # Something unique enough
perl -e '
  $imei=substr("'$p'"."0"x15,0,15); $/=undef;
  open IN, "'$EMU'" or die "$!"; $b=<IN>; close IN;
  $b=~s/(\+CGSN.)0{15}/${1}$imei/;
  open OUT, ">'$EMU'-imei" or die "$!"; print OUT $b ; close OUT
'

затем переместите исходный двоичный файл qemu-system-x86_64, чтобы переименовать новый -imei на его место.

Очевидно, вам понадобится другой путь для Mac / Windows.

0 голосов
/ 23 декабря 2018

Дополнительно к @ zyc-zyc answer

settings get secure android_id

settings put secure android_id xxxxxxxxxxxxxxxx

, который не работает по крайней мере на Android P (28) Я пыталсяобновить через sql

adb shell content delete --uri content://settings/secure --where "name=\'android_id\'"

adb shell content insert --uri content://settings/secure --bind name:s:android_id --bind value:s:XYXYXYX

проверить результат:

adb shell content query --uri content://settings/secure --where "name=\'android_id\'"

Строка: 0 _id = 186, name = android_id, значение = XYXYXYX

adb shell settings get secure android_id

XYXYXYX

обновление работает, но все решения не влияет на устройство , когда я читаю значение

Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...