Од­нажды мне понадо­билось, что­бы одноплат­ник Raspberry Pi при заг­рузке перево­дил под­клю­чен­ный к нему телефон в режим USB-tethering. На помощь при­шел ADB — интерфейс отладки Android-устрой­ств. Сущес­тву­ет нес­коль­ко спо­собов авто­мати­зиро­вать работу при­ложе­ний на Android-смар­тфо­не с помощью это­го интерфей­са, и в статье мы рас­смот­рим один из них.

За­дачу мне уда­лось решить так: с помощью ADB получи­лось открыть вер­хнюю штор­ку и через меню нас­тро­ек выб­рать нуж­ный режим. Пос­ле чего скрипт, выпол­няющий эту пос­ледова­тель­ность дей­ствий, был помещен в /etc/rc.local и стар­товал при заг­рузке мик­рокомпь­юте­ра. Мож­но ли похожим обра­зом авто­мати­зиро­вать дру­гие про­цес­сы на Android-смар­тфо­не? Конеч­но!

В кон­це 2021 года в Дубае про­ходил матч за зва­ние чем­пиона мира по шах­матам. Инте­рес к это­му событию в Рос­сии был подог­рет тем, что про­тив дей­ству­юще­го чем­пиона мира — Маг­нуса Кар­лсе­на — выс­тупал рос­сиянин Ян Непом­нящий. Мы с при­яте­лем сле­дили за ходом тур­нира и даже решили сыг­рать в тан­деме про­тив Маг­нуса. Но пос­коль­ку сам он был занят чем­пиона­том, то приш­лось сра­жать­ся с его элек­трон­ным кло­ном — прог­раммой Play Magnus для Android.

Уро­вень слож­ности в прог­рамме зада­ется воз­растом Маг­нуса Кар­лсе­на. Мас­терс­тво про­фес­сиональ­ных шах­матис­тов поража­ет: дой­ти до уров­ня 13 лет — воз­раста, в котором Маг­нус стал одним из самых молодых грос­смей­сте­ров мира, — нам так и не уда­лось. Так­же впе­чат­ляет спо­соб­ность шах­матис­тов играть, не гля­дя на дос­ку. Рекорд при­над­лежит Тимуру Гаре­еву: одновре­мен­ная игра на 48 дос­ках всле­пую! Мой при­ятель Женя тоже решил поп­ракти­ковать этот уди­витель­ный навык. А у меня соз­рел план помочь ему в этом: написать скрипт — обер­тку для шах­матно­го при­ложе­ния.

Ло­гика работы скрип­та прос­та: вво­дишь на кла­виату­ре компь­юте­ра свой ход, нап­ример 'e2e4', и прог­рамма через ADB выпол­няет необ­ходимую для это­го пос­ледова­тель­ность нажатий (тапов) на телефо­не. Затем вся исто­рия игры копиру­ется в буфер обме­на смар­тфо­на, отку­да попада­ет на компь­ютер. На экран выводит­ся пос­ледний ход — ответ шах­матной прог­раммы. Для луч­шего понима­ния матери­ала статьи можешь пос­мотреть, что получи­лось в ито­ге.

Скриншот приложения Play Magnus
Скрин­шот при­ложе­ния Play Magnus

Про ADB

ADB (Android Debug Bridge) — это инс­тру­мент для отладки устрой­ств на базе ОС Android. Его воз­можнос­ти доволь­но обширны: мож­но переме­щать фай­лы с компь­юте­ра на телефон и обратно. Для это­го слу­жат коман­ды adb push filename и adb pull filename.

Что­бы уста­новить или уда­лить при­ложе­ние, дос­таточ­но ввес­ти adb install program.apk или adb uninstall <имя пакета>. А для под­клю­чения к коман­дной обо­лоч­ке телефо­на исполь­зуй adb shell. ADB поз­воля­ет делать еще мно­го чего. Но глав­ное для нас — с его помощью мож­но ими­тиро­вать работу с тачс­кри­ном телефо­на (делать тапы и свай­пы). Если ты ни разу не исполь­зовал ADB, то самое вре­мя поп­робовать! Тем более «Хакер» уже под­робно пи­сал на эту тему.

Пе­ред пер­вым исполь­зовани­ем нуж­но вклю­чить отладку по USB. Для это­го откры­вай «Нас­трой­ки» и перехо­ди в раз­дел «Сис­тема», а затем «О телефо­не». Здесь ищи пункт «Номер сбор­ки» и кли­кай по нему нес­коль­ко раз. Пос­ле этих дей­ствий в раз­деле «Сис­тема» появит­ся допол­нитель­ный пункт «Для раз­работ­чиков». Заходи туда, ищи и акти­вируй пункт «Отладка по USB».

Пос­ле вклю­чения ADB в телефо­не нуж­но будет уста­новить ADB-сер­вер на компь­юте­ре. Если ты поль­зователь Linux, то для это­го дос­таточ­но ввес­ти в кон­соли коман­ду sudo apt install adb. Если же на тво­ем ком­пе уста­нов­лена Windows, то при­дет­ся ска­чать ар­хив с ути­лита­ми. Рас­пакуй его в удоб­ное мес­то, нап­ример C:\platform-tools. Пос­ле чего откры­вай коман­дную стро­ку (нажимай Win + R и вво­ди cmd) и перехо­ди в пап­ку с ути­литой ADB, вве­дя коман­ду cd C:\platform-tools.

Те­перь можешь под­клю­чать телефон к компь­юте­ру по USB-кабелю. Воз­можно, тебе понадо­бит­ся перевес­ти его из режима «Заряд­ка» в режим «Переда­ча фай­лов». Пос­ле чего в коман­дной стро­ке набери adb devices. При пер­вом под­клю­чении на телефо­не дол­жен появить­ся зап­рос на раз­решение отладки с нового устрой­ства. Отметь галоч­кой «Всег­да раз­решать отладку с это­го компь­юте­ра» и жми OK.

Мо­жешь про­дол­жить поль­зовать­ся ADB через USB-кабель, но такой спо­соб не всег­да удо­бен. Что­бы перек­лючить телефон на работу по сети, нуж­но ввес­ти коман­ду adb tcpip 5555. Здесь 5555 — TCP-порт, на котором служ­ба ADB будет ожи­дать под­клю­чения от ПК. Пос­ле чего про­вод мож­но отсо­еди­нить, а на компь­юте­ре ввес­ти коман­ду adb connect <IP-адрес телефона>. В резуль­тате все коман­ды ADB будут работать так же, как если бы телефон был под­клю­чен по кабелю. Дан­ная нас­трой­ка сох­раня­ется до перезаг­рузки телефо­на. Одна­ко теперь нуж­но быть бди­тель­ным, что­бы слу­чай­но не пре­дос­тавить дос­туп к телефо­ну зло­умыш­ленни­ку. Если к телефо­ну под­клю­чит­ся нез­накомое устрой­ство, он покажет сооб­щение об этом. Отоз­вать выдан­ные раз­решения мож­но в раз­деле «Для раз­работ­чиков» рядом с тем пун­ктом, где ты раз­решал отладку по USB. Перек­лючит обратно на работу по про­воду коман­да adb usb.

Пишем код

Прог­рамми­ровать будем на Python 3. Преж­де все­го импорти­руем необ­ходимые модули и зададим путь к ути­лите ADB в сис­теме.

#!/usr/bin/env python3
import os
import sys
import time
from subprocess import Popen, PIPE
ADB = 'adb' # 'C:\platform-tools\adb.exe' для Windows

На­пишем фун­кцию help.

def help():
print(f'Usage: {sys.argv[0]} [-b | --black] [-h | --help]\n')
print(f' -b, --black: play with black pieces, by default you play with white')
print(f' -h, --help: show this help and exit\n')

Ос­новную логику работы реали­зуем в клас­се Screen. Зададим парамет­ры board_x0, board_y0, board_x1, board_y1 — коор­динаты x и y левого вер­хне­го и пра­вого ниж­него края дос­ки соот­ветс­твен­но. Кон­стан­ты menu и close_menu — положе­ние кно­пок для откры­тия и зак­рытия меню. Кон­стан­ты save_game, ok_button и back_button — коор­динаты кноп­ки сох­ранения пар­тии, кно­пок OK и отме­ны пос­ледне­го хода соот­ветс­твен­но (см. рисунок). Pawn — мас­сив с коор­дината­ми кно­пок для выбора фигур вза­мен пеш­ки, ког­да она ходит на пос­леднюю горизон­таль.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


rexby

В 2009 году окончил МГТУ им. Баумана по направлению "Техническая физика". Более 10 лет работал научным сотрудником в Институте радиотехники и электроники им. Котельникова РАН, а также преподавал математику и физику школьникам. Среди увлечений - электроника и программирование. Сторонник открытого ПО и ОС Linux.

Check Also

История двух ATO. Ищем уязвимости в логике обработки email

В конце 2023 года я участвовал в программе багбаунти одной крупной российской компании. Ко…

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    2 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии