This media is not supported in the widget
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
32 16👍3🦄2👎1🔥1👏1
Но еще сложнее следить за жизненным циклом
Одна из самых сложных штук в мобилке, хотя казалось бы
Во-первых, ЖЦ отличается у:
Добавим влияние диалогов/шторок, частично перекрывающих экран
Дальше умножаем это на сложные экраны современных девайсов — раскладушки, двойные экраны, режимы окна к окне...
Складываем с рекомпозицией от Compose, если используете AndroidView внутри Compose или наоборот
И добавляем кейсы, когда быстро прокручиваешь навигацию вперед-назад, и все методы жизненного цикла от разных экранов-элементов вызываются не друг за другом, а в рандомном порядке
Готово, стало сложно
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Выступал тут на DevFest, у меня оттуда остался один полезный слайд про OkHttp-клиент
Коротко:
OkHttp-клиент — самый популярный сетевой клиент на Android, поверх которого часто используют Retrofit
Главное — он умеет много всего из коробки
А возможно это все благодаря Interceptor-ам — цепочке колбеков, позволяющих прочитать/изменить запрос и ответ
Вы можете написать кастомные Interceptor-ы и добавить их в список appInterceptor-ов или networkInterceptor-ов
Или можете залезть в исходники OkHttp и посмотреть на его стандартные Interceptor-ы, в которых как раз и реализована вся вышеперечисленная магия
На картинке:
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍31🔥15⚡3 3
Нашел для себя еще одну крутую комманду adb:
adb shell dumpsys window windows | grep 'mActivityRecord' // в Windows grep можно заменить на find
Она показывает имя открытой Activity
сделал для нее alias:
adbAStack = "adb shell dumpsys window windows | grep 'mActivityRecord"Например, с помощью нее вычислил название активити со списком свернутых приложений в системном лаунчере:
com.sec.android.app.launcher/com.android.quickstep.RecentsActivity Теперь могу открыть это меню прямо через adb (зачем?) или сделать в приложении кнопку "открыть список свернутых приложений" (зачем??)
А если серьезно команда имба, так как по внешнему виду UI не всегда понятно, с какой Activity работаешь
еще про adb:
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍32 8
Dolgo.polo Dev | Денис Долгополов
кстати напоминаю про эти папочки
список там постепенно пополняется📝 , как натыкаюсь на новые каналы
и хожу агитирую шарить по возможности)🪐
список там постепенно пополняется
и хожу агитирую шарить по возможности)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12 3
Многие вероятно слышали про фингерпринт браузера:
-> сложив пару десятков открытых данных о браузере/компьютере пользователя, можно с большой вероятностью идентифицировать пользователя
Такой же фингерпринт без труда можно собрать в мобильном приложении
Недавно узнал два интересных факта:
и заодно выводит значения всех параметров, из которых формируется фингерпринт
Например, в него входят настройки WebGL, высота системных UI-панелей, список установленных плагинов и поддерживаемых видеокодеков
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥9 4
Вместо флагмана новых поколей стоит взять в руки старенький инфиникс с поцарапанным экраном
Находиться нужно в положении полулежа, чтобы поворот экрана срабатывал в самый неожиданный момент
На часах должно быть около 17:00-19:00 вечера, когда устройство в рандомный момент переключается с темной темы на светлую
Язык системы — персидский или японский, время системы строго не московское
При этом стоит переместиться из уютного офиса куда-нибудь в область подвала, иначе сверхскоростной офисный Wi-Fi исказит пользовательский опыт
В идеале в этот момент батарея должна быть практически разряжена, а в списке запущенных приложений обязан находиться Cyberpank 2077, открытый через эмулятор Windows 10, и десяток свернутых браузеров
Также нужно не забыть выдать всем остальным приложениям права на показ всплывающих уведомлений в любом момент времени, чтобы они тоже вставили свои пять копеек
Гугл сервисы отключаем, хуавей кстати тоже
Версия ОС должна быть либо достаточно старая, либо последняя — работать будут одинаково непредсказуемо
Память устройства при этом должна быть забита на 97%. Оставшиеся 3% нужны, чтобы ПЗУ закончилось в случайный момент
Подготовка на этом завершена, можно начинать тестирование
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1😁78👍14🍾9 7🏆4👏1🦄1
Наливал тут кипяток из автомата с водой. Режим "экстра горячая вода для чая" на нем включался только после выполнения сложного ритуала — покрутить колесико, зажать кнопку, пару секунд подумать, и только после этого кипяток начинал литься
Давайте подумаем, где такой же подход стоит использовать в приложении
Если действие потенциально опасно для юзера, нужно его когнитивно нагрузить, чтобы не удалось выполнить это действие на автомате
Как минимум — показать предупреждающий экран и попросить ввести пин-код
Хотя эти действия настолько обыденные, что обычно выполняешь их с той же легкостью, как открытие двери и выключение утюга
Пора придумывать дополнительные усложнения. Ведь пользователь должен чувствовать себя безопасно в нашем приложении, понимать, что мы не дадим ему сделать глупость случайно:
Хороший пример кстати это флоу отмены подписки в яндексе. Случайно точно не нажмешь
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27🦄9 6👍3
Интересный небольшой факт — WebView может загружать страницы без отображения самой WebView на экране
Можно вызывать
WebView(context).loadUrl(url) не отображая WebView на экране и не добавляя ее в версткуС помощью этого можно:
....
еще по теме:
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥32❤🔥6👍4❤1
Старая история, которая уже чут-чут перебродила, но от того не стала менее увлекательной
Немного контекста:
android.webkit.* (WebView) — это java-классы, которые мы используем для взаимодействия с WebView. Являются частью Android SDKChromium — это нативный движок, к которому обращаются java-классы WebView через JNI (Java Native Interface) и который выполняет всю основную работуДело было в 2021 году:
Google выпустил обновление движка Chromium на пользователей. А он сломанный
И у всех гигантов (Gmail, Amazon...) стала крашится WebView в приложении
Помогало одно — откатить WebView через Play Market (или ждать обновления от гугла)
Конец
Кстати, если вам мало боли с WebView в жизни, то в Play Market можно скачать Canary и Beta сборки WebView (Chromium) и переключиться на них. На картинке отзыв на Сanary сборку. Она обновляется, внимание, ежедневно
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
😎8🔥6🤣5👍1
Возможно я проспал этот момент на начальных уроках по Android, но
Application.onCreate() вызывается чаще, чем пользователь запускает приложениеТо есть прям гораздо чаще
Например, если приходит пуш, приложение запускает фоновую работу или система решает прогреть приложение для быстрого запуска — вызовется Application.onCreate()
Вывод:
Application.onCreate(), а первый вызов Activity.onCreate() (если эта логика нужно только для кейсов, когда юзер действительно открыл приложение)Например, возможно ваше приложение логирует открытие приложения в
Application.onCreate(), а по факту пользователь его не открывал, и у вас совершенно фейковые представления о DAU Или, возможно, из Application.onCreate() можно выкинуть инициализацию части библиотек, который не нужны без фактического открытия приложения пользователем
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥14😎5❤🔥1🦄1
Судьба заставила поразбираться в лицензиях на опенсурс, сейчас расскажу, что узнал
Не буду давать названия конкретных лицензий, так как сто процентов в чем-нибудь вас обману. Вместо этого опишу основные моменты, на которые стоит обратить внимание:
- да | нет | в каких случаях да, в каких нет
- да, если авторы хотят попиариться
- нет, если авторы не хотят разрешать пиариться на своем имени
- да | нет | частично да, частично нет
- например, ваш опенсурс проект распространяется по лицензии "А". и вы хотите в нем использовать другой опенсурс проект, распространяемый по лизенции "Б". нужно проверить, совместимы ли лицензии "А" и "Б". если нет, то нужно связываться с автором и решать вопросики
- тут как с правилами использования сайта — для внесения изменений нужно согласие от всех, кто уже успел на них посмотреть
Бонусный факт:
все мы слышали про copyright (копирайт, авторское право) ©
но сущесвуте еще и copyleft (копилефт, авторское лево) — он изображен на картинке поста. если коротко, копилефт лицензиями называют те, которые "заражают" ваш проект и накладывают на него некоторые обязательства (например, выложить все внесенные изменения в опенсурс)
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍4✍1❤🔥1
#рекомендация
@rutheniumos — частный канал об андроид-разработке с упором в безопасность
там выходят лонгриды о дырах в системе и посты о внутреннем устройстве андроида
С чего можно начать:
🔵 Webview в Android 15 — взгляд в будущее
🔵 Как Android могут угрожать вашей конфиденциальности — как использовать обои Android для слежки за пользователями
🔵 Бесшовные обновления в OS Android
@rutheniumos — частный канал об андроид-разработке с упором в безопасность
там выходят лонгриды о дырах в системе и посты о внутреннем устройстве андроида
С чего можно начать:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8🥰2❤🔥1🤡1
Забавно, оказывается, у всех приложений есть свободный доступ к буферу обмена
Каждое приложение может прочитать в любой момент все скопированные за последнее время строки/файлы
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
clipboard.primaryClip.getItemAt(0)
Конечно, гугл предпринимает попытки повысить безопасность:
Начиная с Android 10, доступ к клипбоарду есть только в фореграунде
Начиная с Android 12, система покажет юзеру всплывашку, когда приложение что-то скопирует. Но только один-два раза, потом уведомление перестанет отображаться, чтобы не спамить
А вот рекомендации гугла по повышению секьюрности:
🤡 запретите установку вашего приложения на андроидах ниже 10 версии
🤡🤡 удаляйте скопированные данные из буфера по таймеру (вот куда пропадает инфа из буфера, у меня не шиза)
🤡🤡🤡 помечайте флагом ClipDenoscription.EXTRA_IS_SENSITIVE сенситив информацию (пароли, данные банковских карт....) — это никак не повлияет на доступность этих данных, просто у злоумышленников появится удобный фильтр для поиска
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤡73😁16👍7🔥3❤1
говорят, нужно под каждый праздник обновлять иконку приложения, чтобы пользователи чувствовали развитие приложения и понимали, что его еще не забросили
работает?)
p.s. до нового года осталось пару дней. а у меня как раз осталось несколько историй, которые не успел рассказать в течение года
работает?)
p.s. до нового года осталось пару дней. а у меня как раз осталось несколько историй, которые не успел рассказать в течение года
🔥11🏆7👍3❤🔥1🎉1
🧊 Как у меня угнали telegram-аккаунт
У меня был запасной аккаунт, склад мусора
В какой-то из вечеров, сидя на концерте, увидел сообщение: "Ваш код для входа в telegram: 12345. Никому не сообщайте его"
Ну, сказано-сделано, решил никому не сообщать. Как можно обмануть того, кто ничего не делает?
Тем более такие сообщения иногда приходят в любых соцсетях — может кто-то ошибся номером, может кто-то в тупую перебирает код-пароли на случайных номерах...
После концерта достаю телефон, а имя аккаунта уже сменилось + появился чат со службой доставки, куда активно отправляются сообщения с целью зарегистрировать курьера на этот аккаунт
Поскольку доступ к аккаунту у меня остался, зашел в активные сессии и деактивировал все лишние. Пока думал, как такое могло произойти, и проверял, какие еще методы авторизации включены, кто-то снова запросил пароль и снова вошел в аккаунт
Это повторилось пару раз, пока не перевязал аккаунт к другому номеру
🤡 А теперь разгадка:
Аккаунт был привязан к номеру, симку с которым я кинул в шкаф около года назад, и благополучно про это забыл
Оператор вполне законно расторг со мной договор в одностороннем порядке (возможно даже уведомил меня об этом на тот номер) и продал этот номер кому-то следующему
Мораль — соцсети зло, надо их запретить
@dolgo_polo_dev
У меня был запасной аккаунт, склад мусора
В какой-то из вечеров, сидя на концерте, увидел сообщение: "Ваш код для входа в telegram: 12345. Никому не сообщайте его"
Ну, сказано-сделано, решил никому не сообщать. Как можно обмануть того, кто ничего не делает?
Тем более такие сообщения иногда приходят в любых соцсетях — может кто-то ошибся номером, может кто-то в тупую перебирает код-пароли на случайных номерах...
После концерта достаю телефон, а имя аккаунта уже сменилось + появился чат со службой доставки, куда активно отправляются сообщения с целью зарегистрировать курьера на этот аккаунт
Поскольку доступ к аккаунту у меня остался, зашел в активные сессии и деактивировал все лишние. Пока думал, как такое могло произойти, и проверял, какие еще методы авторизации включены, кто-то снова запросил пароль и снова вошел в аккаунт
Это повторилось пару раз, пока не перевязал аккаунт к другому номеру
Аккаунт был привязан к номеру, симку с которым я кинул в шкаф около года назад, и благополучно про это забыл
Оператор вполне законно расторг со мной договор в одностороннем порядке (возможно даже уведомил меня об этом на тот номер) и продал этот номер кому-то следующему
Мораль — соцсети зло, надо их запретить
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
😁35🤡11✍4👎1🍌1🍓1
Это история уже про основной аккаунт. И она будет больше интересна владельцам каналов из-за специфичного вектора атаки
Как работает взлом:
1. В личку пишет рекламный менеджер бигтеха и предлагает прорекломировать их событие — обычная история
2. Общаетесь, обсуждаете дату и цену, торгуетесь — обычная история
тут кстати бдительность усыпляется жадностью — менеджер соглашается на цену выше рынка (две пачки чипсов вместо одной), предлагает долгосрочное сотрудничество...
3. Когда все обговоренно, просят банковские реквизиты — обычная история
4. Просят подтвердить факт владения каналом, пройти авторизацию в боте/на сайте — вот тут-то и вы и попались, молодой человек
В процессе авторизации через телегу вы случайно и крайне неявно предоставите не публичные данные об аккаунте (номер телефона, имя/ник), а полный или частичный доступ к аккаунту. Например, передадите права на публикацию постов, изменение списка администраторов канала, чтение переписок через telegram api...
Берегите себя и аккаунты своих близких
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯18😎5👍4🤝2🤡1
Мне тут скинули историю с пикабу:
Приложение онлайн-аптеки каждую ночь начало выкачивать по 25 ГБ трафика
Причем случай не единичный, в гугл плей много пользователей пожаловались на перерасход трафика
Точных причин происшествия не нашел, есть только мое предположение:
единственное, это не объясняет, почему приложение, судя по отзывам, отправляет больше трафика, чем загружает
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔16😱5🍾5👍4
с новым годом! 🎁
желаю хорошо отдохнуть и потом еще раз хорошо отдохнуть☕️
желаю хорошо отдохнуть и потом еще раз хорошо отдохнуть
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28❤8👏3🍾3👍1😁1
Нашел ветку в гитхабе, где разработчиков библиотеки OkHttp на протяжении 11 лет (с 2014 года!!) просят поддержать http3, а они сопротивляются
Короткий пересказ:
Разработчики OkHttp отказываются поддерживать http3, потому что это сложно:
I could write a basic implementation of HTTP/1 in about a week.
I could write a basic implementation of HTTP/2 in about a month.
I fear HTTP/3 is larger still; maybe 6 months of work?
потому что нет времени и интереса:
We don't have time or interest to have QUIC in trunk at this time
да и в целом потому что:
The only plan is there is no plan
Их стойкости можно позавидовать
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
😁44👍18🔥3
