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

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

По вопросам/рекламе: @dolgopolovdenis
Download Telegram
#рекомендация

Есть такой канал про пока еще мобильную разработку – Everlasting Loops

В нём можно встретить как популярные вопросы с собеседований, так и неочевидные инсайты, особенности IDE-шного тулинга, контрибьют в Kotlin (ну… как-нибудь), или же просто фан-факты

А также почему ломается Unity, зачем котлину public и чего можно ожидать от лямбды

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

Если crossinline уже выучил
🔥9👍5🦄4🫡1
🧬 Стих

Осторожно, кринж 😳

Попросил нейросеть написать стих про Android-разработчика. Она выполнила задание с первого раза:


Fragment-осколки в ViewModel-реке,
LiveData танцует в Lifecycle-ручье.
Jetpack-крылами взлетает за грань,
Где Room хранит секреты, как древний талисман.

Dagger-остротой разрезает тьму,
Coroutines плетут асинхронную мглу.
RecyclerView — его ритмы-маски,
А в Stacktrace — тайный шифр Пизанской башни.

ANR-демоны грызут тишину,
Но Proguard-магия стирает войну.
CI/CD — его алхимия в бойне,
Чтоб APK стал цифровой иконой.

Flutter-соперник? Не страшен мираж —
Compose-канвасом он рисует пейзаж.
API-бездны покоряет в прыжке,
Где Firebase звёзды горят на песне.

Его Git-хроники — вечный полёт,
Где Merge Conflict — лишь тень на восход.
Android-магнат, в его коде — эпоха,
Сквозь NullPointer — к звёздам прорвётся вздох! 🚀

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👏25😁14🗿8🔥4💊4
🐌 Чек-лист замера перфа

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

🐌 Запуск приложения
🔵отдельный вопрос — откуда до куда мерить запуск, тут есть простор для творчества
🔵как минимум надо мерить Application.onCreate() и инициализацию библиотек

🐌 Открытие нового экрана
🔵момент от нажатия пользователем кнопки до отрисовки первого полезного UI-элемента
🔵часто включает в себя сетевой запрос на бэк — довольно рандомная по времени вещь
🔵желательно разбить эту метрику на подэтапы

🐌 Скорость сетевых запросов на бэк
🔵подготовка запроса и обработка респонса
🔵установка соединения (DNS/TCP/TLS)
🔵время отправки/чтения байтов по интернету
🔵время работы бэка (когда запрос уже отправлен, но ответ еще не начал считываться)
🔵загруженность установленных соединений (не пора ли увеличить connectionPool)
🔵процент попадания в кэш
🔵процент успешных запросов к упавшим
🔵размеры запросов

🐌 FPS — количество кадров, которые успевают отрисоваться в секунду
🔵интересны места, где идет просадка FPS

🐌 Видео-контент
🔵скорость отрисовки первого кадра
🔵процент подвисаний
🔵скорость загрузки чанков
🔵все вышеперечисленное для разных форматов и битрейтов

🐌 Картинки
🔵всё, как и для обычных сетевых запросов, но с разбиением по cdn-ам и форматам изображений

Еще что-то забыл?

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1512
✂️ trim()

Функция String.trim() вырезает пробелы в начале и в конце строки:

" а " -> "a"

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


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

И только после микроинсульта понимаешь, что это из-за лишнего пробела в названии " epic/123"


Или ищешь печеньки 🍪 в онлайн-магазине, а " печеньки" там нет, есть только "печеньки"

Или логинишься с помощью логина и пароля, а для аккаунта "терминатор6200 " почему-то логин не найден

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19😁15👍4❤‍🔥2🍌2
😄 Очепятка в стандарте

referer — стандартный хэдер для http-запросов

он показывает, откуда пользователь попал на страницу/в приложение

например, referer = google.com ознаечает, что пользователь попал на сайт/в приложение из гугла. полезная штука для аналитики


но забавно другое — слова referer не существует, правильное написание — referrer (с двумя rr)

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


например, Cronet (сетевой клиент от гугла для Android, iOS и не только) тупо вырезает хэдер referer 🧠 из запроса. При этом referrer спокойно дает отправить

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
😁22👍8🤯7❤‍🔥1🤣1
🔓 Почему нельзя подключаться к публичным Wi-Fi в Макдональдсе?


С дества слышал, что подключаться к общественным Wi-Fi небезопасно. И это утверждение у меня никогда не билось с фактом "https трафик зашифрован, ведь s — это security" (ну или TLS/SSL)

Если весь трафик зашифрован умными алгоритмами, то какая-разница, через какие радиоволны подключаюсь к бэку? 🤯


Разгадка нашлась простая — проблема в атаке man in the middle (мужик в середине)


Это не какая-то конкретная уязвимость, а весь спрект потенциальных проблем

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

🔵подменить DNS -> подменить итоговый IP сайта
🔵понизить соединение с https до http
🔵средиректить на произвольный url
🔵подменить публичный ключ шифрования (сертификат)


Естественно, все не так просто, и на произвольном сайте такое злодей не провернет. Нужно целое стечение обстоятельств, несколько допущенных дыр, чтобы любая из атак стала возможной. Но доступ к Wi-Fi, через который устанавливается соединение, повышает шанс этой атакой воспользоваться, ведь трафик льется через роутер как через прокси


А дальше начинается самое интересное — центры сертификации, разные версии SSL, шифрование трафика через VPN, дополнильные проверки IP браузером — огромный мир борьбы с мужиком в центре


Кстати проблема man in the middle справедлива и для мобильных приложений — существует не так уж много способов безопасно передать информацию между двумя приложеними, не дав кому-то посередине ее перехватить

@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13🦄9👍52🤡2❤‍🔥1😎1
TLS / SSL / SSL Pinning / mTLS на пальцах

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



Первый запрос к бэку всегда особенный — на нем устанавливается соединение и происходит обмен информацией для шифрования трафика

TLS / SSL — протоколы шифрования
SSL — старый
TLS — новый (самая крутая версия 1.3)

Один из этапов шифрование — передача публичного ключа шифрования вместе с сертификатом

💡 Сертификат — это файлик с уникальным публичным ключем, который владелец домена (например, ya.ru) получает от центра сертификации

💡 Центр сертификации — организация, которая выдает сертификаты доменам и потом проверяет их


Так вот, бэк передает свой сертификат на мобилку. Мобилка идет к центру сертификации и спрашивает:

Точно ли этот сертификат принадлежит этому домену?


Если все ок, то с помощью этого сертификата трафик шифруется

➡️ стороннее лицо (центр сертификации) подтверждает, что мы общаемся напрямую с ya.ru

Это и есть SSL / TLS (если сильно упрощать)

продолжение
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19🌭2😎1
SSL Pinning

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

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


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

Там все просто — в коде указываем данные сертификата, и начинаем общаться с бэком только если он прислал этот же сертификат при установке соединения

В этой схеме приложение само является центром сертификации, так как само проверяет сертификат



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


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


mTLS

Тут идея в том, чтобы передавать сертификат не только с бэка на мобилку, но и с мобилки на бэк

В код мобилки зашивается сертификат, который при установки соединения отправляется на бэк.

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


🔵защищаем бэк от DDOS, даем ему возможность игнорировать запросы без сертификата


🔵добавляется еще один шаг при установке соединения -> может негативно сказаться на скорости сетевых запросов (тратим дополнительные миллисекунды)

первая часть поста
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍5😎2🌚1
Короткий топ технологий


гибкость 👇

🔵низкоуровневая разработка
🔵нативная разработка
🔵кросс-платформа
🔵AI-вайб-кодинг
🔵AI+вайб-кодинг
🔵no-code
🔵шаблоны
🔵нам IT-отдел не нужон, а логотип дочка нарисует

time to market 👆


@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆21😁17🤡4
🐦‍⬛️ Как передать секрет между приложениями безопасно

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

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


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


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

🔵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