Android屏幕共享及远程控制【免root】

使用方式

对于mac 笔记本用户:

  • Android手机开启开发者选项
  • 用数据线连接Android手机和mac
  • 运行lib目录下的Client,用于显示和控制
  • 运行lib目录下的Install,然后点击连接按钮,若不显示请安如下方式操作

对于所有用户:

  • Android手机开启开发者选项
  • 用数据线连接Android手机和PC
  • 使用adb命令把项目根目录下的Main.dex放到手机中 adb push Main.dex /sdcard/Main.dex
  • 执行adb shell命令 adb shell
  • 执行命令 export CLASSPATH=/sdcard/Main.dex
  • 执行命令 exec app_process /sdcard com.wanjian.puppet.Main
  • 新建命令窗口,然后执行 adb forward tcp:8888 localabstract:puppet-ver1
  • 运行lib目录下的Client,用于显示和控制,点击连接按钮即可

注意:高版本的android手机需要去开发者选项中开启 允许模拟点击

屏幕共享原理

原理和Vysor相同,Android提供了两个截屏方法Surface. screenshot和SurfaceControl. screenshot, 这两个API是隐藏的,客户端没有权限调用,即使通过反射也得不到bitmap,我们可以使用adb命令 启动一个进程,让该进程调用该API就可以得到bitmap了,然后通过socket把数据发送到PC即可。

关键代码如下:

public class Main{public static void main(String[]args){Point size = new Point();size.x = 1080;//最终截屏图片的大小,可以和屏幕不一样大size.y = 1920;String surfaceClassName;if (Build.VERSION.SDK_INT <= 17) {surfaceClassName = "android.view.Surface";} else {surfaceClassName = "android.view.SurfaceControl";}Bitmap b = (Bitmap) Class.forName(surfaceClassName).getDeclaredMethod("screenshot", new Class[]{Integer.TYPE, Integer.TYPE}).invoke(null, new Object[]{Integer.valueOf(size.x), Integer.valueOf(size.y)});}
}

然后按照如下操作:

  • 把这个类编译成class文件
  • 使用dx --dex --output=Main.dex Main.class打包成dex文件
  • 把dex文件发送到手机adb push Main.dex /sdcard/Main.dex
  • 执行adb shell进入shell
  • 设置类路径 export CLASSPATH=/sdcard/Main.dex
  • 运行代码 exec app_process /sdcard Main

这样就可以调用到Main.main方法

远程控制原理

  • PC端获取点击位置相对于当前显示窗口的比例
  • 把该比例发送给手机端
  • 手机端根据手机屏幕大小把比例转换成绝对位置并调用如下代码既可以实现远程控制,x和y是点击的绝对位置,action是动作,如按下,滑动,抬起等
InputManager im = (InputManager) InputManager.class.getDeclaredMethod("getInstance", new Class[0]).invoke(null, new Object[0]);
MotionEvent.class.getDeclaredMethod("obtain", new Class[0]).setAccessible(true);Method injectInputEventMethod = InputManager.class.getMethod("injectInputEvent", new Class[]{InputEvent.class, Integer.TYPE});MotionEvent event = MotionEvent.obtain(downTime, eventTime, action, x, y, pressure, 1.0f, 0, 1.0f, 1.0f, 0, 0);event.setSource(InputDeviceCompat.SOURCE_TOUCHSCREEN);injectInputEventMethod.invoke(im, new Object[]{event, Integer.valueOf(0)});

Android屏幕共享及远程控制【免root】相关推荐

  1. Android逆向之旅--免Root实现微信消息同步原理解析

    感谢「珍惜」同学投稿,也热烈欢迎其他同学来投稿,分析是一种快乐,也是一种精神! 现在很多应用有一些需求需要获取监听微信消息,然后做一些事情,有的会把当前微信聊天信息直接同步到服务端进行分析用户行为,这 ...

  2. android tuner 教程,真正免root的安卓调谐器Android Tuner详细使用教程

    安卓调谐器Android Tuner的功能 一款集合了很多功能的Android系统软件,如任务查杀.软件卸载.电池优化等. 如果要使用安卓调谐器Android Tuner,手机必须root才行.在这里 ...

  3. android通知栏自定义软件,免root状态栏美化神器

    免root状态栏美化神器小编特意为广大小伙伴带来的可直接修改状态栏颜色的工具,用户还可以自定义运行商,状态栏美化神器!感兴趣的用户赶快前来西西软件园下载体验吧! 免root状态栏美化神器使用介绍 我们 ...

  4. 学编程脚本 android,Auto.js安卓免root脚本开发教程

    Auto.js安卓免root脚本开发教程 教程介绍 Auto.js是利用安卓系统的"无障碍服务"功能,实现类似于按键精灵一样,可以通过代码模拟一系列界面动作的辅助工作.与" ...

  5. 通用Android电视 风行电视 免root禁用广告方法

    环境:Android 电视.智能电视.机顶盒 问题:开机弹窗,无法安装软件 解决办法:ADB命令切换root后,再安装.禁用卸载软件 以风行电视举例: 1.下载ADB工具包 自行百度 或者点击下载 2 ...

  6. Android新技术学习——阿里巴巴免Root无侵入AOP框架Dexposed

    阿里巴巴无线事业部近期开源的Android平台下的无侵入运行期AOP框架Dexposed,该框架基于AOP思想,支持经典的AOP使用场景.可应用于日志记录,性能统计,安全控制.事务处理.异常处理等方面 ...

  7. 借助ADB冻结与卸载Android系统应用(免ROOT)

    背景: 我妈的手机饱受系统应用广告推送之苦,每天都能在通知栏里收到好几条广告.为了给她个清净,本篇博文应运而生. 目标: 卸载安卓系统应用 所用工具: 硬件:我妈的手机(魅蓝5) PC端:Minima ...

  8. Android免Root无侵入AOP框架Dexposed

    Dexposed框架是阿里巴巴无线事业部近期开源的一款在Android平台下的免Root无侵入运行期AOP框架,该框架基于AOP思想,支持经典的AOP使用场景,可应用于日志记录,性能统计,安全控制,事 ...

  9. 关于airdroid免root操作

    参考南宫小鱼One的百度云的讨论(详见链接https://tieba.baidu.com/p/6136914642) 这个免root是比较烦的步骤,参考南宫小鱼One,总结个人亲测可行的步骤如下: 1 ...

最新文章

  1. Simulink仿真教程4---模块库介绍
  2. list contains方法_Java中给List去重的5种方法,谁的效率更高?
  3. 用于稠密检索的无监督领域适应方法—Generative Pseudo Labeling (GPL)
  4. 程序人生:硬件工程师应记住的10个技巧
  5. Linux C高级编程——网络编程之包裹函数
  6. 深圳观澜机房(云计算数据中心)
  7. zepto为什么不支持animate,报animate is not a function
  8. 超界文字滚动 (id和类型两种实现方式)
  9. 借贷宝java_【人人行(借贷宝)Java面试】借贷宝java后端开发面经。-看准网
  10. Android7.1取消wifi图标叉号
  11. Spark:聚类算法
  12. c语言 五个学生学号 姓名 三门,有五个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入五个学生的数据,要求打印三门课总平均...
  13. [POI2007]ODW-Weights(贪心)
  14. 128G的U盘格式化后只有300M,如何恢复成128G
  15. 计算机连上wifi无法上网了,电脑已连接wifi但无法上网 已连接wifi但电脑无法上网-192路由网...
  16. 如何批量打印dwf文件
  17. wnmp mysql 密码_WNMP(Windows + Nginx + PHP + MySQL) 安装
  18. Python采集《雪中》弹幕做词云图可视化分析,看看它为何高开低走
  19. NLP | 自然语言处理经典seq2seq网络BERT详解及代码
  20. MAXENT模型的生物多样性生境模拟

热门文章

  1. 第十届软件杯(民航大数据在线可视化分析系统)
  2. 如何在电脑上转换视频格式? - 10款视频转换工具分享
  3. centos7.9安装了微信,但腾讯公司不允许在Linux里登录微信帐号,白搞了半天。也有可能是那个微信安装包的问题吧
  4. Tabular系列之问题1:如何利用其他人的账号进行权限测试?
  5. html+js 实现天气,JS实现天气预报查询
  6. ABAP smartforms 打印多页打印在同一页上解决
  7. 为什么都说做猎头很累?
  8. 双线性群简介与基本运算
  9. python车牌识别系统+车辆管理+计费系统(图像识别)django框架 计算机毕业设计
  10. 四个技巧提升你的网站百度收录量