将 IMEI 和 MAC 添加到 wlan0 到 Genymotion/AndroVM
Posted
技术标签:
【中文标题】将 IMEI 和 MAC 添加到 wlan0 到 Genymotion/AndroVM【英文标题】:Add IMEI and MAC to wlan0 to Genymotion/AndroVM 【发布时间】:2013-10-24 07:20:47 【问题描述】:有没有办法将 IMEI 添加到 AndroVM(现在的 Genymotion)或任何其他 android 模拟器。我还想要 wlan0 端口的 MAC 地址。我们已经有模拟器在 lan0 端口包含 MAC 但不包含 wlan。 我们怎么能这样做? 如果您的熟人中有人这样做,请让他们做出贡献。
详情:
我正在尝试构建一个基于云的 Android 应用测试中心,作为我大学预科项目的最后一年,以部分完成我的技术学士学位(计算机科学)学位。 我想知道我们如何才能为 Genymotion 获得更多配置。 或者,如果您可以为我提供更多设备配置,并且是否可以非常快速地为不同设备构建 genymotion 配置。 其次,如何在构建中添加MAC地址和IMEI号码?
我们正在尝试模拟移动设备(非 Google 关联)来创建基于云的测试中心。 为此,我们正在尝试使用 androVM (Genymotion),但我们面临一些问题
到目前为止我们做了什么
-
按照Android官网给出的步骤,从头开始以“VBOX86tp-userdebug”模式构建androVm源代码。
在虚拟 ec2 服务器上构建源代码后,键入模拟器命令会运行,但它是空白的。
如果可能的话,AndroVm 可以在“Fastboot”模式下运行,这样我们就可以在设备上安装它。
我们一直致力于从源代码“构建 androVm”并尝试完成一些任务,例如
-
在构建过程完成后使用可用的 img 运行它。
使其可移植,即使用 out 目录中的所有内容创建一个 iso/ova。
到目前为止我们已经尝试过什么
AndroVm 源代码下载 使用 repo init 初始化 repo 使用 repo sync 下载源代码 使用午餐选择午餐菜单 选择 vbox86tp-userdebug
其他全英文菜单不起作用,因此停产
我们遇到的一些错误
犯错误:它们非常简单,因此解决了 system.img 未生成:通过再次生成解决 bin/bash jar 命令错误:碰巧是通过exporting the path to jar 命令解决的路径错误。
几个问题
-
OVA 文件由什么组成,如何创建?据我所见,它包含很少的 VMDK 和附加的配置文件,
如何将平台特定的映像文件(system.img ramdisk.img userdata.img)转换为 OVA 或 ISO 文件。
如果我们缺少一些要提供给模拟器的文件,您可以命名它们吗?
还有如何添加IMEI号码
我们已经有 eth0/1 端口的 MAC,但我们希望它在 wlan 端口上
现在让事情变得有趣
这是我从 Genymotion 团队得到的回复:
I want my project to cover various configurations but for starters if i can get something like Samsung Galaxy phones and tab or as a
如果我能得到三星 Galaxy Tab 2,就开始吧。
您可以更改每个虚拟设备的屏幕大小和 DPI。你 可以切换导航栏和虚拟键盘。然而,我们不能 提供包含专有应用程序的虚拟设备,例如 三星。
Now here what we get is the MAC address of eth0/1 port. What if I need wlan MAC.
除非两个网络接口之一被禁用,否则 应该是 2 个接口、2 个 IP 和 2 个 MAC 地址:adb shell ip a. 2: eth0:mtu 1500 qdisc pfifo_fast 状态向上 qlen 1000 链接/以太 08:00:27:d4:fe:e0 brd ff:ff:ff:ff:ff:ff inet 192.168.56.101/24 brd 192.168.56.255 范围全局 eth0 inet6 fe80::a00:27ff:fed4:fee0/64 范围链接 valid_lft 永远首选_lft 永远 3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000 链接/以太 08:00:27:c8:37:e7 brd ff:ff:ff:ff:ff:ff inet 10.0.3.15/24 brd 10.0.3.255 范围全局 eth1 inet6 fe80::a00:27ff:fec8:37e7/64 范围链接。
抱歉,我们不提供对特定 ROM 的支持。但是,我 强烈建议您访问社区: https://groups.google.com/forum/#!forum/genymotion-users
1. What an OVA file consits of and how can it be created ?From what i have seen it contains few VMDK's and few configurations files
附在上面,
"整个目录可以作为一个OVA包分发,这是一个 tar 存档文件,其中包含 OVF 目录。” (http://en.wikipedia.org/wiki/Open_Virtualization_Format)
2. How to convert the platform specific image files(system.img ramdisk.img userdata.img) into an OVA or ISO file. If at all we are missing few files to give to the emulator, can you just name them.
请阅读社区教程
3. Also how to add IMEI number
目前无法添加 IMEI 号码。这个功能会来 在不久的将来
4. We already have MAC for eth0 port but we want it on wlan port
有 2 个接口:eth0 和 eth1。 Eth0 用于 Genymotion 应用程序小部件。如果此网络连接中断,Genymotion 将无法再开始了。 Eth1 用于网络电流 访问(假 WiFi 连接)。您可以更改此网络 随意配置。
【问题讨论】:
感谢@Peter_O 的编辑。 【参考方案1】:移动应用程序通常通过 IMSI 号码(与 SIM 卡关联)或 IMEI 号码(设备的唯一 ID)来识别用户。当然,在安卓上也是可以的:
TelehponyManager manager = (TelehponyManager)getSystemService(TELEPHONY_SERVICE);
String imei = manager.getDeviceId();
String imsi = manager.getSubscriberId();
此代码在真实设备上运行良好,但在模拟器下 IMEI 始终为零且不可配置。调试使用 IMEI 作为用户 ID 的支持网络的应用程序时,它很快就会变得很尴尬。
试图解决问题我首先查看了TelephonyManager服务,才发现如下sn -p:
private IPhoneSubInfo getSubscriberInfo()
// get it each time because that process crashes a lot
return IPhoneSubInfo.Stub.asInterface(ServiceManager.getService("iphonesubinfo"));
公平的评论,不是吗?这真的让我很开心:)
无论如何,代码分析表明 IMEI/IMSI 请求会通过所有电话层(见图),最终到达基带设备。在模拟系统的情况下,rild 守护进程与 libreference-ril.so 一起使用——参考供应商 RIL 库,它使用普通的旧 AT 命令与基带调制解调器设备通信。
调制解调器设备本身在 Android 系统之外进行模拟,作为 qemu(模拟器的核心)的一部分。模拟器和运行在模拟器中的 Android 系统之间的通信细节本身就很有趣(所有通信都通过一个虚拟串行端口,Android 系统的 qemud 守护进程用于(解)多路复用数据)。我会尽快发布有关该主题的简要介绍。
虚拟调制解调器的实现可以在 external/qemu/telephony/android_modem.c 中找到。该文件最重要的部分是这个函数:
const char* amodem_send( AModem modem, const char* cmd );
每个接收到的 AT 命令都会调用此函数。对于每个命令,在 sDefaultResponses 数组中搜索给定命令,然后发送预定义的响应,或者执行命令处理程序。数组本身看起来像:
static const struct
const char* cmd; /* command coming from libreference-ril.so, if first
character is '!', then the rest is a prefix only */
const char* answer; /* default answer, NULL if needs specific handling or
if OK is good enough */
ResponseHandler handler; /* specific handler, ignored if 'answer' is not NULL,
NULL if OK is good enough */
sDefaultResponses[] =
/* ... */
"+CIMI", OPERATOR_HOME_MCCMNC "000000000", NULL , /* request internation subscriber identification number */
"+CGSN", "000000000000000", NULL , /* request model version */
/* ... */
;
上面引用的两个数组行负责 IMSI 和 IMEI 检索。如您所见,这两个值都是硬编码的,如果不重新编译模拟器,就无法修改它们。
但是,老式的 hack 派上用场了。模拟器二进制文件未加密或压缩,因此字符串文字应该在模拟器二进制文件中可见。事实上,它们是,IMEI号码可以通过几个简单的步骤来修改:
** backup the emulator binary
** open the binary with your favourite hex editor
** search for +CGSN string followed by a null byte, it should be followed by 15 digits of the IMEI number
** edit the number, be careful not to change the number of digits
** save the file, that’s all!
当然,这不是一个完美的解决方案,但总比没有好。在下一部分中,我将解释如何使 IMEI 号码成为可配置选项。享受吧!
【讨论】:
这个答案似乎与我之前看到的博客相似:D 这是官方模拟器,不是 genymotion! 添加来源不会伤害任何人:codepainters.wordpress.com/2009/12/11/…,因此每个人都可以关注链接,例如当您看到“查看图表”或包含新信息的帖子的更新版本时。以上是关于将 IMEI 和 MAC 添加到 wlan0 到 Genymotion/AndroVM的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Cordova for iPhone 中获取 IMEI、序列号、MAC 地址和 Advertiser_id?
求助:虚拟机下Linux 激活wlan0外置usb网卡后输入ifconfig只看到wlan0的mac地址,看不到ip地址
除了 IMEI、Android_ID、WLAN Mac 和蓝牙地址之外的设备的完美唯一 ID