Telegram Web
​​Android Studio Flamingo
#android

Тут свежая версия Android Studio перешла в Beta4, а это значит, что самое время посмотреть, что там появилось новенького.

Вот некоторые изменения:

1️⃣ Themed app icons and dynamic color — с появлением Android 13 можно использовать themed app icons (подробнее о них писал тут) и динамических тем. Теперь добавилось превью, что позволяет прямо в IDE посмотреть внешний вид.

2️⃣ Dynamic color preview — дополнение к предыдущему пункту, но для тех, кто использует Compose: можно добавить тег wallpaper для превью, чтобы посмотреть, как будет выглядеть функция с разными фонами пользователя.

3️⃣ Compose Tracing — теперь можно смотреть, насколько качественно работают ваши Compose-функции, правда надо не забыть добавить нужную зависимость в проект.

4️⃣ Network Inspector — крутая фича, которая позволяет подебажить запросы к серверу внутри IDE. Можно изменить запрос, добавить headers или кастомные правила для разных ответов сервера.

5️⃣ App Quality Insights — улучшили фичу, добавили фильтры и возможность закрывать краши прямо из IDE. Удобно, но пока нравится больше смотреть за статистикой в Firebase.

Весь список изменений можно найти тут.
🔥22👍2
👋🏻 Я некоторое время нахожусь в Белграде 🇷🇸
Вдруг из моих подписчиков кто-то находится тут? Буду рад выпить чашку кофе и поговорить про разработку и быт разработчика ☕️
👍13🔥4🤮3🤡2🖕2
​​Lottie Editor
#android

Думаю, что вы слышали о библиотеке Lottie. Если нет — то в нескольких словах опишу её вам: эта библиотека позволяет встравлять готовые анимации из Adobe AE в Android или iOS проект. Чаще всего — это классные стилизованные изображения, которые намного сложнее делать при помощи средств разработки. А ещё есть масса крутых бесплатных изображений.

Возможно вы как и я пропустили, но появился Lottie Editor — инструмент, который позволяет редактировать уже готовые анимации.

Пока возможностей не много, по сравнению с Adobe AE, но для простых изменений — самое то. Можно поменять слои, цвета, текст, а ещё оптимизировать само изображение. Как по мне, отличная штука, особенно для небольших команд. 👍🏻
👍10🔥9
​​Паттерн Command
#android

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

Довольно часто при работе с экранами, вам необходимо передать действия пользователя обратно во ViewModel:
MyModelScreen(
items = item.data,
onSave = viewModel::addMyModel,
modifier = modifier
)


Всё усложняется, когда подобных команд становится больше, и вам требуется передавать не одну, а несколько функций:
MyModelScreen(
items = item.data,
onSave = viewModel::onSaveClicked,
onAdd = viewModel::onAddClicked,
onUpdate = viewModel::onTextUpdate,
onDelete = viewModel::onDeleteClicked,
onList = viewModel::onListClicked,
modifier = modifier
)


Паттерн Command поможет упростить эту зависимость и сделать код более читаемым и в итоге он будет похож на первую реализацию вне зависимости от набора методов:
MyModelCommandScreen(
items = items.data,
modifier = modifier,
commandProcessor = viewModel::processCommand
)


Подробнее можно почитать тут.
🔥11👍4👎3
​​Github RSA SSH host key

Если вы используете GitHub, то инфа для вас. Сегодня ночью GitHub изменил host key для своего сайта, и некоторые пользователи столкнулись с проблемой, связанной с работой GitHub.

Если у вас есть неполадки в работе, то надо перегенерировать ключи и обновить работу репозитория. Всё довольно легко делается, вот вам инструкция.
🔥6🤔31
​​Compose Multiplatform Wizard
#kmm

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

Поддерживается Android, iOS, Desktop и Web. После генерации запускаете ./gradlew run и готово. 🚀

Люблю инструменты, которые упрощают жизнь, так что срочно сохраняйте в закладки.
6🔥3👍2
​​Fastlane с Google Play и Huawei App Gallery
#android

В разработке, помимо написания кода важно автоматизировать большинство рутинных действий. И один из инструментов, который поможет вам это сделать — Fastlane.

Если вы не знакомы с этим замечательным инструментом, то вот вам краткое intro. Эта консольная утилита позволяет при помощи скриптов автоматизировать загрузку релизов, создание скриншотов и т.д. Идея очень простая, но фишка в том, что уже есть достаточно много готовых плагинов, чтобы не писать код самостоятельно.

Но рассмотрим кейс с загрузкой релизов: для автомазации этой рутины существует плагит upload_to_play_store, который очень удобен и легко настраивается: ещё он автоматически заберёт metadata и release-notes для вновь созданных билдов, что суперудобно, если у вас много языков в приложении.

Для Huawei App Gallery не всё так гладко. Есть huawei_appgallery_connect, который довольно легко настраивается, но при этом нельзя загрузить release notes в автоматическом режиме по версии сборки, как у предыдущего плагина. Но и это лучше, чем ничего 🙃 нормальных альтернатив я пока не нашёл.

Помимо этого, можно настроить загрузку тестовых сборок в Firebase, а также Fastlane легко интегрируется в CI, что позволяет вам один раз писать скрипты и использовать их везде, где хочется. 👌
6👍2
​​Inline, noinline в Kotlin
#android #новичкам

Полезная и краткая статья, где описывается разница между такими непонятными для новичков ключевыми словами как inline, noinline, crossinline, reified в Kotlin.

Круто, что автор даёт для каждого из ключевых слов небольшой пример кода, так что разобраться можно довольно быстро. Ну а если недостаточно — дока Kotlin весьма неплохая.
👍11🥰51👎1🥴1
​​Auto-archive для aab
#android

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

🤫 Как это работает?
В момент, когда пользователь пытается удалить приложение, появляется окошко, которое предлагает архивировать приложение вместо полного удаления. Есть пара условий, чтобы всё заработало:
- вы должны выкладывать приложение через aab;
- приложение должно поддерживать архивирование;

К сожалению, не уверен, что фича будет работать в случае, если пользователь удаляет приложение из системы, но может быть эту фичу добавят в одной из будущих версий Android. Тут можно почитать больше деталей об архивации.
👍9
​​Jetpack Compose Lectures
#android

Вы могли пропустить, а ребята из Android Academy выпустили подробный курс про Jetpack Compose. Выглядит прям 🔥

Курс подойдёт для всех, кто только думает тащить Compose в проект (ну или хочет посмотреть, что за зверь такой), а также для тех, кто только начал изучать его.

Тут 8 видео с теоритей, и 8 видео с лайв-кодингом. Ссылка на весь курс тут.

Ребята делают полезное дело, так что не скупитесь на лайки. 🤫
36
​​Вход в приложение
#security #android

Почти в любом приложении, которое хоть как-то связано с хранением и работой с приватными данными, имеется аутентификация: или вход по паролю, или вход по биометрии + паролю.

И кажется, что задача супер простая: добавь сверху экран, который будет появляться при старте приложения, сохрани пароль на устройстве и сверяй с тем, что ввёл пользователь. Но на практике — большинство приложений в большей или меньшей степени реализуют вход некорректно: неправильно хранят пароль, не используют CryptoObject , дают возможность обойти экран входа и т.д.

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

1️⃣ Тут автор рассказывает про пример некорректной авторизации в приложение и про свойства CryptoObject, setUserAuthenticationRequired и о том, как эксплуатировать эти хаки.

2️⃣ Отличное видео, где по шагам описывается процесс создания биометрической авторизации в приложение: разницу между различными классами для авторизации, как затащить alpha-версию библиотеки для входа (удивился, что она до сих пор в alpha) и наконец-то сделать корректный вход по отпечатку.

3️⃣ Библиотека PINkman, которая позволяет добавить вход по пину в приложение: можете не тащить всю либу в проект, но внутри — много крутых идей по корректному хранению пароля в системе. А можете и затащить, если не хочется разбираться.

4️⃣ Статья, где автор описывает ещё одно хитрое свойство — setUserAuthenticationValidityDurationSeconds, которое также может быть использовано как уязвимость для входа.

5️⃣ Ну и напоследок — больше информации про составляющие качественной криптографии в Android: KeyStore, MasterKeys, Blocking, Padding и другие страшные слова.

Конечно, идеальной защиты не существует и от "паяльника" в руках злоумышленника врядли поможет какой-то из методов защиты. Но для всех остальных случаев ваша защита способна защитить приложение и приватные данные пользователя.
🔥17👍64😁1
​​Автоматизация публикации в магазины приложений
#android

Как-то на канале было рассказано о теме, связанной с автоматизацией процессов публикации приложений.
На глаза попалась статья, которая дополняет тот пост и делает автоматизацию ещё более полной.

В статье рассказывается про то, как сделать полной загрузку своих билдов в Google Play и AppGallery. Описывается другой плагин, который делает загрузку в AppGallery более полной. Кажется, что отличное решение.

Лучше может быть только единое решение с большинством магазинов приложений, вдруг кто-то ищет идею для написания CI-таски 😉
👍11
​​Android Studio Hedgehog
#android

Тут пару дней назад вышла canary-версия новой Android Studio — Hedgehog 🦔. Если вдруг тут есть любители попробовать свежие IDE самостоятельно, но можете устанавливать, а для всех остальных — опишу основные новинки.

1️⃣ Визард для Baseline Profiles — любопытная фича, которая позволяет довольно сильно уменьшить время запуска приложения, и теперь можно автоматически генерировать профили для новых модулей. Что ж, будем изучать.

2️⃣ Safe Mode для IDE — возможно полезная фича для тех, кто любит экспериментировать с небезопасными плагинами и конфигурациями. Можно запускать IDE в safe mode и откатить настройки, если что-то пошло не так.

3️⃣ Embedded Layout Inspector — фича, которая позволяет проанализировать экран прямо на вашем устройстве, показать дерево компонентов и сделать процесс дебага View ещё удобнее.

4️⃣ JVM 17 bytecode — теперь у последнего плагина Gradle таргет на JVM 17, так что обновляем свои sourceCompatibility и targetCompatibility.
👍171
​​InsetsX
#compose

Небольшая библиотека, которая позволяет вам шустро настраивать инсеты при использовании Compose Multiplatform для Android и iOS.

Выглядит очень круто, и работает по аналогии со стандартным плагином для Android (отличается только package-name).
Ну и помните, что Compose Multiplatform для iOS пока сырой, так что тащите осторожнее.
👍11💋2🤔1
​​Android Performance — I/O 2023
#android

Думаю все в курсе, недавно прошедшего Google I/O, где было представлено много всего интересного для Android. Однако сегодня я хочу рассказать про новые штуки для улучшения производительности приложения.

1️⃣ Обновления Baseline Profiles — они помогают заметно улучшить время старта приложения, избегая JIT-компиляции. Ребята улучшили процесс создания профилей, добавили шаблон в Android Studio, а также Baseline Profile Gradle plugin. Чтобы лучше разобраться с фичёй — вот вам codelab по теме.

2️⃣ Startup Profiles — вдогонку к предыдущему пункту фича, которая позволяет описать код, который пойдёт в primary dex file вашего приложения, за счёт чего вы уменьшите время его старта.

3️⃣ Android Studio Power Profiler будет особо полезен для приложений, которые используют камеру, GPS и другие датчики. Можно мониторить потребление ими заряда телефона, что поможет в отладке.

Подробнее о всех нововведениях можно почитать тут. 🤓
👍15🤔1
​​Coroutines — неочевидные баги
#kotlin #android

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

Тут рассказывается:

👉 что будет если вызвать tryEmit() при работе с SharedFlow без дополнительной настройки replay и extraBufferCapacity;
👉 что будет с Coroutines, которые вызываются в одном repeatOnLifecycle;
👉 неприятный баг при работе с suspendCancellableCoroutine.

А какие неочевидные баги встречали вы?
12👍6🤔1
​​Профайлинг gradle
#gradle

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

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

В итоге за парочку прогонов сможете выбрать оптимальную конфигурацию.
👍12
App Size Metrics на CI
#android #ci #gradle

Размер приложения — очень важная метрика, которой мы часто пренебрегаем. А если в какой-то момент размер APK начинает беспокоить, и мы заводим себе задачу в спринт, чтобы уменьшить его размер, то всё равно со временем всё возвращается обратно.

Есть статистика, которая говорит, что увеличение размера apk на 6mb уменьшает количество загрузок на 1%. 🫣 В процентах кажется, что это маленькая величина, но на деле — это могут быть сотни, а то и тысячи юзеров.

Хорошая статья, где рассказывается о том, как сделать размер apk меньше — тут, но впервые мне на глаза попадается плагин, который поможет контролировать размер приложения при помощи CI.

Идея довольно простая: при каждом PR будет запускаться job, которая проверит разницу между последним коммитом и вашими изменениями, и напишет разницу. Это сразу поможет проверить, всё ли хорошо с добавляемыми изменениями или нет. Ну и у вас не будет теперь тех.долга для того, чтобы размер приложения уменьшать. Сплошные плюсы 🤓.

Больше деталей, как всё настроить можно прочитать тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍1
​​Network Inspector в Flamingo
#android

В Android Studio Flamingo появилась полезнейшая фича — Network Inspector.
Она сильно упрощает дебаг запросов к приложению: ведь можно менять формат запроса, Body, Headers, Response... в целом, почти всё, для чего вам нужен был Charles.

Небольшая статья с демо как использовать эту фичу для себя.
🔥18👍3
2025/08/25 05:35:04
Back to Top
HTML Embed Code: