Что делать, если к вам попал Android со сломанным сенсорным дисплеем

от автора

image

В один прекрасный день ко мне в руки попал Nexus 4. В наших краях это редкость, поэтому хотелось бы использовать его как основной телефон. К сожалению, тач у него разбит. Одна из болячек всех современных смартфонов. Ну, решено было восстанавливать. Купил тач на ebay. Теперь ждать слоупочту россии месяцок-другой. Захотелось узнать о девайсе побольше, поработать с ним, пока посылка едет. Заодно проверить, всё ли работает. А то, может, камера или динамики тоже покрошились. В данной статье рассмотрим захват управления девайсом, если сломан тач.

Сведения

image
В ходе испытания будут использованы nexus 4, usb кабель, ubuntu как ось для работы, информация из интернета и мозги.

Первым делом хочется отметить — телефон полностью в стоковом состоянии. Предыдущий владелец сделал полный сброс всех данных. После включения появляется экран Welcome с выбором языка. Управление устройством никак нельзя осуществить без дальнейшего вмешательства.

Напомню, у nexus 4 нету OTG, поэтому мышь подключить к нему нельзя без специального кабеля с внешним питанием. Такого у меня нету, можно заказать на том же ebay, но опять ждать.

Фигачим

Первым делом я поставил CMW.
Устанавливаем программы для работы с андроидами:

sudo apt-get install android-tools-adb 

Это и fastboot, и adb.

Поставить рекавери можно через fastboot:

fastboot flash recovery recovery.img 

Естественно, выбрана notouch версия. Кстати, я еще разблокировал бутлоадер (команда fastboot oem unlock). Поменял прошивку на последнюю сразу. Уже и не помню, зачем. Для других телефонов нужно искать свои инструкции. У каких-то устройств можно поставить через встроенный рекавери, у каких-то есть специальные программы для прошивки.

Загружаемся в CWM. Ищем пункт mounts and storage и монтируем system (или потом сделать это через adb — mount -o remount,rw /system). Пригодится.
В консоле на компьютере пишем

adb devices

Выдает циферки и recovery. То, что и нужно!

Отлично. В наши задачи входит: скипнуть welcome экран и включить usb отладку.
Для этого скачиваем build.prop в текущую папку

adb pull /system/build.prop ./ 

Открываем скачанный файл и заменяем строку:

ro.setupwizard.enterprise_mode=1 

на

ro.setupwizard.enterprise_mode=0 ro.setupwizard.mode=DISABLED persist.service.adb.enable=1                                                     persist.service.debuggable=1 persist.sys.usb.config=mtp,adb 

Если считаете нужным, можете подправить еще какие другие строки. Я вроде отключал экран блокировки для удобства, но сейчас уже лень искать какая строка отвечает. Если не сложно, уточните в комментах.

Сохраняем и загружаем обратно.

adb push ./build.prop /system/ 

Пропишем последние строки и в default.prop. На всякий случай.

adb shell echo "persist.service.adb.enable=1" >> default.prop  echo "persist.service.debuggable=1" >> default.prop echo "persist.sys.usb.config=mtp,adb" >> default.prop 

Попробуем перезагрузиться

image
Эран сбросился.
Однако adb devices показывает offline.

Убиваем adb командой

adb kill-server

Делаем запрос adb devices

Всё еще offline. Кажется, приплыли. Но нет! Дело в ключах.

Ищем в домашней дирректории папку /.android

Там должен был сгенерироваться файл adbkey.pub. Его нужно закинуть на девайс.

Перезагружаемся в рекавери, монтируем data, выполняем

cd ~/.android adb push ./adbkey.pub /data/misc/adb/adb_keys 

Перезагружаемся снова. Смотрим adb devices — всё есть!

Далее я, например, прописал кнопкам на нампаде команды adb shell input keyevent XX
image

Список кодов

0 —> «KEYCODE_UNKNOWN»
1 —> «KEYCODE_MENU»
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»

Хотя можно просто поставить VNC сервер (нужен рут).

Я поставил через adb

adb install vncfwq_1386321119498.apk  adb shell am start -n com.schumi.vncs/com.schumi.vncs.VNC_serverActivity 

С нумпада поставил настройки, включить получилось командой тыка в зону off — adb shell input tap 400 300 (это координаты тыка)

Ну и чтобы не лезть в настройки вайфай

adb forward tcp:5901 tcp:5901 

Запускаем vnc клиент, вводим localhost:5901 и делаем всё, что душе угодно.
image

На этом всё. Прочного вам стекла, уважаемые!

PS: думаю, всё тоже можно сделать с разбитым дисплеем. Нужно только делать скриншоты. Вроде как мануал.

ссылка на оригинал статьи http://habrahabr.ru/post/210472/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *