Подробно с демонстрацией своего кода рассказываю о том, как я реализовал в своем приложении на Kotlin добавление, редактирование, удаление и чтение событий из Google календаря при помощи Content Provider. Описываю "грабли", на которые наступал, не найдя в сети помощи и поддержки в тяжелое для себя время...
Разработка под Android *
Пишем под самую популярную мобильную ОС
Новости
Дайджест недели (мобильная разработка) – #1
Привет, Хабр! Каждую неделю, в своем телеграм-канале Mobile Native, я публикую дайджест с интересными и полезными материалами (новости, статьи, инструменты, библиотеки и т.д.) для мобильных разработчиков. Решил попробовать публиковать эту рубрику и на Хабре. Посмотрим, что из этого получится.
Android 🤖
• Dependency Inversion Principle: How Google Developers write code
• Как мы используем фича-флаги в мобильном приложении QIWI Кошелек
• Google запускает бесплатный курс Android Basics with Compose
• Опубликована программа Google I/O
• The first developer preview of Privacy Sandbox on Android
• Google Play запретил разработчикам загружать и обновлять платные приложения в России
• Learn Dagger 2 to Hilt for Android Easily in under 10 Minutes
• Jetpack Compose Dropdown
• S.O.L.I.D Principles (Examples in Kotlin)
• Kotlin-inline, crossline, noinline function and reified: Everything you need to know(Android) — Part 1
• 7 things to keep in mind while building jetpack composable’s.
• Architecture MAD Skills series wrap up
• Топ вопросов работодателю от Android-разработчика
• Isolate Koin Within an Android Module
• Kotlin, обрабатываем исключения в корутинах правильно
• The curious case of crashing Workers
• Material Components Android 1.6.0 Released
• Конвергенция в многомодульном приложении
• Passive Views: keep your UI code simple and stupid
• CI-CD: Firebase App Distribution with Fastlane on Android
• Creating reliable tests for Android notifications
iOS 🍏
• I replaced my native iOS app with a cross platform web app and no-one noticed
• Measuring app performance in Swift
• Types of memory in swift
• Improve Performance in Your iOS Applications — Part 1
• Swift 5.7: Unwrapping Optionals Gets an Improvement
• Clarifying criteria & new timing extension for App Store Improvements process
• Тест-ревью: как прошли два года написания unit-тестов
• Is It Possible to Have a Half-modal View in SwiftUI?
• Swift visitor design pattern
• Two Ways to Unit Test Notification Center in Swift
• Send Events from SwiftUI to UIKit and Vice Versa
• AsyncThrowingStream and AsyncStream explained with code examples
• AttributedString’s Codable format and what it has to do with Unicode
• SwiftUI Supporting External Screens
• Flow Navigation With SwiftUI (Revisited)
• Делаем патч для Pods библиотеки
• Как нативно визуализировать голос в iOS
• 6 Tips to improve Coding of Swift
Kotlin, обрабатываем исключения в корутинах правильно
Возможно вы думаете обработка таких исключений происходит как обычно в Kotlin/Java коде. К сожалению, при использовании вложенных корутин, все может работать не так как ожидается.
В этой статье я попробую показать ситуации, в которых требуется осторожность и расскажу про лучшие практики в обработке ошибок.
Управление умным домом на kotlin
Android application для управления умным домом на kotlin.
Как мы используем фича-флаги в мобильном приложении QIWI Кошелек
Привет, Хабр!
Меня зовут Василий Материкин, я — Android-разработчик в QIWI. В этом посте я расскажу о применении фича-флагов в QIWI Кошельке.
Внедрение Trunk-Based Development и Feature Flags
В процессе работы над большими приложениями, в которых много фич и над которыми трудится большая команда разработчиков, часто приходится сталкиваться с такой проблемой как конфигурация приложения помощью фича-флагов. Мы в QIWI столкнулись с этим два года назад, когда в QIWI Кошельке было создано несколько feature-команд. Выяснилось, что разрабатывать новые фичи с помощью стандартных feature-веток не так удобно, потому что когда над одним проектом работает несколько feature-команд, ветки становятся достаточно объёмными. Потом смержить их в мастер становится довольно непростой задачей, появляются постоянные конфликты.
Поэтому мы решили перейти на Trunk-Based Development (TBD). TBD предлагает работать в небольших ветках и, желательно, чтобы они как можно быстрее были влиты основную ветку. Для этого, конечно же, реализацию нового функционала нужно оформлять небольшими пулл-реквестами, чтобы они быстро проходили ревью и были влиты в основную ветку. Это, в свою очередь, создает другую проблему — когда в главной ветке может появиться код, который ещё не готов к релизу, но при этом нам нужно как-то релизить с этим кодом приложение. Мы же релизы выпускаем достаточно часто. И для этого TBD предлагает пользоваться такими подходами, как Branch by Abstraction (BBA) и Feature Flags (FF).
BBA позволяет выделить какой-либо функционал в отдельную абстракцию. Для этого создается интерфейс, который описывает контракт для работы с этим функционалом. Сразу же можно создать его текущую реализацию, просто скопировав код, который сейчас в продакшене. Также создается другая реализация (уже с новым функционалом) и с ней уже начинается работа. То есть обычно первый пулл-реквест при работе с фичей — это выделение кода, создается две реализации, эти изменения вливаются в главную ветку и далее продолжаем работать уже над новой реализацией. При этом в проекте (в продакшене) используется всё ещё старая реализация, пока мы не закончим работать над фичей.
Как начать писать приложения на ClojureDart
16 апреля зарелизился ClojureDart, а это значит, что для любителей Clojure открылась возможность писать мобильные, веб- и десктоп-приложения на Flutter. Зачем использовать для этого Clojure, как бы очевидно это ни было, выходит за границы фокуса статьи.
На текущий момент инструменты еще не отшлифованы, нет репла(!) и автодополнений для dart-интеропа, но пользоваться можно, и некоторые плюшки кложуры уже показали себя (например, nest-макрос, убирающий проблему вложенности).
В этой статье хочу рассказать, как написать свое первое flutter-приложение на Clojure, какими инструментами удобно пользоваться, где искать ответы на вопросы. Статья для тех, кто имеет хотя бы минимальный опыт работы с Clojure.
Дайджест интересных материалов для мобильного разработчика #441 (25 апреля — 2 мая)
Отменяем операции правильно на примере корутин
Всем привет! Меня зовут Павел, я Android-разработчик в Delivery Club. Моя команда разрабатывает функциональность доставки продуктов из магазинов. Я расскажу о подходе к написанию кода, подразумевающем, что любые долгие операции могут быть отменены. На примере корутин рассмотрим сферы применения такого подхода.
Запись разговоров на мобильных
Тут на МВидео выложили статью про 10 лучших приложений для записи звонков на смартфонах, а на 4pda выложили статью, что Гугл совсем запрещает запись звонков на Андроиде. Тема мне близка, т.к. недавно занимался разработкой приложения для записи звонков и все вышло не так как хотелось. Что и как - далее подробно.
* Цель статьи рассказать свой путь и принять обратную связь и ваши идеи, мысли, размышления.
Кто я? Что я? Я разработчик, занимаюсь разработкой сервиса виртуальной АТС для корпоративных клиентов. И, конечно, есть клиенты, у которых есть не только офисные работники, которым достаточно поставить стационарные SIP-телефоны или раздать в офисе/складе/магазине SIP-DECT-трубки.
В чем проблема?
Есть менеджеры "в полях". Которые весь день на объектах, в разъездах. И постоянно на созвоне. На созвоне с клиентами, партнерами, офисным бекендом. С точки зрения шефа эти менеджеры на мобильниках немного бесконтрольны. И хотелось бы знать с кем они разговаривают, как долго и о чем. Чисто хотя бы чтобы после разруливать конфликты проще было, кто что кому обещал или нет сделать. Обычно запись звонка, прослушанная обеими сторонами совместно, резко проясняет ситуацию. Хотя по разному бывает? )))
В общем, служебную запись звонков менеджеров в разъездах сделать не повредит.
Какие варианты решения? Разные операторы связи и виртуальных АТС предлагают для этих целей и FMC, и SIP-клиент, более продвинутые - ВАТС сразу с симками.
Какой еще есть вариант?
И, конечно, можно использовать приложение для записи. Для корпоративных клиентов есть облачные сервисы. Вы ставите на смартфон приложение, которое записывает звонок и передает его в облако. Затем вы смотрите в веб-интерфейсе отчеты по звонкам и слушаете записанные звонки со всех смартфонов подключенных к сервису. Удобно? Вполне.
Топ вопросов работодателю от Android-разработчика
Представьте: вы на собеседовании, только что закончили отвечать на кучу вопросов и были на высоте. Наконец наступает ваш черед задавать ваши вопросы работодателю. Не знаю как вы, а я в таких ситуациях часто начинал теряться и забывал самое важное, о чем стоило бы спросить. Однако, собеседование – это двустороннее общение, а значит, не только работодатель собеседует вас, но и вы – работодателя.
Меня зовут Костя, я – Android-техлид в hh.ru, и сегодня я расскажу об идеальных вопросах от Android-разработчика на собеседовании. Объясню, почему я выбрал именно эти вопросы, на что обращать внимание в ответах работодателя, а также отвечу на них так, как мы отвечаем нашим Android-соискателям. Эта статья будет полезна не только мобильным разработчикам, но и специалистам других направлений, которые проходят собеседования.
Тёмная сторона Android App widgets
Всем привет! Меня зовут Егор Карташов, и я Android-разработчик в команде мобильного оператора Yota.
Виджет домашнего экрана (App widget) – один из компонентов ОС Android, который появился в одной из первых версий системы (Android 1.5) и сохранил свою концепцию до наших дней. Почти 9 лет они были забыты Google – выпустив обновление в Android 4.2, виджеты надолго были отложены в долгий ящик.
Однако всё изменилось, когда Apple выпустила iOS 14, в которой обновила свои виджеты и добавила возможность их размещения на рабочем столе. Google отреагировал почти сразу и в следующей версии Android получил масштабную переработку виджетов – дизайн обновили в соответствии с Material You, расширили возможности API, освежили порядочно устаревшую документацию.
Глядя на всё это, мы решили, что мобильному приложению Yota пора обзавестись своими виджетами, и принялись за работу. В этой статье расскажем, с какими проблемами мы столкнулись по ходу разработки и как эти проблемы решали.
Конвергенция в многомодульном приложении
В большой команде разработчики часто сталкиваются с ситуацией, что ранее сильно похожие сущности, которые даже способны пройти «утиный тест», со временем начинают расходиться по смыслу и реализации, но все ещё продолжают хранить в себе похожие признаки. В одномодульном приложении это неприятно, а вот в многомодульном… В общем, если вы думали, что многомодульность лишь упрощает жизнь, то к концу этой статьи я постараюсь убедить вас, что как минимум в одном аспекте многомодульность её усложнит.
Дайджест интересных материалов для мобильного разработчика #440 (18 — 24 апреля)
Как я разрабатывал игру fly bird 2
Это гифка, которую я сделал, чтобы показать вступление и как началась история путешествия птички. У меня есть друг, который не боится рисовать, даже если он не обучался рисованию профессионально. Я общаясь с ним как то вдохновился желанием рисовать и не бояться. В google play у меня есть старая игра, которую я делал на unity, когда только начинал работать с движком.
https://play.google.com/store/apps/details?id=com.xverizex.fly_bird&hl=ru&gl=US
Два комментария к старой игре дали мне желание сделать новую версию, но уже на C++ + SDL2 + OPENGL ES 3.2 + OPENSLES + glm. То есть я даже рад хотя бы двум комментариям о том что людям нравиться моё творчество, чтобы чувствовать себя прекрасно и продолжать делать игры.
Так как у меня нормального опыта не было делать игры полноценные на sdl2, то я использовал разные виды кода, которые как я думал, что они правильные. Но поработав на работе и изучая код, я увидел что есть помимо того что я знаю (я про очереди сообщений), есть ещё mqueue. И только потом я додумался, что можно с помощью очередей сообщений отправлять из одного потока в другой что-нибудь. Вот пример как выглядела реализация.
Huawei Mobile Services и AppGallery: подробная инструкция для начинающих
Huawei поставляет Android-смартфоны без сервисов Google и привычного магазина приложений Google Play, создав аналоги: Huawei Services и AppGallery.
Для нас, разработчиков, это 420 миллионов активных пользователей на 700 миллионов устройств. Для поддержки пользователей потребуется оформление документов.
В статье мы говорим только о использование сервисов.
«Помощник учителя»: от идеи до популярного мобильного приложения
Привет, читатель! Меня зовут Марчук Иван, и я разработчик мобильного Android-приложения Teacher's Assistant («Помощник учителя»). Я начал его разрабатывать еще школьником, когда учился в «IT Школе Samsung». Сейчас мое приложение скачали более 160 тысяч человек.
Помощник учителя – это электронный журнал для учителей, где они могут ставить оценки, отмечать посещаемость и записывать ДЗ, а также удобный инструмент для учета активности учеников во время урока.
Подробнее о моем приложении и о том, как я его создавал, читайте далее.
Как мы в QIWI внедряли Kotlin Multiplatform Mobile Часть 2: Смотрим шире
Это продолжение нашего рассказа о внедрении Kotlin Multiplatform Mobile в QIWI. Если хотите узнать больше про технику, посмотреть на код, переходите в первую часть. В этой статье будет больше контекста про то, как мы принимали решение, готовили прототип и внедряли технологию в команды. Наш опыт может помочь вам “продать” KMM в вашей компании и вашим стейкхолдерам. Я расскажу о плюсах и сложностях, с которыми мы столкнулись на нашем пути.
Немного истории
В QIWI мы часто пробуем что-то новое в наших процессах и в разработке. За последние 5 лет мы создали несколько приложений с нуля, используя разнообразные подходы. Например, мы впервые попробовали кросс-платформу, когда делали приложение QIWI Инвестор. Мы использовали инструмент J2ObjC, чтобы конвертировать общий модуль с кодом на Java на Objective-c для iOS. Это решение было смелым, но не самым надежным. По ходу использования было много проблем, самые большие — с конвертацией кода сторонних библиотек. В итоге проект закрылся, как и этот эксперимент. Кросс-платформенный подход оказался рабочим, но мы отложили его в сторону пока не появился более надежный инструмент.
В 2018 году мы перешли от платформенных команд к кросс-функциональным. Это стало самым большим изменением в процессе разработки c внедрения скрама. “Совместное владение кодом” стало нашей новой ценностью. Границы между платформами начали размываться, мы стали внимательнее изучать код на других платформах, вместе принимали решения и делились лучшими практиками.
Movika приглашает на стажировку начинающих разработчиков для работы с интерактивными фильмами
Казанская IT-компания объявила набор стажёров, которым предстоит заниматься сборкой интерактивных фильмов. Работать нужно будет удалённо, так что рассматриваются кандидаты со всей России и других стран. Основное требование - знание одного из языков: Kotlin, Android SDK / Swift, iOS SDK, UIKit / JavaScript, React. Рассматривают студентов и выпускников IT-направлений, которые находятся в поисках интересного опыта.
Почитать подробности и подать заявку до 21 апреля можно здесь: hr.movika.com
Movika разрабатывает IT-решения для интерактивного видео: инструменты для его создания, просмотра, монетизации и экспорта. Цель компании - сделать так, чтобы формат интерактивного контента становился повсеместным и популярным.
Дайджест интересных материалов для мобильного разработчика #439 (11 — 17 апреля)
Сравниваем готовые решения для реализации MVI-архитектуры на Android
Когда прежние инструменты не соответствуют растущей сложности программ, появляются новые подходы в программировании, паттерны проектирования. MVI помогает там, где не справляются MVP- и MVVM-подходы. Сейчас, в том числе, этот подход активно используется и на многих крупных приложениях. В одних случаях MVI задействован только на части экранов, в других – все экраны построены на нем. В нашей команде знание MVI – одно из обязательных требований.
В этой статье мы разберем решения для реализации MVI-архитектуры на Android, большинство из которых применимы в работе. Описали их преимущества и недостатки, основываясь на опыте коллег и собственной практике. Материал будет полезен для разработчиков, ещё не знакомых с паттерном MVI, и для тех, кто выбирает библиотеку для своего проекта.
Вклад авторов
-
ProductivityInside 2586.0 -
RoboForm 1900.0 -
alizar 1894.0 -
phillennium 1603.0 -
aleksandrit 1145.6 -
Developers_Relations 938.8 -
vedensky 832.0 -
myshyak 679.6 -
Leono 661.0 -
marks 638.1