手机无须ROOT不用修改hosts即可在本地测试安卓、苹果APP和H5应用

开发手机APP和 H5 应用经常需要在本地和线上环境分开测试,一般想到的操作都是修改hosts,我也一直这么干的,但手机上修改hosts是需要 ROOT权限的,这样太过麻烦,还有变砖头的风险,而且有些手机根本不能ROOT的。

忙和了一下午,总算完全达到预期,有点收获,下面说说重点,主要是两个:

  1. 本地 DNS 服务
  2. 网络代理

做个本地的 DNS 服务,有点像DNS劫持的感觉,这个是一劳永逸的办法 
首先,你需要一个Linux 虚拟机或一台服务器 
我下面的配置使用的 Centos7.0 系统,不通版本可能有些差别的。

一、安装 DNSMasq

# 安装
yum install dnsmasq -y 

service dnsmasq start

# 编辑配置参数

vi /etc/dnsmasq.conf

# 查找 resolv-file 去掉注释符,添加文件路径

# 表示 dnsmasq 会从这个指定的文件中寻找上游dns服务器
resolv-file=/etc/resolv.conf

# 查找 no-hosts , 确保前面有 # 井号的(表示被注释掉的),否则 hosts 配置不起作用
# 监听的IP
listen-address=127.0.0.1,192.168.0.103

strict-order

addn-hosts=/etc/hosts

cache-size=32768

# 配置到网卡参数,centos7 和 6 的网卡名是不同的,用ifconfig 查看替换下

# centos 7 以前
vi /etc/sysconfig/network-scripts/ifcfg-eth0
# centos7 不一定相同
vi /etc/sysconfig/network-scripts/ifcfg-enp3s0

#  最多只能写3个,注意原配置中若存在则需要调整

DNS1=127.0.0.1
DNS2=192.168.0.103
DNS3=202.101.172.35
#DNS3=202.101.172.47

# 保存后, resolv.conf 文件内容会自动更新的

cat /etc/resolv.conf

# 查看DNS是否已添加进去

# 注册服务
chkconfig dnsmasq on

# 重启
/etc/init.d/dnsmasq restart

# centos7 下使用的命令
systemctl restart dnsmasq

# 检查是否安装成功

netstat -tunlp|grep 53

yum install bind-utils

# 测试是否启用 DNS 配置

dig m.ai9475.com

# 编辑 hosts 文件,配置本地 DNS 劫持域名 IP 的映射关系

vi /etc/hosts

192.168.0.105 m.ai9475.com

  

这样服务端的 DNS 劫持就基本配置好了 下一步还需要在手机上设置 DNS 对应的 IP,

打开 网络设置 -> wifi连接 -> 修改网络 -> 高级 -> 静态IP方式 -> 修改第一个NS的IP即可,第二个可用正常的公网DNS

如下图:

最后注意:修改 hosts 之后,需要重启 dnsmasq 还有 network 最好也重启

二、使用本地网络代理

这个方法比较有局限性,对 H5 网页应用还可以,对部分原生 APP 可能无效哦,但有个好处是配合一些软件可以做前端的抓包查看,对测试接口之类的查看数据很有用

我用到过两个软件, 
1. Fiddler 
这个软件使用很方便,网上有很多介绍,这里就不说了,但据说仅支持 windows 平台 
2. Whistle 
这个是开源的项目,跨平台,我目前用的是这个,配置也很简单 
下面简单说下如何安装使用

依赖 Nodejs,所以先安装 nodejs 
我这里图方便,就用 yum 的方式安装了

curl --silent --location https://rpm.nodesource.com/setup_4.x | bash -
yum install -y nodejs

  

下载速度可能有些忙,10KB/s 下载了好半天才下完,耐心等吧

npm install cnpm -g --registry=https://registry.npm.taobao.org
cnpm install -g whistle
w2 start

  

这样就完成了。。。

查看代理请求数据,就是抓包数据

http://127.0.0.1:8900 
http://127.0.0.1:8899

:8899 是代理的端口,但也可以查看抓包数据

两个端口都可以看,下图看看效果先(图片可以直接拖拽查看大图)

其他的就直接看官方说明文档吧,中文的,很清晰明了 
https://avwo.github.io/whistle/install.html

后面就是手机上操作和上面的 DNS 设置是同一个地方

打开 网络设置 -> wifi连接 -> 修改网络 -> 高级 -> 代理(手动配置) -> 填写局域网中服务器的IP,如192.168.0.103,端口 8899

如下图:

最后就是修改服务器上的 hosts,参考上方 DNS 配置 hosts 的操作是一样的

差不多就这样设置好了。

最后需要注意的就是清除手机上的缓存,一定要关闭浏览器和应用,清理内存后再打开,否则手机上的 DNS 和网络设置可能没有切换过来的。

以上配置我都是在 Android 设备上测试的, iOS 没有应用可测试,不过按理说应该是一样的效果的。 
虽然代理的方法对有些APP 不一定有用,但建议还是 DNS 和 代理一起上吧。。。就这样了。

时间: 2024-12-19 12:38:34

手机无须ROOT不用修改hosts即可在本地测试安卓、苹果APP和H5应用的相关文章

给大家分享web开发新手修改hosts文件实现本地域名访问的正确方法

1.如何正确修改hosts文件: 一般打开hosts文件里面都会有个示例,按照其格式修改即可 比如以下内容: # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host 即代表打开rhino.acme.com这个网址将解析到102.54.94.97,ip地址与网址间至少有一空格,当然建议通过按Table键来编辑,即美观又不容易编写失误;这也就是通过解

修改hosts文件在本地使域名解析到指定IP

如何修改hosts文件? 1)hosts文件的位置:C:\windows\system32\drivers\etc,文件夹中找到Hosts文件并用记事本打开. 2)按照 ip地址  域名 的格式添加单独的一行记录.例如112.124.39.29 www.server110.com注意,IP地址前面不要有空格,ip地址和域名之间,要有至少1个空格.修改后,一定要记得保存文件. 3)如何知道域名的IP地址已经生效?在您的电脑上请按如下步骤操作:开始-->运行-->输入cmd-->ping 域

命令行修改文件文件夹访问权限 cacls, 修改hosts内容方法

背景 日常使用Windows的过程中,hosts(C:\Windows\System32\drivers\etc)文件可能被一些程序串改,因此在网上找到禁止/允许修改hosts文件的bat脚本,但是在使用过程中有遇到了新的麻烦,特记录下相关问题的解决方法. 禁止/允许修改hosts文件的bat脚本 Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动

Android手机修改hosts文件

有的时候,我们需要在内网环境测试软件,内网将域名解析的时候比较麻烦,Android手机直接修改hosts文件可以带来方便. hosts文件的作用实际上就是讲域名解析为ip地址,比如你的hosts文件里面存在192.168.4.77 ppo.xxuo.cn那么当你手机访问ppo.xxuo.cn的时候,服务器地址就会被解析为192.168.4.77,如果hosts文件没有内容,则采用DNS服务器的数据解析域名. 进入正题,修改Android手机的hosts步骤:1.root:2.修改hosts文件权

安卓手机修改hosts攻略-摘自网络

Android手机是和Google帐号紧密联系的,由于$^&情况,很多时候Google帐号无法登录,导致Android市场无法使用.在电脑上我们通过修改Hosts方法可以解决Google帐号的登录问题,在Android手机上也可以使用这个方法. 步骤/方法 1 先通过各种方法让Android手机获取Root权限,之后运行Root Explorer管理器,进入可写状态,找到/system/etc/hosts的文件,将其权限修改为可写. 2 打开超级终端Terminal Emulator,输入su,

Android Multimedia框架总结(二十五)MediaProjection实现手机截屏(无须root)

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53966818 前言:一年半多以前,我们曾有个项目,要做一个截屏功能,当时负责调研的同事,答应了产品上这个功能,但开发一周后,发现,无法实现截取手机屏幕图像,须要root权限,才能做.因为最近研究MediaProjection,意外的发现,竟然无须root,可以轻松实现次功能.曾经被做不到的,如今做到了,很难相信此时的心情.看下今天

kindle paperwhite2 root 密码修改方法

昨天由于kindle的耗电量突然增大,开始查找原因.经过检查搜索后,确定是由于卡索引的问题导致,于是开始解决这个问题.然而在通过ssh以root身份登陆到kindle上时,始终出现登陆错误,提示密码不对,于是想方法修改root密码.       方法:就是关闭kindle的索引功能.     (注:这个索引搜索功能不是首页搜索书籍目录的那个搜索,而是进入一本书后,搜索本书的所有内容或者kindle里面所有书的所有内容,平时几乎不用这个索引功能).        本方法修改root密码的前提条件有

【转】Ubuntu修改Hosts文件工具HostsTool使用说明

国内IT开发者都会面临访问google等国外网站不稳定的问题,这些问题一方面可以通过番墙来解决,也可以通过修改本机hosts文件来解决. 之前在Windows上一直使用HostsTool这个国人的修改hosts文件软件,切换到Ubuntu环境自然也首先想到这个工具.Ubuntu安装方法如下: 1.下载最新版HostsTool for linux 打开https://hosts.huhamhire.com/get-hosts-x11.html,也可以这里下载1.9.8版本,更新日期:2014030

pushlet服务端推送——点对点单播(不用修改lib包)

pushlet点对点单播,在网上看 ,大家都是将包修改然后替换lib中class,其实不用不这么麻烦,java可以继承嘛,继承原来的类重写里面的方法就行,不必编译出来替换class,这样不方便修改 新建一个类,继承nl.justobjects.pushlet.core.SessionManager类,重写里面的createSession方法即可 package com.pushlet.serveToClient; import javax.servlet.http.HttpSession; im