Dolgo.polo Dev | Денис Долгополов
2.28K subscribers
91 photos
2 videos
124 links
Разбираемся в мобильной разработке (Android/iOS) и пытаемся выяснить, зачем оно так устроено

Статистика/цены: @dolgo_polo_dev_stats

По вопросам/рекламе: @dolgopolovdenis
Download Telegram
🐦‍⬛️ Как передать секрет между приложениями безопасно

Помните про мужика в середине?

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


💡 Например, пользователь поставил смешную фотку на аватарку в нашем приложении, и мы хотим по-секрету рассказать об этом всем дружеским приложениям так, чтобы об этом не узнали чужие


⚠️ Какие варианты точно не подходят:

🔵Intent — любое приложение может перехватить Intent, зарегистрировав intent-filter в Manifest

🔵Explicit Intent — это тот же самый Intent, но с явным указанием пакета/класса, которому он отправляется. На устройстве не может быть двух приложений с одинаковым пакетом. Но на устройстве могут быть хакнутые сборки с оригинальным пакетом, сливающие данные, которые пользователь скачал не из Play Market, а с пиратского сайта

🔵deeplink с query-параметрами — любое приложение может перехватить deeplink, зарегистрировав его в Manifest

🔵общий зашифрованный файл — любой алгоритм шифрования и ключи шифрования, зашитые в apk, вычисляются за пару минут. так что сколько не шифруй, все-равно зареверсинжинирят



🗝 Более интересные варианты:

🔵AccountManager и ContentProvider / BroadcastReceiver с protectionLevel = "signature" и KeyStore — позволяют безопасно общаться приложениям с одинаковой подписью

🔵App-links — подходят, если нужно передать какой-то секрет из браузера в мобильное приложение. Благодаря этой технологии домен сайта связан с подписью приложения

🔵Доверенное лицо — это любые сторонние сервисы-посредники, который мы почему-то решили доверять (свой бэкенд, гугл аккаунт и т.д.)

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥234🍓43
🍏 Эко-френдли код

Почему какое-то приложение жрет батарейку больше остальных?

Потому что там много анимаций, а в бэкграунде запускается майнер? Возможно, но есть более физическое объяснение


💡 Например, сетевые запросы напрямую влияют на расход батареи

Чтобы выполнить запрос к бэку, нужно вывести Wi-Fi-модуль из сна ➡️ подать на него напряжение ➡️ сначала отправить байты в интернет с помощью излучения радиоволн ➡️ повисеть какое-то время в режиме ожидания ответных радиоволн

То же самое с Bluetooth/NFC/динамиками/датчиками — для передачи информации нужно потратить энергию


При этом теоретически важно не только количество передаваемой информации в физический мир, но и частота

Например, энергоэффективнее отправить 10 запросов в бэкенд параллельно, чем последовательно — ведь так мы быстрее позволим Wi-Fi платке вернуться в режим сна


Но в реальном мире такими микрооптимизациями занимается в лучшем случае ОС или драйвер, нам же достаточно описать, откуда и куда перекладывать джейсончики

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12🍓10👍1
🖥 Будущее офисных компов у меня на столе

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

Задачи у него такие:

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

красивое — есть аналоги чуть мощнее за ту же цену, но в пластмассовых стремных коробках

тянет без лагов среднего размера проекты в AutoCAD, Matlab, Android Studio, Figma

можно позапускать на средних в 60фпс всякие простенькие игры — Dont Starve Together, Party Animals, Raft, Split Fiction...

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


Со всеми этими задачами отлично справляется встроенка AMD 680M — не шумит, не греется выше нормы, не фризит

Если вы геймер, то судя по тестам из интернетов можно взять MacMini на M4 за 70-80к и комфортно играть на нем даже в киберпанк


Итого — все мои потребности закрыл на 5️⃣. Через пару лет этот оставлю под медиастанцию, а для остального возьму что-нибудь с еще более мощной встроенкой


Думаю, со временем все не_игровые пк перейдут в такой формат. Коробки размером с пылесос больше не имеют смысла, но пока они чуть дешевле


А в идеальном мире домашние компы заменят телефоны, которые с помощью внешнего монитора и type-c будут превращаться в полноценный пк. Надеюсь, лет через 5-10 мы окажемся в этой точке 🌈


Минусы и характеристики моей коробки скину в комменты👇

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍8
🦙 Почему первые 300мс жизни сложнее всего?

Пользователь нажимает на иконку

И тут начинается треш и угар — в ближайшие 300мс случится больше интересного, чем в фильмах Marvel за последние 5 лет


Пошло поехало:

🔵проинициализоровать часть DI

🔵проинициализировать большую часть библиотек в нужном порядке

🔵стянуть и применить фича-флаги, на которых будет работать приложение

🔵собрать начальный стейт для первого экрана в зависимости от десятков параметров (авторизован ли юзер? какой язык выбран?...)

🔵прочитать кучу локальных данных из долгого ПЗУ, чтобы дальше работать с быстрой ОЗУ

🔵установить соединение с бэком (сходить в DNS, пройти этапы коннекта по TCP/TLS)

🔵выбрать CDN для загрузки медиа-контента

🔵проверить, есть ли в кэше информация для отображения

🔵если нет, начать грузить новую с бэка

🔵отрисовать какой-нибудь скелетон UI

🔵запустить префетч и прогрев важных экранов

🔵замерить все предыдущие этапы, отправить информацию о перфе в аналитику


фух, кончили. наконец-то можно вывести "Ваше приложение устарело, пожалуйста, обновите версию"

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
😁576👍4😱4
#рекомендация

@mobile_appsec_world — один из крупнейших каналов про безопасность мобильных приложений

если вдруг не подписаны, то вот что вы пропускаете:

🔵Как отключить SSL Pinning для дебага?

🔵Новости про использование AI в реверс-инжиниринге

🔵Анонсы конференций и вебинаров про мобильное ИБ

🔵Ссылки на полезные тулзы для анализа apk

и все это ради благой цели — чтоб в вашем сыре аппе было меньше дырок
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍32
📕 Новый этап для библиотек — Android SDK Runtime (Privacy Sandbox)

Google предлагает:
🔵публиковать SDK отдельно от приложения
🔵запускать SDK в отдельном от приложения процессе

Если этот проект не забросят в долгий ящик, то в ближайшие годы правила игры заметно поменяются



Как сейчас:
🔵все библиотеки, подключенные к приложению, кладутся в apk и являются частью приложения

Как станет:
🔵приложение знает только API библиотеки, а реализация SDK загружается отдельно от apk и работает в изолированном процессе


Почему эта идея имеет смысл:

SDK смогут обновляться отдельно от приложений (в рамках мажорной версии)

у разработчиков SDK не будет полного доступа к данным приложения

сейчас у приложения и подключенных к нему библиотек полный коммунизм — всё общее (файлы, shared-preferences, медиа-контент...)

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

размер apk уменьшится (если это еще кого-то волнует)


Есть и обратная сторона:

если SDK обновляется в рандомный момент, то и приложение ломается в рандомный момент

усложняется схема жизненных циклов, ведь у SDK будет отдельный от приложения ЖЦ

не ясно, как это будет работать на устройствах без Play Market, откуда будут дозагружаться отсутствующие SDK


В первую очередь гугл раскатывает SDK Runtime с Android 14 для рекламных библиотек, а будущее зависит от фидбэка разработчиков

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯20🔥8👍4🤔31
This media is not supported in your browser
VIEW IN TELEGRAM
👀 Зачем роверу глаза?

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

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


Из плюсов:
не было докладов про очередные 10 тысяч способов оптимизировать Compose
были интересные доклады о том, чем занимаются инженеры в компании

Расскажу пару запоминающихся фактов

🎲 Кубик Рубика

С большой вероятностью вы видели статью про него на хабре — удалось увидеть в живую)

Точнее в живую успеваешь заметить только два состояния до/после, сам процесс сборки занимает менее 200мс



Охлаждение серверов

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

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

Поэтому в Яндексе проектируют свои коробки для размещения серверного оборудования

На ивенте рассказывали, как экспериментальным путем получилось сделать супер-дешевый пластиковый рассекатель воздуха (пластинка с дырками отверстиями определенной формы), который повышает эффективность охлаждения оперативной памяти



📦 Ровер-доставщик

🔵если у доставщика мигает красный флажок, значит он находится в режиме ручного управления, помогать ему не надо)

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

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


🖥 Еще были доклады про

🔵ДНК секвенатор и реверс-инжиниринг био-чипа
🔵промышленные манипуляторы Yandex Robotics
🔵световые мечи из звездных войн
🔵и стенд со всеми версиями Алисы в разобранном виде

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥211👍1😁1
📚 Мода на SDK

Или архитектура SDK-first (отсылка на Mobile-first, который пришел на замену Desktop-first)

Постепенно все движется к тому, что большую часть кода можно будет сразу писать в виде sdk. Или хотя бы учитывать высокую вероятность выноса кода в sdk при проектировании модуля

Вижу несколько причин


🔵Большим компаниям нравится экспериментировать с микро-бизнесами и растить стартапы внутри себя

Бигтех-копании нужно приложение и для продажи кофе, и для аренды электросамокатов, и для внутренних сотрудников

Плюс компаниям нравится переплетать эти стартапы между собой — продавать кефир в приложении такси

Поэтому нужно допускать, что в любую секунду функционал одного приложения понадобится в другом

И намного дешевле не писать новые приложения-эксперименты с нуля, а собирать их из одинакового набора готовых библиотек


🔵ИИ могут использовать библиотеки для написания приложений

Чем меньший процент кода написан ИИ, тем более приложение стабильно и поддерживаемо

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

Хороший пример — сетевой клиент OkHttp. ИИ не сможет написать его полноценный аналог, но при этом за пару минут соберет на базе него работающий клиент-серверный фича-модуль


🔵Это логичное продолжение многомодульности

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

Следующий логичный этап — шарить код за пределами одного приложения (и одной платформы)

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2011🍓5
📱 Поисковик Google еще нужен?

Поймал себя на мысли, что перестал пользоваться google поиском

Хотя пару лет назад это казалось невозможным

🔵по ru-сегменту (найти ближайшую кофейню, узнать время работы поликлиники, найти биографию Пушкина) лучше ориентируется поиск яндекса

🔵google карты, кажется, в рф развиваться перестали, хотя в мире новые фичи выходят

🔵на простые вопросы удобнее спросить ответ у любой ллм жпт, чем гуглить по старинке

🔵на сложные вопросы, где галлюцинации недопустимы и нужны пруфы в виде источников, удобнее сходить в perplexity

🔵поиск по картинкам имхо лучше работает у яндекса, а если нужны уникальные иконки / картинки — спасают ии-генераторы


а гугл поиск зачем?

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤡24👍13🤔9👎21
🖥 Android как пк в 2k25

В одном из постов предположил, что в идеальном мире офисный компьютер и телефон должны стать одним устройством

А может Android уже можно использовать как компьютер?


Чтобы использовать Android OS в качестве Desktop OS нужно решить пару проблем:

🔵запихать в AOSP драйверы для компьютерных Wi-Fi-чипов, тачпадов и т. д.

🔵полноценно поддержать режим мультиоконности в UI/UX. ведь главное отличие пк от мобилки — на нем удобно работать с десяти программах одновременно, перескакивая между окнами

🔵адаптировать ядро/графические низкоуровневые движки, чтобы система использовала все возможности компьютерного железа


На данный момент существует два пути

💻 Форки Android AOSP

К этой категории относятся полноценные адаптации AOSP под desktop-систему

Android-x86, PrimeOS, Bliss OS... — все это нативные операционные системы, их можно установить на пк/ноутбук и использовать независимо от смартфтона

(кто их использует как основную систему на ежедневной основе не могу придумать)


💻 Desktop-режим смартфона

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

Работает это так:
1️⃣ подключаешь телефон к внешнему монитору через type-c
2️⃣ телефон продолжает работать как обычно или превращается в тачпад
3️⃣ на внешнем мониторе выводится содержимое телефона, но выглядит как привычная компьютерная ОС (приложения открываются в плавающих окнах, есть рабочий стол)

Но такой режим пока есть не везде:
🔵Samsung DeX — режим Desktop, доступный на некоторых девайсах Samsung
🔵Huawei EMUI Desktop — режим Desktop, доступный на некоторых девайсах Huawei
🔵Android Desktop — встроенный режим в Android. на Pixel Android 16 можно включить в настройках разработчика, тут видео

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🍓2🍾1
🧬 Маленький рынок

У Samsung OneUI прошивок есть фича — Samsung Edge Panel

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

Раньше было специальное EdgePanel SDK, с помощью которого можно было написать свое приложение для этой шторки и запушить его в GalaxyStore, но оно deprecated


Но самое удивительное другое — в GalaxyStore до сих пор продаются приложения для этой шторки по 100-500 рублей


Например, в Edge Panel могут отображаться стремные селекторы громкости или мини крестики-нолики. Цена удовольствия всего 82 рубля


А ведь если вовремя залететь, можно было бы стать миллионером

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤡11👍73🔥3😁2
🎲 Retrofit 3.0 — что изменилось?

На днях вышел Retrofit 3.0. А точнее в один день вышло 2 версии — Retrofit 3.0 и 2.12

Библиотека важная, поэтому обзор


Самое интересное случилось в 2.12 добавили стриминговую сериализацию из Kotlin/Java-классов в Json/Protobuf

Зачем это нужно было? ➡️чтобы большие классы не сериализовывались целиком перед отправкой запроса, а начинали это делать во время передачи данных на бэк

Это позволит чутка снизить нагрузку на процессор и оперативку, если

🔵передаете объемные данные в теле запроса (1 мегабайт+)

🔵где-то вызываете Retrofit.Call.enqueue() с главного потока стриминг перенесет сериализацию с главного UI-потока в бэкграунд

Чтобы изменения заработали, нужно создавать конвертер с помощью функции withStreaming()

MoshiConverterFactory.create(moshi).withStreaming() // пример



В Retrofit 3.0 просто апнули версию OkHttp (3.14.9 -> 4.12.0). И немного поправили внутреннего кода, пару строк для совместимости с 4.12.0

Так что если обновите версию Retrofit, у вас транзитивно апнется OkHttp — будьте внимательны, берегите себя и своих тестировщиков

Из хороших новостей — Retrofit 3.0 формальный мажор, то есть бинарно совместим с предыдущими версиями (по словам разработчиков). Мажорное версию апнули для хайпа, чтобы подчеркнуть обновление OkHttp


Пруфы:
🔵 compare 3.0 with previous (там много ченжей, но 90% из них — это обновление их website с документацией)
🔵 compare 2.12 with previous (тут можно посмотреть, за счет чего сериализация стала асинхронной)

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍10🍾6
🧬 Генерация случайного числа

🧹 пост хозяйке на заметку

Получить истинно рандомное число (строку) программно не так уж просто

Ведь для генерации числа нужен алгоритм, а алгоритм по определению вещь предсказуемая


Поэтому для получения максимально непредсказуемого значения нужно добавлять энтропию — хаотичное число, взятое за пределами алгоритма

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


А в мобильных приложениях аж два раза за последнее время наткнулся на получение случайного числа с помощью действий пользователя:

🔵попросили порисовать рандомные рисунки на экране. получилась картинка, от которой взяли хэш

🔵попросили просто потыкать в рандомные части экрана 100 раз. взяли хэш от координат точек


Плюсы:
получаем действительно рандомное значение
пользователю спокойнее, дарит чувство безопасности

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥72
🧬 Чем cookie отличаются от headers?

Это база , но если никогда не работали с cookies, может быть интересно

В мобильной разработке про cookies вспоминаешь в 2 случаях:

🔵если нужен удобный способ отправлять ключ-значение на все http-запросы на определенный домен

🔵если речь идет о WebView



Коротко:

🔵header — это ключ-значение, которое добавляется к конкретному сетевому запросу через Interceptor (или Retrofit)

🔵cookie — это ключ-значение, которое привязывается к домену (например, domain = .ya.ru) и отправляется на все http-запросы на этот домен


📚 Где хранятся cookies?

В хранилище для cookies. За это отвечают классы

OkHttp: CookieJar, CookieHandler, CookieStore
WebView: webkit.CookieManager

cookie-хранилища сами разруливают, на какие запросы нужно отправлять куку, а на какие нет — гибко настраивать это поведение можно с помощью cookie-атрибутов (httpOnly, secure, sameSite...)


📚 Откуда появляются cookies?

🔵бэк присылает cookies в http-респонсе в хэдере "Set-Cookie"
🔵также cookies можно добавить/удалить из кода


📚 Когда отправляются cookies?

Перед каждый сетевым запросом сетевой клиент (или WebView) идет в cookie-хралище и сообщает ему, на какой домен и путь (path) собирается сделать http-запрос

cookie-хранилище отдает список cookies, "привязанных" к этому домену

Сетевой клиент добавляет эти cookies в хэдер "Cookies" и отправляет вместе с сетевым запросом

Когда удобно?

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

Когда неудобно?

🔵когда нужно отправить какое-то значение только на 1 сетевой запрос — тут лучше подойдет header


@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍355🦄5
🧬 Кто такое аппаратное ускорение?

Часто слышал этот термин, но не вдавался в подробности

Аппаратное ускорение — это перенос определенных расчетов с основного процессора на другие компоненты

Цель — разгрузить CPU и ускорить операции за счет специализированной архитектуры других чипов

В мобилке можно встретить следующие примеры аппаратного ускорения:
🔵Apple Bionic — нейропроцессор для FaceID и обработки фотографий
🔵ARM Adreno — графический процессор для рендеринга графики / игр
🔵еще бывают DSP-чипы для ускорения обработки сетевого сигнала, аудио потока и т.д.

По умолчанию аппаратное ускорение включено, но его можно отключить через настройки разработчика

Реальных кейсов не встречал, зачем это надо, но в интернетах пишут, что на GPU-могут флаковать snapshot-тесты — иногда помогает отключить GPU


💡 Еще удивительный факт — аппаратное ускорение можно отключить для отдельного экрана или даже для отдельной View:

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null)


c Compose все немного сложнее — на отдельную composable-функцию отключить GPU нельзя

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍643
🧬 Нативки в нейронках

Вы же не забываете радоваться золотым годам бесплатных нейронок?

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


Причем абсолютно бесплатно — даже без рекламы


Одно из преимуществ нейнронок в том, что они сразу дают конкретные названия продуктов / моделей / версий. Могут выбрать лучшее и описать плюсы-минусы вариантов


Но как долго эти подсказки будут неподкупными?

Ведь это огромный простор для рекламы:

🔵чьи курсы по программированию лучше? Привет, друг, конечно вот эти от гекабрейнс за 300к в неделю

🔵где поесть вкусный омлет в Москве? Привет, друг, конечно в бургер кинге, не забудь купить комбо

🔵можешь сгенерировать мне картинку кота, лакающего молоко? Привет, друг, вот твой кот с бутылочкой Простоквашино


ждем появления нативной рекламы через пару лет

а потом подписку для отключения рекламы и подписку ultima-pro для полного отключения рекламы

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
😁20🔥9🌭4👍32
🧬Как работают генераторы одноразовых кодов?

Утренняя рутина ☕️ — нужно доказаться компьютеру, что ты все еще ты — подключить VPN, войти в корпоративные учетки...

Для этого часто требуется ввод одноразового кода с телефона — подтверждение фактора владения


💡 Почему не использовать пуш-уведомления или SMS?

дорого

для примерных подсчетов можно умножить 50 копеек на количество сотрудников в компании — это расходы за день


Поэтому прибегают к бесплатному TOTP (Time-based One-Time Password)

Как это работает:

🔵на компьютере генерируется рандомный секретный ключ

🔵ключ передается на мобильное устройство (один раз, при первоначальном связывании устройств), обычно через сканирование QR-кода

🔵компьютер и телефон используют время как один из параметров для генерации кода

🔵каждые 30 секунд на основе секретного ключа и текущего времени генерируется новый одноразовый код (TOTP)

🔵когда вы вводите код на ноуте, там по тому же алгоритму генерируется (TOTP) и сравнивается с введенным ->


Это безопасно:

👍 код действует всего 30 секунд
👍 секретный ключ хранится локально только на ваших девайсах

Если время на телефоне и компьютере не совпадает, TOTP не сработает. Уехать на Гаити и скинуть код другу, чтобы он зачекинился с рабочего компа в офисе, не получится

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍186🔥41
🍏 Итоги WWDC 2025

Ничего нового для Android Studio не показали
😁4352🔥1
📕 Удавалось ли вам замерить перф локально?

Расскажите, если был удачный опыт — интересно узнать, мерите ли вы локально / в джобах на CI скорость работы приложения от тикета к тикету?



Мой опыт подсказывает, что это нереально. Потому что на перф влияет:

💀 насколько запуск приложения холодный — это далеко не бинарное состояние

💀 насколько телефон загружен другими фоновыми процессами

💀 загруженность и скорость сети в данный момент времени

💀 температура процессора / тротлинг

💀 настроение системы — дает оно приоритет вашему процессу или нет

💀 накопленный стейт приложения — может на первом чистом запуске все гладко, а на десятом у юзеров появятся побочки

💀 особенности девайса — на ксяоми перф мог улучшиться, а на самсунгах ухудшиться (так как одна и та же системная API-шка работает по-разному)


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

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🤔5
Во что упороться, если надоел обычный Android #2

Год назад выходила первая часть

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


🌸Native c++.so

Нативные библиотеки нужны далеко не только для драйверов

С помощью них можно повысить скорость работы и создать проблемы реверс-хакерам

А также станет легче изучать исходники низкоуровневых либ, таких как WebView, Sentry, Cronet... на удивление иногда пригождается


🌸ML/AI локальные

Последний год подарил нам кучу ИИ-игрушек, которые можно запускать локально, не заплатив ни цента

Первый уровень — посмотреть API их подключения и возможности

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


🌸CI/CD и системы сборки

Нестареющая классика — пока не изобретут волшебную кнопку "собрать все типы сборок за ноль секунд со всеми комбинациями флагов и версий библиотек из всех мульти-репозиториев, доставить во все альсторы и синхронизировать в жиру", работа будет


🌸Ktor как бэкенд-сервер

Ktor позволяет за пару строк на коленке собрать https/gRPC сервер на Kotlin

Это порой позволяет быстро протестировать сложные клиент-серверные сценарии, не дожидаясь реализации на бэке и не мучаясь с моками в Charles/Proxyman

Ну и начинаешь чувствовать больше общности с бэкендерами


@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍75