android_its | Unsorted

Telegram-канал android_its - Android разработка

5076

все о Android разработке @itchannels_telegram - 🔥 лучшие it каналы @ai_machinelearning_big_data -ML @ArtificialIntelligencedl -AI @datascienceiot - ml 📚 @pythonlbooks -📚books

Subscribe to a channel

Android разработка

💻 Что такое Kotlin Channel?

При использовании корутин в Kotlin рано или поздно появляется вопрос о том, какие примитивы необходимо использовать для передачи потоков данных между несколькими корутинами.
Для этого в библиотеке kotlinx.coroutines имеется специальный механизм, который так и называется — Channel.

▶️ Посмотрим на него поподробнее

@android_its

Читать полностью…

Android разработка

💻 Статические методы и синхронизация в Котлин

На собеседовании может всплыть вопрос в духе: "Что будет являться монитором для блока кода, помеченного сразу двумя аннотациями @Synchronized и @JvmStatic в Котлин?".
Держите полезную статью, в которой рассматривается, для чего используются данные аннотации и каким будет результат при их одновременном использовании.

А пока немного о @Synchronized и @JvmStatic:

🟡Аннотация @Synchronized в Kotlin является аннотацией для методов и блоков кода, которая обеспечивает синхронизацию доступа к ним между потоками. Когда метод или блок кода помечены аннотацией @Synchronized, только один поток может получить право их выполнения в определенный момент времени, остальные потоки будут ожидать освобождения монитора, прежде чем получить доступ. Это позволяет избежать состояния гонки и обеспечить правильное выполнение кода в многопоточной среде.

🟡Аннотация @JvmStatic в Kotlin указывает компилятору, что функция или свойство должны быть статическими в Java-коде после компиляции. Когда мы используем @JvmStatic перед функцией или свойством в объекте- компаньоне или внутри объекта, компилятор Kotlin создает соответствующий статический элемент в Java-коде. Это позволяет вызывать этот элемент напрямую из Java-кода, без необходимости ссылаться на экземпляр класса или объекта.

📎 Статья

@android_its

Читать полностью…

Android разработка

📱 Android-приложение для демонстрации работы основных функций SDK на Kotlin

Отличная идея для пет-проекта;
описание возможностей приложения:
• Инициализация платежа
• Отмена платежа
• Возврат платежа
• Проведение клиринга
• Проведение рекуррентного платежа
• Получение информации/статуса платежа
• Добавление карт/Удаление карт
• Оплата добавленными картами
• Безакцептные платежи
• Создание платежа с Google Pay

🖥 GitHub

@android_its

Читать полностью…

Android разработка

💻 RecyclerView — реализация прослушивателя щелчка по элементу в Android Studio

Держите годный пошаговый гайд по созданию RecyclerView на Kotlin в Android Studio.

План туториала:
├╼ Создание базового шаблона элемента
├╼ Реализация адаптера для ресайклью
├╼ Реализация ресайклью и переход на новую активити
├╼ Создание элемента в ресайквью
├╼ Обработка клика
├╼ Создание инфо элемента
╰╼ Реализация клика

📎 Ссылка

@android_its

Читать полностью…

Android разработка

Пишете на Swift под iOS? Или на Java/Kotlin под Android? Для вас есть работа в Тинькофф.

18 и 19 мая пройдет Mobile Weekend Offer для разработчиков с опытом от 3 лет. Так можно попасть в команду еще быстрее: пройти все этапы собеседования за выходные и получить оффер на неделе.

Если устроитесь, будете решать сложные финтех-задачи, развивать продукты для миллионов и расти в сильной команде. Топовый стек, достойная оплата и ДМС со стоматологией тоже будут.

Проверьте свои силы — оставьте заявку до 15 мая

АО «Тинькофф Банк», ИНН 7710140679

Читать полностью…

Android разработка

💻 Как создать свой View в Android Studio + Kotlin (XML)

Отличное видео о том, как работать с View в Android Studio.
Самое то, для тех, кто только вливается в эту тему

Что внутри?
• Создание кастомного View
• Рисование примитивных фигур
• Работа с системой координат
• Рисование круга с помощью Canvas
• Настройка координат и цвета
• Использование Style для настройки цвета

📎 Кликабельный план
📎 YouTube

@android_its

Читать полностью…

Android разработка

💻 Запуск Kotlin кода без IDE

▶️Итак, вопрос: как скомпилировать простенький код написанный на Kotlin без IDE?


▶️Вот пошаговая инструкция:

1. Загрузить компилятор. Найти последнюю версию можно здесь.

2. Распаковать компилятор в отдельную папку, добавить bin директорию в переменную окружения PATH. Об этом можно почитать тут. Bin содержит скрипты, необходимые для сборки и запуска кода на Windows, OS X и Linux.
Другой вариант установки компилятора: для OS X, Linux, Cygwin, FreeBSD или Solaris (возможно, и другие UNIX-системы), то можно использовать SDKMAN https://sdkman.io/.
Запускаем в терминале:

$ curl -s https://get.sdkman.io | bash

Затем следуем инструкциям. Потом потребуется открыть новое окно терминала и установить Kotlin с помощью команды:
$ sdk install kotlin


▶️Теперь кратко о создании и запуске простого приложения.

1. Создаем файл - `hello.kt` со следующим кодом:
fun main(args: Array<String>) {
println("Hello, World!")
}


2. Компилируем, используя командную строку:
$ kotlinc hello.kt -include-runtime -d hello.jar

Подробнее о флагах компиляции можно почитать в мане:
$ kotlinc -help


3. Запускаем приложение:
$ java -jar hello.jar


📎Более подробно о других вариантах установки компилятора, компиляции библиотек, запуске Kotlin-скриптов и прочем в доках

@android_its

Читать полностью…

Android разработка

📱 Интересная статья о написании профайлера для анализа Android-приложения с помощью Kotlin

Некоторые мысли из статьи, и о чём вообще в ней речь:

Аудит приложения важен для выявления неявных деградаций в производительности.

Написанный профайлер обладает рядом плюсов, таких как минимальное негативное влияние на производительность и гибкость в сборе метрик.

Существующие инструменты Android Profile, Battery Historian и Systrace имеют свои минусы.

В частности, Android Profiler имеет наглядные графики и обширный функционал, но у него отсутствует гибкость в сборке метрик.

Systrace позволяет собирать и инспектировать время работы частей кода по всем процессам на девайсе.

Battery Historian нужен для получения дополнительной информации по работе приложения, такой как процент потребления батарейки и условия, влияющие на потребление.

В статье представлены коды для фиксации значений потребления CPU, памяти, сети и потребления батареи.

Кастомное решение имеет ряд преимуществ по отношению к Android Profiler, включая отсутствие крашей, замедлений приложения и гибкость в сборе метрик.

📎 Статья

@android_its

Читать полностью…

Android разработка

📱 Zxing QR сканер (Jetpack compose) | Android Studio & Kotlin

Годный контент!
В этом видео описывается создание простого приложения — сканера QR-кодов на Jetpack Compose и Android Studio при помощи библиотеки ZXing.
Параллельно добавляется Room + Hilt для записи отсканированных кодов в БД.

📎 Кликабельный план видео
📎 YouTube

@android_its

Читать полностью…

Android разработка

💻 Отличная шпаргалка по функциям в Kotlin

Держите отличную презентацию по функциям в Kotlin, которая поможет повторить самое важное
Затрагиваются такие темы:
— функция main, точка входа
— компактные функции
— лямбды и функции высшего порядка
— список фильтров
— нетерпеливые и ленивые фильтры

Описано подробно и понятно, рекомендую
📎 Сайт со слайдами

@android_its

Читать полностью…

Android разработка

💻 Отличная статья-презентация о работе с шаблонизаторами Kotlin

В статье рассматривается использование шаблонизатора Pebble для формирования HTML-документов и его особенности, включая поддержку фильтров, тегов и наследования шаблонов.

Описаны условные конструкции, проверки и наследование шаблонов в рамках использования шаблонизатора Pebble.

Обсуждаются принципы работы с шаблонами и передача списков данных в шаблоны.

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

Кроме этого обсуждается вопрос null-безопасности в Kotlin и удобные средства для обработки этой ситуации.

📎 Онлайн-презентация

@android_its

Читать полностью…

Android разработка

💻 Золотой век Kotlin, и какое будущее его ждёт

«В компании Infobip с 2017 года и до сегодняшнего дня идет золотой век Kotlin. Будет ли он продолжаться, зависит исключительно от JetBrains и их способности внедрять инновации в Kotlin»

Полезная статья, в которой затрагиваются важные вещи, автор рассуждает о том, почему одни технологии сменяют другие, почему взлетевшие Scala и Groovy не так популярны сегодня и т.д.

Разбираются достоинства и недостатки Kotlin:
Плюсы Kotlin
— Интероперабельность с Java
— Корутины
— Структура данных и сопоставление шаблонов
— Работа с Null
— Другие особенности

Минусы Kotlin
— Интероперабельность с Java
— Экосистема Kotlin
— Рабочая сила
— Отсутствие прогресса

📎 Статья

@android_its

Читать полностью…

Android разработка

Android 15 Developer Preview 2!

Google выпустили предварительную сборку Android 15 Developer Preview 2.

🔸 Добавлен интерфейс для работы с спутниковой связью. Теперь Android 15 поддерживает обмен сообщениями SMS, MMS и RCS через спутник.

🔸 Новый раздел - "Передача аудио". Предполагается, что пользователь сможет передавать звук через Bluetooth одновременно на несколько наушников и динамиков с поддержкой Bluetooth. Однако на данный момент эта функция не работает.

🔸 "Режим веб-камеры" теперь поддерживает режим HQ-качества изображения.

🔸 Обнаружение записи экрана. Теперь, если приложение записывает ваш экран, вы получите уведомление об этом.

🔸 В разделе "О приложении" появилась функция "Отправить в архив". Архивация позволяет освободить до 60% пространства, сохраняя личную информацию.

Более подробную информацию о других изменениях можно найти в блоге Google. Заводские образы доступны по ссылке (начиная с Pixel 6).

https://developer.android.com/about/versions/15/download

@android_its

Читать полностью…

Android разработка

💻 Работа с интерфейсами Kotlin: правильная инициализация

В Kotlin интерфейсы не имеют конструкторов и не способны создавать экземпляры сами по себе. Они выступают в качестве шаблонов для классов, которые обязаны их реализовывать, предлагая конкретные реализации абстрактных методов, предусмотренных интерфейсом. Вот наглядный пример:

interface MyInterface {
fun myFunction()
}

class MyClass : MyInterface {
override fun myFunction() {
println("Пришло время действовать!")
}
}

val myObject = MyClass()
myObject.myFunction()

Помните: определите класс, который должен реализовывать интерфейс, а затем инициализируйте класс, создав его экземпляр.

📎 Читать подробнее

@android_its

Читать полностью…

Android разработка

Годная инфа для Android- и мобильных разрабов в целом

В этой таблице собраны особенности магазинов приложений, полезно учитывать при деплое

📎 А вот полезная статья в тему про деплой Flutter-приложений

@android_its

Читать полностью…

Android разработка

💻 Каррирование в Kotlin

Kotlin поддерживает парадигму функционального программирования (ФП). Часто объектно ориентированный подход (ООП) ставят в противовес ФП, но они не соперники и могут дополнить друг друга. Одно из понятий ФП — каррирование функций.

Например, преобразование функции в вид f(a)(b) называется каррированием в честь Хаскелла Карри.

// Пример каррированной функции с применением fun
fun f(a: Int) = { b: Int -> a + b }

// Пример каррированной функции с применением переменной
val f2: (Int) -> (Int) -> Int = { b -> { a -> a + b } }


▶️ Погружение в каррирование в Kotlin

@android_its

Читать полностью…

Android разработка

💻 Kotlin Coding Conventions

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

Затрагиваются такие очевидные и не совсем вещи:
Правила форматирования кода, отступы, фигурные скобки, использование замыкающих запятых

Комментарии к документации, использование иммутабельных данных и значения параметров по умолчанию

Особенности Kotlin, такие как использование именованных аргументов и условных операторов

Рекомендации по использованию функций расширения, инфиксных функций и фабричных функций

Пишите код и помните: однажды работать с ним будет маньяк, который знает, где вы живёте)

📎 Читать

@android_its

Читать полностью…

Android разработка

💻 Из Figma в Composable: как работать с плагином Relay в Android Studio

Одна из основных задач Android-разработчика — перенос компонентов пользовательского интерфейса из Figma в Composable-функции в Android Studio. Это можно делать вручную или использовать специальные плагины. Один из них — Relay для Android Studio. О Relay как раз и идёт речь в статье

Что внутри:
— Relay и для чего он нужен
— Как его установить
— Как настроить проект
— Как создать новостное приложение с помощью Relay

📎 Статья

@android_its

Читать полностью…

Android разработка

💻 KMP vs Flutter: 4 сценария, когда нужно сделать ставку на Kotlin Multiplatform, а не Flutter

Держите полезную статью
Кроссплатформенные инструменты помогают бизнесу не писать код два раза под iOS и Android, а переиспользовать его на обеих платформах. В статье — о том, чем Kotlin Multiplatform отличается от Flutter и в каких случаях он переигрывает и уничтожает Flutter.

▶️Некоторые выводы из статьи

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

Однако если у вас:
— премиальный продукт и вы хотите повысить комфорт пользователя
— есть планы нанять разработчиков в штат
— в команде есть готовые разработчики на Android и iOS
— уже есть нативное приложение
— вам нужно использование Bluetooth, приём звонков и другие нативные фичи
то лучше использовать KMP, позволяющий создать максимально привычный интерфейс

📎 Статья

@android_its

Читать полностью…

Android разработка

📱 Автоматизируем рутину в Android-разработке: плагин для создания шаблонного кода на примере создания -api -impl модулей

Держите полезную статью о том, как можно автоматизировать повторяющуюся работу в андроид-разработке при помощи плагина для Android Studio.
Показывается, как можно создать свой шаблон модулей используя api wizard template, проблемы с которыми придётся столкнуться (в основном это ограниченный функционал api) и как можно их обойти.

📎 Статья

@android_its

Читать полностью…

Android разработка

💻 Конструкторы-самозванцы в Kotlin

Держите полезную статью о том, как можно нестандартно использовать функции верхнего уровня в Kotlin. О чём пойдёт речь в статье?

В Kotlin возможны конструкции, которые могут выглядеть как вызовы конструкторов, но не являются таковыми

Функции верхнего уровня в Kotlin разрешены и не ограничены регистром именования

Использование оператора Companion.invoke() может быть полезно для контроля создания объектов в статическом контексте

Оператор receiver(Context) Companion.invoke() позволяет делегировать создание объектов в локальном контексте

📎 Статья

@android_its

Читать полностью…

Android разработка

Mobox — полезная утилита для запуска windows x86 приложений на Android.

Проект работает через Termux, используя Box64 и Wine. Имеет простой и быстрый процесс установки.

@android_its

Читать полностью…

Android разработка

💻 Немного о конструкции when в Kotlin

Конструкция when проверяет значение некоторого объекта и в зависимости от его значения выполняет тот или иной код. Конструкция when аналогична конструкции switch в других языках. Формальное определение:

when(объект){
значение1 -> действия1
значение2 -> действия2
...
значениеN -> действияN
}


Если значение объекта равно одному из значений в блоке кода when, то выполняются соответствующие действия, которые идут после оператора -> после соответствующего значения:
fun main() {
val isEnabled = true
when(isEnabled){
false -> println("isEnabled off")
true -> println("isEnabled on")
}
}

Здесь в качестве объекта в конструкцию when передается переменная isEnabled. Далее ее значение по порядку сравнивается со значениями в false и true. В данном случае переменная isEnabled равна true, поэтому будет выполняться код:
println("isEnabled on")



Выражение else

В примере выше isEnabled имела только 2 возможных варианта: true и false. Однако чаще бывают случаи, когда значения в блоке when не покрывают все возможные значения объекта. Дополнительное выражение else позволяет задать действия, которые выполняются, если объект не соответствует ни одному из значений:
val a = 30
when(a){
10 -> println("a = 10")
20 -> println("a = 20")
else -> println("неопределенное значение")
}

То есть в данном случае если переменная a равна 30, поэтому она не соответствует ни одному из значений в блоке when. И соответственно будут выполняться инструкции из выражения else.

Если надо, чтобы при совпадении значений выполнялось несколько инструкций, то для каждого значения можно определить блок кода:
var a = 10
when(a){
10 -> {
println("a = 10")
a *= 2
}
20 -> {
println("a = 20")
a *= 5
}
else -> { println("неопределенное значение")}
}
println(a)


📎 Читать подробнее

@android_its

Читать полностью…

Android разработка

💻 Создаем первое приложение с Jetpack Compose на Kotlin

Держите годное видео о том, как с помощью фреймворка Jetpack Compose создать проект в Android Studio.

📎 Кликабельный план ролика
📎 Само видео

@android_its

Читать полностью…

Android разработка

💻 О .not() и ! в Kotlin

Мы довольно часто используем оператор .not(), поскольку это более читабельно, чем !.

Но есть одна вещь, которую оператор .not() не может сделать — поглядите:

myEvents?.forEach { myEvent -> 
if (!myEvent.events.isNullOrEmpty()) {
myEvent.events.find { it.type == eventType }
}

if (myEvent.events.isNullOrEmpty().not()) {
myEvent.events.find { it.type == eventType }
}
}

Как-то так

@android_its

Читать полностью…

Android разработка

💻 Библиотека Scout — быстрый и безопасный DI на Kotlin

Scout — это библиотека, появившаяся как результат большого количества проб и ошибок. Пет-проекты с кастомными DI-контейнерами. Изучение каждого нового DI-фреймворка, который появлялся в комьюнити.
Держите полезную статью о том, как Scout создавалась и какие проблемы может решать.

Вот ещё некоторые факты из статьи:
*️⃣Библиотека Scout использует рефлексию для доступа к содержимому графа и предоставляет защищенные методы для обращения к нему.

*️⃣Валидация графа становится сложной из-за отказа от аннотаций, но может быть проверена в unit-тестах.

*️⃣Библиотека предлагает удобный и настраиваемый валидатор графа зависимостей.

📎 Читать подробнее

@android_its

Читать полностью…

Android разработка

💻 Отличия Sequence API vs Collection в Kotlin

Держите хорошее объяснение отличий между 2 этими понятиями.

В статье рассматриваются примеры, которые помогают визуализировать разницу между Sequence API и обычными коллекциями.

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

Sequence API в Kotlin могут обрабатывать данные более эффективно, чем обычные коллекции.

📎Читать подробнее: [ru], [en]

@android_its

Читать полностью…

Android разработка

💻 Создание анонимного экземпляра интерфейса в Kotlin

Если сразу к сути, то для создания экземпляра анонимного интерфейса в Kotlin применяется объектное выражение. Определите интерфейс непосредственно при инициализации переменной следующим образом:

val myInterfaceInstance = object : MyInterface {
override fun myFunction() {
// Ваш код здесь
}
}

myInterfaceInstance.myFunction()

В данном примере переменной myInterfaceInstance мы присваиваем объект, используя ключевое слово object :
Далее указываем название интерфейса, а затем в фигурных скобках представляем реализацию необходимых функций с помощью переопределения.


Создание экземпляра SAM-интерфейса, используя лямбду

Интерфейс с одним абстрактным методом (SAM) в Kotlin может быть представлен лямбдой. Котлин предлагает более лаконичную запись для интерфейсов с единственным методом:
fun interface MySAMInterface {
fun myAction()
}

val myInterfaceInstance = MySAMInterface {
println("Смотрите, мама, я пишу код без использования рук!")
}

myInterfaceInstance.myAction()


Здесь для сокращения записи при создании анонимного экземпляра используется лямбда-выражение. Не забывайте, что SAM-преобразования доступны лишь для интерфейсов, имеющих только один абстрактный метод.

📎 Читать подробнее

@android_its

Читать полностью…

Android разработка

💻 Своё расширение в Kotlin

Можно ли организовать свое собственное расширение в Kotlin? Да, это можно сделать через Delegate:

class MyString {
fun myPrint(text: String) {
println(text)
}
}


Есть класс MyString с методом myPrint(). Допустим нам надо сделать собственное расширение printRealExt() без использование встроенных в Kotlin возможностей:
fun MyString.printRealExt(text: String) {
println(text)
}


Реализуем интерфейс и класс с нашим методом "расширения":
interface ExtensionPrint {
fun printExt(text: String)
}

class ExtensionPrintImpl : ExtensionPrint {
override fun printExt(text: String) {
println(text)
}
}


А затем воспользовавшись Delegation делегируем этот метод:
class MyString : ExtensionPrint by ExtensionPrintImpl() {
fun myPrint(text: String) {
println(text)
}
}


Синтаксис вызова из расширения и из делегата выглядит одинаково:
    val myString = MyString()
myString.printRealExt("Real ext")
myString.printExt("Text from ext")


Таким же образом можно организовать множественное наследование в Kotlin:
interface OneClassInterface {
fun someOne()
}

class OneClassImpl : OneClassInterface {
override fun someOne() {
println("some One")
}
}

interface TwoClassInterface {
fun someTwo()
}

class TwoClassImpl : TwoClassInterface {
override fun someTwo() {
println("someTwo")
}
}

class DerivedClass : OneClassInterface by OneClassImpl(), TwoClassInterface by TwoClassImpl()


@android_its

Читать полностью…

Android разработка

Вариант для тех, кто ищет виртуальный сервер с хорошей веб-защитой — Aéza:

– Виртуальные сервера до 6.0 ГГц на лучших процессорах;
– Профессиональная фильтрация атак StormWall;
– Круглосуточная поддержка;
– Anycast фильтрация;
– Низкие цены;
– 15% кешбэка по ссылке.

Бесконечно можно смотреть на три вещи: на огонь, воду и скидку от Aeza!
Говорят: твоё от тебя не уйдет. А зачем ждать? Динозавры тоже ждали и остались в прошлом

Используй 50% скидку и погнали в будущее!

Кроме того, сейчас Aéza раздает личные бесплатные сервера, забираем тут. Регистрация, подписка, платежи не потребуются.

Реклама. Индивидуальный предприниматель Лобанов Леонид Константинович. ИНН 781625705648 erid: LjN8KEr3S

Читать полностью…
Subscribe to a channel