Предисловие
С выходом 8.3.9 фирма 1С для расширения возможностей мобильной платформы выпускает очень нужную технологию «Внешние компоненты для мобильной разработки». Данная технология, по сути, развязывает руки всем тем, кто был ограничен в мобильной разработке 1С и не хватало каких-либо возможностей, которые очень хочется применить, разрабатывая программный комплекс. Теперь возможно выносить логику работы приложения на уровень внешних компонент и получать все возможности операционных систем android и ios, применяя языки java и c++.
Данная технология существовала и раньше вот, например хорошая статья, чтобы разобраться с основами разработки компоненты. Что же еще удалось найти на просторах интернета по данной тематике: это пример подключения компоненты из Зазеркалья и Документация на диске ИТС.
Применение технологии
Как можно применить данную технологию для мобильной разработки (Android и IOS):
- Обращаться и использовать любые возможности API операционных систем.
- Обращаться к внутренним модулям мобильных устройств(wi-fi, компас, гироскоп, камера, микрофон и т.д.)
- Работать с любым оборудованием у которого есть возможность подключаться к мобильным устройствам (кассы, usb или bluetooth сканеры штрихкодов и т.д.)
- Работать с терминалами сборами данных на базе Android
Так же возможно вызывать свои диалоги поверх приложения 1С, но я не пробовал.
Для кого статья:
- для тех, кто уверенно программирует в 1С
- тот, кто работал с мобильной платформой 1с и делал сборки APK с помощью «сборщика»
- небольшое представление как программировать в Java и Android Studio. Хорошо бы еще С++.
- кому все-таки не хватает стандартных возможностей моб..платформы 1С.
Практика применения
Думаю интересное это попробовать самостоятельно, что то наваять. Собственные познания в java и c++ последний раз применялись года 3 назад, так что делал методом проб и ошибок. В интернете достаточно уроков для самообучения так что, потратив некоторое время вы сможете собрать свою компоненту. И так что же потребуется:
- Это доступ к ИТС чтобы скачать готовый пример приложения «Шагомер», который фирма 1С предоставила для изучения.
- Android Studio
- Платформа 1С, например, 8.3.9.2084. Я на ней тестировал.
- Мобильная платформа Версия 8.3.9
- Конфигурация Сборщик мобильного приложения (2.0.3.31) (как настроить можно тут и тут подчерпнуть)
- Аппарат с Android. Я тестировал на Android 5.1
Как и описывал (Evil Beaver), для начала лучше использовать готовый пример, т.к. проще будет дополнять свои методами и проверять результат.
Далее можете установить Android Studio, чтобы подключить проект «Шагомер». В статье я опускаю многие моменты «где скачать?» «как подключить?» надеясь на то, что это самостоятельно сделаете и догадаетесь.
Скачайте мою заготовку для Android Studio (сразу уточню, что исходных кодов в ней нет). Вам надо будет с ИТС взять проект «Шагомера» и последовательно перекинуть файлы как я указал ниже.
Сам проект «Шагомер» располагается в архиве «VNCOMPS\VNCOMP83\example\NativeAPIMobile\».
- AddInNative.cpp – основной класс в котором описаны методы и функции реализуемые компонентой.
- StepCounter.cpp – тут уже сама логика работы «Шагомера». Обращаем внимаем что компонент поддерживает три платформы(android, ios, winrt). Нас интересует сейчас для android в коде директивы препроцессора обрамлены таким кодом #if defined(__ANDROID__)
- В каталоге Android_Proj располагается StepCounterClass.java тут уже вся логика работы с датчиком на java.
- В каталоге Config пример конфигурации для 1с для работы с компонентой «Шагомер».
Немного программируем
Теперь попробуем добавить в компоненту метод «ВыполнитьВибрацию()» и тем самым дадим возможность на аппаратах Android в течении 0.5 сек произвести вибрацию аппарата.
Из проекта «Шагомер» необходимо перекинуть файлы в готовый шаблон с этой статьи.
- В каталог stepCounterLib перекиньте LibActivity.java, StepCounterClass.java
1.1 В jni перекиньте AddInNative.cpp, AddInNative.h, jnienv.cpp, jnienv.h, StepCounter.cpp, StepCounter.h
1.2 В binder скиньте AddInDefBase.h, com.h, ComponentBase.h, ConversionWchar.cpp, ConversionWchar.h, IAndroidComponentHelper.h, IMemoryManager.h, mobile.h, types.h
- Добавляем в текущие исходники код, который нам поможет реализовать метод «ВыполнитьВибрацию». Меняем файл AddInNative.cpp
2.1 После строки L"ShowOrientation", добавить L"runVibrate"};
2.2 После L"ПоказатьУгловоеПоложениеУстройства", добавить L"ВыполнитьВибрацию"};
2.3 В функции StepCounter::GetParamDefValue После case eMethGetStepCount: добавить case eRunVibrate:
2.4 В функции StepCounter::CallAsProc после case eMethDisable: добавить свой
case eRunVibrate:
{
stepCounter.runVibrate();
break;
}
- Меняем файл AddInNative.h
2.1 После eMethShowOrientation, добавляем eRunVibrate,
- Меняем файл StepCounter.cpp
3.1 После jmethodID methodID_resetCounter; добавляем jmethodID methodID_runVibrate
3.2 В классе CStepCounterRecorder после реализации метода void stopStepCounterUpdates() добавляем свой код:
void runVibrate()
{
JNIEnv* jenv = getJniEnv();
jmethodID methodID_runVibrate = jenv->GetMethodID(cc, "runVibrate", "()V");
jenv->CallVoidMethod(obj, methodID_runVibrate);
}
3.3 Еще в самом конце добавьте метод
void CStepCounter::runVibrate() {
motionRecorder->runVibrate();
}
- Меняем файл StepCounter.h
В классе class CStepCounter после bool getRunningStepCounterUpdates(); добавьте void runVibrate();
- Меняем файл StepCounterClass.java
После реализации метода resetCounter() добавляем
public void runVibrate()
{
long mills = 500L;
Vibrator vibrator = (Vibrator) m_Activity.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(mills);
}
- Теперь можно Build APK.
Компонента
Теперь сформируем файл архива компоненты для загрузки его в конфигурацию 1С в общий макет МакетВК.
- Переименовать app-debug.apk в com_1c_StepCounter.apk
- Создаете файл MANIFEST.XML с текстом:
<?xml version="1.0" encoding="UTF-8"?>
<bundle xmlns="http://v8.1c.ru/8.2/addin/bundle" name="com_1c_StepCounter">
<component os="Android" path="libcom_1c_StepCounter_i386.so" codeType="c++" type="native" arch="i386"/>
<component os="Android" path="com_1c_StepCounter.apk" codeType="java" type="native" arch="i386"/>
<component os="Android" path="libcom_1c_StepCounter_ARM.so" codeType="c++" type="native" arch="ARM"/>
<component os="Android" path="com_1c_StepCounter.apk" codeType="java" type="native" arch="ARM"/>
</bundle>
- Создаете файл ANDROID_MANIFEST_EXTENTIONS.XML с текстом:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:android="http://schemas.android.com/apk/res/android"
<uses-permission android:name="android.permission.VIBRATE"/>
<target xpath="/manifest/application" >
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true" /> </target>
</root
- Необходимо открыть com_1c_StepCounter.apk(если что переименуйте в zip).
Перейти в lib/armeabi Скопировать в отдельный каталог libcom_1c_StepCounter.so и переименовать в libcom_1c_StepCounter_ARM.so
Перейти в lib/x86 скопировать в отдельный каталог libcom_1c_StepCounter.so и переименовать в libcom_1c_StepCounter_i386.so
- Все файлы упаковать в vk.zip : ANDROID_MANIFEST_EXTENTIONS.XML, com_1c_StepCounter.apk, libcom_1c_StepCounter_ARM.so, libcom_1c_StepCounter_i386.so, MANIFEST.XML
Не забываем про 1С
В конфигурации 1с Шагомера добавьте команду на форму и вставьте ее код:
&НаКлиенте
Процедура КомандаВибрация(Команда)
Если Не ВК = неопределено Тогда ВК.ВыполнитьВибрацию();
Иначе Предупреждение("Ошибка загрузки ВК");
КонецЕсли
КонецПроцедуры
Далее в инструкции, которую предоставила 1с описан процесс загрузки vk.zip в макет и получения выходного файла для сборщика. Загружаете 1cema.zip в «Сборщик» и собираете конечный APK файл.
Результат
Программу ставим на телефон и с надеждой нажимаем последовательно «Начать отсчет» и «Вибрация». Надеюсь вы почувствовали вибрацию :)
Итоги
Статью постараюсь дополнять, т.к. писал сухо и сжато. Надеюсь, без ошибок.
Следующая статья о том, как подружил Терминал сбора данных на Android с внешней компонентой.
Так же интересует написание компоненты для терминала Атол SmartDroid если есть, у кого аппарат в наличии то можем совместно разработать компоненту.
Еще мысли есть внешнюю компоненту применить для IOS, но надо, какое то практические применение придумать.
Вступайте в нашу группу Мобильные приложения 1С.