НОВОСТИ
"
Содержание статьи
01. Почитать
01.1 Борьба с оверлеями
02. Разработчику
02.1 Чем отличаются compileSdkVersion и targetSdkVersion
02.2 Используем Ktor вместо OkHttp
02.3 Ограничение видимости функций-расширений
02.4 Очередная подборка функций-расширений
02.5 Kotlin и контракты
03. Библиотеки
ПОЧИТАТЬ
Борьба с оверлеями
Untrusted Touch Events in Android — статья о новой функции Android 12, направленной на борь-
бу с оверлеями, которые перекрывают весь экран или его часть.
Проблема оверлеев (окон, которые приложения могут показывать поверх своего или любых
других окон) в том, что они позволяют перекрыть окно другого приложения и передавать
ему все нажатия, показывая на экране совершенно другую информацию. В итоге злоумыш-
ленник может создать оверлей, который будет призывать нажать безобидную кнопку, а в
итоге нажатие будет передано находящемуся позади него окну, которое может активировать
опасную функцию.
В разных версиях Android Google реализовала все новые методы защиты от оверлеев, вклю-
чая невозможность контактировать с системными диалогами при наличии оверлеев, отзыв
разрешения на показ оверлеев при первой возможности и так далее. В Android 12 появится
еще один вид защиты: невозможность использовать оверлеи, которые пропускают нажатия.
Другими словами, если приложение показывает непрозрачный оверлей, который передает
нажатия находящемуся за ним окну (тип окна: TYPE_APPLICATION_OVERLAY с флагом
FLAG_NOT_TOUCHABLE), то такое окно будет заблокировано.
В списке исключений:
РАЗРАБОТЧИКУ
Но зачем тогда существует два свойства, если даже IDE подсказывает, что при обновлении
значения одного следует обновить и значение другого? Начнем с compileSdkVersion.
Задача этого свойства в том, чтобы указать, какая версия SDK будет использоваться
при компиляции приложения. Если сильно упростить, то она нужна для того, чтобы приложе-
ние смогло найти новые API и вызвать их.
Ktor — это библиотека для разработки клиентских и серверных сетевых приложений, изна-
чально спроектированная для работы в среде Kotlin вне зависимости от того, на какой плат-
форме работает приложение: JVM, Android, iOS, браузер или десктоп.
implementation "io.ktor:ktor-client-core:1.6.0"
implementation "io.ktor:ktor-client-cio:1.6.0"
Далее в коде создаем объект класса HttpClient (CIO — это движок корутин для JVM):
if (response.status == HttpStatusCode.OK) {
val raw = response.readText()
val result = Gson().fromJson(raw, Model.Result::class.java)
return Result.NetworkResult(
result.query.searchinfo.totalhits.toString()
)
}
Представим, что у нас есть класс Vehicle, олицетворяющий транспортное средство, а под-
классом этого класса может быть как автомобиль, так и космический корабль. Теперь мы
добавляем к классу Vehicle функцию‑расширение «проехать про бульвару»:
interface LandVehicle
Kotlin и контракты
Using Kotlin’s Contract APIs for Smarter Helper Functions — статья, рассказывающая, как сде-
лать код приложения чище, используя Contract API языка Kotlin.
if (name.isNull) { ... }
Вместо такого:
Однако есть небольшая проблема. Следующий код вызовет ошибку компилятора и предуп-
реждение среды разработки о том, что в третьей строке происходит обращение к nullable-
переменной:
Так происходит потому, что анализатор кода в среде разработки и компиляторе не в сос-
тоянии определить, что в третьей строке name гарантированно не может быть null.
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract@OptIn(ExperimentalContracts::class)
Это только один пример использования контрактов. В библиотеке Kotlin есть множество дру-
гих примеров, включая функцию requireNotNull. Использовать ее можно так:
fun main() {
val name: String? = null
requireNotNull(name)
БИБЛИОТЕКИ
Оцени статью:
!!!!!
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и
древних видеоигр.
! zobnin.github.io
Оставить мнение
Комментарий
ОТПРАВИТЬ