Android Good Reads
А как собеседоваться в 2023? На этот раз менее техническая статья, больше про то как попасть на собеседования. Актуально для тех кто ищет работу в Европе/США. Статья стоит того чтоб ее прочитать целиком 👉 Просто оставить свое резюме на сайте компании больше…
Во вторник была жаркая дискуссия в комментариях (рекомендую почитать). Один из выводов - нужно расширять свою сеть контактов в linkedIn. Всех заинтересованных прошу оставлять ссылки на себя в комментариях
👍2
А как дела у SwiftUI в кроссплатформе
Немного сыровато, но постепенно разрастается.
Фреймворк для сборки SwiftUI под Android: https://skip.tools/
к сожалению он платный💵
Вариант использования предлагаемый командой -
Прицепить KMP к Skip
Немного сыровато, но постепенно разрастается.
Фреймворк для сборки SwiftUI под Android: https://skip.tools/
к сожалению он платный
Вариант использования предлагаемый командой -
Прицепить KMP к Skip
Please open Telegram to view this post
VIEW IN TELEGRAM
😐12😁5👍2💯1
Очередная хайп-статья непопулярных мнений
👉 Android Разработка не про разработку на Jetpack Compose. Да, вам действительно нужно уметь работать с базой, строить архитектуру и следить за жизненным циклом приложения во время разработки, а не только верстать. Но ведь Compose это не только про UI, но и про подход к обращению с данными?
👉 DI это не только про Hilt/Dagger
Не зацикливайтесь на фреймворке при работе с паттерном
👉 Jetpack ViewModel это не ViewModel из MVVM
Первый позволяет вам создать компонент независимый от жизненного цикла приложения. Тогда как второй больше относится к абстракции в приложении и ограничению по работе между слоями данных. Вы можете использовать первую ViewModel, не поддерживать архитектуру MVVM но и наоборот
👉 Вы можете делать обращения к репозиторию напрямую из ViewModel.
Чистая архитектура подвергается критике последние несколько лет в том числе за ненужные слои абстракций. Если вам кажется, что очередная абстракция в виде usecase не решает никакой проблемы в вашем проекте - можете игнорировать этот слой
👉 Google рекомендации это всего лишь рекомендации
👉 Вы не bigtech.
Слепое следование лучшим практикам индустрии без оглядки на команду может стоить компании продукта. Лучшие практики, примеряемые в командах, где сотня только мобильных разработчиков, может сильно тормозить команду из 4 людей. Применяйте только то, что помогает вам работать, а не потому что так делают все
👉 Android Разработка не про разработку на Jetpack Compose. Да, вам действительно нужно уметь работать с базой, строить архитектуру и следить за жизненным циклом приложения во время разработки, а не только верстать. Но ведь Compose это не только про UI, но и про подход к обращению с данными?
👉 DI это не только про Hilt/Dagger
Не зацикливайтесь на фреймворке при работе с паттерном
👉 Jetpack ViewModel это не ViewModel из MVVM
Первый позволяет вам создать компонент независимый от жизненного цикла приложения. Тогда как второй больше относится к абстракции в приложении и ограничению по работе между слоями данных. Вы можете использовать первую ViewModel, не поддерживать архитектуру MVVM но и наоборот
👉 Вы можете делать обращения к репозиторию напрямую из ViewModel.
Чистая архитектура подвергается критике последние несколько лет в том числе за ненужные слои абстракций. Если вам кажется, что очередная абстракция в виде usecase не решает никакой проблемы в вашем проекте - можете игнорировать этот слой
👉 Google рекомендации это всего лишь рекомендации
👉 Вы не bigtech.
Слепое следование лучшим практикам индустрии без оглядки на команду может стоить компании продукта. Лучшие практики, примеряемые в командах, где сотня только мобильных разработчиков, может сильно тормозить команду из 4 людей. Применяйте только то, что помогает вам работать, а не потому что так делают все
Yves Kalume's Blog
Let's clarify some misconceptions around android development these days
Forget the Formalities ! There's no introduction for this blogpost 😅 (or maybe I have a blank page syndrome). Let's try debunking some myths around android development and clearing the air ! (oh actually this seems to be a good intro, isn't it ? 🫣)...
👍21💯7🔥2❤1🌚1
Распознование поз в реальном времени с ML kit
Расширяем кругозор и трогаем хайповый ML из Android. Не так сложно как кажется, так как все сокрыто за слоями абстракции Firebase.
Расширяем кругозор и трогаем хайповый ML из Android. Не так сложно как кажется, так как все сокрыто за слоями абстракции Firebase.
Medium
Real-Time Pose Detection in Camera with ML Kit in Android
We’ve already learned about pose detection in Android, where we could analyze body poses from pictures and videos.
🔥2💯1
Koin, ближайшие планы обновлений
В последнем обновлении 3.6 beta стабилизировали корутины, компоуз и в целом ядро Koin. Так же добавили интеграцию
А что вы используете для DI? Напишите в комментариях, что у вас используется в проекте. Из ваших вариантов соберу опросник в канале. Посмотрим на распределение
В последнем обновлении 3.6 beta стабилизировали корутины, компоуз и в целом ядро Koin. Так же добавили интеграцию
wasm
и поддержали ViewModel api
для compose miltiplatform
. Однако, команда решила не выкатывать релиз 3.6, а сразу двинуться к 4.0, где поддержат Kotlin 2 и почистят deprecated api
.А что вы используете для DI? Напишите в комментариях, что у вас используется в проекте. Из ваших вариантов соберу опросник в канале. Посмотрим на распределение
Medium
Koin Roadmap Update — From 3.6 to 4.0
In response to your feedback and the evolving landscape of Kotlin development, we are bridging from version 3.6 Beta to 4.0
👍3❤1💯1
Какой DI фреймворк используете?
Final Results
26%
Koin
38%
Dagger
20%
Hilt
1%
Kodein
3%
Toothpick
9%
Самописное решение
4%
Не используем DI
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Скрытые фичи текстового поля
Что рассмотрят по ссылке выше:
👉 Динамический градиентный текст и курсор, внося изменения всего в 2 строки
👉 Кастомизация
👉 Изменения шрифта без задания
👉 Текстовое поле с маской для кредитной карты
👉 Перехват взаимодействия пользователя с текстовым полем
👉 User tagging в реальном времени
👉 Подмена экшн кнопки в клавиатуре
👉 Haptic feedback для разных символов
👉 Как поддержать media content вставляемый из клавиатуры (гифки или картинки из буфера обмена)
Что рассмотрят по ссылке выше:
👉 Динамический градиентный текст и курсор, внося изменения всего в 2 строки
👉 Кастомизация
decorationBox
в зависимости от написанного текста👉 Изменения шрифта без задания
font
(как на гифке)👉 Текстовое поле с маской для кредитной карты
👉 Перехват взаимодействия пользователя с текстовым полем
👉 User tagging в реальном времени
👉 Подмена экшн кнопки в клавиатуре
👉 Haptic feedback для разных символов
👉 Как поддержать media content вставляемый из клавиатуры (гифки или картинки из буфера обмена)
👍8🔥2🤔1💯1
This media is not supported in your browser
VIEW IN TELEGRAM
Добавляем проверку на номер задачки в TODO через линтер
Пустые
Пустые
TODO
маловероятно будут исправлены, если не имеют за собой закрепленной задачи. А имея задачу очень просто найти место где возникла проблема. Автоматизация проверки формата TODO
через lint и как ее делать: тут и тут👍6😁6💯1
Что используете в качестве статического анализатора кода в проекте?
Final Results
73%
Detekt
46%
Lint
29%
ktLint
1%
PMD
0%
FindBugs
2%
bash скрипты 🤨
Android Good Reads
Какой DI фреймворк используете?
А вот вам еще 1 DI фреймворк, который никто не упомянул ранее!
Используем
Не рекомендация к использованию, а расширения кругозора ради: kotlin-inject (1200+⭐️ )
Сompile-time инъекция зависимостей, не переусложненная схема использования и поддержка multiplatform (по сути, единственная альтернатива koin)
Используем
kotlin-inject
в Kotlin/Compose Multiplatform проектеНе рекомендация к использованию, а расширения кругозора ради: kotlin-inject (1200+
Сompile-time инъекция зависимостей, не переусложненная схема использования и поддержка multiplatform (по сути, единственная альтернатива koin)
Please open Telegram to view this post
VIEW IN TELEGRAM
John O'Reilly
Using kotlin-inject in a Kotlin/Compose Multiplatform project
I’ve been using Koin in most of the Kotlin Multiplatform (KMP) samples I have but thought it would be good to include use of at least one other DI framework and this article outlines changes made to add kotlin-inject to the BikeShare KMP sample. This project…
❤4👍3💯1
Как под капотом работает @Preview?
👉 Для просмотра метода с
👉 Все это должно как то собираться воедино, да? Это происходит во время градловской команды
👉 Как можно этим воспользоваться? Например, положить
В статье больше технических примеров, рекомендую глянуть. Практического применения этим знаниям я не могу найти, поправьте меня в комментариях если у вас есть идеи, но знать как работает под капотом инструмент, которым ты пользуешься всегда полезно
👉 Для просмотра метода с
@Preview
аннотацией используется androidx.compose.ui.tooling.PreviewActivity
, который собирает параметры из @PreviewParameter
и свойства из @Preview
👉 Все это должно как то собираться воедино, да? Это происходит во время градловской команды
androidTest
. На выходе получаем apk с превьюшками, который выводится в Android Studio. 👉 Как можно этим воспользоваться? Например, положить
AndroidManifest.xml
в module/src/androidTest
и поменять параметры приложения, которое запускается для preview. А значит, мы можем и сами собрать приложение из наших @Preview
и любых @Composable
элементов на девайс! В статье больше технических примеров, рекомендую глянуть. Практического применения этим знаниям я не могу найти, поправьте меня в комментариях если у вас есть идеи, но знать как работает под капотом инструмент, которым ты пользуешься всегда полезно
Medium
Jetpack Compose Previews: Delving Deep Into Their Inner Workings
Uncover the secrets of Jetpack Compose Previews! Learn to run them with adb, how to compile them and the nuances in multi-module setups.
👍7🔥6❤3🤔1😢1
.aiexclude
файл по аналогии с .gitignore
в корень проекта и укажите директории или конкретные файлы.Документация: https://developer.android.com/studio/preview/gemini/aiexclude
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2😁2
Цикл статей про архитектуру от Zsolt.
👉 Вводная часть про инструменты и что нас ждет в следующих частях
👉 Про обработку ошибок и Монады. Читаем про то что такое монады, как это связано с архитектурой Android и на какому слое приложить
👉 Mapping Зачем это делать и почему нельзя использовать 1 серверную модель на всех слоях. Нужно ли тестировать этот процесс, и как именовать функции чтобы не запутаться
👉 Response vs Reply классы Отличия и когда-какие используем. Организация нетворк слоя
Это не гайд для архитекторов, а скорее для мидлов, которым нужно начать углубляться в детали организации слоя данных
👉 Вводная часть про инструменты и что нас ждет в следующих частях
👉 Про обработку ошибок и Монады. Читаем про то что такое монады, как это связано с архитектурой Android и на какому слое приложить
👉 Mapping Зачем это делать и почему нельзя использовать 1 серверную модель на всех слоях. Нужно ли тестировать этот процесс, и как именовать функции чтобы не запутаться
👉 Response vs Reply классы Отличия и когда-какие используем. Организация нетворк слоя
Это не гайд для архитекторов, а скорее для мидлов, которым нужно начать углубляться в детали организации слоя данных
👍7🆒3🔥2
Google Workspace переносит свои продукты на KMP
Прошедший KotlinConf24 принес еще одну новость. Команда Google Workspace, а это такие приложения как Gmail, Docs, Meet, Calendar переводит свои продукты на KMP. Первым будет приложение Google Docs.
И это очень крутая поддержка для KMP и расширение комьюнити.
Прошедший KotlinConf24 принес еще одну новость. Команда Google Workspace, а это такие приложения как Gmail, Docs, Meet, Calendar переводит свои продукты на KMP. Первым будет приложение Google Docs.
И это очень крутая поддержка для KMP и расширение комьюнити.
👍21🔥8👎2
Android Good Reads
Как Google поможет найти уязвимости в вашем коде
В ходе проверки линтером выявляются известные уязвимости и выводятся рекомендации по их исправлению со ссылкой на источник. Это полезно, потому что держать в голове весь OWASP в области мобильной разработки (https://mas.owasp.org/MASVS/) попросту невозможно. Работает начиная с AS Giraffe+
В ходе проверки линтером выявляются известные уязвимости и выводятся рекомендации по их исправлению со ссылкой на источник. Это полезно, потому что держать в голове весь OWASP в области мобильной разработки (https://mas.owasp.org/MASVS/) попросту невозможно. Работает начиная с AS Giraffe+
👍5🔥3💯1
Тем временем команда Android Studio выпустила Ladybug Canary 5 🐞 , а недавний Feature Drop перешел в стадию релиз-кандидата
Что это значит для вас?
👉 Те кто сидит на Preview версии получил обновление IDE до 2024.2 + небольшие исправления существующего функционала. KMM плагин, как обычно, появится ближе к бете
👉 Для тех кто предпочитает стабильность, Koala получает финальные исправления и ждет вас с новым терминалом в стадии RC
Что это значит для вас?
👉 Те кто сидит на Preview версии получил обновление IDE до 2024.2 + небольшие исправления существующего функционала. KMM плагин, как обычно, появится ближе к бете
👉 Для тех кто предпочитает стабильность, Koala получает финальные исправления и ждет вас с новым терминалом в стадии RC
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😁2💯2
MutableState vs MutableStateFlow
👉 Область применения
👉 Потоки
👉 Жизненный цикл
В целом, это абсолютно разные вещи, несмотря на схожесть в нейминге. Не путайте❗️
👉 Область применения
MutableState
используется в основном совместно с Jetpack Compose обобщая состояниеMutableStateFlow
можно использовать на любом уровне абстракции в том числе на слое данных 👉 Потоки
MutableStateFlow
потокобезопасен в отличии от MutableState
у которого возникают сложности при объединении с фоновыми процессами👉 Жизненный цикл
MutableState
тесно связан с жизненным циклом Compose и гарантирует что не возникнет проблем на UIMutableStateFlow
больше привязан viewModelScope
и подойдет для асинхронной работы с даннымиВ целом, это абсолютно разные вещи, несмотря на схожесть в нейминге. Не путайте
State
и StateFlow
Please open Telegram to view this post
VIEW IN TELEGRAM
Medium
MutableState or MutableStateFlow: A Perspective on what to use in Jetpack Compose
When building applications with Jetpack Compose, developers face a pivotal choice: should they use MutableState or MutableStateFlow to manage the state? Does your team have guidelines on when to opt…
🔥5🥰4😁4❤1👏1
Квиз!
В
Пример кода:
Ответ: клик
В
Composable
, в большинстве случаев, если мы используем mutableStateOf()
, мы фиксируем его состояние через remember()
, чтобы сохранить его при рекомпозициях. Но если мы используем mutableStateOf()
в Activity
— нужно ли нам использовать remember()
? Пример кода:
class MainActivity : ComponentActivity() {
private var text = mutableStateOf("Hello!")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
AppTheme {
Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) {
TextField(value = text.value, onValueChange = {
text.value = it
})
Text(text = text.value)
}
}
}
}
}
Ответ: клик
🔥4👍3
🙈13
Крутая находка: ksp форк anvil, фреймворка для помощи в инъекции зависимостей с Dagger 2
Зачем это было сделано?
Оригинальный фреймворк до сих пор на Kotlin 1.*, только на kapt и содержит проблемы с инкрементальной компиляцией. Форк умеет работать и с kapt и с ksp одновременно, а автор планирует продолжать его поддержку
KSP fork: https://github.com/zacsweers/anvil
Оригинал, для тех кто не знаком (1300+⭐️ ) : https://github.com/square/anvil
Зачем это было сделано?
Оригинальный фреймворк до сих пор на Kotlin 1.*, только на kapt и содержит проблемы с инкрементальной компиляцией. Форк умеет работать и с kapt и с ksp одновременно, а автор планирует продолжать его поддержку
KSP fork: https://github.com/zacsweers/anvil
Оригинал, для тех кто не знаком (1300+
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2🤯1