目录
Android Studio 高版本已经可以使用 Pair Devices Using Wi-fi 功能连接同一局域网下的真机设备了,低版本也可以使用Android adb wifi 插件完成无线调试,还是比较方便的。但是,如何连接同一局域网下的模拟器,实现远程调试呢?这是本文需要解决的问题。
由于个人开发条件受限,模拟器运行内存消耗不小,在一个机器上开发调试设备压力比较大,切换窗口查看也不是很方便。平时工作时,是两台设备使用Mouse without Borders 共享键鼠,但毕竟是两个主机,交互有些不方便。在一台机器上开发,在另一台机器上运行模拟器调试,就是我的需求了。
模拟器运行时会有一个启动控制台,第一个模拟器控制台默认端口是5554,对应的ADB连接端口是5555。两个端口号默认相邻,ADB端口比控制台端口大1。对应关系举例如下:
模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
依此类推
知道了端口关系,才能输对连接命令。
这里将运行AndroidStudio的主机称为开发端,将运行模拟器的主机称为调试端。
启动模拟器之前需要安装模拟器,这里使用Android Studio AVD Manager 事先生成好的模拟器。因为不需要启动Android Studio,所以这里直接使用命令行的方式启动模拟器。
找到Android Sdk安装目录,我的是:
C:\Users\user\AppData\Local\Android\Sdk\
和模拟器文件所在目录,我的是:
C:\Users\user\.android\avd
模拟器目录下会有模拟器的名称,启动命令中会用到。
启动命令如下:
.\emulator\emulator.exe -avd Pixel_XL_API_31
emulator.exe在 android Sdk 目录下的emulator目录里。-avd 参数指定要启动的模拟器名称。
启动后,保持控制台窗口开启,不然会关闭模拟器。输入Ctrl+C可手动关闭模拟器。
如果启动失败需要查看端口是否被其他程序占用,默认启动的第一个模拟器需要 5554,5555两个端口都可用。
由于模拟器启动占用了控制台,我们需要另开控制台执行后续命令。
查看端口占用:
Netstat -ano|findstr "5554"
模拟器运行之后,需要连接ADB,完成桥接。然后在开发端连接调试端的ADB接口。
模拟器启动时一般会自动启动ADB服务。
ADB可执行程序所在位置在Android Sdk目录下的platform-tools目录下。
查看启动的模拟器名称和控制台端口:
.\platform-tools\adb.exe devices
可以看到输出结果为:
List of devices attached
emulator-5554
表明,模拟器控制台端口为5554,那么可知adb连接端口为5555。
现在adb已经连接了模拟器,端口为5555,但是仅能在本地访问。要想在开发端连接模拟器,还需要将端口映射到外网。
相关命令如下:
添加端口转发:
netsh interface portproxy add v4tov4 5555 127.0.0.1 5555
查看端口转发情况:
netsh interface portproxy show all
删除端口转发:
netsh interface portproxy delete v4tov4 listenport=5555 listenaddress=* protocol=tcp
正常情况下执行第一条命令即可。
要想外网访问,还需要设置防火墙以放行5555端口。
找到 Windows Defender 高级安全功能。

点击入站规则 - 新建规则

选择端口,下一步,输入放行端口 5555,其他默认,最后一步名称自取。比如:ADB远程调试5555。
以上设置都是在调试端完成,目的就是开放模拟器的ADB连接端口5555。然后在开发端 Android Studio Terminal 窗口输入:
adb connect 192.168.0.110:5555
192.168.0.110是调试端的ip地址,这样即可完成连接。
查看连接的设备状态:
adb devices
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'
使用Ruby1.9.2运行IDE提示说需要gemruby-debug-base19x并提供安装它。但是,在尝试安装它时会显示消息Failedtoinstallgems.Followinggemswerenotinstalled:C:/ProgramFiles(x86)/JetBrains/RubyMine3.2.4/rb/gems/ruby-debug-base19x-0.11.30.pre2.gem:Errorinstallingruby-debug-base19x-0.11.30.pre2.gem:The'linecache19'nativegemrequiresinstall
我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element
Ruby是否有逐步调试器,类似于Perl的“perl-d”? 最佳答案 ruby-debug(对于ruby1.8),debugger(对于ruby1.9),byebug(对于ruby2.0)以及trepanning系列都有一个-x或--trace选项。在调试器内部,命令setlinetrace将打开或关闭线路跟踪。这是themanualforruby-debug原来的答案已经修改,因为数据噪声文章的链接,唉,不再有效了。还添加了ruby-debug的后继者 关于ruby-Ruby
require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame
假设我在Store的模型中有这个非常简单的方法:defgeocode_addressloc=Store.geocode(address)self.lat=loc.latself.lng=loc.lngend如果我想编写一些不受地理编码服务影响的测试脚本,这些脚本可能已关闭、有限制或取决于我的互联网连接,我该如何模拟地理编码服务?如果我可以将地理编码对象传递到该方法中,那将很容易,但我不知道在这种情况下该怎么做。谢谢!特里斯坦 最佳答案 使用内置模拟和stub的rspecs,你可以做这样的事情:setupdo@subject=MyCl
在ruby中,你可以这样做:classThingpublicdeff1puts"f1"endprivatedeff2puts"f2"endpublicdeff3puts"f3"endprivatedeff4puts"f4"endend现在f1和f3是公共(public)的,f2和f4是私有(private)的。内部发生了什么,允许您调用一个类方法,然后更改方法定义?我怎样才能实现相同的功能(表面上是创建我自己的java之类的注释)例如...classThingfundeff1puts"hey"endnotfundeff2puts"hey"endendfun和notfun将更改以下函数定