17 декабря 2019 г.

Приложение не устанавливается, или устанавливается, но его не видно

Здесь можно включить поддержку нескольких профилей
    Буквально на днях у меня случилась аномалия, которой изначально я не придал значения. Ставлю приложение по adb, а оно не появляется в лончере. Делаю adb shell pm list packages, а его нет в списке установленных. Хотя установка проходит успешно! А сегодня ситуация усугубилась. Устанавливал другое приложение из файлового менеджера и получал ошибку установки. Хеш apk был правильный, приложение правильное, перезагрузка не помогала.

    Но на днях я включал другие профили в системе, хотя потом их удалил. Был у меня и профиль Гостя в Андроиде. И решил проверить подозрения.


Приложение успешно устанавливается, но пакет в списке установленных не виден

    При загрузке в профиль Гостя появился системный запрос, продолжить ли прошлый или начать заново. Я продолжил прошлый, поднял список установленных приложений и да. Оба эти приложения были установлены тут. И то, которое ставил через adb и оно устанавливалось успешно, и то которое устанавливал из файлового менеджера и получал сообщение о провале установки.
    Дело в том, что в Android в реализации Google (то есть в Pixel, потому что в некоторых других прошивках такого ограничения нет) сделано глупое решение. Основная учётка — владелец — не может удалить профиль Гостя. Такой опции нет. Нужно загружаться в Гостя, заходить там в настройки и оттуда удалять профиль. Лишние действия. Под "удалением Гостя" имею в виду не удаление профиля, как это сделано для полноценных учёток, а очистку его данных и отключение.

    Если вдруг кто не знает про то, что в Android уже много лет доступно несколько учётных записей с разными настройками и списком установленных приложений, то заходите в Settings → System → Advanced → Multiple users. Здесь вы можете добавлять полноценных пользователей, а можете загрузиться в Guest, который ограничен в возможностях. Новые профили могут как иметь Google учётку, так и не иметь её — это не важно. Считайте это разделением пространств. Например, домашний и рабочий. Личный и публичный. Для себя и для ребёнка. Приложения пересекаться не будут. То есть вы можете установить в разные профили одно и тоже приложение и настроить его по-разному. Файлы на /sdcard/, кстати, тоже разделены (в старших версиях Android). На сменной карте — зависит от способа её монтирования. Разумеется, с рутовыми правами реальных разделений профилей не будет.

    В чём же ошибка реализации этой фичи в Pixel? В том, что приложения могут улетать не в активный профиль. Я находился в профиле владельца, но два приложения улетели в профиль Гостя. Это при том, что на тот момент сама фича была выключена вообще. Просто данные Гостя не были очищены. Ну и стоило, наверное, как-то писать, что приложение установлено для такого-то пользователя, если это не текущий профиль.

В этот день я стал знать чуточку больше
Про профили знал давно. Но то, что изоляция у PM очень хреновая увидел впервые

    То есть ошибка установки была из-за того, что текущая учётка пыталась записать данные в профиль чужой учётки.

Первое приложение устанавливалось по adb.
Второе устанавливалось из файлового менеджера



    Мой канал в Telegram: https://t.me/mydaybug

Комментариев нет:

Отправить комментарий