`

Android在代码里操作adb

 
阅读更多
package com.example.emu_ddd.tools;

import android.content.Context;
import android.graphics.Bitmap;

public class AdbManager {
	public static boolean findPicArea(int x, int y, int wid, int het,
			String md5Tag) {
		AdbUtil util = AdbUtil.getIns();
		return util.findPicArea(x, y, wid, het, md5Tag);
	}

	public static boolean findPicArea(int x, int y, int wid, int het,
			String md5Tag, long time) {
		AdbUtil util = AdbUtil.getIns();
		return util.findPicArea(x, y, wid, het, md5Tag, time);
	}

	public static void kill(String packageName) {
		AdbSuUtil.kill(packageName);
	}

	public static void screenshot(String sdfilename) {
		AdbSuUtil.screenshot(sdfilename);
	}

	public static void clickScreen(int x, int y) {
		AdbSuUtil.clickScreen(x, y);
	}

	public static void enterText(String text) {
		AdbSuUtil.enterText(text);
	}

	public static String getImgMd5(Bitmap bp, int x, int y, int wid, int het) {
		AdbUtil util = AdbUtil.getIns();
		return util.getImgMd5(bp, x, y, wid, het);
	}

	public static String getImgMd5(Bitmap bp) {
		AdbUtil util = AdbUtil.getIns();
		return util.getImgMd5(bp);
	}

	public static void clearData(String packageName) {
		AdbSuUtil.delData(packageName);
	}

	public static void clearDatas(String packageName, String[] folders) {
		AdbSuUtil.delDatas(packageName, folders);
	}

	public static void sendKey(int key) {
		AdbSuUtil.sendKey(key);
	}

	public static String getTopActName(Context context) {
		AdbUtil util = AdbUtil.getIns();
		return util.getTopActName(context);
	}
}

 

package com.example.emu_ddd.tools;

import android.os.Environment;
import android.util.Log;
import java.io.IOException;
import java.io.OutputStream;

public class AdbSuUtil {
	private static String tag = "Emu_suutil";

	public static void kill(String packageName) {
		try {
			Process process = Runtime.getRuntime().exec("su");
			OutputStream out = process.getOutputStream();
			String cmd = "am force-stop " + packageName + " \n";
			try {
				out.write(cmd.getBytes());
				out.flush();
			} catch (IOException e) {
				e.printStackTrace();
			}

			process.getOutputStream().close();
			process = null;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void screenshot(String sdfilename) {
		try {
			Log.e(tag, "screenshot...");
			Process sh = Runtime.getRuntime().exec("su");
			OutputStream os = sh.getOutputStream();

			os.write(("/system/bin/screencap -p /sdcard/" + sdfilename + "\n")
					.getBytes());
			os.flush();
			os.write("exit\n".getBytes());
			os.flush();
			sh.waitFor();
			os.close();
			Log.e(tag, "screenshoted!");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void clickScreen(int x, int y) {
		Log.e(tag, "click " + x + "," + y);
		String[] cmds = { "sendevent /dev/input/event0 3 0 " + x,
				"sendevent /dev/input/event0 3 1 " + y,
				"sendevent /dev/input/event0 1 330 1",
				"sendevent /dev/input/event0 0 0 0",
				"sendevent /dev/input/event0 1 330 0",
				"sendevent /dev/input/event0 0 0 0" };
		try {
			Process sh = Runtime.getRuntime().exec("su");
			OutputStream os = sh.getOutputStream();
			for (int i = 0; i < cmds.length; i++) {
				os.write((cmds[i] + "\n").getBytes());
				os.flush();
			}
			os.write("exit\n".getBytes());
			os.flush();
			sh.waitFor();
			os.close();
			sh = null;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void enterText(String text) {
		Log.e(tag, "enter : " + text);
		try {
			Process sh = Runtime.getRuntime().exec("su");
			OutputStream os = sh.getOutputStream();
			os.write(("input text " + text + "\n").getBytes());
			os.flush();

			os.write("exit\n".getBytes());
			os.flush();
			sh.waitFor();
			os.close();
			sh = null;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void sendKey(int key) {
		Log.e(tag, "sendKey : " + key);
		try {
			Process sh = Runtime.getRuntime().exec("su");
			OutputStream os = sh.getOutputStream();
			os.write(("input keyevent " + key + "\n").getBytes());
			os.flush();
			os.write("exit\n".getBytes());
			os.flush();
			sh.waitFor();
			os.close();
			sh = null;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void delDatas(String packageName, String[] folders) {
		Log.e(tag, "del : " + packageName);
		String basePath = Environment.getDataDirectory() + "/data/"
				+ packageName + "/";
		try {
			Process sh = Runtime.getRuntime().exec("su");
			OutputStream os = sh.getOutputStream();
			for (int i = 0; i < folders.length; i++) {
				os.write(("rm -r " + basePath + folders[i] + "\n").getBytes());
				os.flush();
			}

			os.write("exit\n".getBytes());
			os.flush();
			sh.waitFor();
			os.close();
			sh = null;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void delData(String packageName) {
		delDatas(packageName, new String[] { "files", "cache", "shared_prefs",
				"databases" });
	}
}

 

package com.example.emu_ddd.tools;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;

import android.app.ActivityManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.util.Log;

public class AdbUtil {
	private String tag = "emu_zutil";

	private static AdbUtil ins = new AdbUtil();

	public static AdbUtil getIns() {
		return ins;
	}

	public String getSdpah() {
		return Environment.getExternalStorageDirectory().getPath();
	}

	public byte[] bitmapToBytes(Bitmap bitmap) {
		if (bitmap == null) {
			return null;
		}
		ByteArrayOutputStream os = new ByteArrayOutputStream();

		bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
		return os.toByteArray();
	}

	public void quit(boolean result, String des) {
		if (result)
			Log.i(this.tag, des + "成功!");
		else
			Log.i(this.tag, des + "失败!");
	}

	public boolean findPicArea(int x, int y, int wid, int het, String md5Tag) {
		return findPicArea(x, y, wid, het, md5Tag, 20111L);
	}

	public boolean findPicArea(int x, int y, int wid, int het, String md5Tag,
			long time) {
		try {
			long tagTime = System.currentTimeMillis();

			while (System.currentTimeMillis() - tagTime <= time) {
				File xy1 = new File(getSdpah() + "/xy1.png");
				if (xy1.exists()) {
					xy1.delete();
				}
				AdbSuUtil.screenshot("xy1.png");
				Thread.sleep(2000L);

				while (!xy1.exists()) {
					Log.e(this.tag, "截图不存在!!!");
					AdbSuUtil.screenshot("xy1.png");
					Thread.sleep(5000L);
				}

				InputStream in = new FileInputStream(xy1);
				Bitmap b = BitmapFactory.decodeStream(in);

				while (b == null) {
					Thread.sleep(2000L);
					b = BitmapFactory.decodeStream(in);
				}
				Log.i(this.tag, "解析到bitMap!");

				String ct = getImgMd5(b, x, y, wid, het);

				if (ct.equals(md5Tag)) {
					return true;
				}
				Thread.sleep(3000L);
			}
			return false;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}

	public static String getMD5String(byte[] bytes) {
		MessageDigest digest = null;
		try {
			digest = MessageDigest.getInstance("MD5");
			digest.update(bytes);
			BigInteger bigInt = new BigInteger(1, digest.digest());
			return bigInt.toString(16);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return null;
	}

	public String getImgMd5(Bitmap bp, int x, int y, int wid, int het) {
		try {
			Bitmap nb = Bitmap.createBitmap(bp, x, y, wid, het);
			String ct = "";
			ct = getMD5String(bitmapToBytes(nb));
			return ct;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public String getImgMd5(Bitmap bp) {
		try {
			return getMD5String(bitmapToBytes(bp));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "";
	}

	public String getTopActName(Context context) {
		try {
			ActivityManager am = (ActivityManager) context
					.getSystemService("activity");
			List list = am.getRunningTasks(5);
			return ((ActivityManager.RunningTaskInfo) list.get(0)).topActivity
					.getClassName().toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "";
	}
}

 

说明:

adb shell sendevent /dev/input/event0 3 0 110       //x坐标
adb shell sendevent /dev/input/event0 3 1 70         //y坐标
adb shell sendevent /dev/input/event0 1 330 1       //按下状态,准确的说是有压力值
adb shell sendevent /dev/input/event0 0 0 0           //必要的一行数据
adb shell sendevent /dev/input/event0 1 330 0       //抬起状态,无压力值
adb shell sendevent /dev/input/event0 0 0 0           //必要的一行,相当于终止一段完整数据的标致

 

分享到:
评论

相关推荐

    ANDROID系统的adb源代码

    在"ANDROID系统的adb源代码"中,我们可以深入理解ADB的工作原理和实现细节。 ADB主要由三部分组成:服务器端(通常在开发者的工作站上运行)、守护进程(在Android设备上运行)和协议层(连接服务器和守护进程)。...

    Android代码-safe adb:在多设备时更方便地操作 adb,支持批量操作。

    (safe adb)在多设备时更方便地操作adb,支持批量操作。 如果你的电脑连了多台设备,又需要直接使用adb命令时,会非常痛苦(特别是输完长长的命令后,还得回头 adb devices 后编辑命令重新执行)。 sadb 很好地解决...

    ADB源码(android / platform / system / core)

    ADB由三部分组成:Host端(通常在开发者电脑上)、Device端(在Android设备上)以及通信协议。Host端负责接收开发者命令并转化为设备可理解的数据,通过USB或TCP/IP连接将这些数据发送给Device端。Device端接收到...

    Android通用型ADB调试USB设备驱动ADB驱动

    在Android开发过程中,ADB(Android Debug Bridge)是一个至关重要的工具,它允许开发者通过USB或网络连接来调试设备、传输文件以及执行各种控制命令。当你的Android设备无法通过USB与电脑正常通信时,往往是因为...

    Android代码实现模拟点击操作

    "Android代码实现模拟点击操作"这个主题主要涵盖了如何利用ADB(Android Debug Bridge)工具,通过shell命令发送`sendevent`指令来模拟触摸屏事件。下面将详细介绍这个过程及其相关知识点。 1. **Android Debug ...

    android-ADB工具-windows.zip

    4. 文件传输:开发者可以通过ADB在电脑和设备间快速传输文件,这对于测试不同版本的应用或者备份数据非常有用。 5. 屏幕录制与截图:ADB还支持设备屏幕的录制和截图功能,这对于演示应用或者制作教程非常方便。 6....

    android执行adb shell命令源码

    本篇文章将深入讲解如何在Android代码中执行`adb shell`命令,并通过源码分析来理解其工作原理。 首先,`adb shell`命令是通过ADB工具在设备的shell环境中执行命令。在Android应用中,我们通常会用到`Runtime`类...

    android apk安装工具(adb封装)

    在Android开发过程中,APK安装是一个常见的操作,而`adb`(Android Debug Bridge)是Google提供的一个强大工具,用于连接Android设备进行各种调试任务,包括安装APK。本工具是`adb`的一个封装,旨在简化代码中调用...

    android2.2-adb源码

    Android ADB(Android Debug Bridge)是Android开发过程中不可或缺的工具,它允许开发者通过命令行界面与连接的Android设备进行通信,执行各种操作,如安装应用、调试应用、传输文件、控制设备等。在"android2.2-adb...

    Android代码-ADB 网络调试

    **Android代码 - ADB网络调试** ADB(Android Debug Bridge)是Android开发者不可或缺的工具,它允许开发者通过USB或网络在电脑上与Android设备进行通信,进行各种调试操作,如安装应用、运行命令、查看设备日志等...

    android adb 4.2

    4. `adbwinapi`、`adb`、`AdbWinUsbApi`:这些可能是ADB在Windows平台的实现,包含ADB的源代码和Windows特定的USB通信API,如AdbWinUsbApi可能是用于与Android设备通过USB通信的库。 5. `mincrypt`:这可能是一个...

    Android电脑源码通过adb实现实时屏幕演示

    本文将详细讲解如何通过ADB实现在电脑上实时展示Android设备的屏幕。 首先,ADB是Android开发者的重要工具之一,它是一个命令行实用程序,允许开发者与连接到计算机的Android设备进行通信。它提供了多种功能,包括...

    ADB操作控制手机C#代码

    在IT行业中,ADB(Android Debug Bridge)是一个强大的命令行工具,用于与Android设备进行通信。本文将深入探讨如何使用C#编程语言通过ADB控制连接的手机,实现模拟点击、输入内容等功能,这对于开发者进行自动化...

    Android应用源码安卓无线adb调试工具项目.zip

    在Android开发过程中,调试是必不可少的一个环节,而无线ADB(Android Debug Bridge)调试工具则为开发者提供了更加便捷的远程调试方式。本项目提供了一个Android应用的源码,专门用于实现无线ADB功能,使得开发者...

    Android8.1-如何开机自启动WiFi-Adb连接.pdf

    开机自启动 WiFi-Adb 连接服务可以使得 Android 设备在开机后自动启动 WiFi-Adb 连接服务,从而实现无线连接和调试。 实现开机自启动 WiFi-Adb 连接服务需要三个步骤:编写脚本、编译脚本到系统中和配置 init.rc ...

    android adb实现pC与终端通信

    ADB是Android SDK的一部分,它提供了一个命令行接口,通过USB或Wi-Fi连接允许开发者在PC上执行各种操作,如安装应用、查看设备状态、传输文件等。在我们的场景中,我们将利用adb的端口转发功能,将PC上的网络通信...

    AndroidWiFi连接Adb源码

    在Android开发过程中,调试是必不可少的一环,而ADB(Android Debug Bridge)则是Android系统提供的一款强大的命令行工具,用于连接和管理设备或模拟器。本文将深入探讨如何通过WiFi连接Adb,实现PC对Android设备的...

    delphi xe adb 操作

    在 Delphi XE 中,我们可以编写代码调用 ADB 命令,以执行一系列操作,如数据传输、设备控制等。 描述中提到的“adb forward”是一个关键的 ADB 命令,它允许我们将设备上的某个端口映射到电脑的本地端口,创建一个...

    Android工具 adb tools

    ADB由Java编写,允许开发者在计算机上通过USB或Wi-Fi与Android设备进行通信,进行调试、安装应用程序、获取设备日志以及执行各种其他操作。 ### ADB组成部分 ADB主要由三部分组成: 1. **服务器端**:通常运行在...

    Android-WADB-网络adb调试开关

    在Android开发过程中,调试是必不可少的一个环节,它帮助开发者定位并修复代码中的问题。传统的ADB(Android Debug Bridge)是Google提供的一款强大的工具,用于连接设备进行调试、安装应用、传输文件等。然而,当设备...

Global site tag (gtag.js) - Google Analytics