Android相关小知识搜集

时间:2022-10-15 14:41:53

adb devices得到????????????错误结果

问题:

    执行adb devices后,得到如下结果:????????????        device

相关背景:

    AOSP:Android 7.1.1

    HW:HiKey

解决方法:

1.使用lsusb获取vid、pid:

Android相关小知识搜集

 

2.在/etc/udev/rules.d/51-android.rules中加入对应的vid、pid配置:

Android相关小知识搜集

 

3.在进行了以上两步设置之后还是得到同样的结果,看样子还有其他原因。后来Google了一下,有讲到ro.serialno设置错误导致这个原因。

在system/core/init/init.cpp中,ro.serialno为空,没有设置:

Android相关小知识搜集

另一个存在的问题是,在init.hikey.usb.rc中的serialnumber设置不正确。由于ro.serialno为空,造成serialnumber也为空。

Android相关小知识搜集

 

这两处修改任意地方都可以解决此问题:

3.1 修改ro.serialno的值为0123456789。这种修改方法也能解决ro.serialno为空情况,但是所有平台都会使用这个serialnumber。

Android相关小知识搜集

 

3.2 不读取ro.serialno的值,固定写一个0123456789。这种修改方法只局限在HiKey平台中,但是不够优雅。

Android相关小知识搜集

 

从上可知,adb devices的串号还是通过读取serialnumber来获得的。

有个注意点:这两处修改init和init.hikey.usb.rc都在boot.img中,需要烧录boot.img文件。

Android下没有屏幕或者屏幕失效操作问题

有时候在Debug或者使用的时候,没有按键或者没有屏幕,对设备的操作就会存在问题。

一是,如何知道屏幕的显示内容;二是,如何去操作。之前有用过一个工具androidscreencast.jnlp,可以显示,模拟屏幕操作。

但是其实在没有这个工具的情况下,只依赖于Android的现有命令也可以实现,就是没那么方便。

1.发送坐标,显示屏幕内容。

 

第一句话发送触摸屏点击;第二句为什么需要sleep 1秒钟呢,因为输入坐标立即抓取屏幕,并不能即可看到正确结果;第三句截取屏幕内容;第四句将图片拉到本地;第五句显示图片。

adb shell "input touchscreen tap 349 742" && sleep 1 && adb shell "screencap -p /data/local/tmp/screen.png" && adb pull /data/local/tmp/screen.png . && xdg-open screen.png

2.将屏幕图片按钮转换成坐标

在图片编辑软件中查看需要点击的按钮的坐标,重复上面的步骤即可。

3.基于input命令可以实现很多操作

Usage: input [<source>] <command> [<arg>...]

The sources are:
      dpad
      keyboard
      mouse
      touchpad
      gamepad
      touchnavigation
      joystick
      touchscreen
      stylus
      trackball

The commands and default sources are:
      text <string> (Default: touchscreen)
      keyevent [--longpress] <key code number or name> ... (Default: keyboard)
      tap <x> <y> (Default: touchscreen)
      swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
      press (Default: trackball)
      roll <dx> <dy> (Default: trackball)

比如发送一个返回按键:

adb shell "input keyevent KEYCODE_BACK"

Key名称和键值对应如下:

KeyEvent Value      KEYCODE     Comment
0       KEYCODE_UNKNOWN   
1       KEYCODE_MENU     在SDK2.1的模拟器中命令失效,sendevent命令可行
2       KEYCODE_SOFT_RIGHT
3       KEYCODE_HOME   
4       KEYCODE_BACK     
5       KEYCODE_CALL      
6       KEYCODE_ENDCALL       
7       KEYCODE_0   
8       KEYCODE_1   
9       KEYCODE_2   
10     KEYCODE_3   
11     KEYCODE_4   
12     KEYCODE_5   
13     KEYCODE_6   
14     KEYCODE_7   
15     KEYCODE_8   
16     KEYCODE_9   
17     KEYCODE_STAR      
18     KEYCODE_POUND 
19     KEYCODE_DPAD_UP      
20     KEYCODE_DPAD_DOWN        
21     KEYCODE_DPAD_LEFT   
22     KEYCODE_DPAD_RIGHT
23     KEYCODE_DPAD_CENTER     
24     KEYCODE_VOLUME_UP
25     KEYCODE_VOLUME_DOWN 
26     KEYCODE_POWER 
27     KEYCODE_CAMERA       
28     KEYCODE_CLEAR   
29     KEYCODE_A   
30     KEYCODE_B   
31     KEYCODE_C   
32     KEYCODE_D   
33     KEYCODE_E   
34     KEYCODE_F    
35     KEYCODE_G   
36     KEYCODE_H   
37     KEYCODE_I    
38     KEYCODE_J    
39     KEYCODE_K   
40     KEYCODE_L    
41     KEYCODE_M  
42     KEYCODE_N   
43     KEYCODE_O   
44     KEYCODE_P   
45     KEYCODE_Q   
46     KEYCODE_R   
47     KEYCODE_S    
48     KEYCODE_T   
49     KEYCODE_U   
50     KEYCODE_V   
51     KEYCODE_W  
52     KEYCODE_X   
53     KEYCODE_Y   
54     KEYCODE_Z   
55     KEYCODE_COMMA
56     KEYCODE_PERIOD
57     KEYCODE_ALT_LEFT       
58     KEYCODE_ALT_RIGHT   
59     KEYCODE_SHIFT_LEFT   
60     KEYCODE_SHIFT_RIGHT
61     KEYCODE_TAB        
62     KEYCODE_SPACE   
63     KEYCODE_SYM       
64     KEYCODE_EXPLORER     
65     KEYCODE_ENVELOPE    
66     KEYCODE_ENTER  
67     KEYCODE_DEL        
68     KEYCODE_GRAVE  
69     KEYCODE_MINUS  
70     KEYCODE_EQUALS
71     KEYCODE_LEFT_BRACKET     
72     KEYCODE_RIGHT_BRACKET 
73     KEYCODE_BACKSLASH  
74     KEYCODE_SEMICOLON 
75     KEYCODE_APOSTROPHE
76     KEYCODE_SLASH   
77     KEYCODE_AT 
78     KEYCODE_NUM     
79     KEYCODE_HEADSETHOOK     
80     KEYCODE_FOCUS  
81     KEYCODE_PLUS      
82     KEYCODE_MENU   
83     KEYCODE_NOTIFICATION      
84     KEYCODE_SEARCH
85     TAG_LAST_KEYCODE       

 

?????:是否写个Python脚本,固定频率刷新图片,自动将pc鼠标转换成Android坐标?

AndroidScreenCast

https://github.com/arnoldlu/AndroidScreencast

横竖屏切换

有时候需要关闭横竖屏切换,或者需要设置特定的方向。但是在没有触摸屏或者重力感应器,或者没有屏幕的情况下比较麻烦。

关闭自动旋转:

adb shell content insert --uri content://settings/system --bind name:s:accelerometer_rotation --bind value:i:0

设置旋转方向:

adb shell content insert --uri content://settings/system --bind name:s:user_rotation --bind value:i:${new_orientation}

请将${new_orientation}用下面其中一个值来替换

对于手机

  • 0, 竖屏
  • 1,顺时针旋转90°,横屏
  • 2,顺时针旋转180°,竖屏(与0方向相反)
  • 3,顺时针旋转270°,横屏(与1方向相反)

对于HiKey

  • 0, 横屏
  • 1,顺时针旋转90°,竖屏
  • 2,顺时针旋转180°,横屏(与0方向相反)
  • 3,顺时针旋转270°,竖屏(与1方向相反)