Qtaudioengine что это за файл на андроиде
«Это одна из последних статей на тему отключения различного программного хлама в MUI 12 на базе Android 10. Нам осталось отключить ещё около 5 приложений и сервисов, которые впустую тратят мобильный интернет, оперативную память и заряд батареи, после чего, я выпущу статью с финальным списком и пресетом для ADB App Control и перейду к изучению Android 11.
Как показывают отзывы читателей, многим удалось значительно улучшить работу своих смартфонов, чему я очень рад и надеюсь, что эта статья тоже окажется вам полезной».
Бонус №1
Первое и самое важное: реальная кроссплатформенность.
Суть: после того, как ребята из SQLite портировали своё детище под WP, а скромный автор сего произведения указал на это ребятам из Qt, в порт Qt для WP был добавлен LocalStorage. Это счастье для всех любителей Qml.
Вы реально можете создавать приложения из одних исходников, реально под кучу платформ, при этом кастомизировать их в нужных местах исходя из возможностей и необходимостей платформы. Декларативный UI и js затягивают настолько сильно и позволяют писать настолько лаконичный код, что возвращаться после него на многословную Java + xml, либо спорный Swift + Storyboard'ы нет никакого желания.
Любые анимации, поддержка кастомных шрифтов, svg — это ли не счастье для мобильного разработчика?
Проблема больших ресурсов
Непосредственно mp3-файлы медитаций было решено поместить в ресурсы приложения, а именно в QRC. Файлы занимают порядка 10-15 мб каждый. Последующая компиляция вызвала у меня недоумение — она длилась дольше, а использование ОЗУ процессом в пике подскочило до 15 Гб. Оказалось, что для больших ресурсов существует специальная, слабодокументированная опция pro-файла:
Она помогла мне, и, надеюсь, поможет читателю в трудный час.
Проблема №5
Пятое и самое спорное: продвинутые контролы Qml — Camera и иже с ними.
Суть проблемы: частые краши, нехватка функциональности и прочие несоответствия стандартного пользовательского опыта нативных приложений. Лечится это всё очень просто — не стесняйтесь добавлять нативные компоненты (Activity в случае Android) в своё приложение. Да, от этого его кроссплатформенность снизится, а количество кода увеличится, но оно того стоит.
Начнём с простого
Приложение «Smart-Divert» присутствует во многих смартфонах с двумя Sim-картами и если говорить простым языком, служит для того, чтобы в момент когда вы говорите по одной симке, а на вторую поступает входящий звонок, происходила переадресация.
Но его бессмысленность, заключается в техническом устройстве наших гаджетов, ведь в большинстве из них установлен только один радиомодуль, следовательно, он физически не может поддерживать одновременную работу двух Sim-карт. Проверьте есть ли это приложение в вашем смартфоне, воспользовавшись поиском в пункте "Все приложения". Только показ системных включить не забудьте.
Как вы видите, «Smart-Divert» постоянно находится в активном состоянии, расходуя ресурсы системы и оперативную память, которой как известно, много не бывает.
Поэтому я рекомендую отключить его, через уже знакомое вам приложение ADB App Control (если не знаете что это, ссылка на статью будет ниже). Замечу, что на всех своих смартфонах это приложение я отключил и никаких сбоев в работе не обнаружил.
Перед тем как я перейду к «вишенке на торте», небольшая предыстория: Обратился ко мне человек с проблемой плохой работы определения местоположения после одного из последних обновлений. Перепробовали всё, и местоположение Google отключали, и данные A-GPS чистили - результата ноль.
В итоге, на одном из форумов я вычитал, что проблема может крыться в приложении «LocationServices» от Qualcomm. А зайдя на своём смартфоне в «Настройки» —> Приложения —> Все приложения —> Три точки (Показать все приложения), обнаружил что оно постоянно висит в фоне и потребляет (в моём случае) 272 Мб оперативной памяти.
Начал интересоваться и выяснил, что работа GPS после отключения этого сервиса, остаётся такой же как была (подтверждение ниже).
На всех своих смартфонах Xiaomi я его отключил, весь день пользовался навигатором, тестировал приём спутников - никаких проблем нет. В итоге проблема обратившегося человека была решена, а в добавок ко всему, я нашёл ещё одну службу, которая расходовала достаточно большой объём памяти.
Более того, после отключения (в моём случае) расход аккумулятора, заметно уменьшился и уже потом я прочёл, что статистика расхода батареи «LocationServices» входит в строку «Система Android».
Можете последовать моему примеру и отключить её на своём смартфоне через ADB App Control, тем более, любое отключённое приложение можно восстановить без проблем.
Имена пакетов для отключения в ADB App Control (скопируйте в поисковую строку): Smart-Divert - com.qti.xdivert, LocationService - com.qualcomm.location
Краткое лирическое вступление — в 2017 году мне случилось очень плотно заинтересоваться медитациями. Этому способствовала целая цепочка событий, благоприятных и не очень. Я долгие годы интересуюсь и практикую осознанные сновидения, однако конкретно медитациями в их каноническом виде до этого заниматься не приходилось. В эти дни многие истории начинаются в баре (с) увлечения начинаются с поиска в Google, вот и я начал именно так. Практически сразу нашлись топовые по популярности приложения для занятия медитацями — Calm и Headspace.
Первое послужило неплохое отправной точкой (отличные обучающие медитации для начинающих), второе я не нашел для себя полезным, не понравилась подача. Оба оттолкнули своими платными (и надо сказать весьма дорогостоящими для РФ) тарифными планами. Возможно я просто не отношусь к категории людей, которым нужно заплатить, чтобы подбадривать себя чем-то заниматься :) Продолжная изучать Google play, я наткнулся на два близких мне по духу бесплатных приложения. Первое это "Let's Meditate" — я пользуюсь им по сей день, о втором речь пойдет в теле статьи.
Итак, после достаточно долгих поисков нашлось совершенно неприметное приложение, называлось оно тогда, если не ошибаюсь, "Медитации. Антонов Александр". Как выяснилось, в нем можно было прослушать четыре авторские медитации, записанные и оформленные, собственно, Александром, с которым мы в дальнейшем познакомились и подружились. Приложение он собрал буквально из подручных средств самостоятельно, это было что-то вроде самодельного SPA с помощью WebView без каких-либо фреймворков, практически на "голом" HTML и минимально на Java. Выглядело оно так себе, да и некоторые функции просто отсутствовали (например, нельзя было перемещаться по записи, а только включить с начала). Поскольку мне очень понравился сам контент, я предложил Александру свою безвозмездную помощь в облагораживании приложения, чтобы, так сказать, "отдать что-то назад" по принципу "помогли мне, помогу и я". В теле статьи я постараюсь рассказать, с какими проблемами мы столкнулись при разработке, какие решения были приняты, и что получилось в конечном итоге! Надеюсь, отдельные рецепты статьи будут кому-либо полезны, а чтиво интересным :)
Итак, мы поставили перед собой цели:
- Сохранить оригинальный функционал приложения
- Улучшить UI приложения и UX пользователя
- Обойтись минимальной сложностью реализации
Резюмируя вышесказанное — возникла необходимость быстро сделать приложение с достаточно скромным функционалом (пока), код которого был бы понятен человеку с начальным опытом программирования на PHP/HTML. Размышлял я, откровенно говоря, недолго, выбор пал в пользу Qt, поскольку:
- У меня уже был большой опыт разработки на Qt (под Symbian, MeeGo, Ubuntu Phone и немного под Android);
- Возможность прозрачной разработки на десктопе, с последующей чистовой проверкой на целевом устройстве;
- Приложние можно создать на чистом QML, без использования C++. Наверняка читатель знает, но уточню — это JavaScript-like язык разметки, в нем может разобраться и любитель;
- В перспективе возможен прозрачный релиз на iOS (без доработки кода).
Забегая вперед могу сказать, что это было правильное решение — мы оба сошлись на этом, выпустив два крупных релиза приложения.
Кэширование изображений
Загрузка аудиозаписей для оффлайн прослушивания является необходимостью, из-за которой пришлось пойти на намеренное усложнение приложения. Однако помимо аудио у медитаций есть еще один присущий им элемент — иконка. Она тоже хранится на сервере, и если каким-то специальным образом ее не загрузить, то в оффлайне она показываться не будет. Отдельные шаги по загрузке иконок в пайплайн скачивания медитации вставлять не хотелось, поэтому было принято решение зайти с другой стороны. Движок QML позволяет задать фабрику для сетевых менеджеров (QNetworkAccessManager). Это дает возможность подсунуть движку свой менеджер с правильными настройками кэширования. Делается примерно следующим образом:
Т.е. менеджерам с помощью setCache настраивается кэширование, а в переопределении createRequest настраиваются детальности настройки кэширования для каждого запроса. У меня в реализации очень просто — всегда предпочитается сеть, иначе кэш.
База данных
Совершенно неотвратимой стала необходимость хранения перечня загруженных медитаций. QML позволяет из коробки воспользоваться LocalStorage, а именно полноценной SQLite. Всю работу с БД удобно вынести в отдельный JS-файл, который затем импортируется в QML, например:
Непосредственно работа с БД осуществляется примерно следующим образом:
Т.е. открывается соединение, затем в функцию transaction передается callback. Он будет вызван синхронно (и это хорошо, потому что в Qt другие средства для обеспечения асинхронности).
Отдельно стоит рассмотреть тему версионирования. Функция openDatabaseSync подразумевает передачу версии вторым параметром. Это сделано для того, чтобы можно было открыть БД разных версий (не уверен, часто ли это бывает нужно на практике). Однако с помощью это особенности легко реализовать процедуру миграции БД. Дело в том, что если передать пустую строку, то откроется БД самой последней версии, которую уже можно догнать до целевой. Я организовал миграции как тройки ["версия с", "версия на", "код миграции"]:
При запуске приложения открывается база, затем на ней прогоняются нужные миграции (с небольшой особенностью реализации — в виде бесконечного цикла, пока хоть какие-то изменения происходят).
Загрузку и сохранение аудиозаписей в память устройства не реализовать с помощью QML, поэтому пришлось прибегнуть к помощи C++. Я взял реализацию менеджера загрузок из своего клиента Яндекс.Диска для Ubuntu Phone. Он умеет скачивать или закачивать одномоментно по одному файлу. Очередь операций в клиенте и в текущем приложении была реализована на QML в пользу все того же аргумента — простоты и стабильности реализации. Сделать видимым свой C++-объект в QML всегда было просто:
В QML теперь можно написать что-то вроде:
Так же понадобились несколько утилитарных C++-функций, их я организовал в QML-ный singletone :
Т.е. создается специальный класс, у которого есть функция получения синглотна cppUtilsSingletoneProvider , а нужные методы обозначены как Q_INVOKABLE — это позволяет "видеть" их из QML. В QML используется вот так:
Прочее
Вопрос проигрывания аудио был решен с помощью Qt Multimedia, а именно типа Audio . Он умеет проигрывать mp3, не выключается при блокировке экрана, поддерживает операцию перемотки — это все, что было на нужно на тот момент:
Настройки решено было хранить в нестареющем Settings из Qt.labs.settings (серьезно, не понимаю, почему он никак не вырастет из labs):
Обновленная версия приложения увидела свет в начале 2018 года, аудитория встретила ее очень тепло.
Собственно, спустя примерно два года, в конце апреля 2020, мне пришла идея доработать в приложении функционал, который когда-то задумывался, но так не увидел свет — загрузку дополнительных медитаций (я уже заспойлерил эту опцию на скриншоте выше). За это время у Александра накопилось несколько новых записей, а у меня — благодаря карантину — немного свободного времени :)
Проблема №1
Первое и самое главное на сегодняшний момент: если вам нужно много работать с текстом, вводимым пользователем — не выбирайте Qt/Qml!
Крайне не люблю восклицательные знаки, но тут этот знак на своём месте: вам будет крайне сложно реализовать привычное для пользователей целевой платформы работы с полями ввода, а именно:
Возможно кто-то скажет, что я слишком многого хочу и TextEdit/TextInput это базовые компоненты, но, извините меня, отсутствие Copy & Paste в базовых компонентах и отсутствие его реализации в Controls не будут вам доставлять проблем до первого замечания Заказчика.
TextEdit не содержит сигналов работы с указателем, типичных для MouseArea, поэтому попытка реализовать показ контекстого меню через долгое нажатие (PressAndHold в терминах Qml) успехом не увенчается. Кроме того, попытка в лоб обернуть поле ввода в MouseArea подходит лишь для ограниченного числа сценариев, т.к. вам придётся долго и упорно реализовывать выставление курсора между буквами и словами.
Поэтому, остаётся либо лезть в исходники и кастомизировать поле ввода, либо смириться.
Построение и компоновка UI
Хороший разработчик и хороший дизайнер редко сосуществуют в одном теле, поэтому пришлось конкретно попотеть, чтобы придумать нечто симпатичное и удобное. Медитации в приложении для прослушивания медитаций должны занимать центральное место, поэтому я придумал большую и заметную кнопку, на которой разместились иконки отдельных медитаций. В дальнейшем мы ее не меняли, она стала своего рода сигнатурной для нашего приложения. В итоге получился вот такой интерфейс главной (светлая и темная темы):
Все компоновку элементов интерфейса я делал и рекомендую делать "винтажными" anchors, Row, Column и Repeater. Это немного многословная, однако очень предсказуемая и хорошо себя ведущая на мобильных устройствах технология позиционирования элементов UI. Привожу код кнопки, в котором есть все описанные выше средства (самый большой листинг статьи):
В коде UI есть магические константы, и до поддержки HDPI в Qt приходилось оборачивать их в вызовы специального транслятора. Сейчас такой проблемы нет, нужно всего лишь включить нужную опцию Qt: QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); . Ввиду этого все константы решено было оставить "как есть".
Upd 31.03.2016 16:53
Спасибо пользователю zsilas за наводку на интересную библиотеку QtOffscreenViews от команды 2gis, которая решает проблемы с вводом текста и показом emoji в полях ввода.
Обладатели смартфонов с небольшим количеством внутренней памяти часто задумываются о том, чтобы освободить заветные мегабайты памяти за счет удаления некоторых системных папок и приложений. Ведь именно из-за файлов операционной системы, пользователь получает только 10-12 гигабайт встроенной памяти вместо 16, указанных в характеристиках. Стоит понимать, что удаление системных файлов и приложений может повлечь за собой массу проблем, вплоть до превращения устройства в «кирпич» и необходимости его перепрошивать.
Поэтому в последних версиях Android пользователь даже не сможет увидеть системные файлы, не говоря о том, чтобы их удалить. Для того чтобы получить к ним доступ, понадобится «взломанный» смартфон, то есть с наличием root прав. Самые популярные утилиты для получения прав администратора - Vroot, Framaroot и King ROOT в комбинации с файловыми менеджерами, которые позволяют просматривать корневые папки системы. Далее мы поговорим о том, какие файлы и приложения можно трогать, а к каким категорически нельзя приближаться.
Иерархия системных файлов
Во всех версиях операционной системы Android существует 6 основных папок, в которых хранятся все важные компоненты и информация для корректной работы смартфона. Поэтому сейчас поговорим о том, что представляет собой каждый из этих разделов и почему их не стоит трогать.
- Boot – в ней содержится ядро запуска, драйвера и виртуальный RAM диск. Имеет небольшой размер. Без этой папки смартфон просто не включится, так как будет отсутствовать и алгоритм и настройки запуска.
- Cache – здесь хранятся файлы и компоненты часто использующиеся другими приложениями, в том числе системными. Иногда с файлами в данной директории возникают различные ошибки, из-за чего устройство начинает сбоить. В таких случаях в вызываемом при запуске системном меню существует возможность очистить Cache.
- Data – единственный раздел, который доступен пользователю без наличия расширенных прав. В нем хранится вся информация, которую человек заносил на смартфон: контакты, приложения, музыка, фото и многое другое. В других вариациях данный раздел может быть разделен на Data и SDcard.
- Recovery – в этой директории хранятся файлы для восстановления системы в случае поломки. Здесь находится альтернативное ядро запуска, а также несколько консольных приложений для обслуживания девайса. Поэтому, в случае, если эта папка будет удалена: сбросить смартфон к заводским настройкам или очистить cache – более будет невозможно.
- System – самая большая папка, которая в основном занимает около 1 гигабайта места и чаще всего многие так и хотят ее удалить. Именно здесь содержится образ операционной системы, графический интерфейс и все предустановленные программы.
- Misc – прочие настройки, которые имеют временный характер. Например, здесь хранится информацию о том, включен Wi-Fi на данный момент или нет. Также содержится переключатель, по которому система определяет в каком режиме включать устройство: Recovery или обычном.
Важные системные приложения
Теперь вкратце поговорим, о важных программах предустановленых в систему, которые не стоит трогать. Названия программ будут использоваться на основе Android 8.0.
- Интерфейс и «Оболочка» – графическая оболочка;
- Система Android – процесс работы ОС;
- Сервисы Google – отвечает за синхронизацию с программы Google;
- Bluetooth – отвечает за работу Bluetooth;
- Google Play – магазин Google;
- Установщик сертификатов – проверяет подлинность приложений и компонентов;
- Настройки – отвечают за настройку смартфона;
Это только основные компоненты, названия которых могут отличаться в зависимости от модификаций производителя. Стоит понимать, что удаление любой программы может повлечь за собой ряд проблем, так как даже если данное приложение не используется, к нему могут обращаться другие сервисы.
Если у вас есть Android смартфон или планшет, то наверняка вы не раз слышали термин APK , и скорее всего задавались вопросом, что он значит.
В этой статье я хочу рассказать простыми словами, что это такое, зачем нужны APK-файлы и почему они могут быть опасны.
APK – расшифровывается, как A ndroid P ac k age и по своей сути является форматом файла для распространения и установки приложений и игр на устройствах под управлением мобильной операционной системы Android.
Более знакомым аналогом APK-файлов являются EXE-файлы на компьютерах с Windows , с которыми вы уж точно имели дело. Если совсем просто, то, что первые, что вторые – это установочные файлы программ, игры и приложений.
Как и в случае с EXE-файлами на Windows, вы можете перебросить или загрузить APK-файл приложения на свой смартфон или планшет, а затем установить его.
Для чего используются APK-файлы?
В этот момент многие могут спросить: зачем мне какие-то файлы, когда я могу установить все, что мне нужно непосредственно с магазина приложений Google Play.
Вы правы, но только отчасти.
Дело в том, что многие разработчики по тем или иным причинам не публикуют свои приложения в магазине. Например, их приложение не соответствует правилам и критериям Google.
Во-вторых, размещая приложение в магазине, ранее разработчики обязаны были отдавать 30% от всех транзакций, сделанных в приложении. Сейчас этот процент сокращен вдвое.
Предположим, вы разработали какую-то интересную игрушку, в которой можно покупать что-то за реальные деньги. Каждый раз, когда кто-то будет совершать покупку в вашем приложении – Google будет забирать себе процент. А в некоторых случаях это уж слишком большие суммы, и делиться готов далеко не каждый разработчик. Поэтому, они размещают APK-файл приложения на своем сайте, откуда предлагают его скачать.
Резюме
Начиная новый проект стоит прежде всего правильно для себя оценить границы развития этого проекта. Если в нём мало работы с нативными возможностями платформы и много нестандарта — используйте Qt. Если же наоборот — подумайте, сможете ли вы его доработать так, как вам нужно.
Спасибо за внимание! Поделитесь своим опытом использования Qt в разработке мобильных приложений в комментариях.
Сборка под Android
Для сборки потребуется SDK и NDK. По опыту рекомендую проделывать в Linux-подобных операционных системах, поскольку под Windows периодически что-то отваливается или ломается (например, в недавнем порыве сделать все удобным и прозрачным, в QtCreator 4.12 сломали возможность указать путь к NDK, пришлось шаманить с путями). В последних версиях NDK используется Clang. Собрать можно как arm_v7 (32 бита), так и arm_v8a (64 бита; Google play с 2019 года требует обязательно предоставлять такую сборку). Собранные приложения без проблем заливаются в Google play.
Релиз второго крупного обновления произошел буквально на днях, поэтому пока непонятно, как отреагировала аудитория.
- Qt отличнейшим образом себя показал как инструмент для разработки pet-проектов, для некоммерческой разработки под Android. Мы очень быстро итерировались и проверяли идеи;
- Получившееся в результате приложение AMeditation (или как написано в UI маркета "Медитации 2.1. Антонов Александр") имеет порядка 10к+ загрузок и 250 отзывов, большинство из которых положительные (однако есть и отрицательные, некоторые пользователи недовольны качеством аудио, а ведь мы старались ужаться в небольшой размер ).
- Мы приятно провели время и, судя по отзывам, помогли множеству людей решить самые разные проблемы!
- Пока не релизнулись на iOS ввиду отсутствия яблочных устройств и разработческих аккаунтов.
В общем, разрабатывать на Qt весело, делать что-то бесплатно и для души — тоже!
На хабре то и дело мелькают статьи об успешном опыте использования Qt для разработки под Android, а также под iOS и WP. Статьи наполнены достаточно большим энтузиазмом — ведь это так здорово: пишешь и тестируешь UI на десктопе, а потом просто собираешь с помощью нехитрых команд под Android, iOS, WP, заливаешь в сторы и готово. В этой же статье я хочу поделиться опытом «собирания грабель» преимущественно при разработке под Android.
Qt я использую достаточно давно, начиная с версии 4.1. Не сказать, что я «профессионально» его использую, но опыт был разный — и работы с виджетами и эволюции до версии 5.6.
Некоторые примеры проектов:
- Пульт управления караоке-центром (Android/iOS)
- Русско-Татарский словарь с кастомной клавиатурой (Android/iOS/WP), тогда ещё даже API для iOS кастомных клавиатур не было
- Cоциальная сеть с разными примбамбахами под Android (гео, блютуз, чаты, фотки, профили и т.д.)
- Приложение для быстрого заказа цветов (Android/iOS/WP)
Бонус №3
Третье и самое любимое мной: скорость разработки.
Суть: в любом состоянии вы можете спроектировать UI практически любой сложности (исключая особенности взаимодействия с ОС, такие как поля ввода, обработка устройства ввода и т.д.). Если вы сам себе заказчик — то перед вами все дороги открыты.
Чем могут быть опасны APK-файлы?
Существует множество различных ресурсов (сайты, группы и т.д.) где размещаются APK-файлы всевозможных приложений. Причем зачастую подобные ресурсы предлагают загрузить бесплатно платное приложение .
Скачивать APK-файлы со случайных ресурсов – не лучшая идея. Потому что подобные загрузки могут нанести вред смартфону, так как они могут содержать вирусы, программы-шпионы и прочее недоброжелательное программное обеспечение. Ведь на такие сайты файлы загружают не их разработчики, а третьи лица, которые могут модифицировать файлы вирусами.
ВАЖНО! Поэтому, я настоятельно рекомендую скачивать приложения только из магазина Google Play, либо с тех ресурсов, которым безоговорочно доверяете!
На этом, пожалуй, все.
Если статья была для вас полезной или вы узнали что-то новое – не забудьте поставить «Нравится». А еще можете подписаться на мой блог, где я делюсь полезными хитростями, инструкциями и советами по Android.
Проблема №4
Четвёртое и самое трудноловимое: Шрифты
Суть проблемы: на разных девайсах каждый год всплывает одно и то же, симптомами похожее на закрытый баг. Вы не узнаете об этом, пока счастливый обладатель андроид-девайсана начнёт жаловаться на то, что шрифт плывёт, ломается, невидимый и т.д. В основном, это китайско-корейские девайсы.
Выход здесь только один — брать исходники Qt и патчить под конкретный GPU.
Интеграция
Проблема №3
Третье и самое раздражающее: Мерцание и BlackScreen'ы — ваши лучшие друзья.
Это будет сопровождать вас при загрузке приложения, при попытке выставить windowSoftInputMode в AdjustResize, куски чёрного экрана будут тоже периодически появлятся. Поэтому тестируйте, тестируйте и ещё раз тестируйте на реальных девайсах.
Ночной режим
Поскольку многие пользуются подобными приложениями в темное время суток, было решено реализовать "ночной режим". Я уже делал нечто подобное для приложения Shorts, там мы решили задачу очень просто, с помощью шейдера. Привожу код DarkModeShader.qml :
Используется он следующим образом:
Т.е. накладывается как эффект на котрол, включается или выключается опцией isNightMode . Благодаря связыванию свойств в Qt не понадобилась абсолютно никакого кода для включения/выключения ночного режима (кроме кнопки, конечно).
Бонус №2
Второе и самое любимое заказчиками: нестандартность.
Суть: фраза от заказчика, приводящая к желанию убивать — «Сделайте как на айфоне». Теперь это не проблема, везде будет выглядеть примерно одинаково. Да, это нарушение гайдлайнов, да, это нехорошо и никогда так не делайте, но заказчик хочет так и у вас три пути — убедить его, уступить ему или отказаться от него, выбирайте сами.
Кроме того, при достаточном желании можно подхачить исходники платформы, так, как нужно именно вам. Так, в нескольких приложениях мы просто насовсем отключали клавиатуру и писали свою на базе Qt Virtual Keyboard, тогда как встроенные приложения таких возможностей не имели.
Проблема №2
Второе и самое любимое заказчиками приложений, содержащий социализацию: Emoji
Суть проблемы: отсутствует нативная обработка любимых всеми смайликов, что в полях ввода, что в тексте — развивайте фантазию и реализуйте сами.
Узнать, что такое на самом деле Emoji и какова нелёгкая судьба их реализации в различных ОС вам поможет статья в Википедии. По факту же, какие есть варианты:
- Использовать шрифт с поддержкой символов Emoji. Используйте FontForge для компиляции Roboto с Emoji!
- RichText с заменой символов Emoji на цветные png'шки
- Глубокая кастомизация поля ввода (можете посмотреть в исходниках телеграмма для десктопа)
P.S. Забавная забавность — не выставляйте никаких inputMethodHints у поля ввода, иначе встроенная Android клавиатура с Emoji (iWinn IME) у вас просто не покажется.
Начнём с простого
Приложение «Smart-Divert» присутствует во многих смартфонах с двумя Sim-картами и если говорить простым языком, служит для того, чтобы в момент когда вы говорите по одной симке, а на вторую поступает входящий звонок, происходила переадресация.
Но его бессмысленность, заключается в техническом устройстве наших гаджетов, ведь в большинстве из них установлен только один радиомодуль, следовательно, он физически не может поддерживать одновременную работу двух Sim-карт. Проверьте есть ли это приложение в вашем смартфоне, воспользовавшись поиском в пункте "Все приложения". Только показ системных включить не забудьте.
Как вы видите, «Smart-Divert» постоянно находится в активном состоянии, расходуя ресурсы системы и оперативную память, которой как известно, много не бывает.
Поэтому я рекомендую отключить его, через уже знакомое вам приложение ADB App Control (если не знаете что это, ссылка на статью будет ниже). Замечу, что на всех своих смартфонах это приложение я отключил и никаких сбоев в работе не обнаружил.
Перед тем как я перейду к «вишенке на торте», небольшая предыстория: Обратился ко мне человек с проблемой плохой работы определения местоположения после одного из последних обновлений. Перепробовали всё, и местоположение Google отключали, и данные A-GPS чистили - результата ноль.
В итоге, на одном из форумов я вычитал, что проблема может крыться в приложении «LocationServices» от Qualcomm. А зайдя на своём смартфоне в «Настройки» —> Приложения —> Все приложения —> Три точки (Показать все приложения), обнаружил что оно постоянно висит в фоне и потребляет (в моём случае) 272 Мб оперативной памяти.
Начал интересоваться и выяснил, что работа GPS после отключения этого сервиса, остаётся такой же как была (подтверждение ниже).
На всех своих смартфонах Xiaomi я его отключил, весь день пользовался навигатором, тестировал приём спутников - никаких проблем нет. В итоге проблема обратившегося человека была решена, а в добавок ко всему, я нашёл ещё одну службу, которая расходовала достаточно большой объём памяти.
Более того, после отключения (в моём случае) расход аккумулятора, заметно уменьшился и уже потом я прочёл, что статистика расхода батареи «LocationServices» входит в строку «Система Android».
Можете последовать моему примеру и отключить её на своём смартфоне через ADB App Control, тем более, любое отключённое приложение можно восстановить без проблем.
Имена пакетов для отключения в ADB App Control (скопируйте в поисковую строку): Smart-Divert - com.qti.xdivert, LocationService - com.qualcomm.location
Краткое лирическое вступление — в 2017 году мне случилось очень плотно заинтересоваться медитациями. Этому способствовала целая цепочка событий, благоприятных и не очень. Я долгие годы интересуюсь и практикую осознанные сновидения, однако конкретно медитациями в их каноническом виде до этого заниматься не приходилось. В эти дни многие истории начинаются в баре (с) увлечения начинаются с поиска в Google, вот и я начал именно так. Практически сразу нашлись топовые по популярности приложения для занятия медитацями — Calm и Headspace.
Первое послужило неплохое отправной точкой (отличные обучающие медитации для начинающих), второе я не нашел для себя полезным, не понравилась подача. Оба оттолкнули своими платными (и надо сказать весьма дорогостоящими для РФ) тарифными планами. Возможно я просто не отношусь к категории людей, которым нужно заплатить, чтобы подбадривать себя чем-то заниматься :) Продолжная изучать Google play, я наткнулся на два близких мне по духу бесплатных приложения. Первое это "Let's Meditate" — я пользуюсь им по сей день, о втором речь пойдет в теле статьи.
Итак, после достаточно долгих поисков нашлось совершенно неприметное приложение, называлось оно тогда, если не ошибаюсь, "Медитации. Антонов Александр". Как выяснилось, в нем можно было прослушать четыре авторские медитации, записанные и оформленные, собственно, Александром, с которым мы в дальнейшем познакомились и подружились. Приложение он собрал буквально из подручных средств самостоятельно, это было что-то вроде самодельного SPA с помощью WebView без каких-либо фреймворков, практически на "голом" HTML и минимально на Java. Выглядело оно так себе, да и некоторые функции просто отсутствовали (например, нельзя было перемещаться по записи, а только включить с начала). Поскольку мне очень понравился сам контент, я предложил Александру свою безвозмездную помощь в облагораживании приложения, чтобы, так сказать, "отдать что-то назад" по принципу "помогли мне, помогу и я". В теле статьи я постараюсь рассказать, с какими проблемами мы столкнулись при разработке, какие решения были приняты, и что получилось в конечном итоге! Надеюсь, отдельные рецепты статьи будут кому-либо полезны, а чтиво интересным :)
Итак, мы поставили перед собой цели:
- Сохранить оригинальный функционал приложения
- Улучшить UI приложения и UX пользователя
- Обойтись минимальной сложностью реализации
Резюмируя вышесказанное — возникла необходимость быстро сделать приложение с достаточно скромным функционалом (пока), код которого был бы понятен человеку с начальным опытом программирования на PHP/HTML. Размышлял я, откровенно говоря, недолго, выбор пал в пользу Qt, поскольку:
- У меня уже был большой опыт разработки на Qt (под Symbian, MeeGo, Ubuntu Phone и немного под Android);
- Возможность прозрачной разработки на десктопе, с последующей чистовой проверкой на целевом устройстве;
- Приложние можно создать на чистом QML, без использования C++. Наверняка читатель знает, но уточню — это JavaScript-like язык разметки, в нем может разобраться и любитель;
- В перспективе возможен прозрачный релиз на iOS (без доработки кода).
Забегая вперед могу сказать, что это было правильное решение — мы оба сошлись на этом, выпустив два крупных релиза приложения.
Читайте также: