Считать двоичный файл stdout данные из оболочки adb?

Действительно ли возможно считать двоичный файл stdout из команды оболочки adb? Например, все примеры того, как использовать снимок экрана, включают два шага:

adb shell screencap -p /sdcard/foo.png
adb pull /sdcard/foo.png

Однако сервисные поддержки, пишущие в stdout. Вы можете, например, делать следующее:

adb shell "screencap -p > /sdcard/foo2.png"
adb pull /sdcard/foo2.png

И это работает одинаково хорошо. Но, что относительно того, чтобы читать вывод через ADB? То, что я хочу сделать, следующее:

adb shell screencap -p > foo3.png

И избегайте промежуточной записи к SD-карте. Это генерирует что-то, что похоже на файл PNG (выполнение strings foo3.png генерирует что-то с IHDR, IEND, и т.д.), и приблизительно тот же размер, но файл повреждается, что касается читателей изображения.

Я также попытался сделать, это использование ddmlib в Java и результатах является тем же. Я был бы рад пользоваться любой необходимой библиотекой. Моя цель состоит в том, чтобы уменьшить общее время для получения получения. На моем устройстве, с помощью решения с двумя командами, требуется приблизительно 3 секунды для получения изображения. Используя ddmlib и получающий stdout берет меньше чем 900 мс, но он не работает!

Действительно ли возможно сделать это?

Править: Вот hexdump двух файлов. Первый, screen.png прибыл из stdout и повреждается. Второй, xscreen из решения с двумя командами и работ. Изображения должны быть визуально идентичными.

$ hexdump -C screen.png | head
00000000  89 50 4e 47 0d 0d 0a 1a  0d 0a 00 00 00 0d 49 48  |.PNG..........IH|
00000010  44 52 00 00 02 d0 00 00  05 00 08 06 00 00 00 6e  |DR.............n|
00000020  ce 65 3d 00 00 00 04 73  42 49 54 08 08 08 08 7c  |.e=....sBIT....||
00000030  08 64 88 00 00 20 00 49  44 41 54 78 9c ec bd 79  |.d... .IDATx...y|
00000040  9c 1d 55 9d f7 ff 3e 55  75 f7 de b7 74 77 d2 d9  |..U...>Uu...tw..|
00000050  bb b3 27 10 48 42 16 c0  20 01 86 5d 14 04 11 dc  |..'.HB.. ..]....|
00000060  78 44 9d c7 d1 d1 11 78  70 7e 23 33 8e 1b 38 33  |xD.....xp~#3..83|
00000070  ea 2c 8c 8e 0d 0a 08 a8  23 2a 0e 10 82 ac c1 40  |.,......#*.....@|
00000080  12 02 81 24 64 ef ec 5b  ef fb 5d 6b 3b bf 3f ea  |...$d..[..]k;.?.|
00000090  de db dd 49 27 e9 ee 74  77 3a e3 79 bf 5e 37 e7  |...I'..tw:.y.^7.|

$ hexdump -C xscreen.png | head
00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|
00000010  00 00 02 d0 00 00 05 00  08 06 00 00 00 6e ce 65  |.............n.e|
00000020  3d 00 00 00 04 73 42 49  54 08 08 08 08 7c 08 64  |=....sBIT....|.d|
00000030  88 00 00 20 00 49 44 41  54 78 9c ec 9d 77 98 1c  |... .IDATx...w..|
00000040  c5 99 ff 3f d5 dd 93 37  27 69 57 5a e5 55 4e 08  |...?...7'iWZ.UN.|
00000050  24 a1 00 58 18 04 26 08  8c 01 83 31 38 c0 19 9f  |$..X..&....18...|
00000060  ef 7c c6 3e 1f 70 f8 7e  67 ee 71 e2 b0 ef ce f6  |.|.>.p.~g.q.....|
00000070  f9 ec 73 04 1b 1c 31 60  23 84 30 22 88 a0 40 10  |..s...1`#.0"..@.|
00000080  08 65 69 95 d3 4a 9b c3  c4 4e f5 fb a3 67 66 77  |.ei..J...N...gfw|
00000090  a5 95 b4 bb da a4 73 7d  9e 67 55 f3 ed 50 5d dd  |......s}.gU..P].|

Только на быстрый взгляд это походит на несколько дополнительных 0x0d (13), байты добавляются. Возврат каретки?? Это звонит в какие-либо звонки? Это смешивается в некоторых пустых строках?

60
задан 27 November 2012 в 10:46

1 ответ

Мой сценарий удара (значение по умолчанию является должностным лицом, поскольку оно работает хорошо над обоими устройствами):

https://gist.github.com/mj41/14767642e02dda7ce32ed26ce012fe12

-1
ответ дан 1 November 2019 в 09:33

Другие вопросы по тегам:

Похожие вопросы: