Mock API response с Retrofit
#android
На практике частенько бывает так, что нам приходится добавлять какую-то фичу в приложение в момент, когда ещё нет backend.
В таком случае приходится делать mock для нужных нам запросов, и существует несколько вариантов:
👉 попросить backend сделать mock — вариант, в котором нам не придётся делать лишнюю работу, однако не всегда возможный, если команда backend занята иными задачами;
👉 сделать mock через Postman — хорошее решение, которое создаст имитацию реального сервера, но придётся немного изучить документацию;
👉 сделать mock через Firebase — аналогичное решение, но в рамках другого сервиса;
👉 сделать mock через Retrofit — далеко не все знают, что мы можем использовать кастомный
Можете покидать свои решения в комментариях. 😏
#android
На практике частенько бывает так, что нам приходится добавлять какую-то фичу в приложение в момент, когда ещё нет backend.
В таком случае приходится делать mock для нужных нам запросов, и существует несколько вариантов:
👉 попросить backend сделать mock — вариант, в котором нам не придётся делать лишнюю работу, однако не всегда возможный, если команда backend занята иными задачами;
👉 сделать mock через Postman — хорошее решение, которое создаст имитацию реального сервера, но придётся немного изучить документацию;
👉 сделать mock через Firebase — аналогичное решение, но в рамках другого сервиса;
👉 сделать mock через Retrofit — далеко не все знают, что мы можем использовать кастомный
Interceptor, чтобы переопределять нужные нам запросы и возвращать необходимый результат. Подробнее о том, как лучше это организовать в своём проекте можно почитать тут.Можете покидать свои решения в комментариях. 😏
👍15👎2
10 неизвестных инструментов для Android-разработки
#android
Люблю порой читать всякие топы и рейтинги, в них иногда попадаются полезные штуки, о которых ты не знал. Вот очередная статья с неизвестными инструментами для работы с Android, и тут есть некоторые, которые захотелось поставить и потестировать. Все инструменты бесплатные и open source.
1️⃣ stackzy — приложение, которое позволяет посмотреть используемые зависимости и разрешения любого приложения. Помимо того, что оно красивое, так еще и написано на современном стеке и компонентах: Compose Desktop, MVVM, Coroutines & Flow.
💡Забавный факт: приложение использует Google Sheet в качестве backend.
2️⃣ v9 — некоторые должны помнить 9-patch файлы, которые динамически и автоматически изменяют размер растровых изображений в соответствии с тем, что внутри и размером экрана. Есть подобный инструмент для Path, который делает похожие штуки.
3️⃣ Glance — инструмент для просмотра содержимого базы данных вашего приложения. Выглядит как полезный инструмент для тестирования, а подключается по аналогии с LeakCanary, которым вдохновлялись при создании этой библиотеки.
4️⃣ adb-tools-mac — всплывающее меню для работы с Android-устройствами для MacOS. Может быть полезно вашим тестировщикам (разработчиков подобный плагин есть внутри Android Studio).
5️⃣ name-that-color-desktop — почти бесполезное, но забавное приложение, которое именует за вас цвета по отправленному hex-коду. Подобное есть ещё тут, так что приложение ставить не обязательно.
6️⃣ Gradle Task Tree — Gradle plugin, который построит дерево вызванных задач для конкретной команды. Полезная вещь для дебага времени билда приложения.
#android
Люблю порой читать всякие топы и рейтинги, в них иногда попадаются полезные штуки, о которых ты не знал. Вот очередная статья с неизвестными инструментами для работы с Android, и тут есть некоторые, которые захотелось поставить и потестировать. Все инструменты бесплатные и open source.
1️⃣ stackzy — приложение, которое позволяет посмотреть используемые зависимости и разрешения любого приложения. Помимо того, что оно красивое, так еще и написано на современном стеке и компонентах: Compose Desktop, MVVM, Coroutines & Flow.
💡Забавный факт: приложение использует Google Sheet в качестве backend.
2️⃣ v9 — некоторые должны помнить 9-patch файлы, которые динамически и автоматически изменяют размер растровых изображений в соответствии с тем, что внутри и размером экрана. Есть подобный инструмент для Path, который делает похожие штуки.
3️⃣ Glance — инструмент для просмотра содержимого базы данных вашего приложения. Выглядит как полезный инструмент для тестирования, а подключается по аналогии с LeakCanary, которым вдохновлялись при создании этой библиотеки.
4️⃣ adb-tools-mac — всплывающее меню для работы с Android-устройствами для MacOS. Может быть полезно вашим тестировщикам (разработчиков подобный плагин есть внутри Android Studio).
5️⃣ name-that-color-desktop — почти бесполезное, но забавное приложение, которое именует за вас цвета по отправленному hex-коду. Подобное есть ещё тут, так что приложение ставить не обязательно.
6️⃣ Gradle Task Tree — Gradle plugin, который построит дерево вызванных задач для конкретной команды. Полезная вещь для дебага времени билда приложения.
🔥9👍4
Тулзы для анализа Android-приложений
#android #security
Тут ребята из Digital Security делятся целым набором инструментов для проверки Android-приложений. Про многие из них не слышал, уверен, что и вам будет интересно взять что-то себе на вооружение:
💡прокси — для анализа трафика используется три инструмента: BurpSuite, MitmProxy и OWASP ZAP. Рекомендуется начать работу с BurpSuite как с наиболее простого и понятного инструмента.
💡статический анализ — JADX для анализа классов и ресурсов, Apktool для работы с текущими ресурсами и ассетами, ByteCode Viewer — если первая тулза не справляется с декомпиляцией классов, Androguard удобен для построения графов классов.
💡динамический анализ — Frida для подключения на лету к приложению и внедрению в него своего кода, Objection и Medusa как доволнительный набор инструментов для Frida.
Ещё больше инструментов и скриншотов можно найти в статье у ребят. Обязательно в закладки!
#android #security
Тут ребята из Digital Security делятся целым набором инструментов для проверки Android-приложений. Про многие из них не слышал, уверен, что и вам будет интересно взять что-то себе на вооружение:
💡прокси — для анализа трафика используется три инструмента: BurpSuite, MitmProxy и OWASP ZAP. Рекомендуется начать работу с BurpSuite как с наиболее простого и понятного инструмента.
💡статический анализ — JADX для анализа классов и ресурсов, Apktool для работы с текущими ресурсами и ассетами, ByteCode Viewer — если первая тулза не справляется с декомпиляцией классов, Androguard удобен для построения графов классов.
💡динамический анализ — Frida для подключения на лету к приложению и внедрению в него своего кода, Objection и Medusa как доволнительный набор инструментов для Frida.
Ещё больше инструментов и скриншотов можно найти в статье у ребят. Обязательно в закладки!
🔥10👍2
DSL type-safe builders
#kotlin
Подробная статья, которая рассказывает о Kotlin DSL и её применении в реальных проектах.
Будет полезно, если вы никогда не слышали об этом инструменте или не понимаете, где его можно применить. Множество примеров из других приложений и проектов.
В общем, хороший кандидат для того, чтобы добавить в закладки ☺️
#kotlin
Подробная статья, которая рассказывает о Kotlin DSL и её применении в реальных проектах.
Будет полезно, если вы никогда не слышали об этом инструменте или не понимаете, где его можно применить. Множество примеров из других приложений и проектов.
В общем, хороший кандидат для того, чтобы добавить в закладки ☺️
🔥8👍2🍓2
Design of Kotlin Coroutines
#kotlin
Сегодня я к вам с хорошей статьей, где автор рассказывает о том, как устроены Coroutines под капотом.
Суперполезно понимать, как работают часто используемые нами инструменты под капотом, ведь это поможет гораздо лучше понимать потенциальные проблемы или особенности при использовании.
В статье много примеров кода, а также разбор почти всех методов для Coroutines:
#kotlin
Сегодня я к вам с хорошей статьей, где автор рассказывает о том, как устроены Coroutines под капотом.
Суперполезно понимать, как работают часто используемые нами инструменты под капотом, ведь это поможет гораздо лучше понимать потенциальные проблемы или особенности при использовании.
В статье много примеров кода, а также разбор почти всех методов для Coroutines:
launch(), start(), invoke(), startCoroutineCancellable(), resumeWithCancellable(), resumeWith(), invokeSuspend(). 🤓👍7❤🔥4
Select в Kotlin Coroutines
#kotlin
Давненько на канале не появлялось сообщений. 🙄 Но я снова с вами, и сегодня предлагаю обсудить ключевое слово select, но только не в контексте SQL-запросов, а в контексте Coroutines.
В мобильной разработке его можно использовать для кейсов, когда у нас есть несколько suspend-функций, но нас интересует результат только той, которая завершится первой.
Небольшой пример:
Функции data1 и data2 — это простейшие вызовы с delay:
В общем, ещё один суперполезный инструмент при использовании Coroutines. Подробнее можно почитать тут.
#kotlin
Давненько на канале не появлялось сообщений. 🙄 Но я снова с вами, и сегодня предлагаю обсудить ключевое слово select, но только не в контексте SQL-запросов, а в контексте Coroutines.
В мобильной разработке его можно использовать для кейсов, когда у нас есть несколько suspend-функций, но нас интересует результат только той, которая завершится первой.
Небольшой пример:
val winner = select<String> {
data1().onAwait { it }
data2().onAwait { it }
}
println("The winner = $winner") // prints "The winner = Hello"Функции data1 и data2 — это простейшие вызовы с delay:
fun data1() = GlobalScope.async {
delay(1000)
"Hello"
}
fun data2() = GlobalScope.async {
delay(2000)
"World"
}В общем, ещё один суперполезный инструмент при использовании Coroutines. Подробнее можно почитать тут.
🔥13🍾8👍5👌1🏆1
Дизайн система с Jetpack Compose
#compose
В своём текущем проекте думаем о добавлении дизайн системы, и мне попалась полезная статья, которая описывает, как сделать такую систему на Jetpack Compose.
Вообще, с ростом приложения дизайн система крайне важна: она помогает переиспользовать существующие компоненты и быстро находить несоответствия в текущем компоненте.
Кроме этого, есть ещё несколько преимуществ:
👉 общий язык между командой дизайнеров и разработчиков;
👉 единственный "источник истины" при вёрстке;
👉 изменения в нижнем слое мгновенно изменяют состояние всех остальных слоёв;
👉 расширяемость: все более сложные компоненты состоят из множества маленьких;
Рекомендую ознакомиться со статьёй, где автор подробно описывает, как должна выглядеть подобная система на Compose.
Поделитесь опытом: помогла ли вам дизайн-система улучшить процессы между командами. Или скиньте в комментариях ещё больше полезных статей с прикладным опытом для построения такой системы.
#compose
В своём текущем проекте думаем о добавлении дизайн системы, и мне попалась полезная статья, которая описывает, как сделать такую систему на Jetpack Compose.
Вообще, с ростом приложения дизайн система крайне важна: она помогает переиспользовать существующие компоненты и быстро находить несоответствия в текущем компоненте.
Кроме этого, есть ещё несколько преимуществ:
👉 общий язык между командой дизайнеров и разработчиков;
👉 единственный "источник истины" при вёрстке;
👉 изменения в нижнем слое мгновенно изменяют состояние всех остальных слоёв;
👉 расширяемость: все более сложные компоненты состоят из множества маленьких;
Рекомендую ознакомиться со статьёй, где автор подробно описывает, как должна выглядеть подобная система на Compose.
Поделитесь опытом: помогла ли вам дизайн-система улучшить процессы между командами. Или скиньте в комментариях ещё больше полезных статей с прикладным опытом для построения такой системы.
🔥8
Kotlin и bytecode
#kotlin
Полезная статья, где автор рассматривает фичи Kotlin со стороны байткода.
Кроме этого, тут есть несколько полезных штук, которые также освещены:
👉 что такое Java Virtual Machine и её спецификация;
👉 почему фичи Java и Kotlin совместимы;
👉 как выглядят основные фичи Kotlin в байткоде.
#kotlin
Полезная статья, где автор рассматривает фичи Kotlin со стороны байткода.
Кроме этого, тут есть несколько полезных штук, которые также освещены:
👉 что такое Java Virtual Machine и её спецификация;
👉 почему фичи Java и Kotlin совместимы;
👉 как выглядят основные фичи Kotlin в байткоде.
👍6🤩1
KMM в Beta
#kmm
Отличные новости. Пару дней назад, команда Kotlin официально перевела KMM в Beta. А это значит, что теперь не будет фундаментальных изменений в самом фреймворке, ребята работают над улучшением стабильности текущих фич.
А тут ещё Google подоспел с официальным апдейтом некоторых мультиплатформенных Jetpack-библиотек, начали с Collections и DataStore, уверен, что скоро подоспеют и другие. Вдруг мы увидим мультиплатформенный Room 😁.
Ну а я очень верю в KMM и желаю команде успехов. 😉
#kmm
Отличные новости. Пару дней назад, команда Kotlin официально перевела KMM в Beta. А это значит, что теперь не будет фундаментальных изменений в самом фреймворке, ребята работают над улучшением стабильности текущих фич.
А тут ещё Google подоспел с официальным апдейтом некоторых мультиплатформенных Jetpack-библиотек, начали с Collections и DataStore, уверен, что скоро подоспеют и другие. Вдруг мы увидим мультиплатформенный Room 😁.
Ну а я очень верю в KMM и желаю команде успехов. 😉
🔥14👍3
А давайте опросик: будете использовать Kotlin Multiplatform Mobile?
Anonymous Poll
13%
Уже используем
9%
Будем в ближайшее время
14%
Подождём release
30%
Изучаем, но пока нет
33%
Не планируем
👌6❤1
Android Studio Shortcuts. Codebase
#новичкам #android
Очередной список рекомендаций, а точнее — список горячих клавиш, которые касаются быстрого перехода по кодовой базе.
Клавиши действительно полезные, и большинство из них вы будете использовать на практике.
Вот несколько из тех сочетаний, что описывает статья.
1️⃣ Cmd + Click — одно из наиболее полезных сочетаний. При клике на функцию, вы переходите на её объявление, а при клике на интерфейс — в реализацию интерфейса. Но не все знают, что очень удобно использовать это же сочетание для навигации в Dagger + Hilt.
2️⃣ Double Shift — ещё одно удобнейшее и распространённое сочетание клавиш. Попробуйте при поиске использовать Camel case search. Например, BLPaVM вернёт BlueLinePackingViewModel. А ещё — попробуйте ввести SignInFragment#42, и вы перейдёте на 42 строку фрагмента для авторизации.
3️⃣ Cmd + Shift + F — удобнейший быстрый поиск по вашей кодовой базе.
4️⃣ Cmd + L — быстрый переход на нужную вам строку кода в вашем проекте.
5️⃣ Cmd + E — показ последний файлов с которыми вы взаимодействовали.
Буду рад, если напишите свои любимые клавиши в комментариях. ☺️
#новичкам #android
Очередной список рекомендаций, а точнее — список горячих клавиш, которые касаются быстрого перехода по кодовой базе.
Клавиши действительно полезные, и большинство из них вы будете использовать на практике.
Вот несколько из тех сочетаний, что описывает статья.
1️⃣ Cmd + Click — одно из наиболее полезных сочетаний. При клике на функцию, вы переходите на её объявление, а при клике на интерфейс — в реализацию интерфейса. Но не все знают, что очень удобно использовать это же сочетание для навигации в Dagger + Hilt.
2️⃣ Double Shift — ещё одно удобнейшее и распространённое сочетание клавиш. Попробуйте при поиске использовать Camel case search. Например, BLPaVM вернёт BlueLinePackingViewModel. А ещё — попробуйте ввести SignInFragment#42, и вы перейдёте на 42 строку фрагмента для авторизации.
3️⃣ Cmd + Shift + F — удобнейший быстрый поиск по вашей кодовой базе.
4️⃣ Cmd + L — быстрый переход на нужную вам строку кода в вашем проекте.
5️⃣ Cmd + E — показ последний файлов с которыми вы взаимодействовали.
Буду рад, если напишите свои любимые клавиши в комментариях. ☺️
🔥9👍3
Как работает reified?
#kotlin
Kotlin предлагает множество крутых фичей, которые делают написание кода проще и удобнее. reified — одна из них, и так как подобная функция есть далеко не во всех языках программирования, то многие разработчики не совсем понимают, для чего им она нужна.
💡Давайте рассмотрим пару кейсов, когда мы можем сделать наш код чище и более "Kotlin-style".
С reified непосредственно связано понятие inline функций и использование generics. При их использовании может потребоваться знание того, какого типа класс мы используем. Рассмотрим пример маппинга json в нужный нам класс:
Чтобы исправить ошибку при компилировании, у нас есть две опции.
1️⃣ Передавать класс в параметрах. Тогда наша функция будет выглядеть так:
А её вызов будет таким:
2️⃣ Использовать reified. Тогда всё станет сильно удобнее и красивее:
А вызов будет таким:
Как мы видим, второй вариант выглядит гораздо более удобным для использования, хотя наш пример — довольно простая функция. В более сложных кейсах это преимущество может быть ещё заметнее.
Больше подробностей о reified можно найти в этой небольшой статье. 🤓
#kotlin
Kotlin предлагает множество крутых фичей, которые делают написание кода проще и удобнее. reified — одна из них, и так как подобная функция есть далеко не во всех языках программирования, то многие разработчики не совсем понимают, для чего им она нужна.
💡Давайте рассмотрим пару кейсов, когда мы можем сделать наш код чище и более "Kotlin-style".
С reified непосредственно связано понятие inline функций и использование generics. При их использовании может потребоваться знание того, какого типа класс мы используем. Рассмотрим пример маппинга json в нужный нам класс:
fun <T> String.toKotlinObject(): T {
val mapper = jacksonObjectMapper()
//does not compile!
return mapper.readValue(this, T::class.java)
}Чтобы исправить ошибку при компилировании, у нас есть две опции.
1️⃣ Передавать класс в параметрах. Тогда наша функция будет выглядеть так:
fun <T: Any> String.toKotlinObject(c: KClass<T>): T {
val mapper = jacksonObjectMapper()
return mapper.readValue(this, c.java)
}А её вызов будет таким:
jsonTypeAsString.toKotlinObject(MyJsonType::class).2️⃣ Использовать reified. Тогда всё станет сильно удобнее и красивее:
inline fun <reified T: Any> String.toKotlinObject(): T {
val mapper = jacksonObjectMapper()
return mapper.readValue(this, T::class.java)
}А вызов будет таким:
json.toKotlinObject<MyJsonType>(). Как мы видим, второй вариант выглядит гораздо более удобным для использования, хотя наш пример — довольно простая функция. В более сложных кейсах это преимущество может быть ещё заметнее.
Больше подробностей о reified можно найти в этой небольшой статье. 🤓
👍28👎1
Themed App Icons
#android
С релизом Android 13 у разработчиков появилась возможность обновить свои иконки, сделав их максимально похожими на ту тему, которая есть у пользователя в системе.
💡 Сейчас таких приложений довольно немного, а зря, ведь поддержку добавить довольно просто. Для этого необходимо прописать
Больше информации про иконки, про то, как сделать поддержку разных иконок приложения можно найти в этой статье.
#android
С релизом Android 13 у разработчиков появилась возможность обновить свои иконки, сделав их максимально похожими на ту тему, которая есть у пользователя в системе.
💡 Сейчас таких приложений довольно немного, а зря, ведь поддержку добавить довольно просто. Для этого необходимо прописать
monochrome-атрибут в adaptive-icon. Больше информации про иконки, про то, как сделать поддержку разных иконок приложения можно найти в этой статье.
👍12❤2🔥1
Play Console updates for app's delivery performance
#google #android
Недавняя статья, где Google рассказывает о неочевидных, но полезных разработчикам фичах, которые можно взять из Google Console. По большей степени они связаны с aab-форматом релиза.
1️⃣ Release delivery — при загрузке релиза вы можете увидеть примерный размер загружаемого приложения у пользователей, а также сравнение с предыдущим релизом.
2️⃣ Feature modules — если вы используете такие фичи, как Play Asset Delivery или Play Feature Delivery, то информацию о том, как они загружаются пользователями, можно увидеть на странице статистики.
3️⃣ Freshness — раздел статистики, который показываем вам, как быстро пользователи мигрируют с одного релиза на более новый. Если вдруг эта метрика слишком низкая, то можно использовать In-app updates API.
4️⃣ Детали по конкретному девайсу — можно определить, какой размер файла скачивается на конкретном устройстве.
Чуть больше фич, а также скриншотов можно найти непосредственно в статье.
#google #android
Недавняя статья, где Google рассказывает о неочевидных, но полезных разработчикам фичах, которые можно взять из Google Console. По большей степени они связаны с aab-форматом релиза.
1️⃣ Release delivery — при загрузке релиза вы можете увидеть примерный размер загружаемого приложения у пользователей, а также сравнение с предыдущим релизом.
2️⃣ Feature modules — если вы используете такие фичи, как Play Asset Delivery или Play Feature Delivery, то информацию о том, как они загружаются пользователями, можно увидеть на странице статистики.
3️⃣ Freshness — раздел статистики, который показываем вам, как быстро пользователи мигрируют с одного релиза на более новый. Если вдруг эта метрика слишком низкая, то можно использовать In-app updates API.
4️⃣ Детали по конкретному девайсу — можно определить, какой размер файла скачивается на конкретном устройстве.
Чуть больше фич, а также скриншотов можно найти непосредственно в статье.
👍4
Object expressions и declarations
#kotlin
Недавно обнаружил для себя несколько интересных применений object в Kotlin. Как ни странно, обо всех сказано в официальной документации, но на практике я не часто встречал их применение.
1️⃣Создание анонимного класса с нуля. Вдруг у вас будут кейсы (если подскажите, какие, то буду рад), когда вам необходимо создать объект с нуля без объявления класса. Вот пример:
А ещё можно сделать вот такие мудрёные конструкции:
2️⃣ Object как Singleton — довольно распространённый кейс, когда вы делаете аналог синглтона Java в Kotlin.
3️⃣ Data objects — экспериментальная, но любопытная фича, позволяющая делать так:
А посмотреть все применения Object можно как раз в статье. 🤓
#kotlin
Недавно обнаружил для себя несколько интересных применений object в Kotlin. Как ни странно, обо всех сказано в официальной документации, но на практике я не часто встречал их применение.
1️⃣Создание анонимного класса с нуля. Вдруг у вас будут кейсы (если подскажите, какие, то буду рад), когда вам необходимо создать объект с нуля без объявления класса. Вот пример:
val helloWorld = object {
val hello = "Hello"
val world = "World"
// object expressions extend Any, so override is required on toString()
override fun toString() = "$hello $world"
}А ещё можно сделать вот такие мудрёные конструкции:
open class A(x: Int) {
public open val y: Int = x
}
interface B { /*...*/ }
val ab: A = object : A(1), B {
override val y = 15
}2️⃣ Object как Singleton — довольно распространённый кейс, когда вы делаете аналог синглтона Java в Kotlin.
3️⃣ Data objects — экспериментальная, но любопытная фича, позволяющая делать так:
data object MyObject
fun main() {
println(MyObject) // MyObject
}А посмотреть все применения Object можно как раз в статье. 🤓
👍12
Жизнь в Нидерландах 🇳🇱
#интервью #экспаты
На канале иногда выходят интервью с разработчиками, которые переехали жить и работать в другие страны. Сегодня у вас есть возможность задать свой вопросы про Нидерланды 🇳🇱.
Наш гость — Георгий Могелашвили — engineering manager в Shopify и основатель сервиса поиска наставников GetMentor.dev.
Георгий, переехал в Нидерланды из Москвы 8 лет назад, живет в Харлеме (Х, не Г), но до сих пор не выучил голландский язык. 🙂
Ваши вопросы вы можете задать тут, так что не упустите эту замечательную возможность. 🙃
#интервью #экспаты
На канале иногда выходят интервью с разработчиками, которые переехали жить и работать в другие страны. Сегодня у вас есть возможность задать свой вопросы про Нидерланды 🇳🇱.
Наш гость — Георгий Могелашвили — engineering manager в Shopify и основатель сервиса поиска наставников GetMentor.dev.
Георгий, переехал в Нидерланды из Москвы 8 лет назад, живет в Харлеме (Х, не Г), но до сих пор не выучил голландский язык. 🙂
Ваши вопросы вы можете задать тут, так что не упустите эту замечательную возможность. 🙃
🔥11💩8😁1
Android 13. Выбор кастомного языка
#android
Ребята из Google решили добавить одну из самых запрашиваемых (по их статистике, конечно) фичу — выбор отдельного языка для приложения.
То есть, если вы хотите, чтобы одно из ваших приложений было на английском языке, а при этом вся система была на русском, то в системных настройках приложения можно выбрать любой язык из списка. Звучит круто, потому что:
- не все приложения сейчас предоставляют выбор отдельного языка внутри приложения;
- не все приложения ставят дефолтным английский язык;
Для разработчиков всё не очень сложно. Надо будет добавить
Больше деталей о фиче можно взять тут.
#android
Ребята из Google решили добавить одну из самых запрашиваемых (по их статистике, конечно) фичу — выбор отдельного языка для приложения.
То есть, если вы хотите, чтобы одно из ваших приложений было на английском языке, а при этом вся система была на русском, то в системных настройках приложения можно выбрать любой язык из списка. Звучит круто, потому что:
- не все приложения сейчас предоставляют выбор отдельного языка внутри приложения;
- не все приложения ставят дефолтным английский язык;
Для разработчиков всё не очень сложно. Надо будет добавить
locale_config.xml в приложение со списком поддерживаемых языков, обновить библиотеки androidx до последних версий и взять инфу о выбранном языке. Больше деталей о фиче можно взять тут.
👍18👎1
Прокачиваем build noscripts
#android
Подробнейшая статья, в которой автор рассказывает о том, как лучше управлять зависимостями и скриптами в любых по размеру приложениях. Тут целый набор советов, можно взять все или только часть. Вот некоторые из них:
1️⃣ Version catalog — не все знают об этой фиче, но её можно использовать как отличный вариант для управления зависимостями проекта. Для неё нужно использовать специальный файл с расширением toml, где описать версии для каждой из зависимостей проекта.
Правда, пока плохо работают подсказки Android Studio об устаревших зависимостях, вероятно стоит подумать о плагине типа этого.
2️⃣ Android application plugin — тоже удобная штука, которая позволяет вынести повторяющиеся части gradle-файлов в один плагин и применить его к остальным модулям. Автор описывает пример с minSdk, compileSdk и т.д. в плагине, но вы можете вынести те части, которые нужны именно вам.
3️⃣ Kotlin plugin — описанные плагины можно писать на Kotlin с его плюшками, в статье тоже найдётся пара примеров, которые помогут в написании своих. 🤓
#android
Подробнейшая статья, в которой автор рассказывает о том, как лучше управлять зависимостями и скриптами в любых по размеру приложениях. Тут целый набор советов, можно взять все или только часть. Вот некоторые из них:
1️⃣ Version catalog — не все знают об этой фиче, но её можно использовать как отличный вариант для управления зависимостями проекта. Для неё нужно использовать специальный файл с расширением toml, где описать версии для каждой из зависимостей проекта.
Правда, пока плохо работают подсказки Android Studio об устаревших зависимостях, вероятно стоит подумать о плагине типа этого.
2️⃣ Android application plugin — тоже удобная штука, которая позволяет вынести повторяющиеся части gradle-файлов в один плагин и применить его к остальным модулям. Автор описывает пример с minSdk, compileSdk и т.д. в плагине, но вы можете вынести те части, которые нужны именно вам.
3️⃣ Kotlin plugin — описанные плагины можно писать на Kotlin с его плюшками, в статье тоже найдётся пара примеров, которые помогут в написании своих. 🤓
🔥8👍2😱1
Memory Safe Languages in Android 13
#android
Любопытная статистика от Google по использованию разных языков программирования в Android.
Говорят, что на протяжении последних десяти лет, 65% всех уязвимостей в Android и Chrome были связаны с безопасностью памяти.
В последнее время тенденция улучшается, ведь Google слезает с небезопасных по памяти языков, а 2022 год стал первым годом, когда основная доля уязвимостей была связана не с памятью.
Ещё с Android 12 есть поддержка Rust, как безопасная по памяти альтернатива C/C++, и есть довольно мощный скачок в его использовании в последних версиях Android.
Статья получилась объёмной, внутри много графиков и любопытных выводов, рекомендую почитать.
#android
Любопытная статистика от Google по использованию разных языков программирования в Android.
Говорят, что на протяжении последних десяти лет, 65% всех уязвимостей в Android и Chrome были связаны с безопасностью памяти.
В последнее время тенденция улучшается, ведь Google слезает с небезопасных по памяти языков, а 2022 год стал первым годом, когда основная доля уязвимостей была связана не с памятью.
Ещё с Android 12 есть поддержка Rust, как безопасная по памяти альтернатива C/C++, и есть довольно мощный скачок в его использовании в последних версиях Android.
Статья получилась объёмной, внутри много графиков и любопытных выводов, рекомендую почитать.
👍12
Как должен выглядеть идеальный PR?
#разработка
На днях попалась статья, которая рассказывает о том, как создать идеальный pull request.
Любопытно, что есть исследование, которое говорит о том, что идеальный PR должен содержать не более 250 строк кода: в больших PR сложно обнаружить ошибки, а также приходится тратить больше 1 часа для того, чтобы всё отсмотреть.
Также автор советует делать корректное описание и заголовок, из которого можно сразу понять, что было сделано в рамках данного PR.
От себя добавлю пару вещей, которые я использую в своих проектах:
👉 используйте черновики, если ваш код ещё не до конца готов для того, чтобы вливаться в основную ветку;
👉 делайте отдельный PR для незначительных, но объёмных изменений кода: автоматические миграции базы данных, иконки;
👉 выделите отдельное время (на практике понял, что самое лучшее — перед началом работы) для просмотра PR ваших коллег.
А если вы ещё накините идей, как сделать процесс просмотра реквестов ещё лучше, то буду только рад. 🤓
#разработка
На днях попалась статья, которая рассказывает о том, как создать идеальный pull request.
Любопытно, что есть исследование, которое говорит о том, что идеальный PR должен содержать не более 250 строк кода: в больших PR сложно обнаружить ошибки, а также приходится тратить больше 1 часа для того, чтобы всё отсмотреть.
Также автор советует делать корректное описание и заголовок, из которого можно сразу понять, что было сделано в рамках данного PR.
От себя добавлю пару вещей, которые я использую в своих проектах:
👉 используйте черновики, если ваш код ещё не до конца готов для того, чтобы вливаться в основную ветку;
👉 делайте отдельный PR для незначительных, но объёмных изменений кода: автоматические миграции базы данных, иконки;
👉 выделите отдельное время (на практике понял, что самое лучшее — перед началом работы) для просмотра PR ваших коллег.
А если вы ещё накините идей, как сделать процесс просмотра реквестов ещё лучше, то буду только рад. 🤓
👍13🔥1
Intellij Scratch File
#разработка #android
Далеко не все знают об этой крутейшей фиче Android Studio.
Частенько бывают кейсы, когда необходимо быстро проверить, как работает кусок вновь написанного кода. Если этот код не связан с UI-логикой, то приходится или подключать debug, или же добавлять логгирование на те состояния, которые вы ходите проверить.
Ещё более хардкорный и неудобный способ, которым мало кто пользуется — это открыть параллельно ещё одну среду разработки, где в консоли быстро верифицировать написанную функцию.
Но есть ещё один способ, гораздо более удобный — это использовать Intellij’s Scratch File. По сути, это небольшая live-IDE внутри Android Studio, которая будет выполнять написанный вами код по мере его добавления.
Чтобы добавить новый scratch-файл, надо нажать ⇧ ⌘ N (на macOS) или Ctrl+Alt+Shift+Insert на Windows. А ещё есть поддержка нескольких языков плюс к основному: HTML, Java, JavaScript, SQL, YAML.
В общем, невероятно полезная фича о которой совсем все забыли, а напрасно. Вот тут чуть больше информации, а также демо того, как всё работает.
#разработка #android
Далеко не все знают об этой крутейшей фиче Android Studio.
Частенько бывают кейсы, когда необходимо быстро проверить, как работает кусок вновь написанного кода. Если этот код не связан с UI-логикой, то приходится или подключать debug, или же добавлять логгирование на те состояния, которые вы ходите проверить.
Ещё более хардкорный и неудобный способ, которым мало кто пользуется — это открыть параллельно ещё одну среду разработки, где в консоли быстро верифицировать написанную функцию.
Но есть ещё один способ, гораздо более удобный — это использовать Intellij’s Scratch File. По сути, это небольшая live-IDE внутри Android Studio, которая будет выполнять написанный вами код по мере его добавления.
Чтобы добавить новый scratch-файл, надо нажать ⇧ ⌘ N (на macOS) или Ctrl+Alt+Shift+Insert на Windows. А ещё есть поддержка нескольких языков плюс к основному: HTML, Java, JavaScript, SQL, YAML.
В общем, невероятно полезная фича о которой совсем все забыли, а напрасно. Вот тут чуть больше информации, а также демо того, как всё работает.
🔥14👍6🥰1