Обновить
256K+

Android *

Пишем под самую популярную мобильную ОС

109,78
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Асинхронный Kotlin. Обзор новинки

Время на прочтение5 мин
Охват и читатели3.7K

Приветствуем, Хабр.

Как знают наши постоянные читатели, в последние пару лет мы регулярно заходим на территорию языка Kotlin. Базовой литературы по Kotlin сейчас достаточно, но сегодня мы хотим презентовать вам новинку для настоящих профессионалов — «Асинхронный Kotlin». Книга подготовлена Яной Седовой @Ioanna на основе её собственного курса «Kotlin Coroutines & Flow для Android: от основ до production» размещённого на платформе «Степик». Яна Седова активно работает с этой платформой, вот, что она успела на ней разместить.

Читать далее

Новости

Делаем модуль на C++ для приложения React Native

Уровень сложностиСредний
Время на прочтение20 мин
Охват и читатели4.3K

Я не планировал переписывать приложение React Native на C++.

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

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

Поначалу все звучало слишком просто. Написать интерфейс на TypeScript, позволить Codegen генерировать контракты, перенести основную логику на C++, зарегистрировать модуль на обеих платформах и использовать его из React Native как любой другой модуль.

Спойлер: да, это работает.

Чистый модуль Turbo Native на C++ действительно может дать вам одну реализацию для Android и iOS, типизированную границу через Codegen, меньшие накладные расходы, чем у старого Bridge, и удобный способ повторного использования существующего кода на C или C++ внутри приложения React Native.

Спойлер номер два: код на C++ — это не самая сложная часть.

Самое сложное начинается вокруг: CMake, NDK, Xcode, Objective-C++, время жизни среды выполнения JSI, регистрация модулей, границы потоков, владение памятью, обработка ошибок, сборки Expo, сторонние библиотеки и вопрос, который никто не хочет задавать слишком поздно — действительно ли этот модуль должен быть нативным?

В этой статье я подробно расскажу о создании C++ Turbo Native модуля для React Native: где этот подход полезен, где он добавляет скрытые затраты на поддержку, чем отличается регистрация для Android и iOS, почему важна обертка TypeScript и почему сам TurboModule должен оставаться «тонким».

Читать далее

Верификация Android разработчиков: что будет с устройствами в России

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели17K

Привет, Хабр! Это SafeMobile. Прошлым летом Google объявил, что на Android телефоны можно будет устанавливать приложения только от проверенных разработчиков. С тех пор нас регулярно спрашивают, что будет с устройствами, которыми управляет MDM – могут ли они остаться без управления, будут ли проблемы с распространением инхаусного софта и т.д.

В этой статье мы расскажем, что узнали – если на устройствах нет сервисов Google, можно не беспокоиться, но и на сертифицированных Google устройствах в РФ, похоже, всё хорошо. Детали под катом.

Верифицироваться

В 2017 году мне в комментариях написали «иди в нишу». Я пошёл в 2024

Уровень сложностиПростой
Время на прочтение16 мин
Охват и читатели7.3K

В декабре 2016 я запустил доску объявлений. В марте 2017 написал на Спарке статью о том, как пытаюсь притащить на неё трафик. Статья была честная до неприличия: три месяца работы, около 14 тысяч рублей на рекламу, 450 рублей выручки.

Отдельным памятником стоит таргет во ВКонтакте. 515 тысяч показов, 41 переход, два поданных объявления. CTR ноль целых ноль ноль восемь. Восемь тысячных процента. Я тогда пересчитал трижды, потому что решил, что где‑то потерял запятую.

Под статьёй набежали люди и сказали примерно одно и то же: не тягайся с Авито, иди в нишу.

Я поблагодарил за фидбек и пошёл тягаться с Авито дальше.

Прошло девять лет. Сайт теперь называется косплей‑барахолкой, есть фотолента, есть приложение на проверке в Google Play, и есть довольно неловкая история с App Store, из‑за которой у меня спрашивали квитанции за квартиру. Рассказываю всё по порядку, включая места, где я выглядел глупо.

Читать далее

Мобильная разработка за неделю #640 (20 — 26 июля)

Время на прочтение5 мин
Охват и читатели8.5K

В новом выпуске как Apple в iOS 27 удалось сократить время запуска приложений и разработка системы автоматической синхронизации фотографий, интервью с Senior iOS инженером из TikTok’а и интеллектуальные приложения для Android с Jetpacker, 15 лет Kotlin, безмолвные ошибки, что и как измерять в мобильной разработке, частная социальная сеть без алгоритмов и рекламы и многое другое. Подключайтесь!

Читать далее

Как найти ленивого в команде разработки?

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели20K

Совместная разработка, и как найти лентяя в команде. История о том как я пришёл к созданию плагина для OpenSource.

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

А чтобы не читать всю статью инструменты можно быстро посмотреть

JETBRAINS MARKETPLACE

VISUAL STUDIO MARKETPLACE

Найти лентяя

Автоматизация метаданных App Store и Google Play с fastlane и Azure Pipelines

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели9.9K

Приложение поддерживает 20+ языков. Каждое обновление — это не только новая сборка, но и правки в обоих магазинах: название, подзаголовок, описание, «что нового». Для каждого языка, на каждой платформе, через медленный веб-интерфейс.

При двух десятках языков и двух платформах обновление «что нового» вручную занимает 30–40 минут. При этом легко ошибиться: скопировать не ту версию текста, забыть один язык, перепутать поля между iOS и Android.

В статье покажу, как свести всё это к одному коммиту.

Читать далее

Измеряя незримое: что и как измерять в мобильной разработке

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели7.2K

Всем привет! Меня зовут Алексей, я техлид Android-направления в компании Домклик.

Этой статьёй я открываю цикл материалов, в которых будут собраны мысли, советы и инструкции о том, как сделать приложение и процессы его разработки измеримыми, как находить «узкие места», диагностировать проблемы и причины их возникновения, а также фиксировать их наличие. Минимум кода, сложных терминов и «rocket science» — только практический опыт и наработки по различным метрикам.

Читать далее

Как я добавил HEIF, HEIC и AVIF в Android-ImageMagick7

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели14K

HEIF, HEIC и AVIF на Android через ImageMagick: хроника внедрения в два этапа. Без лишней воды — только проблемы и их решения.

Читать далее

Как мы делаем 2D-симулятор грузоперевозок: что уже готово и куда движемся к MVP

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели11K

Делаем Truck Sim 2D — 2D-симулятор грузоперевозок на Godot 4.6 для Android и ПК. Физический груз на RigidBody2D, который реально может выпасть из кузова, производственная цепочка от шахты до завода и первая сетевая версия на ENet — уже играбельная сборка 0.2.8. Рассказываем, как это устроено внутри и что планируем до MVP: превращаем LAN-конвой в настоящий кооператив

Читать далее

Свободный и бесплатный ɹǝddoH — multi-hop SSH L3 VPN для iOS/Android

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели15K

Как я сделал свободный и бесплатный ɹǝddoH - multi-hop SSH L3 VPN для iOS/Android

И запаковал сервер так, что его можно поднять с телефона: вбил IP и root-пароль - и нода в библиотеке. Цепочка из нескольких VPS - entry → relay → exit. Теперь даже на сервер заходить не надо.

Преамбула

Раньше я делал Naive-клиент, и он нормально работал. Но потом клоуны решили включить поведенческий анализ. И вот - все. Ничего не работает. Дальше опять начинается гуглинг и, в итоге, опять я прихожу к VLESS с кучей надстроек, эмуляций различных браузеров, игр и так далее. Ах да, еще надо это все настраивать, делать цепочки из нескольких серверов, чтобы выход и вход не совпадал, заниматься скриптингом и снова молиться, что все заработает и будет работать дальше. А тем временем ssh -D отлично работал все это время, и я такой, а почему бы не выдать root всем завернуть это все внутрь ssh, да еще и по цепочке, да еще и чтобы настраивалось одной кнопкой. И не прокси, а полноценный VPN.

Ведь протокол уже есть - SSH. Его не надо изобретать. Им пользуются все, как и https. Если клоуны заблокируют SSH, то это будет конечно весело, тут уже, боюсь, я ничем помочь не смогу. Осталось лишь написать клиент под это дело, опубликовать его в сторах, доказать опять Apple что это приложение уникальное (как они достали с этим), рассказать ревьюверам в Гугле что такое SSH и как оно работает... тяжела жизнь Open Source программиста. Но я справился.

Читать далее

Мобильная разработка за неделю #639 (13 — 19 июля)

Время на прочтение5 мин
Охват и читатели11K

В этом дайджесте вопросы о System Design и аннотации в Kotlin, Gradle под капотом и как мигрировать Flutter-приложение на SPM, как отправить 1 миллион уведомлений, открытый веб в виде социальной ленты, архитектура независимого умного дома и многое другое. Заходите!

Читать далее

Link to Pane: буфер обмена Mac Android через протокол Microsoft (потому что иначе — pain (икра слов)

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели7.9K

Привет, Хабр!

Пришло время реверсить протоколы снова. Apple я делал. Google тоже. Угадайте какая компания следующая?

Читать далее

Ближайшие события

Мобильный Vivaldi 8.1 — Всё для лета

Время на прочтение2 мин
Охват и читатели7.4K

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

Читать далее

LLM против APK: сколько стоит автономно перепаковать Android-приложение

Время на прочтение9 мин
Охват и читатели11K

Большие языковые модели давно вышли за пределы «помоги дописать функцию». Они доступны всем — и злоумышленник тут не исключение. Отсюда практический вопрос, который нас и интересовал: может ли LLM самостоятельно, без человека, атаковать мобильное приложение, и если да — во сколько это обойдётся.

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

Читать далее

Знакомство с командой Android

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели7.1K

Смотреть любимые тайтлы со смартфона или залпом по телевизору — для многих уже привычная рутина. Устроиться поудобнее, открыть приложение, нажать «Play». Но как бы легко это ни выглядело, за твоим досугом стоит огромная команда, которая делает невидимую, но колоссальную работу.

В этом интервью Катя Супрун, технический менеджер Android-платформы, рассказала о том, как вместе с ребятами из core-команды она отвечает за производительность, оптимизацию и стабильность — за то, чтобы твой просмотр был максимально комфортным. Но кроме рабочих будней у них есть киновечера, шашлыки, настолки и традиция радоваться даже маленьким победам.

Читать далее

Аутентификация через биометрию в Kotlin Multiplatform или Koncierge

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели12K

Наконец-то неплохо продвинувшись в написании своего мультиплатформенного приложения Modern Money мне понадобилась аутентификация для Kotlin Multiplatform.

Хотелось иметь один API для PIN-кода и биометрии, а под капотом использовать Android Biometric Prompt, Windows Hello, Touch ID.

Так появился Koncierge — набор KMP-модулей biometric, auth и auth-compose

Казалось бы, задача довольно стандартная: объявить expect-класс и написать несколько actual-реализаций. На Android это примерно так и получилось. А вот Windows Hello, JVM-модуль и публикация всех артефактов заставили немного разобраться в том,

как Kotlin работает с нативным кодом

Аннотации в Kotlin: от @Deprecated до своего KSP-процессора

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели8.1K

Аннотации в Kotlin — это не только @Deprecated и @Suppress. Разбираемся, где живут SOURCE, BINARY и RUNTIME, чем KSP отличается от kapt, как compiler plugins меняют код и какие практические задачи можно закрыть генерацией: debug menu, удаление экспериментов и каталог performance-метрик.

Читать далее

Лучшая архитектура KMP-приложений и когда её не использовать. Часть 2

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели7.2K

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

Это вторая, практическая, часть из двух. Здесь про то, как организованы слои, какие контракты уходят в Swift, как готовить SKIE, как устроены обработка ошибок и DI, что с модульностью, скоростью сборки и тестами.

Читать далее

Gradle под капотом: как перестать мучиться и заставить свой компьютер работать на полную мощность?

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели7.2K

Привет, Хабр. На связи Илья Новиков, технический директор команды разработчиков «Исходный код».

Сегодня я хочу разобрать инструмент, который мы все используем десятки раз в день, но часто по-прежнему воспринимаем как «черный ящик».

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

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

Давайте заглянем под капот, чтобы настройка сборки перестала быть проблемой.

Читать далее
1
23 ...