零基础写Shell脚本


原创不易,转载请备注:https://blog.csdn.net/junfeng19950206/article/details/94291483
欢迎关注我的个人博客:http://www.offday.club/

问题背景

由于组内给安排了一个动画,这个动画其中有部分会由系统调用,从而到达某种效果。动画本身不难,但是由于系统的参与,所以必须慎重进行压测,于是萌生了写shell脚本的想法,故写本文记录。
本文偏实战型,只会介绍如何编写一个shell脚本---- 只涉及触摸以及滑动,其他不涉及,请知悉,以及自己在编写shell脚本中遇到的问题。

前提条件

  1. Android设备一台,无需Root,本文中我将以华为P20pro为例子;
  2. 最好自己有Linux环境,稍后解释为什么;

实战

模拟点击事件

本文只讲最简单的两种点击方式,如果大家对其他的方式有兴趣,可以看下我最下方的参考文章,里面有介绍。

1.input keyevent [keycode]

注意keycode是参数,比如说我们常见的home键keycode是3,back键keycode是4;
所以模拟点击home键的指令为:adb shell input keyevent 3

2.input swipe [x1][y1][x2][y2][time]

这种方式其实就是滑动事件,将滑动事件限定在一定的范围内,那么就可以认定他为点击事件。
仍然以home键为例,此方法模拟点击home键的指令为:adb shell input swipe 539 2181 524 2160 100
解释下上面的命令,其中 539 2181,代表我滑动(点击)的初始位置, 524 2160代表我滑动(点击)的末尾位置,100为我滑动(点击)的时长。
那么肯定会有人问,我点击的位置如何确定呢?你上面的539 2181的坐标是如何得到的呢?看下方介绍。

获得点击位置的坐标

这个很简单,这是Android设置开发者模式中的一个辅助功能。打开指针位置这个开关,见下图
开发者选项
然后,你每次点击屏幕,都会在状态栏发现有坐标的变化,比如我点击屏幕中的脉脉,得到的坐标为:535 1083
点击位置坐标查看
顺便说一下,开启开发者模式的方式是:在设置中,找到自己手机的版本号,连续点击5-7次(不同手机的设定不同),就可以触发开发者模式。

模拟长按事件

方式与input swipe相同,只需要将time的时间延长即可。一般Android系统默认2s为长按事件,所以大家记得事件最好不要小于2s,我一般都是设置3s左右

睡眠指令

类似上面的点击事件,执行都蛮快的,很多时候,我们点击完一个按钮,通常需要等待一段时间,就比如说,我点击按钮后,出发了我的动画,动画是有duration的,所以,必须要等动画执行完之后,再确认下一步的操作。
睡眠指令:sleep 2
其中2代表2s

循环命令

说到底,我们做脚本的最终目的,是节省人力做重复性的操作,所以如果说你不循环的话,你这个脚本貌似写的也没啥意思啊。
直接贴上循环的代码

for i in $(seq 1 10)
do
echo "222"
done

$(seq 1 10) 是从1到10;
do–done,中间的方法体是循环体,这个循环体就是打印“222”这个字符串。

脚本生成

我的脚本如下:

#!/bin/bash

for i in $(seq 1 10)
do
#长按home键
input swipe 590 2270 589 2271 2000
#睡眠2s,等待xx动画执行完毕
sleep 2
#点击按钮 xx
input swipe 793 1990 800 2000 200
#点击xx 
input swipe 500 740 550 750 100
#睡眠2s,等待xx动画
sleep 2
#点击xx
input swipe 793 1990 800 2000 100
#睡眠1s
sleep 1
#点击xx
input swipe 1000 1540 1001 1541 100
#睡眠2s,等待动画执行完毕,然后执行下一次动画
sleep 2
done

使用脚本

很简单,将你写的脚本push到手机的某个目录下,直接sh xx(脚本名称)执行它,比如说我的:

C:\Users\84707>adb push C:\Users\84707\Desktop\jiaoben\key.sh sdcard/key.sh
6 KB/s (53 bytes in 0.007s)

C:\Users\84707>adb shell
xx00:/ $ cd sd
xx00:/ $ cd sdcard/
xx00:/sdcard $ sh key.sh
222
222
222
222
222
222
222
222
222
222
xx00:/sdcard $

遇到的问题

比如我在执行for循环的时候,曾经遇到过下面的问题:
遇到的问题
后来百度发现,那是因为windows下面的换行符与Linux不符,见linux下与windows下的换行符博客。所以这也是我在文章最开头说的,为什么要有Linux环境的原因。毕竟Android底层还是Linux内核。

之前还遇到过这样类似的一个问题:
遇到的问题2
我感觉问题原因与上面for原因一致。

总结

本文偏实战,纯粹的点击事件,当然也可以通过shell脚本将动画执行过程中的内存情况抓取下来,看下是否有内存泄漏。不过这一部分暂时没有去了解,之后会再去了解下,完善本文。

感谢以下文章的作者,我从文章中学到了很多,参考文章:
Android adb 模拟滑动 按键 点击事件
android在adb下模拟长按事件
格式不兼容问题

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值