29 октября 2015 г.

Изменения в Android 6, часть вторая

    Это вторая часть перевода (первая здесь) и предупреждение тоже самое: читайте оригинал и сообщайте мне об ошибках

Изменения в Android 6.0: от букмарков до Android for Work

Условие: По тексту будет часто использоваться конструкция “Android 6.0 (API level 23)”. Её использует сам Google и, потому, использую и я. Возможно это поможет избежать ситуации, если в будущем Android 6 будет охватывать API других версий и если на одну версию API будет несколько версий Android 6.

Изменения в Browser Bookmark

    В этом релизе удалена поддержка глобальных закладок. Удалены методы android.provider.Browser.getAllBookmarks() и android.provider.Browser.saveBookmark(). Аналогично удалены права доступа READ_HISTORY_BOOKMARKS и WRITE_HISTORY_BOOKMARKS. Если приложение нацелено на Android 6.0 (API level 23) или выше, не пытайтесь получить доступ к закладкам из общего провайдера или использовать права доступа к закладкам. Вместо этого сохраняйте закладки локально.

Изменения в Android Keystore

    Начиная с этого релиза Android Keystore provider больше не поддерживает DSA. Поддержка ECDSA продолжается.
    Ключи, которые не требуют шифрования в простое (пояснение: Data at Rest - IT термин, означающий не используемые сейчас данные, хранящиеся физические на цифровых носителях. Используется как дополнение к терминам Data in Use и Data in Motion), не удаляются, когда блокировка экрана отключена или сброшена (пользователем или Администратором устройства). Ключи, требующие шифрования в простое, удаляются при этих событиях.

Изменения сетевых технологий и Wi-Fi

    В этом релизе имеются следующие изменения в Wi-Fi и сетевых API:
  • Теперь ваши приложения могут изменять состояние WifiConfiguration объектов только если они сами эти объекты и создали. Вы не можете изменять или удалять WifiConfiguration объекты, созданные пользователем или другими приложениями.
  • Раньше, если приложение форсировало подключение устройства к определённой Wi-Fi сети, используя enableNetwork() с настройкой disableAllOthers=true, устройство отключалось от других сетей, типа мобильной передачи данных. В этом релизе устройство больше не отключается от других сетей. Если в приложении для targetSdkVersion задано “20” или ниже, то приложение привязывается к заданной Wi-Fi сети. Если же targetSdkVersion21” или выше, используйте мультисетевые API (такие как openConnection(), bindSocket() и новый метод bindProcessToNetwork()), чтобы быть уверенным, что трафик идёт через выбранную сеть.

Изменения в использовании камеры

    В этом релизе модель общего доступа к камере изменена с “первый пришёл, первый получил” на модель, где высокоприоритетные процессы имеют преимущество. Изменения включают:
  • Доступ к подсистеме ресурсов камеры, включая открытие и настройку камеры устройства основывается на “приоритетах” процессов клиентских приложений. Процессы приложений, Activities которых на переднем плане, либо просто видны пользователю, обычно получают высокий приоритет, благодаря чему выделение ресурсов камеры для них более вероятно.
  • Ресурсы камеры могут быть высвобождены для высокоприоритетных приложений, даже если они сейчас используются низкоприоритетными. В объявленным устаревшем Camera API, высвобожденным клиентам возвращался onError(). В Camera2 API возвращается onDisconnected().
  • На устройствах с особой аппаратной реализацией камеры, разные приложения могут использовать разные камеры устройства одновременно. Тем не менее, сервис камеры определяет и запрещает многопроцессный доступ, если эта ситуация вызывает проблемы с производительностью и совместимостью. Это может привести к тому, что у низкоприоритетных процессов будет отобран доступ к камере, даже если никакие другие приложения не пытаются его получить.
  • В случаях смени профиля пользователя, приложения предыдущего пользователя освободят ресурсы камеры. Доступ к камере управляется текущим профилем пользователя. На практике это означает, что учётная запись “Гость”, например, не сможет удерживать подсистему камеры, если пользователь переключился на другую учётную запись.

Среда выполнения

    Среда выполнения ART теперь правильно определяет права доступа для метода newInstance(). Это изменение исправило проблему прошлых версий, из-за которой Dalvik неправильно проверял права доступа. Если ваше приложение использует метод newInstance() и вы хотите переопределить проверки доступа, вызовите метод setAccessible() со входным параметром true. Если ваше приложение использует  v7 appcompat library или the v7 recyclerview library, вы должны обновить его для использования последней версии этих библиотек. В противном случае убедитесь, что все кастомные классы, определённые в XML, обновлены таким образом, что их конструкторы доступны.
    Этот релиз обновляет поведение динамического линковщика. Динамический линковщик теперь понимает разницу между библиотеками с одинаковым именем и разными путями (баг 6670) и теперь поиск по имени работает. Приложения, которые раньше работали, используя стрёмные записи DT_NEEDED (обычно это абсолютные пути в билд конвейере), могут падать на старте.
    Флаг dlopen(3) RTLD_LOCAL теперь работает правильно. Заметим, что по умолчанию используется RTLD_LOCAL, потому могут пострадать вызовы dlopen(3), если они явно не используют RTLD_LOCAL (кроме случаев, когда ваше приложение явно использует RTLD_GLOBAL). С RTLD_LOCAL символы могут быть недоступны для библиотек, которые загрузились позже вызова dlopen(3) (в отличие от ставших относительными записей DT_NEEDED).
    В предыдущих версиях Android, если ваше приложение запрашивало у системы загрузку общей библиотеки с перемещением текста, система показывала предупреждение, но позволяла загрузить библиотеку. Начиная с этого релиза, если в приложении target SDK version задан в 23 и выше, загрузка библиотеки запрещается. Чтобы было проще обнаружить библиотеку, которую не удаётся загрузить, приложение должно записывать в лог ошибки с dlopen(3), включая текст описания проблемы, который возвращает вызов dlopen(3). Чтобы получить больше информации, смотрите руководство.

Проверка APK

    Теперь платформа выполняет строгую проверку APK. APK считается повреждённым, если файл объявлен в манифесте, но его нет внутри apk. APK необходимо переподписывать при удалении любого содержимого.

USB подключение

    Подключение устройства через USB порт по умолчанию переводит его в режим зарядки. Для доступа к устройству и его содержимому через USB подключение, пользователь должен явно дать права на выполнение этого действия. Если ваше приложение поддерживает взаимодействие пользователя с устройством через USB порт, учитывайте, что это взаимодействие нужно позволять явным образом.

Изменения в Android for WorkAndroid

    В этот релиз включены следующие изменения в Android for Work:
  • Рабочие контакты в контексте личных. Список вызовов Google Dialer теперь отображает рабочие контакты, когда пользователь просматривает последние вызовы. Установка setCrossProfileCallerIdDisabled() в true скрывает контакты из рабочего профиля в списке вызовов приложения Google Dialer. Рабочие контакты могут быть показаны вместе с личными контактами на устройствах, подключенных по Bluetooth, только если вы установили setBluetoothContactSharingDisabled() в false. По умолчанию параметр выставлен в true.
  • Удаление Wi-Fi настроек. Настройки Wi-Fi, добавленные Владельцем профиля (например через вызов метода addNetwork()) удаляются, если удаляется рабочий профиль.
  • Строгая изоляция настроек Wi-Fi. (Условие: здесь “настройки Wi-Fi” означает как сами W-Fi подключения, так и конкретные настройки конкретных подключений)
    Любые настройки Wi-Fi, созданные активным Владельцем устройства, больше не могут быть изменены или удалены пользователем, если WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN имеет не нулевое значение. Пользователь по-прежнему может создавать и управлять своими настройками Wi-Fi. Активный Владелец устройства имеет привилегии на редактирование или удаление любых настроек Wi-Fi, включая те, что созданы не им самим.
  • Скачивание Work Policy Controller при добавлении учётной записи Google. Если учётная запись Google, управляемая через приложение Work Policy Controller (WPC), была добавлена на не управляемое устройство, пользователя просят установить необходимый WPC. Это поведение применяется также к учётным записям, добавленным через Настройки -> Учётные записи и добавленных из мастера первоначальной настройки устройства.
  • Изменения в конкретных поведениях DevicePolicyManager API:
    • Вызов метода setCameraDisabled() накладывает ограничения на камеру только для пользователя, от которого происходи вызов; вызов из управляемого профиля не накладывает ограничений на доступ к камере для приложений, запущенных для основного профиля пользователя.
    • Дополнительно, метод setKeyguardDisabledFeatures() теперь доступен для Владельцев профиля в той же мере, как и для Владельцев устройства.
    • Владелец устройства может накладывать следующие ограничения для keyguard:
    • Методы createAndInitializeUser() и createUser() объявлены устаревшими.
    • Метод setScreenCaptureDisabled() теперь блокирует ещё и вспомогательную структуру, если приложение данного пользователя находится на переднем плане.
    • Теперь EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM по умолчанию настроен на SHA-256. SHA-1 пока поддерживается для обратной совместимости, но в будущем будет удалён. EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM теперь принимает только SHA-256.
    • API инициализации устройства, существовавшие в Android 6.0 (API level 23), удалены.
    • EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS удалены, так что NFC bump теперь не может программно разблокировать и выполнить сброс устройства для защищённых устройств.
    • Теперь вы можете использовать расширенный EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE для передачи данных управляющему приложению на управляемое устройство через NFC.
    • API Android for Work подготовлены к запросам ограничений в реальном времени, включая рабочие профили, вспомогательные слой и прочее. Новое разрешение DevicePolicyManager не затрагивает приложениям, не готовым к новой версии Android.
    • Если пользователь отказывается от синхронизации при установке, начатой в ACTION_PROVISION_MANAGED_PROFILE or ACTION_PROVISION_MANAGED_DEVICE, система возвращает код RESULT_CANCELED.
  • Изменения в других API:
    • Передача данных: класс android.app.usage.NetworkUsageStats переименован в NetworkStats.
  • Изменения глобальных настроек:

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

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