使用Python操控雷电模拟器的方法
摘要:
由于雷电模拟器的命令行工具非常适合第三方代码控制,所以越来越多的人开始使用雷电模拟器进行脚本、逆向等软件的开发。但是也有很多人不清楚用程序控制雷电模拟器的原理和方法。所以我以比较容易入门的Python代码为例,从原理到方法讲解一下雷电模拟器的控制过程。
雷电模拟器的控制原理
安装好雷电模拟器之后,大家可以在安装目录下面找到ldconsole.exe和ld.exe两个命令行程序。此外,启动雷电模拟器之后,可以在共享文件夹→高级选项里面找到一个Windows路径。这个路径和模拟系统里面/sdcard/Pictures路径,两者是想通的。即在模拟器中复制文件到/sdcard/Pictures路径下,对应的Windows路径下面也会多出一个这样的路径。这个对于识图脚本来说,是非常的友好——因为在模拟器中截图无需经过dump步骤,就可以直接在控制主机上读到图并进行处理。此外两边甚至能够动态、高效的传递共享文件,这个功能就完爆其他模拟器。
下面说说ld和ldconsole两个命令。Ld命令用来执行adb命令,但是和普通adb不同的是,你无需知道模拟器设备的序列号,而是直接可以通过序号来发命令。而且目标不存在能够很快反馈。这个可以加快脚本的效率,并且提高脚本的稳定性——因为不存在也不会崩溃。此外ld命令的连接非常稳定,不会受到物理USB线的影响,不会时断时续不稳定。这个对一些要长期跑的脚本来说,简直就是致命吸引。
ldconsole也是一个很不错的工具,可以控制模拟器参数的设定,包括imei,序列号,手机号分辨率等等参数,还可以检测和控制模拟器的启动和关闭。甚至能够模拟输入,按键,滑动等操作。而且这种模拟操作是模拟器本身的开发接口,比adb要更稳定和灵敏,非常适合开发人员使用。
综上,雷电模拟器的控制原理,其实是通过控制命令行接口来控制模拟器的行为。
雷电模拟器控制的示例
class Dnconsole:
# 请根据自己电脑配置
console = 'D:\\Changzhi\\dnplayer2\\ldconsole.exe '
ld = 'D:\\Changzhi\\dnplayer2\\ld.exe '
share_path = 'C:/Users/zerglurker/Documents/雷电模拟器/Pictures'
@staticmethod
def get_list():
cmd = os.popen(Dnconsole.console + 'list2')
text = cmd.read()
cmd.close()
info = text.split('\n')
result = list()
for line in info:
if len(line) > 1:
dnplayer = line.split(',')
result.append(DnPlayer(dnplayer))
return result
@staticmethod
def list_running() -> list:
result = list()
all = Dnconsole.get_list()
for dn in all:
if dn.is_running() is True:
result.append(dn)
return result
@staticmethod
def is_running(index: int) -> bool:
all = Dnconsole.get_list()
if index >= len(all):
raise IndexError('%d is not exist&