Всем привет! Разберёмся, что нам несёт грядущее обновление Android 13. В этом помогу я — Алексей Рябков, Android-тимлид в Surf.

Для начала давайте поймём, как называть эту версию. На десятом Android Google перестал давать версиям «съедобные» названия. Но, как говорят, даже внутри компании сотрудники между собой не использовали числовые версии, а придумывали новые — вкусные. Так или иначе, теперь Android 13 называется Тирамису. Вот и всё, живите с этим.

У Тирамису доступна уже третья бета-версия. По моим ощущениям, последние билды очень даже неплохие. В бетках двенадцатой версии, например, были поломанные анимации, зависания и прочие неприятные штуки, а с Android 13 всё работает круто и без проблем.

А теперь переходим к изменениям. 

Новые разрешения 

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

Google озаботился проблемой и начал искать способы это пофиксить. Он стал разделять пуши по каналам, от которых можно было отключаться. Но, как выяснилось, подавляющее большинство пользователей не знали про эту фичу или не понимали, как ей воспользоваться. Поэтому Google пошёл на кардинальные меры: теперь пользователь выдаёт доступ к пушам каждому приложению. Появляется диалог с просьбой дать доступ разрешению POST_NOTIFICATIONS. Диалог, кстати, стал выглядеть симпатично.

Добавляется новая группа разрешений NEARBY_DEVICES для приложений, которые управляют подключениями устройства к близлежащим точкам доступа по Wi-Fi. Скорее всего, это будет использоваться в основном для организации работы умного дома и для взаимодействия с ближайшими устройствами: распечатать что-нибудь на принтере, перенести видео в приложении с телефона на телевизор и так далее.

Добавляется возможность получить разрешение для чтения только конкретного типа файлов на устройстве: картинок, видео и аудио. Раньше разрешение давалось для всех файлов при помощи READ_EXTERNAL_STORAGE. Теперь для большей прозрачности следует использовать READ_MEDIA_IMAGES, READ_MEDIA_VIDEOREAD_MEDIA_AUDIO. Причём если разрешения READ_MEDIA_IMAGE и READ_MEDIA_VIDEO запрашиваются одновременно, появится только один диалог с просьбой дать аппрув. Удобно.

У разработчиков появится способ отозвать уже выданное разрешение: это сделано ради конфиденциальности. Нужно передать название пермишена в метод revokeOwnPermissionOnKill(..), и разрешение будет отозвано.

TARE: ничего не понятно, но очень интересно

Мы вступаем на неизведанную территорию: про этот пункт ничего не сказано в официальном пресс-релизе. Почти все данные, что есть, основаны на домыслах и слитой информации. 

В новой версии в разделе настроек для разработчиков добавился новый пункт — TARE. Это аббревиатура от «The Android Resource Economy». TARE в первую очередь фокусируется на управлении энергопотреблением на устройстве. Функция работает с помощью политик AlarmManager и JobScheduler. 

TARE предоставляет приложениям «Кредиты ресурсов Android» — «валюту», привязанную к уровню заряда батареи устройства. Система будет «присуждать» кредиты в зависимости от того, насколько разряжена батарея. Приложения могут использовать эти кредиты в качестве «платежей» за возможность выполнять задачи. 

По сути система в зависимости от уровня заряда батареи и потребностей приложения будет устанавливать ограничения на количество задач, которые приложение может планировать с помощью JobScheduler и AlarmManager. Но в подробностях понять всё это очень сложно. Ждём, когда Google выпустит документацию. 

Изменения UI

Язык. Долгожданная для некоторых фича: возможность устанавливать отдельным приложениям язык, отличный от языка системы. Правда, для этого приложение должно иметь поддержку других языков (спасибо, кэп!).

Нет необходимости отравлять пользователя в настройки: можно использовать собственный пикер языка внутри приложения. Чтобы получить текущий предпочтительный язык, используйте метод

mContext.getSystemService(LocaleManager.class).getApplicationLocales();.

А для установки языка — метод mContext.getSystemService(LocaleManager.class).setApplicationLocales(newLocaleList(Locale.forLanguageTag("xx-YY")));.

Иконка для тёмной темы. Теперь у приложения может быть другая иконка для тёмной темы. Чтобы фича поддерживалась, необходимо, чтобы приложение имело такую иконку (спасибо, кэп!), функция была включена в системе (свичер на гифке) и чтобы сам лаунчер её поддерживал.

Быстрые настройки. Хорошая новость для утилитарных приложений: появилась возможность добавить карточку приложения. Будет удобнее менять некоторые настройки или совершать быстрые действия благодаря новому API: можно добавить карточку в одно действие, не покидая приложение.

Отображение текста. Компании стараются работать с иностранными проектами, поэтому о таких обновлениях имеет смысл упомянуть. Для японского языка обновили логику переноса слов. 

Для не латинских языков починили отображение текста. На скрине заметно, что раньше часть символов обрезалась снизу.

Выбор фотографий. Добавили поддержку нового инструмента выбора фотографий. Он даёт пользователям безопасный способ выбора медиафайлов без необходимости предоставлять приложению доступ ко всей медиатеке. Можно выбирать одно фото или несколько, а также устанавливать максимальное число фотографий для выбора благодаря MediaStore.EXTRA_PICK_IMAGES_MAX

val intent = Intent(MediaStore.ACTION_PICK_IMAGES)

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

Создание графики. Добавляется поддержка программируемых объектов RuntimeShader. Это даст возможность рисовать сложную графику и дополнительно накладывать на неё эффекты. 

Обновление жеста «Назад». Согласно документации, новый жест позволит пользователям увидеть пункт назначения до того, как они завершат свайп. Очень напоминает то, как сейчас работает прокрутка вверх, чтобы вернуться на главный экран. Полноценно жест станет доступен разработчикам после выхода Тирамису в релиз, а с API 34 его поддержка будет обязательной.

Прочие изменения

Google обновил API для класса ​​AudioManager: система укажет приложениям, какие аудиоформаты может воспроизводить и отображать на устройстве. Также станет возможно получать список устройств для воспроизведения звука. 


Источники:

Официальная документация

Обзор от XDA

Google I/O 2022

Лучшие практики для работы приложений в фоне

Комментарии (9)


  1. x2v0
    21.06.2022 11:31
    +1

    Меня интересует они починили "безобразие",
    которое произошло при переходе с Андроида10 на 11?

    System: Android11, Termux 0.117
    test directory ~/D/wrk/py= 350 Mb 
    ~/D -> /storage/0093-2100 - microSD (128 Gb) 
    ----------------------------------
    ls ~/D/wrk/py
    dicompyler-core
    dicompyler-plugins
    mitmproxy
    pydicom
    ----------------------------------
    ~/D/wrk $ time rm -rf py
    real    5m36.776s
    user    0m0.054s
    sys     0m0.579s
    ----------------------------------
     ~/D/wrk $ time tar  czf py.tar.gz py
    real    0m15.338s
    user    0m8.995s
    sys     0m1.261s
    ----------------------------------
    ~/D/wrk $time cp -rf py py1
    real    1m39.331s
    user    0m0.109s
    sys     0m1.609s
    '
    ----------------------------------
    ~/D/wrk $ time tar xzf py.tar.gz
    real    1m41.104s
    user    0m2.393s
    sys     0m2.116s
    ----------------------------------
    ~/D/wrk $ time cp -rf py ~/tmp/
    real    0m12.371s
    user    0m0.220s
    sys     0m3.173s
    ----------------------------------
    ~/D/wrk $ time mv py ~/tmp/
    real    5m52.948s
    user    0m0.252s
    sys     0m4.175s
    '
    ----------------------------------
     ~/D/wrk $  time mv py py1
    real    0m19.877s
    user    0m0.006s
    sys     0m0.029s
    ----------------------------------
    ~/tmp $ time mv py ~/D/wrk/py1
    real    1m36.492s
    user    0m0.232s
    sys     0m3.349s
    ----------------------------------
    ~/tmp $ time rm -rf py
    real    0m0.181s
    user    0m0.017s
    sys     0m0.104s
    ----------------------------------
    ~/tmp $ time tar zxf py.tar.gz
    real    0m2.485s
    user    0m1.993s
    sys     0m0.618s
    ----------------------------------
    ~/tmp $ time mv py ~/storage/dcim/
    real    0m40.538s
    user    0m0.152s
    sys     0m2.738s
    ----------------------------------
    ~/storage/dcim $ time rm -rf py
     real    2m25.909s 
    user    0m0.068s
    sys     0m0.642s
    --------------------------------------------------------------------
    Summary.
    ~/D/wrk $ time rm -rf py              = real    5m36.776s = 336s
    ~/storage/dcim $ time rm -rf py = real    2m25.909s = 146s
    ~/tmp $ time rm -rf py                 = real    0.181s
    операция на microSD/internal = 336/0.18 = в 1866 раз медленнее
    external(shared  disk)/internal  = 146/0.18 =в 811 раз медленнее
    

    АД2!

    Нашёл объяснение на
    https://learning-python.com/mergeall-android11-updates...
    Conclusions
    On a personal note, the Android 11 auto-update has functionally bricked this developer's phone, and seems the same as an auto maker creeping into your driveway and removing your car's engine. This device today can no longer be used for content backup and view—one of the main purposes for which it was purchased—and the fault squarely lies with the dubious agendas underlying Android 11. Though spun aggressively (and sometimes arrogantly) as enhanced security, the only thing 11's changes seem sure to secure is the revenue stream of cloud providers and mobile advertisers.

    ++
    Удаление директории с помощью файл менеджера (MiXporer, ghostcommander) - пара секунд

    +++
    Одно время использовал смартфон (8 core), как удалённый linux server

    • поднял на на нём ftpd, sshd, X11, nginx, + кучу всего

    • прокинул тоннель, чтобы он был доступен из внешнего мира

    • заходил на него с моего старенького ноута

    • компиляция opencv занимает пару часов, geant4, ROOT - несколько часов, быстрее, чем на ноуте !!!


  1. ss-nopol
    21.06.2022 12:35
    +1

    Я до сих пор не оправился от перехода на одиннадцатый - все мои данные из оунклауда, телеграма и проч. стали недоступны в других приложениях, не могу октрыть пдф, прослушать музыку, поделиться жпс-треком и т.п. Фактически половина функциональности стала недоступна.


    1. karambaso
      21.06.2022 15:16
      +6

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

      Ну а по сути статьи сразу видно, что улучшения реально "на отвали". Экономией энергии ведроид занимается уже с первых версий, когда можно было отследить какое приложение какой процент аккумулятора отъело, но такой простой способ не прижился и теперь каждую новую версию они выдают новые изменения, которые ломают множество старых программ. Ребятки так эспериментируют. А про обратную совместимость они уже давно официально сообщили - отказываемся навсегда. Потому что если кому надо - сами перепишут под новые изменения. Но главный враг экономии аккумулятора - реклама, которую все программы качают из сети, на что и тратися основная часть энергии аккумулятора. Только это же главная функция! И если честно сообщать пользователю о главном пожирателе его аккумулятора, то... Но пользователи уже давно и сами догадались. И пока нет вменяемой альтернативы - только долгое и нудно чтение форумов расскажет вам, как вернуть к жизни старые программы и уменьшить жор аккумулятора. Все проблемы, как обычно, переложены на потребителей (или уже практически рабов?).


      1. ss-nopol
        22.06.2022 16:49

        Android вообще не про потребности людей.

        До 11 версии кое-как он мои потребности удовлетворял. Сейчас вот думаю купить аппарат с поддержкой Lineage OS. Там же, надеюсь, доступ к директориям приложений не запретили?


  1. Ztare
    21.06.2022 13:27
    +11

    Это конечно все весело (т.е. бесполезный мусор).

    Где фаервол Лебовски? Требования разделять трафик на метрики и бизнес с возможностью отключить часть?

    Где суспенд мусорным приложениям вместе с их сраными сервисами, бродкастами и прочими способами слежки в фоне?

    Где фейковая локация? Где возможность дать не полную слежку за блютусом вокруг, а работать с одним девайсоми и аналогично для wifi?

    Где скрытый отзыв разрешений?

    Понятно что вопросы вникуда.


    1. DrinkFromTheCup
      21.06.2022 15:37
      +3

      К чёрту всё это.

      Где нормальное подключение SD-карты как основного накопителя для установки приложений?!


    1. Tangeman
      21.06.2022 18:18
      +2

      Где суспенд мусорным приложениям вместе с их сраными сервисами, бродкастами и прочими способами слежки в фоне?

      Это как раз есть — запрет на работу в фоне, и даже работает (проверено с рядом очень прожорливых приложений) — походите по настройкам приложений (Settings/Apps). В Pixel всё даже круче — есть "ограниченный режим" (не помню точно названия), когда вы явно указываете какие приложения могут быть активны, всё остальное намертво морозится до первого использования (вами лично, а не пушем или системой).


      С остальным конечно беда, особенно разрешение на локацию для работы с BT, или доступ ко всем файлам сразу — вместо одного явно разрешаемого (под)каталога.


      Впрочем, скрытый отзыв разрешений делается вручную без рута с помощью либо adb либо App Ops + Shizuku, и без рута же можно поставить файрволл (правда, ценой отказа от VPN) — больше телодвижений, но зато работает.


      На самом деле, это всё очень нишевые потребности которые не нужны подавляющему большинству (или им всё равно) — многие мои далекие от IT знакомые в ответ на предложение что-то подкрутить для улучшения приватности обычно отмахиваются в духе "мне всё равно".


      Но с другой стороны… если крутилки дать всем и сделать их простыми для активации, найдутся массы чайников которые сразу прострелят себе все конечности, начитавшись интернетов в духе "Первые 10 шагов которые нужно сделать в Андроиде после покупки телефона", и после этого авторов приложений (вместо с Гуглем) завалят негативом типа "у меня карты не работают" после "тихого" отключения GPS, так что я вполне понимаю разработчиков Android.


      Да, далеко не всё идеально с Android, но по сравнению с тем что было хотя бы 5 лет назад — реально много улучшений в плане приватности и борьбы с назойливостью — например, выдача разрешения только на время когда приложение активно, может со временем их и больше будет, если найдут способ сделать это не навлекая на себя и разработчиков приложений гнев большинства.


  1. peacemakerv
    21.06.2022 16:14

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


  1. snuk182
    22.06.2022 01:00

    Появляется диалог с просьбой дать доступ разрешению POST_NOTIFICATIONS

    Какой ужас.