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命令。