Взявшись за непонятную задачу с почти полным отсутствием примеров можно убить ни один вечер, так ничего не добившись. Особенно когда речь заходит о труднособираемой и еще более трудноотлаживаемой внешней компоненте для мобильной платформы 1С. Кропотливые поиски все же обязательно приведут к успеху и выдадут на-гора пару ценных ссылок:
- VNCOMPS.zip с ИТС, исходники которой непонятно как собирать
- Статья "Внешние компоненты мобильной платформы 1С для ОС Андроид"
Собственно эти ссылки, а особенно вторая (спасибо Игорю Кисилю) послужила источником вдохновения и отправной точкой для настоящей компоненты.
1. Что из интересного в архиве компоненты:
- Собранный zip с макетом компоненты с примерами вызова обычного метода, а также методы вызова внешнего события через Broadcast (может быть полезно для написания драйверов торгового оборудования);
- Демо конфигурация.
2. API Компоненты
Список методов:
Delay/Пауза — останавливает выполнение кода на заданное число миллисекунд. Процессор в период простоя не грузится
Параметры:
- миллисекунд — Число — число миллисекунд на которое нужно остановить выполнение кода.
StartScreenWatch/НачатьОтслеживаниеЭкрана — начинает мониторинг состояния активности экрана устройства. Параметры отсутствуют. Если устройство возвращают из спящего режима блокировки, то вызывается внешнее события со следующими параметрами:
- Источник — org.ripreal.androidutils
- Событие — LockChanged
StopScreenWatch/ОстановитьОтслеживаниеЭкрана — прекращает мониторинг активности экрана устройства. Параметры отсутствуют.
DeviceInfo/ОписаниеУстройства (только чтение) — ID мобильного устройства
3. Как бонус на github:
- sln проект для VS Studio 2024 и .idea проект (в каталоге android) для Android Studio 3.5
- Проект .idea настроен на отладку c++ кода компоненты. Инструкция есть в Readme.MD
Спасибо. Посмотрим!
Честно говоря из статьи сложно понять природу вещи…
Чувствуется, что вещь нужная, но… Куча вопросов остается:
Это компонента для общения 1с с андройд?
Если да, то только три метода?
Однозначно нужная статья! А то у меня все никак руки не дойдут до продолжения цикла видео на эту тему.
В описании совершенно не раскрыта задача, которую ставил перед собой автор (если это конечно не написание мобильной внешней компоненты ради мобильной внешней компоненты).
(2) Не ставил цель охватить в этой статье весь жизненный цикл разработки внешней компоненты для мобильного приложения. Я лишь хотел поделится исходниками компоненты, которые можно легко открыть иотлаживать через Visual Studio и Android Studio а также использовать как начальный шаблон для разработки своей компоненты.
(4) С целью угадали. Я просто хотел выложить исходники компоненты, на базе которых легко начать разрабатывать свою компоненту.
(6) так на ИТС же есть проект. Вопрос как начать его использовать, а не как его допиливать.
(7) На ИТС есть sln проект только для десктопной версии компоненты. Для мобильной компоненты проекта нет. Есть только исходники и bat-ник для сборки через cmake, который «завести» лично мне не удалось.
Спасибо за исходник. Возник такой вопрос, а как в третьем примере передать данные в обработку внешних событий 1С?
У вас, там стоит nullptr…
Я пытаюсь разобраться на примерах, что бы попробовать свои силы в написании таких компонент.
Этот кусок кода должен помочь:
Показать
(10)
….
std::wstring dataWString = Utils::jstring2wstring(jenv, jdata);
….
Спасибо, я вроде в этом направлении и двигался. С преобразованием в строку сильно помогли.
Теперь глупый вопрос: Utils — это что?
(11) Это отдельный метод
Показать
(12) Я понял про метод. Вопрос немного в другом. В текущем классе (MainApp) есть этот метод и он объявлен в private. Попытка вызвать его предложенным вами способом
приводит к ошибкам:
Ошибка (активно) E0245 нестатическая ссылка не член должна указываться относительно заданного объекта androidUtils
Ошибка (активно) E0265 функцию «MainApp::jstring2wstring» (объявлено в строке 122) недоступно androidUtils
Подскажите, пожалуйста, что не так?
(13)
Это ошибка в синтаксисе из-за незнания C++. Нужно почитать хотя бы пару туториалов. Все равно ведь придется, а без этого компоненту, которая хотя бы что-то умеет кроме слипа не собрать.
(14) Я нашел решение. Закинул объявление метода в public и сделал следующий вызов:
После этого получилось собрать компоненту. Просто был интересен ваш вариант решения этой проблемы. )
В любом случае, благодарю за предоставленный образец и консультацию.