PHP开发手机模拟控制类库

这个类库支持PHP程序对安卓手机进行模拟控制。使用时请需安装好adb驱动环境,打开手机开发者模式并将手机连接到电脑上,相关程序在CLI模式下运行。

类库源码:

  1. <?php
  2. /**
  3.  * Created by bobo.
  4.  * DateTime: 2019/7/24 17:22
  5.  * Function:安卓手机ADB服务
  6.  * Description:该服务没啥特别的用途,仅限于安卓手机机器人自动操作,使用时请打开手机调试模式
  7.  */
  8. class AdbService{
  9.     protected $screenPix = [];
  10.     protected $savePath = "";
  11.     /*
  12.      * 初始化数据
  13.      */
  14.     public function __construct(){
  15.         exec("adb shell wm size",$screen);
  16.         $screen = explode(":",$screen[0]);
  17.         $info = explode("x",$screen[1]);    //1080x2280
  18.         $this->screenPix = [intval($info[0]),intval($info[1])];   //X|Y
  19.         print_r($this->screenPix);
  20.         $this->savePath = __DIR__ . "/images/SH".date("YmdHis").".png";
  21.     }
  22.     /*
  23.      * 单击屏幕指定位置
  24.      */
  25.     public function singleTap($x=0,$y=0){
  26.         $x = emptyempty($x)?$this->screenPix[0]/2:$x;
  27.         $y = emptyempty($y)?$this->screenPix[1]/2:$y;
  28.         exec("adb shell input tap ".$x." ".$y." ");
  29.         return true;
  30.     }
  31.     /*
  32.      * 双击屏幕指定位置
  33.      */
  34.     public function doubleTap($x=0,$y=0){
  35.         $x = emptyempty($x)?$this->screenPix[0]/2:$x;
  36.         $y = emptyempty($y)?$this->screenPix[1]/2:$y;
  37.         exec("adb shell input tap ".$x." ".$y." ");
  38.         exec("adb shell input tap ".$x." ".$y." ");
  39.         return true;
  40.     }
  41.     /*
  42.      * 左滑屏幕
  43.      */
  44.     public function swipeLeft(){
  45.         $x = 100;
  46.         $y = $y1 = intval($this->screenPix[1]/2);
  47.         $x1 = intval($this->screenPix[0]/2)+100;
  48.         $this->swipe($x1,$y,$x,$y1);
  49.         return true;
  50.     }
  51.     /*
  52.      * 右滑屏幕
  53.      */
  54.     public function swipeRight(){
  55.         $y = $y1 = intval($this->screenPix[1]/2);
  56.         $x = 100;
  57.         $x1 = intval($this->screenPix[0]/2)+100;
  58.         $this->swipe($x,$y,$x1,$y1);
  59.         return true;
  60.     }
  61.     /*
  62.      * 上滑屏幕
  63.      */
  64.     public function swipeUp(){
  65.         $x = $x1 = intval($this->screenPix[0]/2);
  66.         $y = intval($this->screenPix[1]/2)+100;
  67.         $y1 = 100;
  68.         $this->swipe($x,$y,$x1,$y1);
  69.         return true;
  70.     }
  71.     /*
  72.      * 下滑屏幕
  73.      */
  74.     public function swipeDown(){
  75.         $x = $x1 = intval($this->screenPix[0]/2);
  76.         $y = 100;
  77.         $y1 = intval($this->screenPix[1]/2)+100;
  78.         $this->swipe($x,$y,$x1,$y1);
  79.         return true;
  80.     }
  81.     /*
  82.      * 屏幕截图
  83.      */
  84.     public function screenShot($filepath){
  85.         $filepath = emptyempty($filepath)?$this->savePath:$filepath;
  86.         $dirname = dirname($filepath);
  87.         if(!is_dir($dirname)){
  88.             mkdir($dirname,0777,true);
  89.         }
  90.         exec("adb exec-out screencap -p > ".$filepath);
  91.         //exec("adb exec-out screencap -p | sed 's/\r\n$//'.$filepath")  //备用方法,部分不兼容机器可尝试使用
  92.         return $filepath;
  93.     }
  94.     /*
  95.      * 输入文本
  96.      */
  97.     public function inputText($text){
  98.         if(emptyempty($text)){
  99.             return false;
  100.         }
  101.         exec("adb shell input text ".$text);
  102.         return true;
  103.     }
  104.     /*
  105.      * 检测手机是否root
  106.      */
  107.     public function hasRoot(){
  108.         exec("adb shell",$data);
  109.         if(strstr($data,"#")){
  110.             return true;
  111.         }elseif(strstr($data,"$")){
  112.             return false;
  113.         }else{
  114.             return "unknown";
  115.         }
  116.     }
  117.     /*
  118.      * 重启手机
  119.      */
  120.     public function reboot(){
  121.         exec("adb shell reboot");
  122.         return true;
  123.     }
  124.     /*
  125.      * 扩展ADB命令
  126.      */
  127.     public function extendCmd($command){
  128.         exec($command,$data,$status);
  129.         return ['status'=>$status,'result'=>$data];
  130.     }
  131.     /*
  132.      * 滑动操作
  133.      */
  134.     private function swipe($x,$y,$x1,$y1){
  135.         return exec("adb shell input swipe ".$x." ".$y." ".$x1." ".$y1." ") !== false;
  136.     }
  137. }

不要问这个类库有啥用?其实类库的用途真心不大,但是用的好就能产生价值。给大家分享一个截图吧。
手机群控系统

因此价值这东西不在于别人如何生产,而在于自己如何挖掘。这个类库仅仅是初级的生产工具,如需高级的生产工具可私信定制开发。

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!