emulator 修改MCCMNC后的联网问题

本文详细解析了如何在Emulator中正确配置MCC、MNC,解决联网问题。通过修改模拟器源码,调整MNC长度,更新APN配置,确保模拟器能够使用国内移动网络。同时介绍了如何设置Cellular选项以实现上网。

        在<<Emulator默认电话号码和MCC,MNC的修改>>中已经知道了模拟器的MCC,MNC是如何修改的. 但是修改后是有一个问题的.即模拟器无法联网了. 主要问题是在哪里呢?

        首先我们要知道手机SIM卡中是存储了国际移动用户识别码的就是我们常说的IMSI, 这串数字用于区别移动用户的有效信息. 其总长度一般为15位, 前面的三位就是MCC即国家代码. 如:中国的460 美国的310等. 那么MNC就是 第4位到第6位 . 中国的MNC是两位的所以IMSI  的前5位就是MCCMNC. 美国的MNC是三位,所以IMSI 的前6位就是MCCMNC. 模拟器默认的就是美国的MCCMNC. 即310260. 

        那么当手机插入SIM后是如何确定MNC的位数的呢? 毕竟手机需要根据MCC和MNC来确定apn好接入到对应的网络上网的.首先获取IMSI 是这样的.  在emulator 模拟器的源码中有 qemu/android/android-emu/android/telephony/modem.c  这个文件. 其中有下面这么一段

//原本的代码中 第二项是有数据的 就是相应的IMSI 和IMEI
// 我修改成通过后面的方法来获取相应的数据

{ "+CIMI", NULL, handleGetImsi },

{ "+CGSN", NULL, handleGetImei },

这一段是通过AT指令来获取相应的IMSI 和IMEI的.

         同样在/telephony文件夹下有一个文件 sim_card.c 文件 有这么一段. 

 { "+CRSM=176,28589,0,0,4",  "+CRSM: 144,0,00000002" },   //Change MNC Length to 2

这一段命令是通过AT指令 来确定MNC的长度的 原本最后的一个数字是3.即MNC的长度截取3位. 因为emulator默认MCC是美国的310 所以MNC截取为3位. 现在我们改成2位,这样 framework中就会截取MNC的长度就是两位了.

        确定了MCCMNC的长度后,我们就可以把apns-conf.xml 修改后打包进rom中了.  注意: 原有的aosp中apns-conf.xml  是不包含 其它国家的MCCMNC的. 我们可以将真机的 /system/etc/apns-conf.xml  pull出来 打包进rom中 这样apn的接入点就是 国内的移动网络代码了. 同样我们将真机的 /system/etc/spn-conf.xml  pull出来打包进rom中. 这样 运营商的名字就会根据这个配置文件来确定了. 

       另外 记得将 emulator 中 Cellular 设置项中的NetworkType 选为LTE 然后 重置 apn 就可以上网了.

       通过 adb shell getprop 查看gsm.sim 的相关属性 发现都变了!!.

       

       

### 配置macOS Emulator实现正常联网 为了使macOS上的Android模拟器能够正常联网,需确保几个关键设置正确无误。以下是详细的配置指南: #### 1. 安装并配置Android SDK工具 确认已安装最新版本的Android SDK Tools,并将其路径加入系统的`PATH`环境变量中[^3]。 ```bash export ANDROID_HOME=/Users/username/CONFIG_HOME/ASDK export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH ``` 请注意将上述命令中的`/Users/username/CONFIG_HOME/ASDK`替换为实际的SDK安装位置。 #### 2. 启动AVD管理器创建或修改虚拟设备 通过命令行启动AVD Manager来新建或编辑现有的虚拟机实例,确保选择了支持网络功能的目标镜像。 ```bash avdmanager list device avdmanager create avd -n my_avd -k "system-images;android-28;google_apis;x86" ``` 这里假设创建了一个名为`my_avd`的新虚拟设备,使用API Level 28作为目标系统版本。 #### 3. 设置正确的DNS服务器地址 有时默认的DNS可能不适用于某些网络环境,在这种情况下可以手动指定DNS服务器。这可以通过向模拟器传递额外参数完成: ```bash emulator @my_avd -dns-server 8.8.8.8,8.8.4.4 & ``` 此操作会强制模拟器使用Google提供的公共DNS服务来进行域名解析。 #### 4. 检查防火墙和其他安全软件的影响 如果仍然遇到连接问题,则可能是由于本地计算机上运行的安全防护程序阻止了必要的端口通信。此时应该暂时禁用这些应用程序测试是否能解决问题;如果是的话再考虑调整其规则允许特定流量通过。 #### 5. 使用Wi-Fi共享方式提供互联网访问权限 对于那些依赖于物理网卡才能获得稳定外网接入的情况,可以选择让主机充当无线热点的角色并向guest VM授予相应许可。具体做法是在系统偏好设置 -> 共享 中开启Internet Sharing选项并将Ethernet分享给WiFi接口。 以上措施通常足以解决大多数关于macOS平台上Android模拟器无法上网的问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值