更改Android模拟器上的设备ID?

时间:2011-01-13 22:51:08

标签: android android-emulator

有没有办法更改模拟器TelephonyManager将返回的IMEI?另外,有没有办法更改Settings.Secure.ANDROID_ID返回的ID?

在服务器端存储数据时,我使用这些ID来区分用户。如果我的QA团队可以更改这些ID,那么它们就不会全部使用相同的用户数据集。

7 个答案:

答案 0 :(得分:2)

我还没有尝试过,但this page概述了一种涉及手动修改emaultor.exe文件的方法。虽然您必须为每个QA团队成员创建一个单独的模拟器,但这似乎非常简单。

答案 1 :(得分:2)

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 :(得分:2)

回答zyc zyc是最好的,直到android 7.1.1(25)。从android 8的android_id规则已经改变,如官方开发者文档中所述: https://android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html

  

在O中,Android ID(Settings.Secure.ANDROID_ID或SSAID)对于每个应用和设备上的每个用户具有不同的值。需要设备范围标识符的开发人员应改为使用可重置标识符(例如广告ID),从而为用户提供更多控制权。广告ID还提供面向用户的设置以限制广告跟踪。   另外在Android O中:   只要程序包名称和签名密钥相同,ANDROID_ID值就不会在程序包卸载/重新安装时发生更改。应用可以依赖此值来维护重新安装状态。   如果在运行早期版本的Android的设备上安装了应用程序,则在将设备更新为Android O时,Android ID将保持不变,除非卸载并重新安装该应用程序。   如果设备出厂重置或者签名密钥在卸载和重新安装事件之间轮换,则Android ID值仅会更改。   只有使用Google Play服务和广告ID的设备制造商才需要进行此更改。其他设备制造商可能会提供替代的可重置ID或继续提供ANDROID ID。

答案 3 :(得分:1)

查询android_id在adb shell中使用此命令:

  

设置获取安全android_id

更改android_id在adb shell中使用此命令:

  

设置安全android_id xxxxxxxxxxxxxxxx

答案 4 :(得分:0)

除了@ zyc-zyc答案

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,名称= android_id,值= XYXYXYX

adb shell settings get secure android_id

  

XYXYXYX

更新有效,但是当我读取值

时,所有解决方案对设备没有影响
Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID)

答案 5 :(得分:0)

如果您仍然需要更改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,您需要使用其他路径。

答案 6 :(得分:0)

自奥利奥以来,每个用户的每个程序包的android id都是唯一的,并存储在:

/data/system/users/(user_id)/settings_ssaid.xml

甚至还有open-source project on github带有预构建的二进制文件,可以为您查询和修改ID。您将需要root用户访问权限,但是,这在模拟器上应该不是问题。

更改似乎仅在重启后才生效。