大家好,我是3分钟学堂的郭立员,今天带了的是一个多开模拟器读取文本时内容不重复的教程。
使用场景
多模拟器登录app,账号密码保存在同一个文本中,读取方式是读一行删一行,理论上来说是没问题,但是实际操作会出现多个模拟器读取到同一个账号密码,这期代码就是解决这个问题的。
实现原理
我把读取文本的过程分成几个阶段:先报名、再排队,最后依次读取。
具体来讲是这样的,“先报名”就是模拟器把自己的序号(imsi码)传入到共享文件夹里面,“再排队”是按照先后顺序把模拟器的imsi码写入到文本里面,“依次读取”指的是从存imsi文本中的第一个imsi码的模拟器开始读取,第一个读完了,第二个读,依次类推。
代码过程
①获取模拟器的imsi码
- Dim imsi=Device.GetImsi()
复制代码②新建一个imsi存储文本
- If dir.Exist("/sdcard/pictures/imsi.txt")=0 Then file.write ("/sdcard/pictures/imsi.txt")End If
复制代码③使用追加命令把模拟式imsi码写入文本
- file.Append "/sdcard/pictures/imsi.txt", imsi & "\n"
复制代码④读取文本中的imsi码
- dim arr=file.ReadLines("/sdcard/pictures/imsi.txt")
复制代码⑤判断读取文本后的imsi中,第一个是不是本机imsi码
⑥如果上一步判断成立,开始执行读取文本,已经读后删除文本
- Dim txt=file.readline("/sdcard/pictures/a.txt",1) Delay 50file.DeleteLine "/sdcard/pictures/a.txt", 1Delay 50
复制代码⑦删除imsi文本中第一个imsi码,这个过程表示当前模拟器读取完成,其他模拟器就可以读取文本了。
- file.DeleteLine "/sdcard/pictures/imsi.txt", 1
复制代码⑧假设第⑤步的判断不成立,也就是有别的模拟器排在前面,那么就要循环第④至⑦步,一直轮到当前模拟器可以读取文本为止,同时退出循环。
核心内容
通常我们使用多模拟器的时候会用到模拟器自带的同步器功能,这个时候只需要操作一个模拟器,其他模拟器就和它完成同样的操作,当我们使用同步器启动脚本时,所有脚本同时开启,同一时间读取文本,这个时候就会出现同一个账号密码被多个模拟器读取。
我们这期文章中使用了一个“缓冲”文本,先把要读取的模拟器imsi码存起来,然后按顺序执行,就把原本的“同步读取”变成了“异步读取”,有效防止脚本读取到重复的文本。
备注
本期这个操作逻辑的代码,我封装测试了4个模拟器多开使用正常。对于更多数量的测试如果有问题可以在文章下方留言。