有没有办法更改模拟器TelephonyManager
将返回的IMEI?另外,有没有办法更改Settings.Secure.ANDROID_ID
返回的ID?
在服务器端存储数据时,我使用这些ID来区分用户。如果我的QA团队可以更改这些ID,那么它们就不会全部使用相同的用户数据集。
答案 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用户访问权限,但是,这在模拟器上应该不是问题。
更改似乎仅在重启后才生效。