如何通过电脑操控 Android 设备 · Tang‘s Blog

背景

由于公司项目的需要,最近花时间研究了下「电脑操控 Android 设备」的具体实现,其间踩了不少坑(说多了都是泪啊),在此记录下来供大家参考与学习。

VNC

其中涉及到最主要的技术便是 VNC (Virtual Network Computing) ,它是使用远程帧缓冲协议(RFB)远程控制另一台计算机(设备)的图形桌面共享系统,其主要包括:

  • VNC Server :此服务程序必须在在主(或遥控)计算机(设备)上运行。你只能作为使用者(不需要根用户身份)使用此项服务。
  • VNC Viewer :本地应用程序,用于远程接入运行 VNC Server 的计算机(设备)并显示其环境。你需要知道远程计算机(设备)的 IP 地址和 VNC Server 设定的密码。

工作流程

  1. 在服务器端启动 VNC Server。
  2. VNC 客户端通过浏览器或 VNC Viewer 连接至 VNC Server。
  3. VNC Server 传送一对话窗口至客户端,要求输入连接密码, 以及存取的 VNC Server 显示装置。
  4. 在客户端输入联机密码后,VNC Server 验证客户端是否具有存取权限。
  5. 若是客户端通过 VNC Server 的验证,客户端即要求 VNC Server 显示桌面环境。
  6. VNC Server 通过 X Protocol 要求 X Server 将画面显示控制权交由 VNC Server 负责。
  7. VNC Server 将来由 X Server 的桌面环境利用 VNC 通信协议送至客户端, 并且允许客户端控制 VNC Server 的桌面环境及输入装置。

说明

网上已经有许多关于电脑控制手机(真机)的工具与教程且亲测可行,具体请参考:

但是!但是!但是!!!
坑就是从这里开始的,由于项目需求的特殊性,我需要在模拟器(Android Emulator)上实现相同的效果(后面会具体说明模拟器与真机的差别与难点),所以接下来我会详细介绍实现操控模拟器的具体操作步骤。


具体操作

模拟器 ROOT

由于大多数「VNC Server For Android」应用都需要求手机为 Root 状态(后来发现有不需要 Root 的,但没有进行实际验证),所以第一步便是实现模拟器的 Root :

  • 如果你使用的是第三方模拟器 Genymotion 的话(在这里强烈推荐下),则系统(4.0+)默认为 Root 状态

下载 android-vnc-server

这里就要涉及到「ARM」与「X86」的概念,详情请参见:手机CPU科普 ARM构架与X86构架的优劣对比,之后便参照下面步骤实现安装:

  • 如果你使用的是第三方模拟器 Genymotion,由于其依托 VirtualBox,所以其模拟器的架构默认为 X86,因此你需要下载可以在 X86 下运行的 VNC Server 版本:androidvncserver_x86
  • 如果你使用的是原生模拟器,则在创建 AVD 时「CPU/ABI」选择「ARM」,

随后下载 ARM 版本 androidvncserver

安装 android-vnc-server

将「androidvncserver_x86」(如果你使用原生模拟器则为「androidserver」)拷贝到模拟器指定路径(/data/local)下,我试了两种方法:

  • 使用 adb push 进去,如下:

    adb push 所在路径/androidvncserver_x86 /data/local/
    
  • 使用文件夹管理工具,如 Root Explorer

更改「androidvncserver_x86」的权限,同样也有两种方法:

  • 使用 adb

    # chmod 555 androidvncserver_x86
    
  • 使用文件夹管理

运行 androidvncserver_x86

# /data/local/androidvncserver_x86 &

注:如果这一步出现

Initializing framebuffer device /dev/graphics/fb0…
xres=320, yres=480, xresv=320, yresv=960, xoffs=0, yoffs=0, bpp=16
Initializing keyboard device /dev/input/event3 …
cannot open kbd device /dev/input/event3

大家可以参考这里,其关键就是:

> adb shell
# /data/androidvncserver -k /dev/input/event0 -t /dev/input/event0 &

运行 VNC Viewer

  1. 下载相应版本VNC并安装
  2. adb forward tcp:5901 tcp:5901
  3. 打开 VNC Viewer,地址填写「127.0.0.1:5901」,点击「连接」后便可看到画面


Tips

  1. ADB 环境变量配置
  2. ADB Shell 命令详解

期待与你成为朋友

原文:大专栏  如何通过电脑操控 Android 设备 · Tang‘s Blog

原文地址:https://www.cnblogs.com/chinatrump/p/11596957.html

时间: 2024-10-15 07:00:55

如何通过电脑操控 Android 设备 · Tang‘s Blog的相关文章

基于IOS和Android设备MDM技术方案服务价格

导读:前段时间 www.mbaike.net 博客被恶意攻击,导致程序崩溃,目前已经替换了以前的Wordpress程序,现提供IOS和Android版本MDM的代码和相关文档咨询服务. 一.IOS版MDM服务内容及价格: 套餐一:IOS端MDM Server代码(提供MDM Server端的代码和部署文档,不含后期技术支持) 3000元套餐二:IOS端MDM开发技术顾问(提供MDM开发的顾问服务,协助理解MDM原理流程及搭建MDM Server工作的咨询) 1500元套餐三:IOS端MDM全部服

android设备休眠

从上面的连接里面找到了一些资料: 如果一开始就对Android手机的硬件架构有一定的了解,设计出的应用程序通常不会成为待机电池杀手,而要设计出正确的通信机制与通信协议也并不困难.但如果不去了解而盲目设计,可就没准了. 首先Android手机有两个处理器,一个叫Application Processor(AP),一个叫Baseband Processor(BP).AP是ARM架构的处理器,用于运行Linux+Android系统:BP用于运行实时操作系统(RTOS),通讯协议栈运行于BP的RTOS之

android设备休眠机制

如果一开始就对Android手机的硬件架构有一定的了解,设计出的应用程序通常不会成为待机电池杀手,而要设计出正确的通信机制与通信协议也并不困难.但如果不去了解而盲目设计,可就没准了. 首先Android手机有两个处理器,一个叫Application Processor(AP),一个叫Baseband Processor(BP).AP是ARM架构的处理器,用于运行Linux+Android系统:BP用于运行实时操作系统(RTOS),通讯协议栈运行于BP的RTOS之上.非通话时间,BP的能耗基本上在

电脑控制Android设备的软件——Total Control

最早开始搞Android开发时,为了调试方便,想找一个Android下的远程控制软件,支持在电脑端远程控制和同步显示Android设备.先后试了360手机助手.Mobizen.Vysor和MirrorGo等软件,感觉都不太理想.后来把WinCE远程桌面助手移植到Android下,几经周折只实现了显示屏幕并未能支持控制.随着手机分辨率的不断提高,使用体验也不断下降.后来因为工作较忙,就没继续折腾.最近发现了一个超好用的通过电脑远程显示和控制Android设备的软件,Total Control,基本

设置Android设备在睡眠期间始终保持WLAN开启的代码实现

MainActivity如下: package cc.ab; import android.os.Bundle; import android.provider.Settings; import android.app.Activity; /** * Demo描述: * 设置设备在睡眠期间始终保持WLAN开启. * * 参考资料: * 1 http://stackoverflow.com/questions/8652031/how-to-modify-wi-fi-sleep-policy-pro

MonkeyRunner源码分析之与Android设备通讯方式

如前文<谁动了我的截图?--Monkeyrunner takeSnapshot方法源码跟踪分析>所述,本文主要会尝试描述android的自动化测试框架MonkeyRunner究竟是如何和目标设备进行通信的. 在上一篇文章中我们其实已经描述了其中一个方法,就是通过adb协议发送adb服务器请求的方式驱动android设备的adbd守护进程去获取FrameBuffer的数据生成屏幕截图.那么MonkeyRunner还会用其他方式和目标设备进行通信吗?答案是肯定的,且看我们一步步分析道来. 1.概述

Android设备网络、屏幕尺寸、SD卡、本地IP、存储空间等信息获取工具类

Android设备网络.屏幕尺寸.SD卡.本地IP.存储空间.服务.进程.应用包名等信息获取的整合工具类. 1 package com.qiyu.ddb.util; 2 3 import android.annotation.SuppressLint; 4 import android.annotation.TargetApi; 5 import android.app.Activity; 6 import android.app.ActivityManager; 7 import androi

获取Android设备唯一标识码

概述 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码.虽然Android系统中提供了这样设备识别码,但是由于Android系统版本.厂商定制系统中的Bug等限制,稳定性和唯一性并不理想.而通过其他硬件信息标识也因为系统版本.手机硬件等限制存在不同程度的问题. 下面收集了一些“有能力”或“有一定能力”作为设备标识的串码. DEVICE_ID 这是Android系统为开发者提供的用于标识手机设备的串号,也是各种方法中普适性较高的,可以说几乎所有的设备都可以返回这个串号,并且

一款Android设备上的智能路由器软件:手机服务站

现在智能电视和盒子的配置越来越高,体验越来越好,那么我们除了用它看看电视电影,打打游戏外,还能干什么呢?它占据着客厅的重要位置,是不是可以做点其他的事情? 例如: 1.用它代替无线路由器给我们的手持设备或笔记本共享网络可以吗? 2.能不能把它做成服务器,用来保存一些不方便或者不需要上传到网络云盘里的文件呢? 3.再或者我想建立一个私人的网站,记录家里的点点滴滴,这些,都可以吗? 4.就算以上都可以做,那我管理起来会不会不方便? 所以,在此向各位推荐一个Android软件来解决以上几个问题,而且还