Вылетает мобильное приложение 1с
Советы по исправлению вылетов приложений на телефонах и смартфонах.
Вылеты приложений могут быть не только обычным сбоем, но и свидетельством серьезных проблем в работе телефона. Рассказываем, почему происходят вылеты приложений на Android, и как с ними можно бороться.
Часто проблемы с запуском появляются из-за самого приложения. Чем чаще происходят вылеты, и чем больше приложений им подвержены, тем больше вероятность, что неполадки стоит искать в самом смартфоне.
Почему вылетают приложения на телефоне?
1. Разные версии Android
Смартфоны через 2-3 года перестают получать свежие обновления программного обеспечения. При этом новые приложения выпускаются на более современных версиях Android, а значит и совместимы они будут с ограниченным списком версий операционной системы. Если при попытке открыть недавно созданное приложение на телефоне с устаревшей версией ОС происходит вылет, проблема может заключаться в их несовместимости.
2. Повреждение телефона
3. Недостаточно оперативной памяти
Мобильные игры и другие «тяжелые» приложения требуют для корректной работы больше оперативной памяти. Если ее не хватает, программы могут вылетать или не запускаться вовсе. Важно знать, что для некоторых приложений установленной оперативной памяти на телефоне хватит — достаточно закрыть другие программы и фоновые процессы, тем самым освободив ОЗУ.
Во многих случаях оперативной памяти изначально недостаточно. Например, приложение требует 3 ГБ памяти, в то время как на телефоне установлено всего 2 ГБ. Из-за этого вылеты могут происходить постоянно, а исправит ситуацию только смена мобильного устройства.
4. Выход из строя микросхемы оперативной памяти
Вылеты приложений могут происходить не только из-за нехватки оперативной памяти, но и из-за ее неисправности. Так как оперативная память представляет собой микросхему, ее легко можно повредить, уронив телефон, намочив его или подвергнув слишком высоким температурам. Узнать, в каком состоянии находится микросхема, можно в сервисном центре.
5. Вирусные программы
Периодические вылеты разных приложений могут говорить о том, что на телефоне находится вирусная программа. Если пользователь часто скачивает приложения из непроверенных источников или посещает небезопасные сайты, периодически необходимо проверять мобильное устройство на наличие вирусов. Делать это можно как встроенным антивирусом, так и скачанным из Google Play. Еще можно через ПК.
6. Плохая оптимизация
7. Проблема в APK-файле
8. Проблемы с обновлением приложения
Причины вылета, связанные с обновлением приложения, делятся на два типа:
Первый тип встречается чаще, поэтому при вылетах приложения стоит проверить наличие свежих обновлений. О втором типе можно узнать из отзывов к приложению, так как многие пользователи, обновившие приложение ранее, сразу рассказывают о появившихся неполадках.
Что делать, если вылетают приложения на Android?
Избавиться от вылетов приложения можно, если последовательно испробовать несколько способов решения этой проблемы.
1. Обновить программное обеспечение
Обновить программное обеспечение телефона можно двумя способами:
- Если для телефона все еще выпускают обновления, найти их можно в настройках телефона в разделе «Обновление программного обеспечения». В нем достаточно выбрать функцию «Обновить» или выставить автоматические обновление.
- Если для телефона перестали выпускать обновления, их можно найти на сторонних сайтах. Главное — выбрать нужную версию прошивки, которая будет совместима с мобильным устройством.
2. Очистить кэш приложения
Если вылетает одно конкретное приложение, рекомендуется очистить его кэш. Сделать это можно в настройках управления приложениями. В нем необходимо найти список всех установленных программ, выбрать нужную и нажать на кнопку «Очистить кэш».
3. Переустановить приложение
В случае, если очистка кэша не помогла, стоит попробовать переустановить приложение. Для этого необходимо зайти в Google Play, найти нужную программу и нажать кнопку «Удалить». После того, как она полностью удалится с устройства, остается снова нажать на кнопку «Установить» и дождаться окончания установки.
4. Обновить приложение
Как описывалось выше, многие проблемы с вылетами появляются из-за отсутствия обновления или установки некачественной новой версии. Если приложение начало вылетать, необходимо зайти в Google Play и проверить, есть ли свежие обновления. Если программа начала вылетать после того, как обновилась, то рекомендуется ознакомиться с отзывами — в них другие пользователи могли поделиться теми же проблемами с запуском.
5. Сброс до заводских настроек
Если приложений, которые часто вылетают, несколько, и эта проблема серьезно мешает пользоваться мобильным телефоном, помочь может сброс устройства до заводских настроек. Предварительно необходимо сохранить все важные данные на внешних носителях или на ПК/ноутбуке.
6/ Диагностика в сервисном центре
Сразу скажу что несмотря на громкое, как кому-то могло показаться, название статьи — тут не будет никакого прям уж совсем хардкора. А также несмотря на то что реверсинг чаще всего связывается с информационной безопасностью — здесь опять же ничего такого не будет, ибо никаких защит (за исключением небольшой минификации) обходить не было необходимости. Нет их. Мобильная 1с бесплатный продукт в который не встроено никаких проверок, защит и платных функций.
Так что обращаюсь к тем кто надеется увидеть применение деобфускаторов, использование Frida/Xposed, другого хитрого софта — ничего интересного вы для себя не найдете. Тут мы просто будем использовать apktool, baksmali, apksigner, adb, jadx, консоль, текстовый редактор, javac, d8 и все.
Также хочу заранее разочаровать тех кто ждал глубокий разбор платформы, или ее сильную модификацию. Будут внесены только небольшие правки буквально в несколько файлов, и собственно даже эти несколько файлов я не разбирал досконально, все по верхам.
Немного расскажу с чего мне вообще вдруг пришла идея как-то влезать в работу мобилки на 1с. На данный момент я вот уже скоро год как занимаюсь нативной разработкой под андроид, но до этого я проработал 4 года 1с программистом, причем последние года полтора мы часто работали именно с мобильной платформой. Несмотря на то что основные потребности она удовлетворяла, было у нее так же и очень много минусов (помимо языка программирования). В частности нельзя было по-человечески встроить какую нибудь внешнюю библиотеку, по крайней мере штатными средствами и с нашим тогдашним багажом знаний. Так же все было очень грустно, например, с функциональностью отображения меток на карте. Вся возможность ее настройки заключалась в указании текста для меток когда по ним тапаешь. На тот момент единственным способом как-то это обойти было использование специального объекта "ПолеHTMLДокумента", но с ним были свои проблемы. На время работы с 1с все мои знания в нативной разработке под андроид заключались в паре HelloWorld, так что идеи реверсить мобилку 1сную даже в голову не приходило, разные вопросы от заказчиков по нестандартному расширению возможностей 1с мы либо не решали никак, либо пилили очень простые нативные приложения ставившиеся рядом и криво/косо с 1с интегрировали (да и лицензионное соглашение 1с вроде запрещает правки в самой платформе).
Так что первая причина заняться реверсингом 1с заключалась в том, что мне стало интересно, а что я могу сделать имея текущий багаж знаний. Сразу скажу, опыт нативной разработки оказался не сказать что нужен, в повседневной работе почти ничего из того что будет описано ниже не встречается. Так что в принципе наверно любой средний 1сник посидев несколько дней/недель смог бы во всем этом разобраться.
Вторая же причина заключается в том, что мне просто захотелось попробовать поковырять чужие apk, ибо до этого я упускал этот, довольно широкий пласт знаний, и, поскольку нужно было с чего то начинать, мне пришла в голову как раз 1с.
Первое что я сделал, еще когда идея реверсить 1с только смутно бродила в моей голове, просто перетащил мышью apk файл приложения на окно AndroidStudio. Хочу сказать сразу — что мне стало немного грустно, ибо большая часть кода 1с написана на C++ и лежит в .so библиотеках, и их отреверсить посложнее, да и не было интересно. А вот файл classes.dex всецело завладел моим вниманием, тем более что его скромный размер давал мне возможность предположить что и реверсить его будет несложно. В целом так и оказалось. Кстати, интересное следствие того что большая часть кода на C++ — очень много методов и классов избежали обработки с помощью ProGuard. Сложновато делать интероп с минифицированным кодом ;).
Вот что я увидел в окне студии (разбирал x86 версию, чтобы работать с эмулятором а не реальным девайсом)
Как можно видеть на скриншоте выше — минификации приложение почти не подвергалось (в плане переименования классов и методов). Плюс видно что кода на java очень немного и почти все место занимают so библиотеки.
Повтыкав какое-то время на список классов, я увидел любопытный класс MapImpl, навевающий подозрения что именно он виновник такой грустной ситуации с кастомизацией отображения меток.
Список методов и их сигнатуры внушали надежду что все будет очень просто, и я решил заглянуть в smali код, после чего сильно напрягся и пошел читать список команд smali, и как его читать/писать. Впрочем, именно на этом моменте я решил что дело обещает быть несложным и недолгим, а соответственно вот он, повод поиграться с реверсингом. Приняв для себя решение посвятить этому пару вечеров (как же жестоко я ошибался), пошел со спокойной душой спать ложиться.
Проснувшись с утра я решил что поскольку до этого момента никогда не занимался даже подменой ресурсов в приложениях, не то что изменениями логики, нечего мне замахиваться сразу на замену активити с картой, лучше приближаться к решению задачи маленькими шажками. После чего я составил себе небольшой список шагов который должен был привести меня в конечную точку моего путешествия в виде рабочей мобильной платформы с моими правками. Список этот выглядел следующим образом:
- Подготовить конфигурацию 1с для мобильной платформы вся функциональность которой заключается в отображении двух меток на карте.
- Распаковать apk мобильной платформы, запаковать без изменений, убедиться в работоспособности конфигурации.
- Внести небольшие изменения в smali файлы, не меняющие практически ничего, но которые можно было бы увидеть в логах или изменении логики работы, собрать и убедиться что это работает.
- Перегнать smali активности с картой в java, либо же написать активность с таким же интерфейсом, подменить активность в приложении без изменения функциональности. Как альтернативный вариант, если с первым разбираться будет лень или сложновато — написать класс, который будет выполнять часть работы за MapImpl и добавить вызов его методов из smali MapImpl.
- Написать эту статью (давно уже хотелось что-то написать, но другие идеи пока еще варятся в голове, а тут показалось что это наконец довольно достойная тема)
Ну, хорошо хоть с первым пунктом у меня проблем не возникло. Скачал бесплатную учебную версию платформы, скачал мобильную платформу, развернул все это у себя на компьютере (1С, сделайте вы уже версию учебную для linux, у меня как раз очередной порыв уйти с винды, а тут приходится часть работы в ней делать). Конфигурация очень простая, при запуске вызывает функцию ПоказатьНаКарте() в которую передает две точки на карте. Все.
А вот со вторым пунктом из-за моей неграмотности вышло грустнее. Да что уж там, проблемы были со всеми пунктами кроме первого.
Гугл мне сразу подсказал что есть такой отличный инструмент apktool позволяющий буквально двумя командами разбирать apk до .smali файлов, а так же собирать из них обратно. Им я и решил воспользоваться. Распаковал apk следующей командой (здесь и далее, несмотря на то что временами часть работы делал на linux, все команды буду приводить для windows):
и получил каталог 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, благо это оказалось не так ужасно как я боялся.
Чтобы понять, как мобильная платформа получает от десктопной платформы команду на запуск конфигурации при подключении по adb, я решил посмотреть точки входа в приложение и добавить вывод в логи интентов и прочей полезной информации. Начать решил с application ( com.e1c.mobile.E1cApplication ) и активности имеющей android.intent.action.MAIN в intent-filter ( com.e1c.mobile.App ). Также меня заинтересовал reciever com.e1c.mobile.Starter с интересным intent filter на com.e1c.mobile.START_TEMPLATE и com.e1c.mobile.START_CMD . Уж очень похоже на то что он принимает интенты с командами 1с, и именно он стартует конфигурацию из шаблона.
В E1cApplication ничего интересного к сожалению обнаружить не удалось, все что там происходит — установка своего хендлера на крэши.
А вот в двух других классах, Starter и App информации было гораздо больше и оказалась она довольно полезной. Метод App.onCreate(Landroid/os/Bundle;)V довольно большой, так что приводить его целиком не буду, приведу только заинтересовавшие меня части.
Из приведенного выше участка кода видно что приложение получает интент, кладет ссылку на него в регистр p1 , через StringBuilder дописывает к имени класса и метода и передает в статический метод V(Ljava/lang/String;)V класса Utils . Видимо какой-то свой логгер. После чего интент проверяется на наличие дополнительных данных, и, при наличии, из него получается Uri , из которого в свою очередь получается строка методом getQuery() и передается классу Starter . Дальше изучать onCreate смысла не видел, пробежался взглядом и убедился что действия довольно стандартные. Разве что вью вроде бы создается программно абсолютно другим классом, вместо использования LayoutInflater , но сильно глубоко я не копал, так что возможно все и не так как я подумал. Следующий класс куда я пошел — Starter . Благо он и в активити упоминался и в манифесте меня заинтересовал.
К сожалению тот метод что вызывался из активити, оказался нативным ( .method static native startCmd(Ljava/lang/String;)V ), потому обратил внимание на метод onRecieve (в котором приложение принимает интенты на которые подписано). Приводить код не буду, меня в нем заинтересовало что интент так же логигуется методом V(Ljava/lang/String;)V класса Utils . Получается что достаточно дописать немного smali кода в этот метод — и я получу свои логи, причем на тех же местах где их задумывали разработчики платформы. Перейдя в класс Utils я увидел сразу 2 пустых метода, V и W. Видимо пустые они потому как при компиляции релизной версии вырезались. Я просто дописал в них запись переданной строки в стандартный android.utils.Log . Для этого сменил количество требуемых локальных регистров с 0 до 1 (для строки тега), поместил эту самую строку в регистр v0 , а также прописал вызов методов Log
Запустил из 1с десктопной 1с мобильную и получил следующие логи
Как видим — есть вся необходимая информация для автоматизации запуска приложения через adb. Правда к этому моменту я словил двойной фейспалм. Во-первых, наконец подобрал ключи с которыми jadx осилил перевод в java (понятно что писать все равно в smali бы пришлось, но все же). А вторым фейспалмом оказалось то что я осознал что зря я мучаю платформу разработчика (нужна только для разработки и отладки конфигураций), правильнее было бы реверсить сборку релизов 1сных приложений, причем там есть полу готовые gradle проекты для сборки, есть файл с перечнем зависимостей и другие плюшки. Я немного по этому поводу погрустил — и решил все таки закончить с тем что начал. Все равно ради фана делаю все это, а не ради практической пользы.
Автоматизировать установку и запуск через adb приложения я решил с помощью gradle. Все равно к тому моменту у меня уже был написан небольшой перечень тасок (распаковка, копирование модифицированных ресурсов и smali файлов в каталог с распакованным приложением, упаковка, подпись, по сути все таски просто раннеры для команд консольных). К существующим таскам добавил выполняющие следующие команды
Перечисленной выше последовательностью команд мы устанавливаем apk, даем установленному приложению разрешение на чтение диска, копируем конфигурацию 1с на устройство, и даем команды на запуск 1с и загрузку конфигурации. Работает это кстати не на всех версиях андроида, но я тестировал на api 28, и соответственно на нем эта последовательность делает все корректно. На младших версиях могут быть проблемы с выдачей прав.
Тут у меня было несколько вариантов дальнейшего развития событий.
- Правлю напрямую MapImpl.smali, что обещало быть довольно сложным занятиям учитывая что библиотека для работы с гугл-картами довольно серьезно минифицирована, да еще и в синтаксисе smali все писать пришлось бы.
- Использую полученный благодаря jadx файл MapImpl.java, вношу правки в него, используемые в нем классы подменяю на заглушки, перегоняю в smali, подменяю файл, упаковываю. Вариант показался мне напряжным так как уж больно много заглушек пришлось бы городить, к тому же с некоторыми из них были проблемы с которыми у меня не было желания ковыряться.
- Комбинирую подходы 1 и 2, вставляю в smali код вызовы специального класса расширения MapImplExtenstion.java который расширяет часть логики — в итоге выбрал этот вариант, просто потому что он проще первого и второго вариантов, и показался мне пусть возможно чуть более сложным чем вариант 4, но зато менее трудоемким (угу, мечтай, наивный).
- Вообще заменить гугл карты на что-то другое, например яндекс. Сделать всю работу в другом проекте, просто повторив сигнатуры MapImpl, затем минифицировать распаковать, и просто закинуть готовые smali файлы перед упаковкой приложения на соответствующие места. Никаких проблем с минифицированными библиотеками, но пришлось бы регистрироваться для получения ключа для карт, создавать отдельный проект, заморачиваться со стыковкой ресурсов и прочее.
- То же что вариант 4, но заменить гугл на… Гугл. Но тут у меня были подозрения что удастся минифицировать 1 в 1 maps sdk, а ставить эксперименты не было желания.
Используя jadx для декомпиляции в java нашел в декомпилированном коде метод отвечающий за их заполнение
Соответственно у класса MapImplExtension добавил метод ArrayList[] kN(String[] titles, double[] coordinates) который в первом элементе массива вернет список который нужно будет поместить в Xj, а во втором список для Xk.
Скомпилировал следующими командами сначала в class, затем в dex, затем декомпилировал в smali чтобы потом упаковать вместе с остальными файлами
Добавил в MapImpl.smali поле extension типа нашего нового класса, и добавил его инициализацию
А также заменил обработку в классе MapImpl данных от 1с на обработку в классе MapImplExtension
Запаковав и запустив приложение — я радостно увидел что все работает. Но на данный момент я не сделал ничего такого что именно расширило бы возможности мобильной платформы. Просто подменил заголовки у меток на карте. А вот захотев изменить изображения меток я здорово обломался и зарылся довольно надолго в исходники и документацию.
Сначала немного пояснений как вообще устанавливается маркер для метки. У класса MarkerOptions есть метод public MarkerOptions icon (BitmapDescriptor iconDescriptor) в который передается объект созданный одним из статических методов класса BitmapDescriptorFactory .
И вот здесь собственно меня ждал облом. Поскольку 1с это дело не использует — соответствующие классы были просто вырезаны при минификации. Пришлось их восстанавливать, и было это больно и долго. Точнее классы то были, но были переименованы и не содержали нужных методов. Путем ковыряния в сорцах полной библиотеки для работы с картами — по сигнатурам и константам выяснил соответствия классов библиотеки классам приложения, добавил необходимые методы и поля, пересобрал, и порадовался что этот квест наконец закончил, поскольку все наконец то заработало, пусть и не с первой попытки (несколько раз косячил с сигнатурами и путал минифицированные классы).
Результат (внешне не сильно впечатляющий). Выбраны методом тыка две точки с координатами (45;45) и (46;46)
Поскольку объем измененного кода довольно большой — включать в статью его не буду, приведу только изменения сигнатур. Если кому интересны все правки которые я сделал на этом шаге — можете посмотреть в этом коммите.
Подводя итоги — опыт был довольно интересный. По крайней мере для меня. Помог разобраться с некоторыми инструментами, узнал немного лучше о работе андроида и формате байткода для dalvik/art, опыт ковыряния минифицированного кода тоже будет полезен (уже был случай когда в релизной версии R8 вырезал поля класса которые на самом деле использовались, в тот раз только методом тыка разобрался, сейчас бы это проблем не доставило).
Если кому-то интересно самому все повторить и возможно расковырять еще больше — я выложил на github все исходники вместе с кривым gradle скриптом осуществляющим сборку из исходного apk модифицированного.
Если у Вас сворачивается или безвозвратно закрывается 1с во время работы – это тревожный знак. Кроме того, что эта неприятность не даёт нормально работать в программе, сворачивание и выкидывание из 1с ведёт к повреждению базы 1с. Если у вас недавно появилась данная проблемам связанная с закрытием 1с в процессе работы – спешите прямо сейчас сделать резервную копию базы!
1) Неисправность компьютера. Ваш ноутбук может иметь проблемы аппаратного характера. Выявить этом может специалист использую специальные программы для диагностики (aida64, victoria, crystal disk mark, memtest, ati tool, blue screen view и другие). Если во время работы в 1с вылетает синий экран смерти. То это является признаком того что ваш компьютер или ноутбук – неисправны. BSOD (blue screen, грустный смайлик, экран смерти) – появляется в случае ошибки памяти (видеопамяти, ПЗУ, ОЗУ итд).
2) Если ваш компьютер не удовлетворяет требованиям 1С. Параметры компьютеров для современных программ 1с Розница, Управление торговлей, Бухгалтерия, Зарплата и кадры, Комплексная автоматизация, УНФ – довольно высокие. Признаком того что ваш компьютер недостаточно мощный – является выкидыванием из платформы 1с. Чтобы исключить возможность данной причины в вашем случае, убедитесь, что ваш компьютер соответствует рекомендуемым системным требованиям 1С (8 гб ОЗУ, двух-ядерный современный процессор, SSD накопитель с достаточным объемом).
3) Проблема в операционной системе вашего компьютера. Windows, Linux, MacOS и другие ОС компьютера имеют изъяны. При появлении проблем с программным обеспечением так же могут возникать «выкидывания» из программы. Радикальным способом устранения этой неисправности является переустановка операционной системы (переустановка Windows, если ваш компьютер работает на программном обеспечение Microsoft). Если переустановить ОС возможности нет, постарайтесь вспомнить в какой момент возникла проблема с выкидыванием 1с. Посмотрите какие программы вы скачивали, устанавливали и настраивали в данный период времени. Удалите или перенастройте софт.
4) Проблема в разрядности операционной системы, платформы 1с или драйверов торгового оборудования. Данная проблема очень редкая. Возникает в несоответствии битности программного обеспечения (битности x86 и 64). Исправлением является переустановка драйверов и платформы 1С.
5) Проблема с доступом к другому компьютеру по сети, где храниться база 1С. Данная проблема возникает если вы работает по сети в офисе или через интернет. Проверку данной проблемы сможет произвести опытный системный администратор использую командную строку CMD и команду ping. Так же он сможет выявить подозрительное (не исправное) сетевое оборудование.
6) Проблема с доступом к сетевому хранилищу или внешнему жесткому диску. Данная проблема возникает в случае если вы работает по сети, аналогична проблеме №5.
7) Проблема с доступом в интернет. Возникает если вы работаете через удаленный сервер, облачное хранилище, веб-сервер. В момент работы базы данных выкидывает. Системный администратор сможет проверить возможные микро потери в сеть интернет, которые вы визуально не замечаете.
8) Проблема с платформой 1с и её совместимость с конфигурацией. В этом пункте сразу несколько проблем. Конфигурация 1С 10.3 может работать с версией платформы 8.3.13.хх. При входе в случайный документ Управление торговлей 10.3 выкидывает, если платформа выше версий. Так же может быть «заключённая платформа», которую следует переустановить. Кроме этого может быть проблема с лицензией (которая устанавливается на платформу). А так же может быть пробелам ИТС. Редкий случай, когда при отсутствии купленной подписки информационно-технического сопровождения платформа 1с выкидывает на рабочий стол.
9) Проблема с SQL серверов или другими службами на сервере 1с. Если вы используете Сервер 1С предприятие, то на нем установлены различные службы без которых 1с работать, в привычном для вас режиме не заработает. SQL, web-server, iis, RDP – в каждом из них может крыться проблема. Устранить её можно обратившись к администратору сервера.
Восстановить базу можно через интернет дистанционно! Данную услугу недорого готовы выполнить специалисты нашей компании.
Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.
Реализовано в версии мобильной платформы 8.3.18.47
На текущий момент единственный способ запустить мобильное приложение, созданное на мобильной платформе 1С (или мобильный клиент 1С), не нажимая непосредственно на иконку приложения – через PUSH или локальное уведомление.
В версии мобильной платформы 8.3.18 появится возможность запускать мобильное приложение "1С:Предприятия" (приложение, созданное на мобильной платформе 1С, или мобильный клиент 1С) из другого мобильного приложения или с использованием некоторого URL.
Эта возможность может потребоваться для решения различных задач интеграции мобильных приложений (как внешних приложений и сервисов с мобильными приложениями 1С, так и мобильных приложений 1С между собой).
В частности, появятся новые возможности:
Вызов конкретной функции мобильного приложения из другого приложения.
Возможность использовать некоторый URL для того, чтобы открыть мобильное приложение на конкретном объекте или функции.
Примеры сценариев использования новой функциональности:
Пользователю присылается в Документообороте (например, в письме, или через Систему взаимодействия) ссылка на документ в Клиенте ЭДО. При нажатии на ссылку запускается мобильное приложение "Клиент ЭДО" и открывается требуемый объект.
Для реализации возможности вызова мобильного приложения из другого приложения, используются глубинные ссылки (deep linking) и механизм глубинного связывания. Глубинная ссылка - это URL, который указывает на какой-то ресурс на сайте или в приложении. А глубинное связывание - это механизм, который позволит мобильной операционной системе связать URL и мобильное приложение, установленное на устройстве.
Глубинная ссылка может быть сформирована двумя способами:
С использованием собственной схемы (например, myfuncapp://). В этом случае URL для вызова будет иметь вид myfuncapp://comand?params.
В модуле приложения добавлена возможность реализации нового обработчика:
ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке, СтандартнаяОбработка) |
Пример использования механизма
После установки на мобильное устройство приложение регистрирует в мобильной операционной системе глубинные ссылки, которое оно (приложение) может обрабатывать.
Когда пользователь выполняет переход по глубинной ссылке, мобильная операционная система определяет, какое приложение обрабатывает эту ссылку.
Найденное приложение запускается, и используемая глубинная ссылка передается в это приложение для разбора самим приложением.
В мобильном приложении срабатывает обработчик события ОбработкаПереходаПоНавигационнойСсылке, который и получает на вход глубинную ссылку, которая привела к запуску мобильного приложения.
Запуск мобильного приложения 1С в Android через механизм намерений (intent)
При запуске мобильного приложения 1С через URL мы можем передавать дополнительные параметры только в строковом виде. К тому же существует ограничение на длину URL (оно зависит от конкретной версии ОС).
В ОС Android мы дополнительно поддержали возможность запуска мобильных приложений 1С из других приложений через механизм намерений (intent). Это позволяет передавать в приложение различные типы данных (например, массивы), что увеличивает объем передаваемой в приложение информации.
Запуск = Новый ЗапускПриложенияМобильногоУстройства("android.intent.action.VIEW",
"myappfunc://testPath?key1 key2", СтроковыйПараметр);
Если Запуск.ПоддерживаетсяЗапуск() Тогда
- В настоящий момент поддерживается только действие android.intent.action.VIEW.
- Схема myappfunc:// должна быть указана как поддерживаемая для ОС Android в собираемом мобильном приложении.
- Числовой параметр с идентификатором key1 передается непосредственно в URL глубинной ссылки.
- Строковый параметр key2 передается путем явного указания параметра в списке дополнительных данных объекта, описывающего вызов намерения.
Процедура ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке,
СтандартнаяОбработка)
У всех пользователей, которые работают с базой, происходит то же самое, но у кого-то гораздо реже.
До обновления последнего релиза платформы — вылетов не было.
Версии операционных систем обоих ПК отличаются, ПК сервер — Windows 7, ПК клиент — Windows XP SP3.
Если посмотреть журнал Windows «Приложение», то там имеются такие записи об ошибке:
Код исключения: 0x40000015
Смещение ошибки: 0x000a327c
Путь сбойного приложения: C:Program Files1cv8in1cv8.exe
Путь сбойного модуля: C:Program Files1cv8inMSVCR110.dll
Такие ошибки в журналах обоих ПК( если сравнивать любой ПК сети и сервер после возникновения ошибки).
Модуль MSVCR110.dll относится к пакету «Microsoft Visual Studio 2012», и его переустановка не решает проблему.
Изменение версии платформы 1С (на более раннюю или переустановка этой же версии) тоже решения не даёт, вылетает что на самой последней, что на предыдущих. Скорее всего пролема была и раньше, но не так часто.
Загрузка — выгрузка базы не меняет ситуации. Настройка запуска в качестве толстого клиента также не решила проблему. Также ни утилита исправления ошибок chdbfl, ни «тестирование и исправление» в конфигураторе не решили проблему.
Путём перебора множества различных вариантов, мыслей и манипуляций выяснилось, что проблема оказалась в пути к базе . Он содержал не латинские символы, пробелы и был относительно длинным.
Решение:
Решением стал перенос базы в другую папку на том же ПК, но имя которой и путь к ней не содержали ничего кроме латиницы, не содержали пробелов, а путь был очень коротким (корень диска). Папка базы была расшарена по сети по всем правилам (полный доступ на запись и пр.).
После таких изменений вылеты прекратились.
Причина:
Предположительно возникает конфликт в доступе к файлам по сети, при использовании компонентов «Microsoft Visual Studio 2012» при наличии не латинских символов в пути к этим файлам.
Читайте также: