Установка андроид на тонкий клиент

Обновлено: 05.07.2024

Хочу поделиться с сообществом проектом, которым я потихоньку занимаюсь последние несколько месяцев.

Предисловие


Часто возникают ситуации, когда хочется управлять своей программой с телефона или планшета, но при этом нецелесообразно (или нет возможности) написать для этого отдельное приложение на телефон (слишком много трудозатрат для данного проекта, нет опыта разработки под android, и.т.д.). Такая ситуация периодически возникла у меня, и в конце концов я решил разобраться с этой проблемой раз и навсегда. В результате получилась система, архитектура и использование которой описаны в данной статье.

Создание системы, позволяющей реализовывать в С++ программах подключаемый UI на базе android устройств. При этом хотелось минимизировать зависимости пользовательского С++ кода от сторонних библиотек, а так же абстрагировать его от протокола передачи данных. Система должна состоять из двух частей: С++ библиотеки и android приложения.

Архитектура системы

Система имеет клиент-серверную архитектуру, где в качестве клиентов выступают android устройства, сервером является пользовательская программа. Коммуникация между ними осуществляется при помощи TCP/IP сокетов. Для реализации протокола общения была создана библиотека TAU.

Основные задачи, за которые отвечает библиотека:

  • генерация и обработка данных, передаваемых между сервером и клиентом
  • передача управления пользовательскому коду для реакции на различные события, произошедшие на клиенте (обработчики UI событий)
  • создание и обслуживание соединения между сервером и клиентом
  • генерация необходимых структур данных для описания конфигурации элементов UI, отображаемых на клиентах

    tau::communications_handling — отвечает за формирование пакетов, парсинг данных пришедших от клиента, вызов обработчиков в пользовательском коде. Всё, что происходит между моментами подключения и отключения клиента контролируется кодом классов из этого пространства имён.

Использование. Пример №1 — hello, world

Основной класс, который содержит всю пользовательскую логику, взаимодействующую с клиентским устройством (MyEventsDispatcher) должен быть отнаследован от tau::util::BasicEventsDispatcher. В нём переопределены 2 метода из базового класса: onClientConnected() и packetReceived_clientDeviceInfo(). Первый вызывается в момент подключения клиента. Второй метод будет выполнен, когда на сервер придёт информация о клиентском устройстве после подключения (первый пакет после подключения отправляется клиентом).

Весь код, отвечающий за передачу данных по сети находится в main(). В данном случае, для реализации коммуникации используется библиотека boost::asio. В пространстве имён tau::util есть соответствующие абстракции, что делает данный пример максимально компактным. Использование boost необязательно — любая реализация TCP/IP сокетов может быть довольно легко использована вместе с библиотекой.

Компиляция

В качестве примера, для компиляции будем использовать g++. В нашем случае команда будет следующей:


Как видно, компилятору передаётся несколько дополнительных параметров:

  • include path до исходников библиотеки (опция -I $LIBRARY_LOCATION)
  • дополнительные библиотеки, необходимые для boost::asio (опции -lboost_system -pthread -lboost_thread)
  • объявления дополнительных макросов, указывающих, каким образом мы компилируем библиотеку в нашем проекте (-D TAU_HEADERONLY -D TAU_CPP_03_COMPATIBILITY)

От них всех можно при желании избавиться. Если использовать библиотеку внутри проекта, не нужно указывать -I $LIBRARY_LOCATION и -D TAU_HEADERONLY. Для компиляторов, совместимых с C++11, опция -D TAU_CPP_03_COMPATIBILITY не нужна. Зависимость от boost::asio имеет только сетевая часть, которую довольно легко можно переписать без зависимостей.

После компиляции и запуска, сервер начинает слушать на порту 12345.

Данный пример не предусматривает передачу и получение дополнительных уведомлений между клиентом и сервером, поэтому давайте перейдём к следующему примеру.

Пример №2 — более развёрнутая демонстрация возможностей системы

В данном примере мы добавим в нашем сервере несколько различных элементов, научимся получать от них уведомления, изменять их состояние и переключать страницы.

Код сервера будет выглядеть так:

Все изменения по сравнению с предыдущим примером были сделаны в классе MyEventsDispatcher. Были добавлены следующие методы-обработчики событий от клиента:

  • обработчик события нажатия кнопки packetReceived_buttonClick. ID кнопки передаётся методу в качестве параметра.
  • обработчики пакетов, передающих значения переменных от клиента к серверу: packetReceived_boolValueUpdate, packetReceived_intValueUpdate, packetReceived_floatPointValueUpdate, packetReceived_textValueUpdate
  • обработчик события смены отображаемой страницы с элементами packetReceived_layoutPageSwitched

Поскольку у нас демонстрационный пример, код в обработчиках максимально простой — дамп информации о событиях в консоль, а также отправка различных команд клиенту.

Все команды будут отправляются клиенту из обработчика нажатий кнопок packetReceived_buttonClick() (естественно, это не обязательно делать там, но так проще и нагляднее).

Каждой из команд соответствует пакет, передаваемый от сервера клиенту. Формирование и отправка этих пакетов происходит при вызове специальных методов, определённых в BasicEventsDispatcher:

  • sendPacket_resetLayout() — замена всего лэйаута
  • sendPacket_requestValue() — запрос значения переменной в одном из инпутов
  • sendPacket_updateBooleanValue(), sendPacket_updateIntValue(), sendPacket_updateFloatPointValue, sendPacket_updateTextValue() — изменение значения переменных в инпутах
  • sendPacket_changeElementNote() — изменение какого-либо read-only текста (текст на кнопках, чекбоксах, лейблах)
  • sendPacket_changeShownLayoutPage() — переключение на другую страницу с элементами
  • sendPacket_changeElementEnabledState() — переключение активного статуса элементов (неактивные элементы отображаются, но с ними нельзя взаимодействовать)

Как видно, для каждого действия на клиентском устройстве, на сервере выполняется соответствующий код. Когда меняются значения элементах пользовательского ввода, сервер получает уведомление о новом значении переменной в этом элементе. В обработчике нажатий кнопок различные пакеты отправляются от сервера клиенту (тип пакета зависит от того, какая из кнопок была нажата). В этом примере также показано, как работает переключение страниц. Разбиение лэйаута на страницы позволяет группировать элементы в соответствии их функциям. На экране клиента всегда отображена только одна из страниц, что уменьшает загруженность интерфейса.

Пример №3 — что-нибудь полезное

Последний на сегодня пример — частичная реализация одной из задач, для которой я начал этот проект. Это простейший эмулятор клавиатурного ввода для windows (использует winapi-функцию SendInput()).

Код этого примера лежит у меня на гитхабе. Тут приводить его не буду — он ничего нового в использовании библиотеки не демонстрирует по сравнению со вторым примером. Тут приведу только демо его работы:

Код данного примера легко расширить под более сложные задачи эмуляции клавиатурного ввода.

Эпилог

Вместо заключения, хочу обратиться к сообществу. Нужна ли подобная система? Не изобретаю ли я очередной велосипед? Что нужно описать более детально? В каком направлении нужно развиваться дальше?

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

Недавно на сайте была статья "Полноценный Android-смартфон на твоем ПК", где описывался запуск через эмулятор. Но знаете ли вы, что Android 4.4 и 5.1 спокойно можно установить на компьютер в качестве полноценной операционной системы?

Установка Android в качестве настольной ОС

Итак, начнём с самого главного, где скачать?

Я устанавливал на виртуальную машину, используя VMware Workstation 12. Для установки необходим жёсткий диск минимум 1 Гб. Процесс установки на нормальный ПК ничем не отличается.

Итак, после загрузки с флешки вы увидите меню выбора установки. Если выбрать самую первую строку, как на скриншоте, Android загрузится сразу без установки. После перезагрузки вы потеряете все настройки.

Установка Android в качестве настольной ОС

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

1. Выбираем последний пункт меню Install Android-x86 to harddisk.
2. Выбор раздела для установки.

Установка Android в качестве настольной ОС

Установка Android в качестве настольной ОС

4. Отдаём разделу не менее 1Гб и выбираем пункт Write.
5. После этого выбираем пункт Bootable и Quit.
6. Раздел создан, далее нам предложат варианты выбора файловой системы.
В большинстве инструкций советуют FAT32 или NTFS. Я лично форматировал EXT4.

Установка Android в качестве настольной ОС


7. После этого у нас спросят: хотим ли мы установить загрузчик Grub?

Установка Android в качестве настольной ОС


8. Чтобы получить возможность перезаписывать данные в системе Android и работать с файлами, в диалоговом окне Do you want to install/system directory as read-write?

Установка Android в качестве настольной ОС

Установка Android в качестве настольной ОС


10. Установка на виртуальную машину занимает меньше минуты. После установки лучше перезагрузиться.

Установка Android в качестве настольной ОС


После перезагрузки, если правильно создан раздел, загрузится уже полноценная ОС Android!

Все привыкли, что операционной системой Android можно пользоваться только на смартфоне или планшете, однако это не совсем так. Её можно установить практически на любое современное устройство, ведь даже сейчас можно встретить автомобильные магнитолы, работающие под управлением известной системы. Но иногда пользователи задают другой вопрос: а как установить Андроид на компьютер? Ответ – воспользоваться пошаговой инструкцией, которая будет представлена далее.

Как установить Android на ПК

Нужно отметить, что полностью устанавливать на компьютер операционную систему Android не всегда требуется. Если вы хотите просто протестировать определенное приложение, то можете воспользоваться эмулятором. Например, известной программой BlueStacks или MEmu. Ну а мы рассмотрим вариант полной инсталляции системы на ПК.

Шаг 1. Создайте образ системы

Итак, первым делом необходимо загрузить образ системы на флешку. Для этого используем официальный сайт проекта Android-x86. Переходим на страницу и выбираем подходящую версию Android. Здесь даже присутствуют очень новые разновидности системы.

Когда необходимый файл загружен, выполняем следующие действия:

  • Устанавливаем на компьютер программу Rufus, которая используется для записи образа диска.
  • Запускаем приложение и разрешаем вносить изменения в жёсткий диск.
  • Кликаем кнопку «Выбрать» и на ПК находим загруженный файл с системой.
  • Проверяем, чтобы была выставлена файловая система FAT32 и схема раздела MBR.
  • Подключаем флешку к компьютеру и выбираем её в программе. После чего нажимаем «Старт».

Ожидаем завершения распаковки, а после проверяем наличие образа системы на флешке.

Шаг 2. Установите систему

Теперь переходим к установке системы Android на компьютер. И опять-таки для наглядности мы составили пошаговую инструкцию:

  • Перезагружаем компьютер и заходим в BIOS. Кто не знает, то для этого на стадии включения нужно нажать клавишу Del или F12. Если вы всё сделали правильно, то на экране появится соответствующее меню.
  • При помощи клавиатуры перейдите во вкладку «Boot» и в качестве источника загрузки выберите USB-носитель. Для наглядности в боковом меню BIOS имеется подробная инструкция.
  • Теперь есть два варианта: полностью установить систему или временно её протестировать. Давайте для примера временно установим Андроид, выбрав пункт с подписью «Live».
  • После чего произойдет загрузка системы, которой уже можно комфортно пользоваться.

Но если вы решите полностью установить Android на свой компьютер, то для этого вернитесь к последнему шагу и продолжите выполнять следующие действия:

  • На экране выберите «Install Android to harddisk».
  • Укажите выделенный под систему раздел. Если не хотите, чтобы текущая Windows исчезла, то перед началом процедуры создайте дополнительный раздел под Android. Рекомендуем выделить минимум 8 ГБ свободной памяти.
  • Указываем файловую систему FAT32 или NTFS, а после в появившемся окне нажимаем «Yes». Обратите внимание, что после этого все данные с выбранного раздела будут удалены.
  • На следующем этапе выберите «Skip», если используете обычный BIOS. А если система устанавливается на компьютер с UEFI, то нажмите «Yes».
  • Опять кликаем «Yes» и окончательно подтверждаем инсталляцию.
  • В конце нажимаем «Run Android» для запуска операционной системы.

Вы также можете обратить внимание на другой проект, позволяющий сделать из компьютера полноценный смартфон или планшет. Remix OS – ещё одна версия системы, которая отличается более простой установкой и понятным интерфейсом. Однако есть один нюанс – работы над платформой не ведутся уже с 2016 года, поэтому имейте это в виду.

Итак, мы постарались в общих деталях рассказать, как поставить Android на компьютер. Чтобы получить более подробные и понятные инструкции, можете посмотреть тематические видео на YouTube. Или, что ещё проще, используйте эмуляторы. Остались вопросы? Тогда задавайте их в комментариях!

Это статья для тех, кто интересуется мобильным клиентом. Мы рассмотрим установку мобильного клиента на Android, подключение отладки и сборку apk приложения в конфигурации «Сборщик мобильных приложений».

Наконец-то появилась тестовая мобильная платформа 8.3.12, и теперь мы может протестировать работу мобильного клиента. Не знаю, как Вы, а вот у меня многие знакомые разработчики ждали этого еще с выхода статьи на «1С:Зазеркалье» (Мобильный клиент).

Я предполагаю, что Вы знакомы с установкой мобильного приложения и сборщиком мобильных приложений, а также, что у Вас уже установлен Android SDK, Apache Ant и прочее. Статей на эту тему уже полно.

Возьмем для наших экспериментов демонстрационную конфигурацию «Управляемое приложение» и, для начала, попробуем подключить ее в готовый мобильный клиент. В моем случае, дистрибутив клиента – это файл «1cem-client-arm.apk». Предварительно на смартфоне должна быть включена возможность установки приложений из неизвестных источников. У меня это выглядит так:


Мобильный клиент – это аналог веб-клиента, поэтому, для доступа к базе, ее необходимо опубликовать на веб-сервере. Здесь все стандартно, я публикую на веб-сервере IIS с именем “demo”. База у меня файловая, так что нужно дать права на каталог пользователю IUSR. Радует, что система сама об этом напомнила.

Подключаем базу в мобильном клиенте:



А вот список контрагентов:


Конечно же, это не все места, которые необходимо адаптировать под работу мобильного клиента. Проверить конфигурацию можно с помощью «Главное меню – Конфигурация – ­­­Проверка конфигурации»:


У меня нашлось 84 ошибки, включая неподдерживаемые объекты метаданных. Плюс те три места в коде, которые я уже ограничил директивами. Так что придется еще поработать над адаптацией, но это конечно не то же самое, что писать мобильное приложение с нуля.

Запуск под другими ролями происходит также, только необходимо установить право запуска мобильного клиента.



Указываем параметры и готово:


Настройка для предварительно подготовленного apk клиента от 1С завершена.

Теперь соберем свой apk, воспользовавшись сборщиком мобильный приложений. Признаться, я потратил несколько часов, пытаясь собрать приложение первый раз. Сборка проходила, но открывался пустой список баз.

И так, имеем архив мобильной версии платформы. Загружаем его в справочник «Мобильные версии»:


В настройках сборщика отдельно появился пункт для SDK 26 и выше (кто, как и я, давно не обновлял – запускаем SDK Manager и загружаем новые пакеты):


Далее необходимо подготовить файл конфигурации. Вот с этим шагом у меня и были проблемы в самом начале. Потом я открыл документацию и все немного прояснилось. Руководство разработчика говорит по этому поводу следующее: «Каждая конфигурация, которая может работать в мобильном клиенте, содержит некоторую вспомогательную информацию, позволяющую отследить подмену конфигурации».
Файл конфигурации необходимо подписать. При этом для каждой конфигурации формируется свой закрытый ключ, а в файл 1cemca.xml выгружается открытый ключ (поле DSAKey), с помощью которого и сравнивается подпись конфигурации.

Чтобы сформировать ключ и подпись, заходим в свойства конфигурации «Подпись мобильного клиента» (сразу под требуемыми разрешениями, если у Вас свойства разделены по категориям, а не по алфавиту) и видим настройки подписи:


Сначала создаем закрытый ключ, прячем его от шпионов и врагов. Далее формируем подпись конфигурации. На будущее, руководство советует зайти в «Главное меню – Конфигурация – Мобильный клиент – Настройка использования мобильного клиента». В диалоге установить флажок «Проверять подпись мобильного клиента при обновлении конфигурации базы данных» и нажать кнопку «ОК». Судя по руководству, подпись будет меняться, если у нас меняется состав или имена объектных типов метаданных, а также имена и/или состав ключей записи регистров. Т.е. изменение форм определенно не влияет на подпись и, судя по описанию, изменение состава реквизитов существующих справочников, документов (но это не точно).

Подпись готова, можем продолжить. Сразу скажу, что фоновые процессы в мобильном клиенте недоступны, так что их необходимо отключить в разрешениях мобильного клиента. Так же недоступен обмен файлами с ПК. Я дополнительно отключил геопозиционирование, чтобы при сборке не возникала ошибка из-за отсутствия ключа для работы с картами. У меня получился следующий список разрешений:


Заходим в меню «Конфигурация – Мобильный клиент – Записать в файл» и сохраняем «1cemca.xml». В сборщике мобильных приложений добавляем нашу конфигурацию (группу и элемент):


Создаем группу справочника «Мобильные приложения» и настраиваем параметры сборки по умолчанию:


Добавляем нашу Демо конфигурацию:


Добавляем адрес базы на веб-сервере:


Собираем приложение. Первый раз сборка проходит дольше, последующие разы за несколько минут. После успешной сборки сохраняем готовый apk («Получить приложение»):


Публиковать приложение я, конечно, не буду. Воспользуемся прямой установкой и увидим окно авторизации приложения:

Читайте также: