🎉 Мы рады сообщить, что в Android добавлена поддержка RISC-V 👉 https://goo.gle/3QDaYfl
RISC-V - это открытый стандарт архитектуры наборов инструкций (ISA), обеспечивающий новую эру инноваций в области процессоров.
🔥 Дайджест полезных материалов из мира Android за неделю
Почитать:
— Электронные книги? Аудиокниги? Смешать, но не взбалтывать
— Оптимизируя sequences — или как мой код попал в kotlin
— Построение графа покрытия UI-тестами бизнес-логики на основе VisualFSM
— Обзор невизуальной доступности смартфонов под управлением операционной системы Android
— Потерял месяц согласований, психанул. Теперь только платные брифы
— Что будет с мобильными релизами, если улучшать и автоматизировать процессы
— Stone: знакомство с API
— Как зловредные приложения могут скрывать работу с буфером обмена в Android 14
— Реализация экранов авторизации и регистрации с помощью Custom View и Firebase
— Мобильная разработка за неделю #511 (16 — 22 октября)
— AdMob Banner Ads Impacting Android Vitals: Seeking Solutions and Alternatives
— How to verify OTP in Android without SMS read permission using Xamarin.Forms?
— Innovating the Music Streaming Landscape: How to Make an App Like Spotify
— Enable Wireless Debugging on Android Device
— Finding the Right Balance in Gradle Dependency Strategy
— Guia Passo-a-Passo: Corrigindo Problemas com o uiautomatorviewer
— Retrieving Device Model Information with JavaScript from Browsers
— Tips to Hire Dedicated Android App Developers for Your Business
— The Best Resources to Learn Android Development
— Desenvolvimento de Aplicativos com Kotlin, Room e Jetpack Compose: Uma Jornada para Interfaces de Usuário Modernas e Eficientes
Посмотреть:
🌐 Прогнозирование цены биткоина при помощи VAR, XGBoost, FB Prophet (⏱ 20:29)
🌐 Django настройка админки (⏱ 06:55)
🌐 Задача на палиндром строки на C++ (⏱ 00:59)
🌐 Django расширяем функционал! (⏱ 07:03)
Хорошего дня!
@android_its
🖥 Чистая архитектура на Android
Полезный репозиторий, в котором представлены все основные принципы чистой архитектуры: разделение ответственности, слоев, представления и данных.
Проект написан на Kotlin с применением Jetpack Compose и Coroutines. В нём есть юнит-тесты, интеграционные и анализ качества кода.
• Github
@android_its
🔥 Дайджест полезных материалов из мира Android за неделю
Почитать:
— Определение произвольной точки на полигоне. Jetpack Compose. Canvas. Algorithm
— Как показать номер версии на экране загру…
— 4 сценария, когда нужно сделать ставку на Kotlin Multiplatform, а не Flutter
— 8 вещей, которые я усвоил за 6 лет карьеры разработчика
— Как мониторить здоровье вашей Gradle-сборки
— Как я осваивал Jetpack Compose
— Android 14: что появилось нового и что изменилось? Возможности новой версии мобильной ОС
— Компиляция Record для Android
— Архитектура Android. Понятно и подробно
— Как сделать приложение для мобильного стриминга на Android с помощью опенсорс-инструментов и EdgeStreaming
— ImageEncoder: Your Ultimate Privacy Solution for Image Sharing
— Gestures in Jetpack compose — All you need to know
— Mobile Security Tools part 1: scrcpy
— ListView
— connected Bluetooth classic device battery information? in react-native
— Flutter Platform Channels
— ROOT DETECTION IN ANDROID SOLUTION ?
— Using SFSymbols in Jetpack Compose
— Annotations
— Modifiers
Посмотреть:
🌐 Chatgpt, Bard , Claude, Theb - используй API лучших нейросетей бесплатно и без ВПН на Python. (⏱ 05:23)
🌐 Пишем слайдер на UIKit + Lottie + Animations + Custom PageControll (⏱ 01:43:45)
🌐 NLP практика. Определяем тональность текста при помощи NLTK и DL (⏱ 19:37)
🌐 Django шаблонизация и маршрутизация (⏱ 09:11)
🌐 Задача, которая очень часто встречается на собеседованиях #python (⏱ 00:59)
🌐 Решение непростой задачи с Leetcode, часто всплывает на собеседования #pythontutorial (⏱ 00:59)
🌐 Хитрая задача с собеседования #Python (⏱ 00:59)
Хорошего дня!
Чтобы узнать, что в голове у интервьюера во время собеседования в ИТ-компанию, не обязательно быть телепатом.
В шоу от команды мобильной разработки Тинькофф «Как это работает» приглашенный гость — гуру собеседований — рассказывает, на что обращают внимание во время интервью, и делится лайфхаками для успешного прохождения отбора.
Посмотреть этот и другие выпуски можно тут: Как устроены собеседования в IT - Как это работает #1
Реклама. АО "Тинькофф Банк"
Значительно ускоряем сборку проектов
В этой статье автор подробно разбирает, как устроена оптимизация компиляции в Gradle и почему она работает быстрее, чем в других системах сборки типа Bazel.
Автор раскроет, что такое интерфейс бинарных приложений (ABI), «заголовочные jar-файлы» и как они используются для избежания повторной компиляции.
📌 Читать
🔥 Дайджест полезных материалов из мира Android за неделю
Почитать:
— Возможна ли жизнь после плеймаркета?
— NoArchitecture Kotlin Compose
— Как Google победила фрагментацию и возвращает контроль над Android
— Мобильная разработка за неделю #507 (18 — 24 сентября)
— Mobile MVP — minimum viable Features
— Implementing Swipe-to-Refresh in Android Studio using Kotlin: Step-by-Step Tutorial
— I'm trying to running the react-native application
— Running a Node.js App (Angular/React) on Android using Termux
— How to setup Burp Suite on Android
— How to Create Time Picker Dialogue Android Tutorial | Best Android Developer Series #softwaretechit
— Jetpack Compose
— The Rise of Video Conferencing: How It's Transforming Communication in the Digital Age
— Implement RecyclerView using Swift PM libraries
— Leading Android App Developers - Transform Your Ideas into Apps with Experts in Android Mobile App Development
— Android Plataforma - Parte 0: Introdução à Série
Посмотреть:
🌐 Django начало работы. (⏱ 08:18)
🌐 Популярная задача с собеседования в Яндекс #python #задача #программирование #собеседование (⏱ 01:00)
🌐 Новые функции в IOS 17 (⏱ 00:29)
🌐 TokenFlow редактирование видео с помощью текстового описания (⏱ 00:22)
🌐 Парсер телеграм каналов на Python. Гайд по написанию мощного бота. (⏱ 11:58)
🌐 Задача из Собеседования в Яндекс с зарплатой 85000 рублей #python #собеседование #задача #yandex (⏱ 00:59)
🌐 Асинхронный парсинг сайтов на Python (⏱ 22:06)
🌐 Как изменились подходы к автоматизированному тестированию в Тинькофф — Валерий Суковых, Тинькофф (⏱ 36:35)
🌐 Как Google победила фрагментацию и возвращает контроль над Android (30 мин)
🌐 Dependency Management in a Multi-Module Project (25 мин)
🌐 Как работает шифрование. С нуля за 1 час (1 час)
🌐 Советы к собеседованию от эксперта после 100 собесов (1 час)
Доклады
🌐 Сергей Боиштян — Здоровье вашей Gradle-сборки (45 мин)
🌐 Андрей Данилов — Gradle Kotlin DSL: о чем умолчали в документации (45 мин)
Хорошего дня!
@android_its
🐱 CatBox для Android
— это многофункциональный набор инструментов для прокси на Android, который является улучшенной версией NekoBoxForAndroid.
В новой версии был удален нежелательный контент и значительно улучшен пользовательский интерфейс.
🐾 Поддерживаемые протоколы:
✔SOCKS (4/4a/5)
✔HTTP(S)
✔SSH
✔Shadowsocks
✔VMess
✔VLESS
✔WireGuard
✔Trojan
✔Trojan-Go ( trojan-go-plugin )
✔NaïveProxy ( naive-plugin )
✔Hysteria ( hysteria-plugin )
✔TUIC
🐱 GitHub
🌐 F-droid
@android_its
🤖 Новое приложение для Android - android-luks!
Теперь можно безопасно разблокировать зашифрованный LUKS на GNU/Linux с помощью режима USB-аксессуара, без необходимости вводить пароль.
⬅️ С функцией Init создавайте новый шифрованный ключ, зашифрованный с помощью биометрических данных.
⬅️ Функция Unlock позволяет расшифровать ключ с помощью биометрических данных и отправить его через USB.
👀 GitHub
@android_its
🔥 Дайджест полезных материалов из мира : Android за неделю
Почитать:
— Есть ли смысл начинать писать мобильное приложение не на Kotlin Multiplatform и Compose Multiplatform?
— ForBlitz Statistics: Как я в 10 классе сделал приложение на 10K+ установок
— Когда бизнесу нужна разработка мобильного приложения? Раскладываем по полочкам. Помогаем определиться с подходами
— Микросмартфон за 100 рублей: Покупаем смартфон 11-летней давности и… пишем под него приложения
— PWA vs Native: чек-лист, который поможет выбрать
— Сам написал, сам поиграл: как я написал 2D-игру для Android полностью с нуля, весом менее 1мб?
— Мобильная разработка за неделю #505 (4 — 10 сентября)
— Simplify ViewModelProvider.Factory() Implementation with Kotlin Lambda and Object Expressions
— Why Kotlin Multiplatform could change everything in the mobile dev world
— ViewModel en Android
— Best API For Android App Development
— Curso de Programação Android, Angular e Outros 100% Gratuitos
— РКН против приложения «Навальный»: борьба за доступность
— Why Choose Saudi Arabia IT Agency for Mobile App Development?
— if you are building mvp for a fintech company , what stack will you choose native or flutter? and why
— Mastering Kotlin Coroutines: Boosting Android App Performance and Responsiveness
— How To Free Up Your Internal Storage On Android Phone in 2022
Посмотреть:
🌐 Собеседование на Mobile Developer. Алексей Панов, Контур (⏱ 00:00)
🌐 Python анализ данных с Pandas. PandaSQL (⏱ 12:13)
🌐 Python анализ данных с Pandas. Join, merge, concat в Pandas (⏱ 19:25)
🌐 Python+SQL часть2 создание таблиц. (⏱ 05:15)
🌐 Управление жестами всегда было в ваших часах, просто его нужно было активировать. (⏱ 00:11)
🌐 Уроки Golang с нуля /#28 - Встраивание типов (⏱ 06:16)
🌐 Уроки Golang с нуля /#27 - Bufio. Чтение и запись (⏱ 10:35)
🌐 Python анализ данных с Pandas. (⏱ 17:04)
🌐 Как устроена логика навигации флоу в приложении Тинькофф — Тимур Валиев, Тинькофф (⏱ 25:21)
🌐 Почему Accelerate — это не страшно — Игорь Белов, Тинькофф (⏱ 26:53)
Хорошего дня!
Команда Тинькофф соберет мобильных разработчиков в Челябинске 📲
Ребята проведут Tinkoff Mobile Meetup 21 сентября. Расскажут, как реализовать дизайн-систему на Jetpack Compose и работу с хранилищем данных в Android, а после поговорят про создание платформенной команды.
После докладов спикеры останутся поболтать с участниками о разном и, конечно, познакомиться!
📆 Митап пройдет 21 сентября в пространстве Лекторий КЦ 11. Регистрируйтесь и зовите с собой коллег
Реклама.
АО "Тинькофф Банк",
ИНН 7710140679,
лицензия ЦБ РФ № 2673
ERID 2VtzquWoSGg
📱 Lottielab теперь многопоточный
Lottielab - редактор Lottie анимаций, что позволит вам работать с ними эффективнее. Проект пока в Beta
Хотели ускорить анимацию в приложениях на Android? Библиотека Lottie теперь поддерживает многопоточность!
В статье подробно объясняют, как новая настройка asyncUpdates переносит ресурсоёмкую фазу update в фоновый поток.
#android #tooling #animation
▪Github
▪Lottielab
@android_its
💡Jetpack Compose Canvas: 10 практических примеров
1. Рисование круга
Начнем с чего-нибудь простого — нарисуем круг.
@Composable
fun DrawCircle() {
Canvas(
modifier = Modifier
.size(200.dp)
.background(Color.White)
.border(2.dp, color = Color.Blue)
) {
drawCircle(color = Color.Red, radius = 100f)
}
}
2. Рисование прямоугольника
Нарисовать прямоугольник так же просто.@Composable
fun DrawRectangle() {
Canvas(
modifier = Modifier
.size(200.dp)
.background(Color.White)
.border(2.dp, color = Color.Blue)
) {
drawRect(color = Color.Green, size = size)
}
}
3. Построение линии
Для построения линии требуется две точки: начальная и конечная.@Composable
fun DrawLine() {
Canvas(
modifier = Modifier
.size(200.dp)
.background(Color.White)
.border(2.dp, color = Color.Red)
) {
drawLine(
color = Color.Blue,
start = Offset.Zero,
end = Offset(size.width, size.height),
strokeWidth = 4f
)
}
4. Создание текста
Можно также создать текст на холсте.
@Composable
fun DrawCanvasText() {
val paint = Paint().asFrameworkPaint().apply {
// paint configuration
this.textSize = 60f
}
Canvas(
modifier = Modifier
.size(200.dp)
.background(Color.White)
.border(2.dp, color = Color.Red)
) {
drawIntoCanvas {
it.nativeCanvas.drawText("Hello, Canvas!", 20f, 200f, paint)
}
}
}
5. Создание контура
Контур — это серия соединенных линий и кривых. Вот как нарисовать простой треугольник с помощью контура.@Composable
fun DrawTriangle() {
Canvas(
modifier = Modifier
.size(200.dp)
) {
val path = Path().apply {
moveTo(size.width / 2, 0f)
lineTo(size.width, size.height)
lineTo(0f, size.height)
close()
}
drawPath(path = path, color = Color.Magenta)
}
}
6. Рисование дуги
Дуга — это сегмент окружности. Можно нарисовать дугу, указав начальный угол и угол поворота.@Composable
fun DrawArc() {
Canvas(modifier = Modifier.size(200.dp)) {
drawArc(
color = Color.Cyan,
startAngle = 0f,
sweepAngle = 270f,
useCenter = true,
topLeft = Offset.Zero,
size = size
)
}
}
7. Применение техники отсекания
Можно применить технику отсекания, чтобы ограничить область рисования на холсте. Вот пример применения кругового отсекания.@Composable
fun ApplyClip() {
Canvas(modifier = Modifier.size(200.dp)) {
clipPath(Path().apply { addOval(Rect(Offset.Zero, size)) }) {
drawRect(color = Color.Yellow)
}
}
}
8. Применение техники трансформации
Можно применить технику трансформации на холсте, чтобы изменить способ выполнения последующих операций рисования. Вот пример применения вращения.@Composable
fun ApplyTransform() {
Canvas(modifier = Modifier.size(200.dp)) {
rotate(45f) {
drawRect(color = Color.Blue)
}
}
9. Рисование с использованием шейдера
Шейдер — это инструмент для определения цвета каждого пикселя при рисовании. Вот пример рисования с помощью линейного градиентного шейдера.
@Composable
fun DrawWithShader() {
Canvas(modifier = Modifier.size(200.dp)) {
val shader = Brush.linearGradient(
colors = listOf(Color.Red, Color.Blue),
start = Offset.Zero,
end = Offset(size.width, size.height)
)
drawRect(brush = shader)
}
}
10. Настройка индикатора выполнения
📌Статья
@android_its
Ускоряем сборку за счёт миграции с kapt на ksp
#android #build #kapt #ksp #performance
https://habr.com/ru/companies/hh/articles/755952/
🖥 Android Interview Questions
Очень полезная шпаргалка для собеседования по Android - Вопросы для собеседования по Android
▪Github
@android_its
💻 Настройка Detekt с помощью каталога версий и convention-плагина
Настройка Detekt под различные модули может быть сложной при работе с многогранными Android-проектами.
Однако использование convention-плагина (решения Gradle, определяющего единый набор соглашений для подмодулей проекта) и AndroidDetektConventionPlugin может упростить этот процесс.
Шаг 1
Добавьте зависимость Detekt в libs.versions.toml.[versions]
detekt="1.23.1"
[libereries]
detekt-gradlePlugin = { group = "io.gitlab.arturbosch.detekt", name = "detekt-gradle-plugin", version.ref = "detekt" }
Шаг 2
Добавьте зависимость в build.gradle.kts convention-модуля:dependencies {
compileOnly(libs.detekt.gradlePlugin)
}
Шаг 3
Создайте файл с именем AndroidDetektConventionPlugin.import io.gitlab.arturbosch.detekt.extensions.DetektExtension
import ir.composenews.configureDetekt
import ir.composenews.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.getByType
class AndroidDetektConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply(
libs.findLibrary("detekt-gradlePlugin").get().get().group.toString()
)
val extension = extensions.getByType<DetektExtension>()
configureDetekt(extension)
}
}
}
Шаг 4
Создайте в convention-модуле файл Detekt.kt:internal fun Project.configureDetekt(extension: DetektExtension) = extension.apply {
tasks.named<Detekt>("detekt") {
reports {
xml.required.set(true)
html.required.set(true)
txt.required.set(true)
sarif.required.set(true)
md.required.set(true)
}
}
dependencies {
"detektPlugins"(libs.findLibrary("detekt-formatting").get())
}
}
Шаг 5
Зарегистрируйте AndroidDetektConventionPlugin в build.gradle.kts convention-модуля:gradlePlugin {
plugins {
// другие плагины
register("androidDetekt") {
id = "composenews.android.detekt"
implementationClass = "AndroidDetektConventionPlugin"
}
}
}
Шаг 6
Используйте его в проекте:class AndroidLibraryConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("com.android.library")
apply("org.jetbrains.kotlin.android")
apply("composenews.android.detekt") // here
apply("composenews.android.ktlint")
}
extensions.configure<LibraryExtension> {
configureKotlinAndroid(this)
defaultConfig.targetSdk = Integer.parseInt(libs.findVersion("projectTargetSdkVersion").get().toString())
}
dependencies {
add("androidTestImplementation", kotlin("test"))
add("testImplementation", kotlin("test"))
}
}
}
}
Окончательный результат ⬇️
Смотреть
Что отличает архитектурные паттерны MVC, MVP, MVVM, MVVM-C и VIPER друг от друга?
Эти архитектурные паттерны являются одними из наиболее часто используемых при разработке приложений, как на платформах iOS, так и Android. Разработчики внедрили их, чтобы преодолеть ограничения предыдущих паттернов. Чем же они отличаются друг от друга?
- MVC, самый старый паттерн, появился почти 50 лет назад.
- В каждом паттерне есть "представление" (V), отвечающее за отображение содержимого и прием пользовательского ввода
- Большинство паттернов включают "модель" (M) для управления бизнес-данными.
- "Контроллер", "презентатор" и "представление-модель" - это трансляторы, которые являются посредниками между представлением и моделью ("сущность" в паттерне VIPER).
- Эти трансляторы могут быть достаточно сложными в написании, поэтому были предложены различные паттерны, позволяющие сделать их более удобными в эксплуатации
От себя: имейте в виду, что это не исчерпывающий список архитектурных паттернов. Среди других известных паттернов можно отметить Flux и Redux.
@android_its
📱 Автоматизация скриншот-тестирования предварительных просмотров Compose с использованием отражения
Скриншот-тестирование — ценный метод проверки пользовательского интерфейса и предотвращения регрессий при обновлении экранов и компонентов. Однако, как и любой вид тестирования, он требует значительных временных затрат на написание и сопровождение тестов.
Showkase
Одним из способов автоматизации скриншот-тестирования является использование Showkase — библиотеки от Airbnb, предназначенной для генерации веб-компонентов, а также позволяющей с помощью Paparazzi автоматически тестировать все методы, аннотированные @Preview. Вот только для этого придется добавить Showkase в качестве зависимости для каждого модуля, в котором есть предварительные просмотры, требующие тестирования, что увеличит время сборки всех модулей, так как Showkase опирается на генерацию кода. Поэтому использование Showkase только для скриншот-тестов может оказаться не лучшим решением, поскольку это не основная функция библиотеки.
Отражение
Альтернативным подходом является использование отражения для поиска всех предварительных просмотров во время выполнения и динамического создания тестов для них. В этой статье предлагается реализация, которая, в отличие от базовой, является более гибким решением, предусматривающим дополнительные граничные случаи.
Для тестов мы будем использовать библиотеку Paparazzi, разработанную Cashapp. Главное ее преимущество — отсутствие необходимости в эмуляторе для выполнения тестов, что делает их более быстрыми и надежными.
Однако предлагаемое решение может работать и с другими библиотеками скриншот-тестирования. Если вам интересны альтернативы, загляните в этот Github-репозиторий. Здесь представлено много полезной информации обо всех доступных вариантах скриншот-тестирования в Android, включая подробные описания и кейсы реализации.
Пример проекта
📌 Читать дальше
@android_its
🖥 Список полезных опенсорс проектов по Jetpack Compose
1. klokk
Кинетические часы, которые сделаны с использованием Jetpack Compose Desktop. В документации вы можете прочитать о вдохновении проекта и посмотреть процесс разработки. Вы также можете внести свой вклад в проект.
Проект: https://github.com/theapache64/klokk
2. MovieCompose
Это демонстрационное приложение, основанное на современном технологическом стеке Android, которое в основном использует Jetpack Compose UI и Movie DB API. 100% Kotlin, Coroutines, Flow, Hilt, MVVM, паттерн репозитория и т.д. Документация хорошо написана и широко описывает технологический стек.
Проект: https://github.com/skydoves/MovieCompose
3. NewtonsTimer
Проект, подготовленный специально для AndroidDevChallenge. Это приложение Simple Timer, вдохновленное колыбелью Ньютона. В README дается хорошее объяснение мотивации проекта. Автор также проделал хорошую работу, объясняя основные моменты и давая ссылки на код. Очень вдохновляюще!
Проект: https://github.com/MaciejCiemiega/NewtonsTimer
4. Flux
Flux — это красивое погодное приложение, которое показывает, как рисовать динамические пейзажи с несколькими слоями, которые меняются в зависимости от фазы дня. Оно опирается на Jetpack Compose Canvas и поддерживает светлую/темную тему. В целом, это отличный учебный материал!
Проект: https://github.com/fidloo/flux
5. Create Compose App
Это действительно классный инструмент, создающий шаблон приложения для Android, Web, Desktop и Chrome, написанного на Jetpack Compose. Он избавляет вас от трудоемкой установки и настройки.
Созданное приложение поддерживает архитектуру MVVM, Hilt как Dependency Injection Framework, Jetpack Navigation, Logger и типографику Google Sans. В шаблоне для десктопа поддерживается архитектура MVVM со структурой, похожей на Android (SingleActivity), Dagger 2 в качестве фреймворка Dependency Injection, навигация/маршрутизация с Decompose, иконки Launcher (для всех платформ), отдельный модуль данных, модульные и UI-тесты, логирование и шрифт Google Sans. Весьма впечатляюще!
Проект: https://github.com/theapache64/create-compose-app
6. McCompose
Это приложение для McDonald’s, созданное для демонстрации использования Jetpack Compose. Из-за того, что проекту уже 2 года, для его компиляции может потребоваться небольшой рефакторинг. Тем не менее, его стоит посмотреть.
Проект: https://github.com/hitanshu-dhawan/McCompose
7. Schedule Calendar
Это демонстрационный проект, который показывает горизонтальный календарь, показывающий события в хронологическом порядке.
Это не библиотека, а скорее проект для любопытных разработчиков, на что можно посмотреть и поучиться. К сожалению, README не содержит никакой информации.
Проект: https://github.com/halilozercan/compose-schedule-calendar
8. Wiggles
Еще одно приложение, подготовленное для Android Dev Challenge. Это приложение для усыновления собаки, реализованное с помощью Android Architecture Components, Compose Navigation и Material Components.
Хотя документация не очень полная, код достаточно понятен.
Проект: https://github.com/Spikeysanju/Wiggles
9. Roffu
Проект представляет собой интернет-магазин, специализирующийся на спортивной обуви от многих известных компаний с современным пользовательским интерфейсом и красивой анимацией
Проект: https://github.com/mustfaibra/RoFFu
10. ViMusic
С помощью этого приложения с открытым исходным кодом для Android можно стримить музыку с YouTube Music.
Проект: https://github.com/vfsfitvnm/ViMusic
@android_its
🔥 Дайджест полезных материалов из мира Android за неделю
Почитать:
— Android Ktorfit+Compose
— Миграция конфигурации сборки с Groovy на Kotlin
— Библиотека Scout — быстрый и безопасный DI на Kotlin
— Сервисы: строим масштабируемые и гибкие приложения с помощью чистой архитектуры
— Мобильная разработка за неделю #508 (25 сентября — 1 октября)
— Exploring the Power of Flutter Widgets
— Turning my codepen into an actual app - Brick 1100
— Automate Flutter app delivery to AppCenter with GitHub Actions
— Parsing non-Latin based Twitch usernames in Kotlin
— Tutorial To Add Real-time Call Features To Your Client App In 30 mins
— Why Mobile Apps Get Rejected
— 【徵才】REMOTE远程: Web3/ AI/ Blochain/QA-测试/IOS/Android/JAVA/前端开发
— How to Install Custom Android ROM
— Is React Native the Future, or Is It Just Native?
— Vyapar App: Empowering Small Business Financial Management
Посмотреть:
🌐 Разбор задачи с собеседования Data Science. Подготовка на практике (⏱ 26:12)
🌐 Cобеседование #Python топовый банк Goldman Sachs Associate на 12000 $ #задача #программирование (⏱ 01:00)
🌐 Facebook задача с собеседования на #Python на 120000 рублей #программирование #задача #код (⏱ 00:59)
🌐 Разбора задачи с собеседования #Golang (⏱ 00:22)
🌐 Django создание модели. Вывод даных на страницу (⏱ 13:01)
🌐 Какие проблемы могут возникать с безопасностью в мобильных приложениях — Андрей Цуриков, Тинькофф (⏱ 36:30)
🌐 Как ускорить сборку проекта и не остановить разработку — Сергей Ерохин, Тинькофф (⏱ 37:49)
🌐 Дизайнеры. Михаил Наер, Тинькофф — Как это работает #7 (⏱ 01:18:26)
Хорошего дня!
@android_its
Pachli - это полнофункциональный Android-клиент.
- Разработан с использованием кооперативной модели разработки.
- Пользователи могут читать, отвечать, фильтровать, публиковать, отмечать избранные и продвигать сообщения.
- В приложении реализованы функции автономного чтения, черновиков сообщений и планирования постов.
- Поддерживается работа с несколькими аккаунтами.
- Есть возможность настройки тем и шрифтов.
- Пользователи имеют контроль над уведомлениями.
- В приложении можно просматривать популярные посты, ссылки и хэштеги.
🐱 GitHub
🔗F-droid
🌐Site
@android_its
🔥 Дайджест полезных материалов из мира Android за неделю
Почитать:
— Дайджест мобильной разработки за август
— Реализуем современный UI на Jetpack Compose
— «Подарил удочки и попрощался с друзьями на год»: как я стал Android-разработчиком, отказавшись даже от прогулок
— Мобильная разработка за неделю #506 (11 — 17 сентября)
— Understanding Stateful vs. Stateless Widgets in Flutter
— #11 Example of Views & View Groups in android | Android Studio Tutorial | SoftwareTechIT
— Why Should Startups Develop a React Native App?
— Stop Using Result Wrappers In Your Reactive Return Types
— #10 Introduction to Views & View groups |Android Studio Tutorial| #softwaretechit
— #9 Example Of Fragment in android | Android Studio Tutorial| #SoftwareTechIT
— Android Application(Shot badges notification)
— Android Application(Shot badges notification)
— Integrating Android MRZ Recognition in .NET MAUI: From AAR Files to a NuGet Package to a Complete App
— Using setState for Simple State Management in Flutter
Посмотреть:
🌐 Python Matplotlib. Визуализация данных на PRO уровне. (⏱ 24:43)
🌐 Поиск мотивации. Ментор же решит всё. Что мне делать (⏱ 21:39)
🌐 Собеседование на Mobile Developer. Алексей Панов, Контур (⏱ 01:50:36)
🌐 Модерация приложений и игр в магазине. RuStore (⏱ 01:06:06)
Хорошего дня!
@android_its
Курс «Профессия Архитектор ПО» поможет вам систематизировать знания и получить новые навыки для перехода в профессию. За 4 месяца вы освоите лучшие практики и разберёте реальные кейсы от тимлидов «Альфа-Банка».
Что вам даст этот курс?
— Научитесь планировать архитектуру и выбирать стек в зависимости от задачи проекта.
— Сможете разделять систему на компоненты исходя из требований.
— Познакомитесь с фреймворками и паттернами API Gateway, CQRS и «Сага».
— Будете создавать безопасные приложения — работать с аутентификацией, SSL и TLS и строить интеграции.
— Научитесь презентовать архитектурные решения перед бизнесом и командой.
В конце курса — разработаете архитектуру приложения по брифу от заказчика. Такой опыт поможет вам брать на себя ответственность за ведение проектов и быстро получить повышение на работе.
Спешите приобрести курс со скидкой!
Подробнее по ссылке https://epic.st/--So-
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
🤝 Создание собственной версии UseCase в 2023 году: гибкий и функциональный подход
Зачем создавать собственную версию UseCase? Причина очевидна: у каждого из нас уникальный опыт и свои подходы к решению проблем. Делясь собственной версией UseCase, я не опровергаю идеи других разработчиков.
В разработке программного обеспечения
UseCase — это описание конкретного действия или взаимодействия, которое система или приложение выполняет для достижения определенной цели субъекта (пользователя или другой системы).
В нем описываются “шаги” и взаимодействия между различными компонентами, чтобы продемонстрировать, как конкретная функциональность используется в системе. UseCase часто используется для фиксирования “функциональных требований” и определения поведения системы с точки зрения ее пользователей.
Что такое UseCase в гибкой и функционально чистой архитектуре?
В контексте Fluent and Fun Clean Architecture (гибкой и функционально чистой архитектуры) UseCase служит более всеобъемлющей цели по сравнению с традиционным сценариями использования. Вместо того чтобы описывать функциональность исключительно с точки зрения пользователя, мы подходим к ней с точки зрения приложения при выполнении события или действия.
☝️Это означает, что UseCase не только описывает действия пользователя, но и представляет шаги, необходимые для достижения определенного результата при инициации события. Объединяя эти подходы, мы создаем выразительные и удобочитаемые UseCase, соответствующие требованиям приложения.
Как создать UseCase в рамках гибкой и функционально чистой архитектуры?
Прежде чем мы углубимся в особенности UseCase в контексте гибкой и функционально чистой архитектуры, разберемся с тем, как реализовать UseCase в рамках чистой архитектуры.
Для лучшего понимания рассмотрим простой пример UseCase в приложении электронной коммерции.
UseCase: Place Order (размещение заказа).
Действие: Клиент.
Описание: Этот UseCase представляет собой процесс размещения клиентом заказа на товар в приложении электронной коммерции.
Требования:
1. Клиент должен быть авторизован.
2. Корзина не должна быть пуста, чтобы можно было оформить заказ.
3. Сумма денег в кошельке клиента не должна быть меньше суммы заказанного товара.
4. Если все три условия соблюдены, необходимо обновить запас продукции.
5. После завершения оформления заказа корзина в приложении должна быть очищена.
Чтобы реализовать это все в рамках чистой архитектуры, вы, как правило, следуете структуре кода, подобной приведенной ниже.class PlaceOrderUseCase(
private val userRepository: UserRepository,
private val productRepository: ProductRepository
) {
operator fun invoke(order: Order) {
if (userRepository.isLoggedIn()) {
val cart = userRepository.getCart()
if (cart.isNotEmpty()) {
if (userRepository.hasEnoughFunds(order.getTotalPrice())) {
productRepository.updateProductStock(order)
userRepository.clearCart()
} else {
throw InsufficientFundsException(
"Not enough funds in the wallet."
)
}
} else {
throw EmptyCartException("The cart is empty.")
}
} else {
throw NotLoggedInException("User is not logged in.")
}
}
}
Теперь разберем ее шаг за шагом, чтобы создать UseCase:
Читать
@android_its
Android: пошаговый курс для начинающих
1. Android Studio – установка, настройка эмулятора
2. Введение в XML, что такое View, теги и атрибут
3. Контейнеры - FrameLayout, LinarLayout. Отступы.
4. Верстаем экран по макету из Figma, ShapeDrawable
5. Ресурсы (res), квалификаторы, локализация, шрифты
6. Cтили, темы в приложении и их кастомизация
7. findViewById, ViewBinding, backing property
#video #android
https://www.youtube.com/watch?v=DzqfBxlvANQ&list=PLgPRahgE-GctUcLMcQFvl00xsXqpNJOix
@android_its
🔥 Дайджест полезных материалов из мира: Android за неделю
Почитать:
— Используем UI-тесты для поиска утечек
— Использование Compose для ТВ-версии приложения Иви: мощный фреймворк для создания эффективных Android-приложений
— Vivaldi 6.2 для Android — Внимание к деталям
— Библиотека «Jetpack Compose» для начинающего Android-разработчика
— Запускаем IDEA и CLion на Android
— Мобильная разработка за неделю #503 (21 — 27 августа)
— Coroutines are not just about concurrency
— Labeling Multiple Barcodes with Augmented Reality and Dynamsoft Barcode Reader
— KSP in Android projects
— Android
— Tutorial: Sending Mobile Push Notifications Using Courier and Their New Android SDK
— How to Create a Bluetooth LE Scanner for Android
— Exploring Simple Widgets II: Autocomplete
— Entorno de Desarrollo para empezar a desarrollar aplicaciones Moviles I
— Why I Haven't Started Learning Kotlin Multiplatform Mobile Yet
— Guide to Develop the Best White Label Taxi Dispatch System
Посмотреть:
🌐 Что нового в Android 14 для разработчиков (⏱ 36:32)
🌐 Cобеседование Android-разработчика. Максим Качинкин, Dodo Engineering (⏱ 01:44:13)
🌐 Как учиться правильно? Методы обучения ios и не только (⏱ 13:41)
🌐 Продвинутый парсинг на Python со сменой прокси (⏱ 10:27)
🌐 Уроки Golang с нуля /#25 - Интерфейсы (⏱ 10:51)
🌐 Многопоточный парсер на Python. ООП подход (⏱ 08:24)
Хорошего дня!
@android_its
Тинькофф ищет мобайл-разработчиков.
Если пишете для iOS или Android, участвуйте в Mobile Weekend Offer. Сможете пройти собеседование за выходные и получить оффер в течение трех дней.
Масштабные финтех-задачи, продукты для 30 млн пользователей и хорошая зарплата прилагаются.
Успейте оставить заявку до 13 сентября: https://l.tinkoff.ru/wo.mobile.23
Реклама АО «Тинькофф Банк»
🔥 Дайджест полезных материалов из мира : Android за неделю
Почитать:
— Используем UI-тесты для поиска утечек
— Использование Compose для ТВ-версии приложения Иви: мощный фреймворк для создания эффективных Android-приложений
— Vivaldi 6.2 для Android — Внимание к деталям
— Библиотека «Jetpack Compose» для начинающего Android-разработчика
— Запускаем IDEA и CLion на Android
— Мобильная разработка за неделю #503 (21 — 27 августа)
— Coroutines are not just about concurrency
— Labeling Multiple Barcodes with Augmented Reality and Dynamsoft Barcode Reader
— KSP in Android projects
— Android
— Tutorial: Sending Mobile Push Notifications Using Courier and Their New Android SDK
— How to Create a Bluetooth LE Scanner for Android
— Exploring Simple Widgets II: Autocomplete
— Entorno de Desarrollo para empezar a desarrollar aplicaciones Moviles I
— Why I Haven't Started Learning Kotlin Multiplatform Mobile Yet
— Guide to Develop the Best White Label Taxi Dispatch System
Посмотреть:
🌐 Dagger KSP | Замена Firebase | Ускорение тестов (⏱ 19:43)
🌐 Кодогенерация. KAPT. KSP. Manual DI (⏱ 57:57)
🌐 Cобеседование Android разработчика. Максим Качинкин, Dodo Engineering (⏱ 00:00)
🌐 Продвинутый парсинг на Python со сменой прокси (⏱ 10:27)
🌐 Уроки Golang с нуля /#25 - Интерфейсы (⏱ 10:51)
🌐 Многопоточный парсер на Python. ООП подход (⏱ 08:24)
Хорошего дня!
Droidian
Droidian - это дистрибутив GNU/Linux, разработанный на базе Debian, специально для использования на мобильных устройствах, основанных на Mobian.
Основная цель Droidian заключается в том, чтобы позволить пользователям запускать Debian на своих Android-телефонах.
Для достижения этой цели Droidian использует уже установленные и признанные технологии, такие как libhybris и Halium.
4pda ⬅️
Поддерживаемые устройства ⬅️
@android_its
⏏ Создание анимированной кнопки-счетчика в Jetpack Compose
🟠Создание базового макета
Начнем с создания базового макета без функций анимации и перетаскивания. Можно разделить дизайн на два основных компонента: перетаскиваемый ползунок и округлый макет кнопки с иконками уменьшения, сброса и увеличения.
Понадобится также корневой макет для хранения этих двух компонентов. Поскольку кнопка сброса скрыта под перетаскиваемым ползунком, а ползунок можно перетаскивать по вертикали за пределы кнопки, мы будем использовать компонент Box, позволяющий реализовать перекрывающиеся элементы.
Первоначальная composable корневого макета:@Composable
private fun CounterButton(
value: String,
modifier: Modifier = Modifier
) {
Box(
contentAlignment = Alignment.Center,
modifier = modifier
.width(200.dp)
.height(80.dp)
) {
ButtonContainer(
onValueDecreaseClick = { /*TODO*/ },
onValueIncreaseClick = { /*TODO*/ },
onValueClearClick = { /*TODO*/ },
modifier = Modifier
)
DraggableThumbButton(
value = value,
onClick = { /*TODO*/ },
modifier = Modifier.align(Alignment.Center)
)
}
}
🟠 Теперь рассмотрим composable ButtonContainer, в которой размещаются кнопки-иконки. Будем использовать компонент Row, поскольку три кнопки должны располагаться горизонтально. Arrangement.SpaceBetween поможет горизонтально расположить кнопки в начале, центре и конце макета. Кнопки представлены как composable IconControlButton, которая является просто оберткой IconButton.
ПРИМЕЧАНИЕ: ЧТОБЫ ПРИМЕНИТЬ ТАКИЕ ЖЕ ИКОНКИ, ДОБАВЬТЕ В ПРОЕКТ ЗАВИСИМОСТЬ ANDROIDX.COMPOSE.MATERIAL:MATERIAL-ICONS-EXTENDED ИЛИ ИКОНКИ ВРУЧНУЮ.
Мы будем использовать модификатор clip(RoundedCornerShape()) для получения необходимой формы фона, а также зададим цвет фона. Изменим альфа-канал цветового насыщения фона, поскольку позже понадобится анимировать его при перетаскивании ползунка. То же самое касается насыщенности цвета кнопок. Кнопку сброса пока скроем, так как будем работать над ее логикой потом.
ПРИМЕЧАНИЕ: НЕ РЕКОМЕНДУЕТСЯ ХАРДКОДИТЬ ЦВЕТА ПОДОБНЫМ ОБРАЗОМ, ТАК КАК ЭТО ВЫЗОВЕТ ПРОБЛЕМЫ СО СВЕТЛОЙ/ТЕМНОЙ ТЕМОЙ. В ДАННОМ ПРИМЕРЕ ЭТО ДЕЛАЕТСЯ ТОЛЬКО ДЛЯ ТОГО, ЧТОБЫ МАКСИМАЛЬНО СОКРАТИТЬ КОД.
Composable контейнера кнопки:
📌 Продолжение
@android_its