Android模拟器的设备标识符

hpi*_*que 27 testing android emulation identifier

我想在模拟器中测试一个依赖于设备标识符(ANDROID_ID)的应用程序.

我目前使用以下代码获取设备标识符:

final String deviceID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
Run Code Online (Sandbox Code Playgroud)

当我在模拟器中运行它时null,它返回,这给了我各种问题.似乎更高的Android版本它返回了一些东西.

有没有办法在Android模拟器中获取设备标识符?我是否错误地获取了设备ID?

也许可以通过控制台设置模拟器的设备标识符?

小智 39

在模拟器中,IMEI和IMSI的值是硬编码的:

2325     { "+CIMI", OPERATOR_HOME_MCCMNC "000000000", NULL },   /* request internation subscriber identification number */
2326     { "+CGSN", "000000000000000", NULL },   /* request model version */
Run Code Online (Sandbox Code Playgroud)

因此,你永远都会得到null.

如果您仍然希望将这些ID号用于测试,并且希望为仿真器和真实设备保留相同的代码,则必须以某种方式在模拟器中更改它.

至少有两种方法可以做到:

  1. 更改代码中的值并重新编译模拟器的代码.但是,这可能太复杂而且耗时...... :-)

  2. "破解"模拟器二进制文件(因为它既没有压缩也没有加密 - 你可以做到!)并在那里修改字符串(在正确的位置).

这是怎么做的:

  • 备份模拟器二进制文件(稍后回滚!).在Windows中,二进制文件可以在名为"emulator.exe"的位置找到,位于android"\ tools"文件夹中.

  • 用您喜欢的十六进制编辑器打开二进制文

  • 搜索+ CGSN字符串后跟一个空字节(后面跟着IMEI号码的15位数 - 请参阅下面的打印屏幕)

替代文字

  • 编辑号码(注意不要更改数字的原始号码)

  • 并保存文件!

  • 并且可能更改/调整您的代码以使用IMEI作为您的id(作为Falmari指出),或者使用此技巧来更改其他一些值.

  • 它仍然有效!你只需要查看`emulator-arm.exe`(或者如果你使用的是英特尔平台,那就是`emulator-x86.exe`). (2认同)