Android仿真器的设备标识符

Android仿真器的设备标识符,android,testing,emulation,identifier,Android,Testing,Emulation,Identifier,我想在模拟器中测试一个依赖于设备标识符(ANDROID_ID)的应用程序 我当前使用以下代码获取设备标识符: final String deviceID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); 当我在模拟器中运行它时,它返回null,这会给我带来各种各样的问题。似乎更高的Android版本会返回一些东西 有没有办法在Android emulator中获取设备标识

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

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

final String deviceID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
当我在模拟器中运行它时,它返回
null
,这会给我带来各种各样的问题。似乎更高的Android版本会返回一些东西

有没有办法在Android emulator中获取设备标识符?我是否错误地获取了设备id


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

正如Falmari所说,仿真器中的设备Id将为0。 我使用这种方法根据参数组合生成一个唯一的设备Id(虽然我还没有对它进行过广泛的测试——模拟器和HTC Desire)——这不是我的方法(我记不起我在哪里找到了它——而是应该在哪里找到它)

/*
*创建特定于设备的UUID。在某些情况下,这可能会起作用
*不工作,例如在模拟器中或如果手机中没有SIM卡。
*/
公共静态void setDeviceUUID(上下文)
{
final TelephonyManager tm=(TelephonyManager)context.getSystemService(context.TELEPHONY_服务);
最终字符串tmDevice、tmSerial、Android;
tmDevice=”“+tm.getDeviceId();
tmSerial=”“+tm.getSimSerialNumber();
androidId=”“+Secure.getString(context.getContentResolver(),Secure.ANDROID_ID);
deviceMobileNo=tm.getLine1Number();

UUID deviceUuid=new UUID(android.hashCode(),((long)tmDevice.hashCode()在模拟器中,IMEI和IMSI的值为:

因此,您将始终得到
null

如果您仍然希望在测试中使用这些id号,并且希望为仿真器和真实设备保留相同的代码,则必须在仿真器中以某种方式对其进行更改

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

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

  • “破解”仿真器二进制文件(因为它既不是压缩的也不是加密的——你可以这么做!)并在那里修改字符串(在正确的位置)

  • 以下是操作方法:

    • 备份模拟器二进制文件(稍后回滚)。在Windows中,可以在android“\tools”文件夹中的“emulator.exe”名称下找到该二进制文件

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

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

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

    • 然后保存文件

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


    可以将模拟器二进制文件修改为另一个值。但是,它必须以十进制数字开头,因为在参考ril.c中,它调用
    at_send_command_numeric()
    读取值。我认为必须将其更改为
    at_send_command_singleline()
    以支持MEID字符串(通常是以“A”开头的14个十六进制数字)。除非您非常聪明,能够在二进制文件中找到并交换函数地址,否则您必须在打补丁后从源代码进行构建,以使用与某些手机相同的值。

    如果您想要非空仿真器uuid,请按如下方式启动仿真器:

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

    此外,emulator的设备ID将全部为
    0
    。我的Android 4.3 x86 emulator现在返回一个Android_ID(287a676592dc7b0d)。我认为这不再有效。我在emulator.exe中找不到值“+CGSN”或“+CIMI”。它仍然有效!你只需查看
    emulator arm.exe
    (或者如果您使用的是Intel平台,请使用emulator-x86.exe
    )。我真的不知道为什么这个答案被认为是正确的。ANDROID_ID与IMEI/IMSI完全无关。查看此方法来更改IMEI太旧了。请添加更新的方法来更改IMEI编号。这对我没有任何帮助。
    2325     { "+CIMI", OPERATOR_HOME_MCCMNC "000000000", NULL },   /* request internation subscriber identification number */
    2326     { "+CGSN", "000000000000000", NULL },   /* request model version */
    
    emulator -avd jbx86 -prop emu.uuid=5ec33f90-a471-11e2-9e96-0800200c9a66