兴趣使然开发一个自动化点击工具(多进程通信)
1.点击事件的实现
原理adb shell 模拟屏幕点击事件。类似自动化点击测试(monkeyrunner)

private void execShellCmd(String cmd) {//cmd为shell命令Log.e(TAG, cmd);// 申请获取root权限,这一步很重要,不然会没有作用try {process = Runtime.getRuntime().exec("su");// 获取输出流outputStream = process.getOutputStream();dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeBytes(cmd);dataOutputStream.flush();dataOutputStream.close();outputStream.close();} catch (IOException e) {e.printStackTrace();Toast.makeText(this, "脚本执行失败,请检查root!", Toast.LENGTH_SHORT).show();}
}

常用命令(字符串)

sleep 1 \n                  //睡眠时间单位秒1.00
input tap 100 100 \n        //点击屏幕坐标

2.屏幕坐标捕捉
1)使用Activity自带的OnTouch事件

@Override
public boolean onTouch(View v, MotionEvent event) {x1 = event.getX();y1 = event.getY();return true;
}

2)页面展示小红点
SurfaceView实现

private SurfaceView sv_record;
private SurfaceHolder holder;
//初始化
holder = sv_record.getHolder();
holder.addCallback(this);
holder.setFormat(PixelFormat.TRANSLUCENT);
//画点
private void drawPoint(float x, float y) {Canvas c = null;try {synchronized (holder) {//锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了。c = holder.lockCanvas();//(作画)//设置画布背景颜色c.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);Paint p = new Paint();p.setColor(Color.RED);c.drawCircle(x, y, 30, p);}} catch (Exception e) {e.printStackTrace();} finally {if (c != null) {holder.unlockCanvasAndPost(c);//结束锁定画图,并提交改变。}}
}

3.SQLite保存脚本到本地

//新建数据库
public void initDatebase(Context context) {SQLiteDatabase db = context.openOrCreateDatabase("shell.db", Context.MODE_PRIVATE, null);db.execSQL("CREATE TABLE IF NOT EXISTS shell (name VARCHAR, shell VARCHAR, createTime DateTime , updateTime DateTime)");db.close();
}
//增
private void createShell(SQLiteDatabase db, ShellVo shellVo) {Timestamp timestamp = new Timestamp(new Date().getTime());String sql = "INSERT INTO shell VALUES ('" + shellVo.getName() + "', '" + shellVo.getShell() + "', + '" +timestamp +"', '" + timestamp + "')";db.execSQL(sql);
}
//删
public void deleteShellByName(Context context, String name) {SQLiteDatabase db = context.openOrCreateDatabase("shell.db", Context.MODE_PRIVATE, null);db.rawQuery("Delete FROM shell WHERE name = '" + name + "'", null);db.close();
}
//改
private void updateShell(SQLiteDatabase db, ShellVo shellVo) {Timestamp timestamp = new Timestamp(new Date().getTime());String sql = "UPDATE shell SET shell = '" + shellVo.getShell() + "', updateTime = '" + timestamp + "' WHERE name = '" + shellVo.getName() + "'";db.execSQL(sql);
}
//查
public ShellVo getShellByName(Context context, String name) {ShellVo shellVo = new ShellVo();SQLiteDatabase db = context.openOrCreateDatabase("shell.db", Context.MODE_PRIVATE, null);Cursor c = db.rawQuery("SELECT * FROM shell WHERE name = '" + name + "'", null);if (c != null && c.getCount() > 0) {while(c.moveToNext()){//根据列名获取列索引shellVo.setName(c.getString(c.getColumnIndex("name")));shellVo.setShell(c.getString(c.getColumnIndex("shell")));try {shellVo.setCreateTime((Date) format.parse(c.getString(c.getColumnIndex("createTime"))));shellVo.setUpdateTime((Date) format.parse(c.getString(c.getColumnIndex("updateTime"))));} catch (ParseException e) {e.printStackTrace();}}}db.close();return shellVo;
}
//删除表
public void clearShell(Context context) {SQLiteDatabase db = context.openOrCreateDatabase("shell.db", Context.MODE_PRIVATE, null);db.execSQL("DROP TABLE shell");db.close();
}

4.选择本地应用app并打开

//获取所有本地app
private List<Map<String, Object>> data = new ArrayList<>();
private void getAPPs() {PackageManager packageManager = null;packageManager = getPackageManager();List<PackageInfo> mAllPackages=new ArrayList<PackageInfo>();mAllPackages = packageManager.getInstalledPackages(0);for(int i = 0; i < mAllPackages.size(); i ++){PackageInfo packageInfo = mAllPackages.get(i);String name = (String) packageInfo.applicationInfo.loadLabel(packageManager);String packageName = (String) packageInfo.applicationInfo.packageName;if ((packageInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==0) {String ed = keyword.getText().toString().trim();if (!ed.isEmpty() && !name.startsWith(ed)) {continue;}Map map = new HashMap();map.put("name", name);map.put("packageName", packageName);data.add(map);}}
}
//开启app
public void startAPP(String appPackageName){try{Intent intent = this.getPackageManager().getLaunchIntentForPackage(appPackageName);startActivity(intent);}catch(Exception e){Toast.makeText(this, "没有安装", Toast.LENGTH_LONG).show();}
}

连点器(内含apk)http://download.csdn.net/detail/mwh613245/9617170
测试脚本(内含apk)http://download.csdn.net/detail/mwh613245/9617139

Android连点器(adb)相关推荐

  1. Android之在笔记本电脑adb devices识别不了oppo A9手机(设备管理器ADB Interface里面有个黄色感叹号)

    1 问题 记本电脑adb devices识别不了oppo A9手机(设备管理器ADB Interface里面有个黄色感叹号) 图片如下 2 分析 很明显这里是驱动问题,ADB Interface有感叹 ...

  2. android自动点击adb,自动点击器adb手机安卓软件下载安装-自动点击器adb免root最新版下载v1.0.5-乐游网软件下载...

    <自动点击器adb>是一款非常实用的自动手机点击软件,软件可以在不生成脚本,不需要root的情况下模拟真实的点击,帮助用户解决手机中需要不断点击的情况,软件的操作简单容易上手,当然功能比需 ...

  3. [转]Mac OS X 下部分Android手机无法连接adb问题之解决方案

    时至当今,Android山寨手机厂商已如此之多,能修改和个性化定制Android OS的能人已是多如牛毛,有的牛人修改Android系统只会影响所修改的点,不会影响其它,然后还有的就不多说了,总之做的 ...

  4. android 备份管理器,最佳Android备份提取器和备份解决方案

    第1部分:如何进行ADB备份 可以使用Android备份提取器轻松备份其数据.如果您的设备安装了Android 4.0及更高版本,则可以轻松执行这些简单的步骤.虽然,它也适用于其他版本,但方法可能会有 ...

  5. Android:玩转ADB命令(ADB命令使用大全)

    此文章内容整合自网络,欢迎转载. 我相信做Android开发的朋友都用过ADB命令,但是也只是限于安装应用push文件和设备重启相关,更深的就不知道了,其实我们完全可以了解多一点,有一些不常用的场景我 ...

  6. Android最常用命令-Adb

    adb 挂载及过滤 获得root权限后,获得写权限 adb disable-verity 第一次 adb root 挂载 adb remount (重新挂载系统分区,使系统分区重新可写,只针对syst ...

  7. 【Android取证篇】ADB端口驱动更新详细步骤

    [Android取证篇]ADB端口驱动更新详细步骤 更新ADB端口驱动,解决无法连接设备问题-[蘇小沐] 1.[记录VID]路径:设备管理器->便携设备->属性->(记录)VID 查 ...

  8. Mac OS X 下部分Android手机无法连接adb问题之解决方案

    时至当今,Android山寨手机厂商已如此之多,能修改和个性化定制Android OS的能人已是多如牛毛,有的牛人修改Android系统只会影响所修改的点,不会影响其它,然后还有的就不多说了,总之做的 ...

  9. (转)Mac OS X 下部分Android手机无法连接adb问题之解决方案

    时至当今,Android山寨手机厂商已如此之多,能修改和个性化定制Android OS的能人已是多如牛毛,有的牛人修改Android系统只会影响所修改的点,不会影响其它,然后还有的就不多说了,总之做的 ...

  10. Android进阶:实用ADB命令

    adb的功能还是很多的,本文中只列出了部分常用的,还是推荐大家直接看官方文档 adb命令入口:system/core/adb/commandline.cpp 全局选项和变量 选项: -a 监听所有网络 ...

最新文章

  1. pytorch之Tensor与Variable的区别
  2. php xorcrevasse,XorEncrypt
  3. linux对方开放端口,Linux 开放端口
  4. ACCESS-类型转换函数
  5. Linux centos7 安装python3.6.5 和 pip3
  6. Linux系统常见的压缩与打包命令
  7. Qt读取海康威视NVR服务器视频
  8. ios 按钮下面加下划线_iOS 给部分文字加下划线四种方法
  9. OSChina 周四乱弹 ——Iphone7出了开始做牛做马了
  10. hacker 入门指南
  11. win10便签常驻桌面_Win10下环境有哪些好用的便签记事本?想和iPhone一块儿用 - 学显...
  12. kvm显示器怎么切换服务器,kvm切换器一套键盘鼠标显示器的热键切换方法教程
  13. 切莫让这三只猫跑进管理工作中
  14. 前端vscode必备插件推荐(墙裂推荐)
  15. Ant Design Pro右上角个人设置管理
  16. Hexo中Buttefly最新教程总览
  17. 【计息日期】国债逆回购类产品的起息日期和兑付日期,如何用python优雅实现?~
  18. 鲜为人知而又实用的 Linux 命令大全
  19. 前端系列——与众不同的移动端底部固定栏 fixed、absolute 兼容 iOS 和 Android 方案
  20. 好教程推荐系列:《C++新经典》和《Visual C++ 2017从入门到精通》

热门文章

  1. 汉诺塔递归算法python详细解析图_汉诺塔递归算法的图解(自我总结)
  2. Oracle数据库打补丁注意事项
  3. worder字体网页字体对照表
  4. 编写基础程序:Hello World
  5. div垂直居中和水平居中的多种方式
  6. 三菱PLC传送类指令应用
  7. wso2 mysql_windows下 WSO2 Application Server配置 及 MySQL数据服务部署
  8. java ftps 证书_java – 连接到FTPS服务器
  9. 数据的展现技巧——数据透视表(一)
  10. 文件及代码代码命名规则