вылетает мобильное приложение 1с

Проблемы с разработкой мобильного приложения

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

1) Периодически приложений вылетает, на некоторых смартфонах с ошибкой, на некоторых без:
[url=http://itmages.ru/image/view/4689852/4d2a4dd1][img]http://storage3.static.itmages.ru/i/16/0805/s_1470395841_5187443_4d2a4dd18c.jpg[/img][/url]
Чаще всего вылетает в момент переключения категории товаров или смены ориентации экрана.

2) Заказчик попросил убрать верхнюю панель с надписью «Рабочий стол»:
[url=http://itmages.ru/image/view/4689906/154f5e2e][img]http://storage3.static.itmages.ru/i/16/0805/s_1470396328_5079472_154f5e2ea4.jpg[/img][/url]
Искал в интернете, как же можно убрать эту панель, кто-то писал что надо подкорявить манифест приложения, но то имено подкорявить, так и не написали.

(13) Мобильная 1С прекрасно подходит для чего задумывалась: средство для влезания 1С на мобильный рынок.

Все остальное пока в процессе ))

(18) Можно и в сторону JavaScript подумать сча это проще Android Java и универсальнее.
Причем даже писать сразу на android без большого компа можно https://habrahabr.ru/post/301442/ ))

Но есть/будут и свои недостатки https://habrahabr.ru/company/ifree/blog/214531/ у такого подхода. Зато для кто веб-разработку (html/css/js) уже знает оно в разы быстрее и удобнее. На java только «эмулятор браузера» свой или готовый юзается для fullscreen.

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

Источник

Ошибки при работе с мобильным клиентом в 1С: Управление торговлей. Скажите в чем может быть причины таких ошибок и какие есть пути их устранения?

Здравствуйте. У нас возникают непонятные ошибки в работе мобильного клиента на ТСД. На складской площади организации сотрудники работают с терминалами сбора данных (ТСД), на которых установлен мобильный клиент 1С для работы с конфигурацией 1С: Управление торговлей. Периодически на разных операциях возникают данные ошибки:
Самые часто-встречающиеся ошибки:
1.Ошибка http при обращении к серверу unexspected end of stream on com.android.okhttp.Adress*
5fffe30ab6264752171950
Документы, на который возникает ошибка: Расходный ордер на товары, Приходный ордер на товары
Операции, на которых возникает ошибка: Сканирование товара, Ввод количества, Завершение работы с документов, Создание документа, Поиск документа. Т.е. не зависит от программной реализации.
2. Ошибка http при обращении к серверу unexpected Java io.eofexception(рисунок2)
5fffe31a89c42544545848
Документы, на который возникает ошибка: Расходный ордер на товары, Приходный ордер на товары
Операции, на которых возникает ошибка: Сканирование товара, Ввод количества, Завершение работы с документов
Другие ошибки:
1. Ошибка http при обращении к серверу Software caused connection abort
5fffe330675e3468471419
Документы, на который возникает ошибка: Расходный ордер на товары, Приходный ордер на товары
Операции, на которых возникает ошибка: Сканирование товара, Ввод количества, Завершение работы с документом
2. Ошибка HTTP
5fffe33c46b71154582578
Возникает при попытке входа в программу

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

Скажите в чем может быть причины таких ошибок и какие есть пути их устранения?

Технические и программные характеристики, используемого оборудования:
Программное обеспечение сервера: Apache/2.4.18
Версия конфигурации 1С: Предприятия: 8.3.17.1549
Версия мобильного клиента 1С: 8.3.17.76
Версия конфигурации 1С: Управление торговлей: 11.4.13.57
Терминал сбора данных (ТСД): UROVO DT40 ANDROID 9.0 / 1.8 GHZ / 8ХCORE, CORTEX A53 RAM 2 GB ROM 16

Источник

На Android начали вылетать приложения? Найдено решение проблемы

90cdc850e64b97e3511143d3b0c177d9

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

Как выяснилось, проблемным оказалось одно из последних обновлений компонента WebView, который отвечает за работу веб-приложений и быстрый запуск сайтов в Chrome. Уже вышел апдейт этого компонента, в котором устранён баг, вызывающий падение приложений.

Как решить проблему:

Запустите Play Маркет и обновите Android System WebView и браузер Chrome. Если в настройках магазина активировано автоматическое обновление приложений, можно не спешить — скоро они сами обновятся без вашего участия.

25adaca71f270c6bafaa0f9d2670b80a

В том случае, если обновления Android System WebView и Chrome пока недоступны, а последние версии этих приложений были выложены в Play Маркете до 22 марта, можно воспользоваться временным решением: перейдите «Настройки» → «Приложения» → в меню с тремя точками включите отображение системных приложений, найдите в поиске Android System WebView и нажмите «Удалить обновления». Если кнопки для удаления обновлений нет, можно попробовать удалить и заново установить Chrome.

Как сообщают пользователи, после установки свежих версий Android System WebView и Chrome приложения перестают вылетать и работают нормально.

Источник

Реверсим мобильную 1с под андроид. Как добавить немного функциональности и угробить несколько вечеров

Сразу скажу что несмотря на громкое, как кому-то могло показаться, название статьи — тут не будет никакого прям уж совсем хардкора. А также несмотря на то что реверсинг чаще всего связывается с информационной безопасностью — здесь опять же ничего такого не будет, ибо никаких защит (за исключением небольшой минификации) обходить не было необходимости. Нет их. Мобильная 1с бесплатный продукт в который не встроено никаких проверок, защит и платных функций.

Так что обращаюсь к тем кто надеется увидеть применение деобфускаторов, использование Frida/Xposed, другого хитрого софта — ничего интересного вы для себя не найдете. Тут мы просто будем использовать apktool, baksmali, apksigner, adb, jadx, консоль, текстовый редактор, javac, d8 и все.

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

С чего все началось

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

Так что первая причина заняться реверсингом 1с заключалась в том, что мне стало интересно, а что я могу сделать имея текущий багаж знаний. Сразу скажу, опыт нативной разработки оказался не сказать что нужен, в повседневной работе почти ничего из того что будет описано ниже не встречается. Так что в принципе наверно любой средний 1сник посидев несколько дней/недель смог бы во всем этом разобраться.

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

Первые шаги

image loader

Как можно видеть на скриншоте выше — минификации приложение почти не подвергалось (в плане переименования классов и методов). Плюс видно что кода на java очень немного и почти все место занимают so библиотеки.

Повтыкав какое-то время на список классов, я увидел любопытный класс MapImpl, навевающий подозрения что именно он виновник такой грустной ситуации с кастомизацией отображения меток.

image loader

Список методов и их сигнатуры внушали надежду что все будет очень просто, и я решил заглянуть в smali код, после чего сильно напрягся и пошел читать список команд smali, и как его читать/писать. Впрочем, именно на этом моменте я решил что дело обещает быть несложным и недолгим, а соответственно вот он, повод поиграться с реверсингом. Приняв для себя решение посвятить этому пару вечеров (как же жестоко я ошибался), пошел со спокойной душой спать ложиться.

Строю планы

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

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

А вот со вторым пунктом из-за моей неграмотности вышло грустнее. Да что уж там, проблемы были со всеми пунктами кроме первого.

Перепаковываю приложение без изменений кода

и получил каталог unpacked в котором лежала куча файлов, с ними в будущем предстояло работать. Запаковал apk обратно командой

Попытавшись установить его на эмулятор

я получил следующую ошибку:

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

мне удалось запустить приложение. Правда вместо карты с двумя точками меня ждал серый экран с подписью google внизу. Почесав репу я решил что дело в том что используется ключ для гугл карт от 1с, который с моей подписью не работает. Поэтому пойдя в консоль разработчика на сайте google я создал новый проект для работы с api google карт на андроиде, получил api key, который указал в res/values/strings.xml в google_maps_key строке, а так же добавил свой дебажный ключ в разрешенные для проекта. Перепаковал и переподписал apk, запустил, и наконец все снова работало.

Добавляю свои логи

Следующее что я хотел сделать — это автоматизировать запуск приложения и добавление конфигурации 1с в платформу. Вручную после каждых правок делать это делать было бы той еще морокой.

Сначала я нагуглил и попытался воспользоваться утилитами jadx или dex2jar, чтобы не мучиться с чтением smali, а читать более привычный код на java, но по какой-то причине они не работали (в дальнейшем jadx все таки завести удалось каким то шаманством). Пришлось разбирать smali, благо это оказалось не так ужасно как я боялся.

В E1cApplication ничего интересного к сожалению обнаружить не удалось, все что там происходит — установка своего хендлера на крэши.

А вот в двух других классах, Starter и App информации было гораздо больше и оказалась она довольно полезной. Метод App.onCreate(Landroid/os/Bundle;)V довольно большой, так что приводить его целиком не буду, приведу только заинтересовавшие меня части.

Запустил из 1с десктопной 1с мобильную и получил следующие логи

Как видим — есть вся необходимая информация для автоматизации запуска приложения через adb. Правда к этому моменту я словил двойной фейспалм. Во-первых, наконец подобрал ключи с которыми jadx осилил перевод в java (понятно что писать все равно в smali бы пришлось, но все же). А вторым фейспалмом оказалось то что я осознал что зря я мучаю платформу разработчика (нужна только для разработки и отладки конфигураций), правильнее было бы реверсить сборку релизов 1сных приложений, причем там есть полу готовые gradle проекты для сборки, есть файл с перечнем зависимостей и другие плюшки. Я немного по этому поводу погрустил — и решил все таки закончить с тем что начал. Все равно ради фана делаю все это, а не ради практической пользы.

Запуск платформы через adb

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

Перечисленной выше последовательностью команд мы устанавливаем apk, даем установленному приложению разрешение на чтение диска, копируем конфигурацию 1с на устройство, и даем команды на запуск 1с и загрузку конфигурации. Работает это кстати не на всех версиях андроида, но я тестировал на api 28, и соответственно на нем эта последовательность делает все корректно. На младших версиях могут быть проблемы с выдачей прав.

Внедряюсь в обработку данных от 1с и модифицирую метки

Тут у меня было несколько вариантов дальнейшего развития событий.

Пойдя по третьему варианту я создал 2 подкаталога в src: java, для MapImplExtenstion.java и stubJava для файлов которые нужны только для компиляции. Поскольку я решил подправить чуть внешний вид меток, меня заинтересовали два следующих поля:

Используя jadx для декомпиляции в java нашел в декомпилированном коде метод отвечающий за их заполнение

Соответственно у класса MapImplExtension добавил метод ArrayList[] kN(String[] titles, double[] coordinates) который в первом элементе массива вернет список который нужно будет поместить в Xj, а во втором список для Xk.

Скомпилировал следующими командами сначала в class, затем в dex, затем декомпилировал в smali чтобы потом упаковать вместе с остальными файлами

Добавил в MapImpl.smali поле extension типа нашего нового класса, и добавил его инициализацию

А также заменил обработку в классе MapImpl данных от 1с на обработку в классе MapImplExtension

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

Добавление новой функциональности

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

image loader

Поскольку объем измененного кода довольно большой — включать в статью его не буду, приведу только изменения сигнатур. Если кому интересны все правки которые я сделал на этом шаге — можете посмотреть в этом коммите.

Подводя итоги — опыт был довольно интересный. По крайней мере для меня. Помог разобраться с некоторыми инструментами, узнал немного лучше о работе андроида и формате байткода для dalvik/art, опыт ковыряния минифицированного кода тоже будет полезен (уже был случай когда в релизной версии R8 вырезал поля класса которые на самом деле использовались, в тот раз только методом тыка разобрался, сейчас бы это проблем не доставило).

Если кому-то интересно самому все повторить и возможно расковырять еще больше — я выложил на github все исходники вместе с кривым gradle скриптом осуществляющим сборку из исходного apk модифицированного.

Источник

Сказ о том, как мы мобильное приложение писали. Часть 2. Обработка долгого нажатия

А сегодня мы расскажем, как в 1С отловить событие долгого нажатия на строку табличной части. Для простоты будем называть его долгим тапом, или просто тапом (от слова tap – касание). По сравнению с первой частью эта статья уже более техническая, поэтому здесь не будет веселых фотографий розовых контейнеров. Ну а что вы хотели – мы в первую очередь разработчики, а не маркетологи. :)

Проблема

В 1С невозможно отловить событие долгого тапа. Данное пожелание уже звучало на партнерском форуме, но разработчики платформы не планируют его реализовывать, т.к. долгий тап не принято использовать на iOS.

%D0%A4%D0%BE%D1%80%D1%83%D0%BC

На самом деле в мобильной платформе долгий тап есть. Если просто нажать на строку, то сразу происходит ее открытие, но если нажать и держать – то строка подсвечивается синим и ничего не происходит. Это сделано, чтобы пользователь мог выделить строку для выполнения дальнейших действий – например, сдвинуть или удалить. Проблема в том, что разработчик не может переопределить это поведение, и, например, показать пользователю контекстное меню с вариантами действий.

Не может? Ой, да шо вы говорите!

Решение

Как известно, при обычном нажатии на строку срабатывает событие Выбор, и строка открывается. Если строку просто выделить, то сработает событие ПриАктивизацииЯчейки. Казалось бы – что мешает поместить наш код в это событие? Не всё так просто – оно срабатывает не только при выделении, но и при нажатии. Когда мы нажимаем на строку – она на мгновение выделяется (это можно увидеть невооруженным глазом), а потом уже открывается.

Итак, что мы имеем? При долгом тапе отрабатывает только ПриАктивизацииЯчейки, при коротком – ПриАктивизацииЯчейки и Выбор. Вывод напрашивается сам собой – если сработали оба события – значит это Выбор, если сработала только Активизация – значит это долгий тап.

Как мы будем это определять? Напрашивается простой вариант – у формы завести переменную ДолгийТап с типом булево, в событии ПриАктивизацииЯчейки устаналивать ее в Истину, а в Выборе в Ложь. При этом в Активизации подключить Обработчик ожидания, который через полсекунды проверяет – если ДолгийТап = Истина, тогда показываем пользователю меню, если Ложь – тогда ничего не делаем.
Сказано – сделано. Пишем код:

Открываем форму на телефоне – и при открытии сразу же выскакивает наше предупреждение. Как так, мы ведь даже ничего не нажали? Это связано с тем, что при открытии формы первая строка таблицы активизируется и 1С думает, что это долгий тап.
Есть еще один неприятный эффект – долгий тап не срабатывает для уже выделенной строки. То есть если тапнуть по строке, откроется меню, пользователь его закроет и снова тапнет – то второй раз меню не откроется. Такое происходит потому, что событие ПриАктивизацииЯчейки не вызывается второй раз для выделенной строки.

Впрочем, даже в таком варианте этим пользоваться можно. Но “можно” нас не устраивает, поэтому мы продолжаем эксперименты.

Если присмотреться, то корень обеих проблем кроется в выделенной строке. Значит, сделаем так – будем очищать выделенные строки везде, кроме обработчика Активизации, а в обработчике ожидания поставим проверку на выделенные строки. Если выделенные строки есть – значит, Активизации сработала, а Выбор – нет, следовательно, это долгий тап. Пишем алгоритм:

Проверяем – первая проблема осталась. При открытии формы первая строка всё равно остается выделенной (и срабатывает долгий тап), как будто вызов процедуры принудительной очистки строк игнорируется платформой. Причем то же поведение наблюдается и в настольной версии.

Зато вторая проблема решилась – несмотря на то, что после открытия формы строки сама строка визуально остается выделенной, повторный тап по ней срабатывает и выполняется наш обработчик.

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

Запускаем на телефоне – работает!

Причем обратите внимание – можно не только определить свой обработчик долгого тапа, но и установить время задержки перед его срабатываем (второй параметр процедуры ПодключитьОбработчикОжидания).

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

Вывод

Для обработки события длительного нажатия по строке табличной части следует воспользоваться комбинаций событий ПриАктивизацииЯчейки и Выбор, в которых проверяется, выделена ли текущая строка.

Пример реализации приведен в обработке, прикрепленной к статье. В описанном алгоритме также можно задать длительность задержки, после которой срабатывает обработчик. Метод одинаково работает на Android и iOS.

Послесловие

Я не удивлюсь, если первым комментарием к этой статье будет фраза “Мсье знает толк. ” А что поделаешь – именно так выглядит программирование под мобильную платформу 1С, если хочется выжать из нее немножко больше, чем 100%. Впрочем мы уверены, что оно того стоит, и наше приложение Контейнер – тому пример.

Мы не прощаемся, и в следующей статье расскажем про наши прекрасные диаграммы расходов и платежей. Оставайтесь с нами!

Вадим Невзоров
ХВОЯ интегра, Одесса

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • вылетает лига ставок на айфон приложение
  • вылет перенесли на 12 часов можно требовать компенсацию