AzurLaneAutoScript icon indicating copy to clipboard operation
AzurLaneAutoScript copied to clipboard

Alas重启蓝叠模拟器5hyperv版后adb端口变化导致无法连接

Open guoh064 opened this issue 3 years ago • 6 comments

在提问之前...

  • [X] 我已经搜索了现有的 issues
  • [X] 我在提问题之前至少花费了 5 分钟来思考和准备
  • [X] 我已经阅读了 Wiki 中的 常见问题(FAQ)
  • [X] 我正在使用最新版的 Alas

描述你的问题

使用蓝叠模拟器5Hyperv版,在日期变更重启模拟器后,因模拟器adb端口变化,但Alas仍以上一次获取的adb端口尝试连接模拟器,导致连接失败。

如何复现

  1. 在日期变更前,打开蓝叠模拟器,打开Alas,启动Alas,此时能正确识别随机的端口号并启动com.YoStarJP.AzurLane;
  2. 等待日期变更(日服为GMT+8的23:00)触发;

效果:

  1. Alas登录游戏,随后模拟器进程并结束
  2. 模拟器进程成功启动
  3. Alas试图以adb连接,提示‘由于目标计算机积极拒绝,无法连接。
  4. (因为勾选了尝试重启adb)Alas结束模拟器进程并尝试以原adb端口连接,失败
  5. 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’勾选; 重启模拟器中'启用重启模拟器‘勾选; 模拟器类型选择’自动‘

guoh064 avatar Sep 21 '22 15:09 guoh064

重启分为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 更一般的,也许需要修改类Bluestacks5Instanceid_and_serial也许不应当是@cached_property,因为每次重启模拟器serial都会变化。 https://github.com/LmeSzinc/AzurLaneAutoScript/blob/0cb05cbea86c27b1469ac0724ee1c358a58c6d4f/module/device/emulator.py#L67-L91

guoh064 avatar Sep 23 '22 14:09 guoh064

确实存在这个问题,module/device/emulator.py 和 deploy/emulator.py 因为太屎了,是有计划重构的。重构目前还没安排上,如果是改动现有代码的话,可能有重复劳动。

重构主要需要解决的问题:

  • 提升代码质量
  • 单查软件卸载列表的注册表,可能有遗漏(由于未知原因不在卸载列表)
  • 添加对所有常见模拟器的适配
  • 添加模拟器 serial 与 模拟器实例id 之间的转换
  • 所有 winreg 调用都要 close
  • 更改模拟器启动完成的判断条件,模拟器快启动完成的时候adb状态就转 device 了,现在这个判断这个是不妥的,目前打算是获取当前应用的包名,检查是否已经进入桌面

LmeSzinc avatar Sep 23 '22 16:09 LmeSzinc

那我就不重复劳动了。目前先把重启模拟器开关关了,保证能用吧。

guoh064 avatar Sep 24 '22 00:09 guoh064

其实是因为根本没给hyperv版做适配( 不过这块代码确实写的挺屎的

SaiCateDoan avatar Sep 24 '22 09:09 SaiCateDoan

https://github.com/LmeSzinc/AzurLaneAutoScript/commit/c0c5e8822aa7a21a6b69479bf1d267eec3fa4a5d 重写了模拟器搜索,成功列出了我本机所有的模拟器实例,你有兴趣的话可以在它的基础上重构模拟器的启停,只针对windows。蓝叠Hyper-v的搜索还没有添加,我这边不方便打开hyperv

LmeSzinc avatar Sep 30 '22 17:09 LmeSzinc

蓝叠被kill掉以后原来的端口(?)占用似乎不会被释放掉(会产生两个可以选择的模拟器,即使重启ALAS和蓝叠也能看见原来的选项,必须重启计算机才会释放)这个是不是蓝叠本身就有的问题啊

PoiDaisuki avatar Oct 04 '22 04:10 PoiDaisuki

我这边甚至完全就是连不上蓝叠的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           

EnderAvaritia avatar Jan 22 '23 18:01 EnderAvaritia

bluestacks5-hyperv

喵?

EnderAvaritia avatar Mar 05 '23 13:03 EnderAvaritia

stale

guoh064 avatar Mar 31 '23 00:03 guoh064