AzurLaneAutoScript
AzurLaneAutoScript copied to clipboard
Alas重启蓝叠模拟器5hyperv版后adb端口变化导致无法连接
在提问之前...
- [X] 我已经搜索了现有的 issues
- [X] 我在提问题之前至少花费了 5 分钟来思考和准备
- [X] 我已经阅读了 Wiki 中的 常见问题(FAQ)
- [X] 我正在使用最新版的 Alas
描述你的问题
使用蓝叠模拟器5Hyperv版,在日期变更重启模拟器后,因模拟器adb端口变化,但Alas仍以上一次获取的adb端口尝试连接模拟器,导致连接失败。
如何复现
- 在日期变更前,打开蓝叠模拟器,打开Alas,启动Alas,此时能正确识别随机的端口号并启动com.YoStarJP.AzurLane;
- 等待日期变更(日服为GMT+8的23:00)触发;
效果:
- Alas登录游戏,随后模拟器进程并结束
- 模拟器进程成功启动
- Alas试图以adb连接,提示‘由于目标计算机积极拒绝,无法连接。
- (因为勾选了尝试重启adb)Alas结束模拟器进程并尝试以原adb端口连接,失败
- Alas请求人工接管。
此时,使用console.bat并输入adb devices命令,List of devices attached列表为空。
预期行为
模拟器自动重启后能重新打开com.YoStarJP.AzurLane;
相关 Logs
INFO 22:28:49.212 │ Delay task `Dorm` to 2022-09-22 03:06:49 (success=True)
INFO 22:28:49.225 │ Bind task {'Alas', 'General', 'Dorm'}
INFO 22:28:49.227 │ Save config ./config\alas.json,
Dorm.Scheduler.NextRun=datetime.datetime(2022, 9, 22, 3, 6, 49)
INFO 22:28:49.234 │ Scheduler: End task `Dorm`
INFO 22:28:49.236 │ [Server] jp
INFO 22:28:49.250 │ Bind task {'Alas', 'General'}
INFO 22:28:49.253 │ No task pending
INFO 22:28:49.255 │ [Task] Restart (Enable, 2022-09-21 23:00:00)
INFO 22:28:49.256 │ Bind task {'Alas', 'General', 'Restart'}
INFO 22:28:49.261 │ Wait until 2022-09-21 23:00:00 for task `Restart`
INFO 22:28:49.263 │ Close game during wait
INFO 22:28:49.265 │ App stop: com.YoStarJP.AzurLane
INFO 23:00:02.234 │ <<< APP START >>>
INFO 23:00:02.236 │ App start: com.YoStarJP.AzurLane
INFO 23:00:02.543 │ <<< APP LOGIN >>>
INFO 23:00:02.656 │ [Device Orientation] 0 (Normal)
INFO 23:00:07.838 │ [Device Orientation] 0 (Normal)
INFO 23:00:13.019 │ [Device Orientation] 0 (Normal)
INFO 23:00:18.248 │ [Device Orientation] 0 (Normal)
INFO 23:00:20.402 │ Click ( 462, 337) @ LOGIN_CHECK
INFO 23:00:20.455 │ Login success
INFO 23:00:21.303 │ Click ( 958, 158) @ MAINTENANCE_ANNOUNCE
INFO 23:00:25.616 │ Click ( 473, 327) @ LOGIN_CHECK
INFO 23:00:29.944 │ Click ( 57, 62) @ BACK_ARROW
INFO 23:00:30.270 │ Click (1261, 30) @ GOTO_MAIN
INFO 23:00:31.752 │ Click (1042, 668) @ GET_ITEMS_1
INFO 23:00:35.099 │ Click ( 48, 49) @ BACK_ARROW
INFO 23:00:36.023 │ Click (1177, 63) @ LOGIN_ANNOUNCE
INFO 23:00:37.551 │ Login to main confirm
INFO 23:00:37.554 │ Scheduler: Start task `Restart`
═══════════════════════════════════════════════════════════════════════════════════
RESTART
═══════════════════════════════════════════════════════════════════════════════════
INFO 23:00:37.861 │ <<< APP RESTART >>>
INFO 23:00:37.865 │ <<< EMULATOR RESTART >>>
INFO 23:00:37.866 │ Detect emulator from all emulators installed
INFO 23:00:37.867 │ Detected emulators:
INFO 23:00:37.869 │ Name: BlueStacks_nxt, Multi_id: Nougat64
INFO 23:00:37.870 │ Find the only emulator, using it
INFO 23:00:37.872 │ Kill emulator
INFO 23:00:37.873 │ Execute: ['C:\\software\\AzurLaneAutoScript\\toolkit\\Lib\\
site-packages\\adbutils\\binaries\\adb.exe', '-s', '127.0.0.1:2782',
'reboot', '-p']
WARNING 23:00:57.897 │ TimeoutExpired when calling ['C:\\software\\AzurLaneAutoScr
ipt\\toolkit\\Lib\\site-packages\\adbutils\\binaries\\adb.exe', '-s',
'127.0.0.1:2782', 'reboot', '-p'], stdout=b'', stderr=None
INFO 23:00:57.900 │ Execute: taskkill /im HD-Player.exe /t /f
INFO 23:01:16.951 │ Start emulator
INFO 23:01:16.953 │ Execute: "C:/Program Files/BlueStacks_nxt/HD-Player.exe"
--instance Nougat64
INFO 23:01:29.019 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:01:29.027 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:01:29.030 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:01:36.075 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:01:36.079 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:01:36.081 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:01:43.147 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:01:43.150 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:01:43.153 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:01:50.208 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:01:50.212 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:01:50.214 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:01:57.255 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:01:57.259 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:01:57.262 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:02:04.325 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:02:04.328 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:02:04.331 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:02:11.391 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:02:11.394 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:02:11.397 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:02:18.462 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:02:18.465 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:02:18.468 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:02:25.514 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:02:25.517 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:02:25.519 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:02:32.580 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:02:32.582 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:02:32.585 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:02:39.620 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:02:39.623 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:02:39.626 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:02:46.688 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:02:46.691 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:02:46.694 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:02:53.752 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:02:53.755 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:02:53.757 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:03:00.804 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:03:00.807 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:03:00.810 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:03:07.868 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:03:07.871 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:03:07.874 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:03:14.928 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:03:14.931 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:03:14.934 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:03:21.991 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:03:21.995 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:03:21.997 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:03:29.049 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:03:29.052 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:03:29.055 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:03:36.114 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:03:36.117 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:03:36.120 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:03:43.166 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
INFO 23:03:43.169 │ cannot connect to 127.0.0.1:2782:
由于目标计算机积极拒绝,无法连接。 (10061)
WARNING 23:03:43.171 │ No such device exists, please restart the emulator or set a
correct serial
INFO 23:03:48.183 │ Kill emulator
INFO 23:03:48.184 │ Execute: ['C:\\software\\AzurLaneAutoScript\\toolkit\\Lib\\
site-packages\\adbutils\\binaries\\adb.exe', '-s', '127.0.0.1:2782',
'reboot', '-p']
INFO 23:03:48.209 │ Start emulator
INFO 23:03:48.212 │ Execute: "C:/Program Files/BlueStacks_nxt/HD-Player.exe"
--instance Nougat64
INFO 23:03:58.246 │ Kill emulator
INFO 23:03:58.248 │ Execute: ['C:\\software\\AzurLaneAutoScript\\toolkit\\Lib\\
site-packages\\adbutils\\binaries\\adb.exe', '-s', '127.0.0.1:2782',
'reboot', '-p']
INFO 23:03:58.273 │ Start emulator
INFO 23:03:58.275 │ Execute: "C:/Program Files/BlueStacks_nxt/HD-Player.exe"
--instance Nougat64
CRITICAL 23:04:08.311 │ Request human takeover
INFO 23:04:08.313 │ No provider specified, skip sending
截图
No response
还有别的吗?
#1604 的后续问题?
“Alas设置”中Serial=’bluestacks5-hyperv'; 游戏服务器='日服'; ‘在检测不到设备的时候尝试重启adb’勾选; 重启模拟器中'启用重启模拟器‘勾选; 模拟器类型选择’自动‘
重启分为kill和start两个部分。
kill的部分我还在思考为什么以adb地址kill会失败,以taskkill会成功;先说start的部分。
阅读代码后我认为问题来自这几段代码:
https://github.com/LmeSzinc/AzurLaneAutoScript/blob/0cb05cbea86c27b1469ac0724ee1c358a58c6d4f/module/device/emulator.py#L229-L239
这里的emulator_start中的serial参数应该接收模拟器重启后对应的参数。
https://github.com/LmeSzinc/AzurLaneAutoScript/blob/0cb05cbea86c27b1469ac0724ee1c358a58c6d4f/module/device/emulator.py#L254-L257
当emulator = 'bluestacks_5'时,serial在重启后发生变化,所以应当在调用adb_connect之前重新获取其serial。以原来的serial获取则会超时。
也许可以使用serial_check方法得到新的adb地址,但我并不确定怎么写比较好……
https://github.com/LmeSzinc/AzurLaneAutoScript/blob/72c9cb1937cae203b2b197c50d93d5928816c74a/module/device/connection_attr.py#L70-L97
更一般的,也许需要修改类Bluestacks5Instance的id_and_serial也许不应当是@cached_property,因为每次重启模拟器serial都会变化。
https://github.com/LmeSzinc/AzurLaneAutoScript/blob/0cb05cbea86c27b1469ac0724ee1c358a58c6d4f/module/device/emulator.py#L67-L91
确实存在这个问题,module/device/emulator.py 和 deploy/emulator.py 因为太屎了,是有计划重构的。重构目前还没安排上,如果是改动现有代码的话,可能有重复劳动。
重构主要需要解决的问题:
- 提升代码质量
- 单查软件卸载列表的注册表,可能有遗漏(由于未知原因不在卸载列表)
- 添加对所有常见模拟器的适配
- 添加模拟器 serial 与 模拟器实例id 之间的转换
- 所有 winreg 调用都要 close
- 更改模拟器启动完成的判断条件,模拟器快启动完成的时候adb状态就转 device 了,现在这个判断这个是不妥的,目前打算是获取当前应用的包名,检查是否已经进入桌面
那我就不重复劳动了。目前先把重启模拟器开关关了,保证能用吧。
其实是因为根本没给hyperv版做适配( 不过这块代码确实写的挺屎的
https://github.com/LmeSzinc/AzurLaneAutoScript/commit/c0c5e8822aa7a21a6b69479bf1d267eec3fa4a5d 重写了模拟器搜索,成功列出了我本机所有的模拟器实例,你有兴趣的话可以在它的基础上重构模拟器的启停,只针对windows。蓝叠Hyper-v的搜索还没有添加,我这边不方便打开hyperv
蓝叠被kill掉以后原来的端口(?)占用似乎不会被释放掉(会产生两个可以选择的模拟器,即使重启ALAS和蓝叠也能看见原来的选项,必须重启计算机才会释放)这个是不是蓝叠本身就有的问题啊
我这边甚至完全就是连不上蓝叠的adb,alas检测不了,手动改了也连不上,总觉得蓝叠是有点问题。 大佬你是怎么连上的啊?
INFO 02:31:35.536 │ 127.0.0.1:7223
INFO 02:31:35.538 │ Here are the devices detected but unavailable
INFO 02:31:35.540 │ 127.0.0.1:6505 (offline)
INFO 02:31:35.542 │ Connecting to local emulator, using host 192.168.1.127
INFO 02:31:35.544 │ Reverse server listening on 192.168.1.127:20205, client can
send data to 192.168.1.127:20205
ERROR 02:31:50.549 │ AdbTimeout: adb read timeout
INFO 02:31:53.556 │ disconnected 127.0.0.1:7223
INFO 02:31:53.561 │ connected to 127.0.0.1:7223
INFO 02:31:53.562 │ <<< DETECT DEVICE >>>
INFO 02:31:53.565 │ Here are the available devices, copy to
Alas.Emulator.Serial to use it or set Alas.Emulator.Serial="auto"
INFO 02:31:53.568 │ 127.0.0.1:7223
INFO 02:31:53.570 │ Here are the devices detected but unavailable
INFO 02:31:53.572 │ 127.0.0.1:6505 (offline)
INFO 02:31:53.575 │ Connecting to local emulator, using host 192.168.1.127
INFO 02:31:53.577 │ Reverse server listening on 192.168.1.127:20201, client can
send data to 192.168.1.127:20201
ERROR 02:32:08.582 │ AdbTimeout: adb read timeout
INFO 02:32:11.588 │ disconnected 127.0.0.1:7223
INFO 02:32:11.594 │ connected to 127.0.0.1:7223
INFO 02:32:11.596 │ <<< DETECT DEVICE >>>
INFO 02:32:11.598 │ Here are the available devices, copy to
Alas.Emulator.Serial to use it or set Alas.Emulator.Serial="auto"
INFO 02:32:11.600 │ 127.0.0.1:7223
INFO 02:32:11.602 │ Here are the devices detected but unavailable
INFO 02:32:11.603 │ 127.0.0.1:6505 (offline)
INFO 02:32:11.605 │ Connecting to local emulator, using host 192.168.1.127
INFO 02:32:11.607 │ Reverse server listening on 192.168.1.127:20333, client can
send data to 192.168.1.127:20333
ERROR 02:32:26.611 │ AdbTimeout: adb read timeout
CRITICAL 02:32:26.613 │ Retry screenshot_adb_nc() failed
CRITICAL 02:32:26.616 │ Request human takeover
INFO 02:32:26.619 │ No provider specified, skip sending
bluestacks5-hyperv
喵?
stale