0. IgorKissil 233 31.01.19 12:25 Сейчас в теме

Внешние компоненты мобильной платформы 1С для ОС Андроид

На трех простых примерах описана процедура разработки внешних компонент для Андроид. Статья написана по мотивам доклада на конференции INFOSTART 2018 EDUCATION.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. user623969_dusa 31.01.19 13:21 Сейчас в теме
почему си на андроиде? потому что внешние компоненты на си легче писать??
2. Xershi 714 31.01.19 20:16 Сейчас в теме
Возьму на заметку.
Как раз подхожу к этапу разработки:
https://forum.infostart.ru/forum15/topic202825/
3. ni032mas 96 01.02.19 08:32 Сейчас в теме
Отличная статья, спасибо. Я все время думаю, зачем это все? Получается, чтобы написать хорошее мобильное бизнес приложение на платформе 1С нужны: C++, Java и 1C разработчики, это как минимум дорого. А найти три в одном не простая задача для HR. Плюс ко всему приложение на 1С проигрывает нативным по скорости работы, по отзывчивости, по возможности кастомизации интерфейса. А еще есть куча багов от 1С, порой которые ставят крест на всем проекте. Сам уже несколько лет забил на мобильную платформу и начал писать нативно под Android.
chemezov; rhtr; it_tungus; +3 Ответить
4. KostyaBu 20 04.02.19 19:47 Сейчас в теме
Уважаемые коллеги Прошу помощи пишу внешнюю компоненту которая достает из буфера обмена скопированные данные.
В разработке компонента более менее разобрался добавил свою процедуру которая успешно возвращает в 1с " Привет мир".
Однако при инициализации ClipboardManager(а) Сервис с помощью которого можно обратится к буферу: m_ClipboardManager = (ClipboardManager)
m_Activity.getSystemService(Context.CLIPBOARD_SERVICE) Компонента отваливается вместе с 1с молча падает. Однако подобный пример только с датчиками движения, как на итс работает.

Итак вопрос. Нужны ли какие разрешения для создания CLIPBOARD_SERVICE и в чем хитрость работы именно этого сервиса, другой с датчиками ведь успешно запускается,

Благодарен любой подсказке.
5. IgorKissil 233 08.02.19 12:43 Сейчас в теме
(4) Реализовал буфер в своей компоненте: https://infostart.ru/public/779912/ С получением сервиса и операциями copy/paste не нашел никаких проблем - вы что-то делаете не так. Трудности будут с получением callback'а об изменении буфера, потребуются знания многопоточности и одна хитрость. Но тоже, как видите, преодолимо.
KostyaBu; +1 Ответить
6. KostyaBu 20 08.02.19 17:01 Сейчас в теме
(5) Прежде всего хотел выразить благодарность что вы откликнулись. Увидел что вы уже все реализовали и я скачал. спасибо! Но очень хочется разобраться времени много потрачено нужно разобраться.

напишу кусок из Вашего примера дописка в инициализации класса:

private long m_V8Object; // 1C application context
private Activity m_Activity; // custom activity of 1C:Enterprise
private BroadcastReceiver m_Receiver;
private String text;
private ClipboardManager m_ClipboardManager = null;


// private ClipData.Item item= null;;

public LockState(Activity activity, long v8Object)
{
m_Activity = activity;
m_V8Object = v8Object;
m_Context = activity.getBaseContext();

m_ClipboardManager =(ClipboardManager) m_Context.getSystemService(Context.CLIPBOARD_SERVICE); (Здесь падает)

}

хотя сервис доступа к сенсорам получаю без проблем как в примере Степ каунтер.
m_SensorManager = (SensorManager) m_Context.getSystemService(Context.SENSOR_SERVICE);

Заранее благодарен за ответ!
7. IgorKissil 233 08.02.19 17:37 Сейчас в теме
(6) Зачем вам getBaseContext? Используйте контекст активности или приложения
KostyaBu; +1 Ответить
8. KostyaBu 20 08.02.19 20:47 Сейчас в теме
(7)
я его написал от безисходности т.к

m_Activity.getSystemService(Context.CLIPBOARD_SERVICE);
тоже падает (вся система вместе с 1с закрывается)
9. KostyaBu 20 08.02.19 20:51 Сейчас в теме
(7)
такое чувство. что на CLIPBOARD_SERVICE есть какое то ограничение. а с m_SensorManager = (SensorManager) m_Context.getSystemService(Context.SENSOR_SERVICE); как в примере от 1с проходит все гладко но Вы в своей компоненте доказали что я где- то что то не понимаю ((. Осталось понять что.
10. user1169242 11.03.19 15:44 Сейчас в теме
Коллеги. Прошу совета. Задолбался уже искать причину.
void connect() { 
    Initialize(); 
    StartAPKMethod(); 
} 

void disconnect() { 
    StopAPKMethod(); 
} 

void StartAPKMethod(){ 
    if (obj){ 
        JNIEnv* env = getJniEnv(); 
        jmethodID methID = env->GetMethodID(cc, "start", "()V"); 
        env->CallVoidMethod(obj, methID); 
    } 
} 
void StopAPKMethod(){ 
    if (obj) { 
        JNIEnv* env = getJniEnv(); 
        jmethodID methID = env->GetMethodID(cc, "stop", "()V"); 
        env->CallVoidMethod(obj, methID); 
        env->DeleteGlobalRef(obj); 
        env->DeleteGlobalRef(cc); 
        obj = nullptr; 
        cc = nullptr; 
    } 
}
Показать

Если сделать так:
for(int i=0; i<100; ++i){
   connect();
   disconnect();
}


То приложение стабильно падает. Собственно пример синтетический. На самом деле приложение периодически падает при закрытии мобильного приложения 1с. Очевидно все дело в уничтожении объектов, но куда копать и почему оно падает не всегда - понять не могу
11. ineshyk 07.05.19 22:57 Сейчас в теме
Скачал Демку 1С, залил на телефон. При запуске пишет ошибка подключения внешней компоненты
12. Ignat87 02.08.19 15:04 Сейчас в теме
Ребята, помогите. В VS 2019 собрал пустое приложение (i386 b ARM) из шаблона ИТС для мобильных платформ, но на участке кода ПодключитьВнешнююКомпоненту("ОбщийМакет.TestVK", "TestVK", ТипВнешнейКомпоненты.Native) платформа просто падает без описания ошибок.

Я новичек в этом деле, в чем проблема - не пойму. Сделал вроде все правильно. Прикреплю файл с проектом, может кто подскажет, в чем проблема.
Прикрепленные файлы:
Компонента и ее исходник.rar
13. refostart 14.08.19 16:51 Сейчас в теме
Хотелось бы уточнить, есть ли какой-то способ что-то логировать в Java-коде? Написание почти с нуля в лоб внешних компонент весьма проблематичная задача.
14. IgorKissil 233 15.08.19 04:38 Сейчас в теме
(13)Посмотрите шагомер от 1С, файл jnienv.cpp. Логирование делается как описано здесь: https://developer.android.com/ndk/reference/group/logging Ну и почитайте https://developer.android.com/studio/debug/am-logcat
chemezov; refostart; +2 Ответить
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Ведущий программист 1С
Санкт-Петербург
зарплата от 130 000 руб.
Полный день

Программист 1С
Москва
зарплата от 130 000 руб. до 200 000 руб.
Полный день

Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день