adb devices得到????????????错误结果
问题:
执行adb devices后,得到如下结果:???????????? device
相关背景:
AOSP:Android 7.1.1
HW:HiKey
解决方法:
1.使用lsusb获取vid、pid:
2.在/etc/udev/rules.d/51-android.rules中加入对应的vid、pid配置:
3.在进行了以上两步设置之后还是得到同样的结果,看样子还有其他原因。后来Google了一下,有讲到ro.serialno设置错误导致这个原因。
在system/core/init/init.cpp中,ro.serialno为空,没有设置:
另一个存在的问题是,在init.hikey.usb.rc中的serialnumber设置不正确。由于ro.serialno为空,造成serialnumber也为空。
这两处修改任意地方都可以解决此问题:
3.1 修改ro.serialno的值为0123456789。这种修改方法也能解决ro.serialno为空情况,但是所有平台都会使用这个serialnumber。
3.2 不读取ro.serialno的值,固定写一个0123456789。这种修改方法只局限在HiKey平台中,但是不够优雅。
从上可知,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方向相反)