翼度科技»论坛 编程开发 .net 查看内容

C# adb封装类

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
为了方便操作apk 实现app的自动化点击 封装了个adb操作了。基本上的操作都有了
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Drawing;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. class Emulator {
  8.     static readonly String ADBPATH = "D:/Microvirt/MEmu/"; //adb 所在目录
  9.     static readonly String ROOTPATH = AppDomain.CurrentDomain.BaseDirectory;
  10.     static readonly String SAVEPATH = AppDomain.CurrentDomain.BaseDirectory + "temp";
  11.     static readonly String SNAPEPATH = SAVEPATH + @"\gsnap.png";
  12.     static readonly String TEMPLATE = AppDomain.CurrentDomain.BaseDirectory + "template/";
  13.     internal String devices { get; set; }
  14.     internal Emulator() {
  15.     }
  16.     internal Emulator(String devices) {
  17.         this.devices = devices;
  18.     }
  19.     //获取的所有能连接使用的设备
  20.     internal List<String> GetDevices() {
  21.         List<String> lst = new List<string>();
  22.         String result = Common.Execute(ADBPATH + "adb devices");
  23.         String[] lines = Regex.Split(result, "\r\n");// result.Split('\n');
  24.         foreach (String line in lines) {
  25.             if (line.Contains("\tdevice")) {
  26.                 lst.Add(line.Replace("\tdevice", ""));
  27.             }
  28.         }
  29.         return lst;
  30.     }
  31.     //获取当前运行的APP 最顶层的Activity
  32.     internal string GetTopActivity() {
  33.         try {
  34.             MatchCollection matchs;
  35.             IEnumerator enumerator;
  36.             String input = "";
  37.             input = Common.Execute(ADBPATH + "adb -s " + devices + " shell dumpsys activity|findstr mFocusedActivity"); //获取最顶层的 activity
  38.             if (input.IndexOf("HistoryRecord") > 0) {
  39.                 matchs = Regex.Matches(input, @"HistoryRecord.*?\}", RegexOptions.Singleline);
  40.             }
  41.             else {
  42.                 matchs = Regex.Matches(input, @"ActivityRecord.*?\}", RegexOptions.Singleline);
  43.             }
  44.             int num = 0;
  45.             try {
  46.                 enumerator = matchs.GetEnumerator();
  47.                 while (enumerator.MoveNext()) {
  48.                     Match current = (Match)enumerator.Current;
  49.                     num++;
  50.                     return current.Value;
  51.                 }
  52.             }
  53.             catch { }
  54.             return "";
  55.         }
  56.         catch {
  57.         }
  58.         return "";
  59.     }
  60.     //截屏
  61.     internal void snape() {
  62.          Common.Execute(ADBPATH + "adb -s " + devices + " exec-out screencap -p > " + SNAPEPATH);
  63.     }
  64.     //载屏并保存为指定名称
  65.     internal void snape(String name) {
  66.         String path = SAVEPATH + "/" + name + ".bmp";
  67.         Common.Execute(ADBPATH + "adb -s " + devices + " exec-out screencap -p > " + path);
  68.     }
  69.     //判断是否安装了某个包(APP)
  70.     internal Boolean CheckApp(String package) {
  71.         String Result = Common.Execute(ADBPATH + "adb -s " + devices + " shell pm list packages");
  72.         return Result.IndexOf(package) > 0;
  73.     }
  74.     //安装APP
  75.     internal Boolean install(String package) {
  76.         String Result = Common.Execute(ADBPATH + "adb -s " + devices + " install " + package);
  77.         return Result.IndexOf("Success", StringComparison.CurrentCultureIgnoreCase) > 0;
  78.     }
  79.     //卸载某个应用  //包名 可通过 adb shell pm list packages -s 来查看
  80.     internal void uninstall(String package) {
  81.          Common.Execute(ADBPATH + "adb -s " + devices + " uninstall " + package);
  82.     }
  83.     //启用APP  
  84.     internal void start(String package) {
  85.         Common.Execute(ADBPATH + "adb -s " + devices + " shell am start -n " + package);
  86.     }
  87.     //结果运行中的APP
  88.     internal void stop(String package) {
  89.         Common.Execute(ADBPATH + "adb -s " + devices + " shell am force-stop " + package);
  90.     }
  91.     //单击某区域
  92.     internal void click(Point point) {
  93.         String cmd = ADBPATH + "adb -s " + devices + " shell input tap " + (point.X) + " " + point.Y;
  94.         Common.Execute(cmd);
  95.     }
  96.     //长按某个按
  97.     internal void LongPress(String Key) {
  98.         Common.Execute(ADBPATH + "adb - s " + devices + " input keyevent--longpress " + Key);
  99.     }
  100.     //按住某点滑动
  101.     internal void swipe(Point first, Point second, int time) {
  102.         Common.Execute(ADBPATH + "adb - s " + devices + " input swipe " + first.X + " " + first.Y + " " + second.X + " " + second.Y + " " + time);
  103.     }
  104.     //输入文本信息
  105.     internal void text(String text) {
  106.         Common.Execute(ADBPATH + "adb -s " + devices + " shell input text " + text);
  107.     }
  108.     //发送键值
  109.     internal void key(String key) {
  110.         Common.Execute(ADBPATH + "adb -s " + devices + " shell input keyevent " + key);
  111.     }
  112.     //检测某应用是否运行
  113.     internal bool isrun(String packname) {
  114.         String Result = Common.Execute(ADBPATH + "adb -s " + devices + " shell ps");
  115.         return Result.IndexOf(packname, StringComparison.CurrentCultureIgnoreCase) > 0;
  116.     }
  117.     //滑动解锁
  118.     internal void unlock() {
  119.         StringBuilder cmd = new StringBuilder();
  120.         cmd.AppendLine(ADBPATH + "adb -s " + devices + " shell sendevent /dev/input/event0 3 0 32");
  121.         cmd.AppendLine(ADBPATH + "adb -s " + devices + " shell sendevent /dev/input/event0 3 1 353");
  122.         cmd.AppendLine(ADBPATH + "adb -s " + devices + " shell sendevent /dev/input/event0 1 330 1");
  123.         cmd.AppendLine(ADBPATH + "adb -s " + devices + " shell sendevent /dev/input/event0 0 0 0");
  124.         cmd.AppendLine(ADBPATH + "adb -s " + devices + " shell sendevent /dev/input/event0 3 0 260");
  125.         cmd.AppendLine(ADBPATH + "adb -s " + devices + " shell sendevent /dev/input/event0 0 0 0");
  126.         cmd.AppendLine(ADBPATH + "adb -s " + devices + " shell sendevent /dev/input/event0 1 330 0");
  127.         cmd.AppendLine(ADBPATH + "adb -s " + devices + " shell sendevent /dev/input/event0 0 0 0");
  128.         Common.Execute(cmd.ToString());
  129.     }
  130. }
复制代码
  

来源:https://www.cnblogs.com/ningqhai/archive/2023/02/04/17090287.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具