怎样在命令行上测试小扳手
很早之前,小扳手就是在命令行上可以用的,我开发一个新功能总喜欢先在命令行上实现出来,然后再在图形界面下考虑该怎么实现。
现在有个朋友说碰到他用小扳手发一条消息用时特别长,所以把怎么在命令行上测试小扳手写出来,希望可以帮他解决这个问题。
以Windows为例。强烈建议在Windows下安装一个Cygwin,这个可以提供一个非常像Linux的环境,可以上网查一下怎么装,弄一个默认安装应该就可以了,不会太麻烦的。下文就假设已经装了Cygwin🌞。 小扳手发布的时候,解开那个压缩包,你还能看到一个lua.exe文件。lua是一种非常精干的脚本编程语言,兄弟我也是刚学的。你可以直接用lua.exe来运行小扳手的一些功能。比如:
(打开一个命令行cmd.exe或者Cygwin的bash,cd到T1Wrench-windows目录底下)
lua.exe ./t1wrench.lua t1_post hello
运行一下上面的这条命令,如果你的手机在QQ聊天的界面下,它就会给你的聊天对象发一句“hello”。
这个脚本会花很长的时间,因为它会先按你的手机config一遍小扳手,比如会获取是T1手机还是其他厂商手机之类的信息。这个你可以打开 t1wrench.lua 这个文件来看一下,里面有个t1_config函数,就是干这个用的。这个config在小扳手图形界面下是不会每次发消息都运行的,只会在手机刚连上来的时候运行一次。
所以你也可以把t1_config函数的调用去掉,因为我们测量时只关注真正发消息所用的时间。方法是修改一下小扳手的这个核心脚本 t1wrench.lua ,在里面一些关键位置加入一些系统时间信息。
你可以直接用我改过的 这个脚本 ,把它放到T1Wrench-windows的解压目录下(把原来那个改个名字备份一下),然后运行,就会在命令行cmd.exe/bash终端窗口里打印出很详细的时间信息。运行方法就是上面说的这条命令:
lua.exe ./t1wrench.lua t1_post hello
哦对了,差点忘了,你在运行这个改过的脚本的时候,需要把 cygwin 的date.exe命令拷贝一份到相同目录下的 dates.exe 。因为Windows的命令行自带了一个date.exe命令,lua.exe跑脚本的时候会先找到那个命令,那个是有问题的。比如我的date.exe是在 C:\cygwin64\bin\date.exe
,所以我把它拷贝为 C:\cygwin64\bin\dates.exe
。
如果是在bash而不是cmd.exe下运行这个脚本命令的话,你还可以在前面加一个time,这样就会打印出整个命令所花的时间。你跑完了以后把终端上的输出发给我看一下,我们来分析一下哪里慢了。从下面的输出可以看到我发一条信息需要3秒。
-*- mode: compilation; default-directory: "~/src/github/T1Wrench-windows/" -*- Compilation started at Fri Jan 30 15:04:07 time lua ./t1wrench.lua t1_post hello cmd is M[arg[1]](arg[2]) 2015-01-30 15:06:03.882772700+08:00 t1wrench.lua:905: xx 2015-01-30 15:06:03.917774700+08:00 t1wrench.lua:273: before pipe: "dumpsys window" 2015-01-30 15:06:04.083784200+08:00 t1wrench.lua:282: after pipe: "dumpsys window" 2015-01-30 15:06:04.124786500+08:00 t1wrench.lua:907: xx 2015-01-30 15:06:04.176789500+08:00 t1wrench.lua:708: xx 0 KB/s (4 bytes in 0.008s) 2015-01-30 15:06:04.255794000+08:00 t1wrench.lua:710: xx Starting service: Intent { cmp=com.bhj.setclip/.PutClipService } 2015-01-30 15:06:04.961834400+08:00 t1wrench.lua:721: xx 2015-01-30 15:06:04.992836200+08:00 t1wrench.lua:917: xx window is com.sina.weibo/com.sina.weibo.weiyou.DMSingleChatActivity 2015-01-30 15:06:05.034838600+08:00 t1wrench.lua:273: before pipe: "dumpsys window" 2015-01-30 15:06:05.155845500+08:00 t1wrench.lua:282: after pipe: "dumpsys window" started is true got a line: Window #11 Window{42472a60 u0 InputMethod}: got a line: mDisplayId=0 mSession=Session{432392e8 1914:u0a10158} mClient=android.os.BinderProxy@4236d8c8 got a line: mOwnerUid=10158 mShowToOwnerOnly=true package=com.google.android.inputmethod.pinyin appop=NONE got a line: mAttrs=WM.LayoutParams{(0,0)(fillxfill) gr=#50 sim=#20 ty=2011 fl=#1800108 pfl=0x8 fmt=-2 wanim=0x1030056 vsysui=0x300} got a line: Requested w=1080 h=1842 mLayoutSeq=7775 got a line: mIsImWindow=true mIsWallpaper=false mIsFloatingLayer=true mWallpaperVisible=false got a line: mHasSurface=false mShownFrame=[0.0,78.0][1080.0,1920.0] isReadyForDisplay()=false 2015-01-30 15:06:05.197847900+08:00 t1wrench.lua:273: before pipe: "dumpsys input_method" 2015-01-30 15:06:05.313854600+08:00 t1wrench.lua:282: after pipe: "dumpsys input_method" add is wait putclip done 2015-01-30 15:06:06.839941800+08:00 t1wrench.lua:1510: xx real 0m3.015s user 0m0.015s sys 0m0.000s Compilation finished at Fri Jan 30 15:04:11