基于ADB模式的操作均基于adb模式输出结果

2024-04-04
来源:网络整理

adb查看手机设备型号、品牌、型号等信息

以下操作均基于ADB模式。

1、查看模型时,可以使用以下命令:

$广告..

输出如下:

2.如果我们忘记了特定系统属性的名称,可以使用grep进行过滤,如:

$ 亚行 | grep

输出如下:

当我们过滤关键词时,我们可以看到很多关于产品的系统属性(品牌、型号、制造商等)。

您还可以使用以下方法直接在//.prop文件中查找属性值:

$ adb cat //.prop | grep

输出如下图所示:

3、我们还可以通过adb命令查看设备信息:

使用以下命令检查设备 ID:

$ 亚行

要查看模型和其他详细信息,请使用以下命令:

$ adb -l

输出如下图所示:

本文在我们自己的代码中使用直接与adb通信,绕过cmd的执行,使用管道来获取数据。 这种方法会快很多。 基本原理就是参考adb的源码,将adb相关的代码移植给我们自己。 项目中,以下是demo代码,还需要修改才能真正移植到项目中。

(由于公司内有加密软件,所以源代码只能以文本方式逐段复制到博客,所以下面的布局会看不清楚)

。H

#一次

# //这个需要放在.h之前

#

#

标准::;

标准::;

:

(空白);

〜(无效);

();

();

( , );

无效(,int);

:

(命令);

(命令,);

布尔(&,&);

int();

();

布尔(,cmd,布尔,&);

布尔 ( , );

布尔(,&);

布尔(,&);

整数;

;

布尔;

};

下面是.cpp文件

# “。H”

# (lib,".lib")

布尔::=;

#1024*4+1

::(空白)

//测试默认值设置

= 6037;

= L"E:\\work\\adb\\\\\\.exe";

::~(无效)

无效::(,整数)

= ;

= ;

::()

= (“主机:”);

;

::()

= (“主机:”);

;

::( , )

;

=“:”;

+=;

= ;

如果 (。())

{//:-任何

=“-任意”;

别的

=“:”+;

= (,);

;

::(命令)

;

.();

= ;

如果 ((,))

(,cmd,真,);

// 服务端会关闭,所以客户端每次都会创建一个新的,用完后关闭。

();

;

::(命令,)

;

.();

= ;

如果 ((,))

//因为指定了设备序列号,所以需要先托管:

=“主机:”;

+= ;

(,,,);

//需要执行两次

(,cmd,真,);

// 服务端会关闭,所以客户端每次都会创建一个新的,用完后关闭。

();

;

布尔 ::( &, &)

布尔 bRet = true;

= ();

如果(==)

// 如果无法连接,则认为服务尚未启动。

如果(0==())

{//启动服务成功

别的

=“:失败。”;

bRet = ;

bRet;

布尔 ::( , cmd,布尔 , &)

布尔 bRet = true;

如果 (((,cmd)))

如果()

bRet = (,);

别的

bRet = (,);

别的

bRet = ;

bRet;

布尔 ::( , )

//发送的数据前面需要添加4位数据长度。 这是从adb源代码中获得的。

字符[5]={0};

(, ,4 ,"x",.());

();

+= ;

int = 发送(,.(),.(),0);

如果(==)

(" %s = %d\n",.(),());

;

真的;

布尔 ::( , &)

布尔 bRet = true;

char *buf = 新的 char[+1];

(缓冲,+1);

int =recv(,buf,,0);

如果(==)

//接收错误

("recv%d\n",());

bRet = ;

别的

if(0 == (buf, "好的", 4))

别的

.(buf);

bRet = ; //状态错误

bRet;

布尔 ::( , &)

布尔 bRet = true;

.();

char *buf = 新的 char[+1];

布尔=真;

整数;

(1)

(缓冲,+1);

int =recv(,buf,,0);

如果(==)

//接收错误

("recv%d\n",());

bRet = ;

;

否则如果 (0 == )

//数据接收完成

;

别的

如果()

= ;

if(0 == (buf, "好的", 4))

{//应接收的数据长度

字符tmp[5] = {0};

(tmp,buf+4,4);

= (tmp, NULL, 16);

别的

bRet = ; //状态错误

别的

.(buf);

[] 缓冲区;

如果 (!=.())

(“数据是\n”);

bRet;

::()

= ;

如果 (!)

//加载库函数

单词;

;

内部错误;

= (2,2);

错误=(,&);

如果(错误!= 0)

("失败...%d \n",());

;

别的

=真;

// 创建套接字

如果 (( = (, , )) == )

("() 与 %d\n", ());

别的

;

(&, 0, ());

。 = ;

。 = ();

.. = ();

整数;

//连接到服务器

= (, ()&, ());

如果(==)

("() 与 %d\n", ());

();

= ;

;

//启动服务。 这是从adb源码中获取的,修改了部分部分。

整数::()

, ;

, ;

萨;

;

int ret;

;

[]={0};

山 =(sa);

山 = 空;

山 = 真;

/* 管道,它的读取不是 */

ret = (&, &, &sa, 0);

如果(!ret){

(, "() , %ld\n", () );

-1;

( , , 0 );

(&, ());

ret = (.(),L"adb fork- ",NULL,NULL,TRUE,,NULL,NULL,&,&);

( );

如果(!ret){

(, " , %ld\n", () );

( );

-1;

( . );

( . );

/* 等待“确定\n” */

字符温度[3];

;

ret = (, 临时, 3, &, NULL );

( );

如果(!ret){

(, " 未从 ADB 正常读取,= %ld\n", () );

-1;

if ( != 3 || temp[0] != 'O' || temp[1] != 'K' || temp[2] != '\n') {

(, "ADB 没有 ACK\n" );

-1;

0;

以下是测试代码。 测试代码仅测试两个命令。 测试代码非常简单。

;

.(L"E:\\work\\adb\\\\\\\Adb.exe",5037);

;

= .();

("%s\n",.());

= .();

("%s\n",.());

= .(" ","");

("%s\n",.());

只需将手机连接到电脑,安装驱动程序,即可获取adb版本信息和当前设备列表。

其他adb命令可以参考adb源码完善。 这只是一个演示。 当项目中需要使用时,可以直接将上述类添加到项目中,并补充其他adb命令。

分享