page.title=Изменения в работе page.keywords=предварительная версия,пакет sdk,совместимость sdk.platform.apiLevel=MNC @jd:body

Содержание документа

  1. Разрешения на выполнение
  2. Оптимизация экономии энергии
    1. Режим «Doze»
    2. Ждущий режим для приложений
  3. Подключаемые устройства хранения
  4. Отказ от HTTP-клиента Apache
  5. Изменения в классе AudioManager
  6. Выделение текста
  7. Изменения в хранилище ключей Android
  8. Изменения в работе с Wi-Fi и сетями
  9. Изменения в службе камеры
  10. Среда выполнения ART
  11. Проверка пакетов APK
  12. Изменения в Android for Work

Различия между API-интерфейсами

  1. API уровня 22 в M Preview »

См. также:

  1. Обзор API-интерфейсов M Developer Preview

Наряду с новыми функциями и возможностями, версия M Developer Preview также включает в себя ряд системных изменений и изменений в работе API-интерфейсов. В этом документе рассматриваются определенные ключевые изменения, о которых следует знать, чтобы учитывать их при разработке приложений.

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

Разрешения на выполнение

В M Preview представлена новая модель разрешений: теперь пользователи могут управлять разрешениями приложений напрямую во время работы с ними. Такая модель обеспечивает улучшенное управление разрешениями и одновременно позволяет оптимизировать установку и автоматическое обновление для разработчиков. Пользователи могут предоставлять разрешения или отзывать их отдельно для каждого установленного приложения.

В ваших приложениях, предназначенных для M Preview, следует в обязательном порядке проверить такие разрешения и при необходимости запросить их. Чтобы определить, было ли вашему приложению предоставлено разрешение, вызовите новый метод {@code Context.checkSelfPermission()}. Чтобы запросить разрешение, вызовите новый метод {@code Activity.requestPermission()}. Даже если ваше приложение не предназначено для использования в версии M, вам все равно следует протестировать его с использованием новой модели разрешений.

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

Оптимизация экономии энергии

В M Preview реализован ряд новых функций оптимизации экономии энергии для неактивных устройств и приложений.

Режим «Doze»

Если устройство отключено от сети и остается неактивным (и с выключенным экраном) в течение определенного времени, оно переходит в режим Doze и старается, чтобы система не выходила из спящего состояния. В этому режиме устройство периодически возобновляет свою обычную работу на краткие промежутки времени, чтобы произвести синхронизацию и позволить системе выполнить какие-либо отложенные операции.

Когда устройство находится в режиме «Doze», к приложениям применяются следующие ограничения:

После выхода из режима «Doze», устройство приступает к выполнению любых отложенных заданий и операций синхронизации.

Чтобы протестировать эту функцию, подключите устройство под управлением M Preview к своему компьютеру для разработки и выполните следующие команды:

$ adb shell dumpsys battery unplug
$ adb shell dumpsys deviceidle step
$ adb shell dumpsys deviceidle -h

Примечание. В предстоящем выпуске службы Google Cloud Messaging реализована возможность назначения сообщений с высоким приоритетом. При получении вашим приложением сообщений GCM с высоким приоритетом ему на короткое время предоставляется доступ к сети, даже если устройство находится в режиме «Doze».

Советы по тестированию работы приложений в режиме «Doze» представлены в руководстве по тестированию.

Ждущий режим для приложений

В M Preview система может определять, что приложения неактивны, когда они не используются. Приложение считается неактивным по прошествии определенного периода времени до тех пор, пока система не обнаружит один из следующих сигналов:

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

Чтобы протестировать эту функцию, подключите устройство под управлением M Preview к своему компьютеру для разработки и выполните следующие команды:

$ adb shell dumpsys battery unplug
$ adb shell am set-idle <packageName> true
$ adb shell am set-idle <packageName> false
$ adb shell am get-idle <packageName>

Примечание. В предстоящем выпуске службы Google Cloud Messaging (GCM) реализована возможность назначения сообщений с высоким приоритетом. При получении вашим приложением сообщений GCM с высоким приоритетом ему на короткий промежуток времени предоставляется доступ к сети, даже если приложение находится в неактивном состоянии.

Советы по тестированию работы приложений в ждущем режиме представлены в руководстве по тестированию.

Подключаемые устройства хранения

В M Preview пользователи могут подключать внешние устройства хранения, такие как SD-карты, и использовать их как внутреннее хранилище, зашифровав и отформатировав требуемым образом. Благодаря этому пользователи могут переносить как сами приложения, так свои файлы для этих приложений с одного устройства хранения на другое. При переносе приложений система руководствуется настройкой {@code android:installLocation} в манифесте.

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

Для отладки этой функции в Developer Preview подключите USB-устройство, к устройству Android посредством USB-кабеля On-The-Go (OTG) и выполните следующую команду:

$ adb shell sm set-force-adoptable true

Отказ от HTTP-клиента Apache

В M Preview удалена поддержка HTTP-клиента Apache. Если ваше приложение, разработанное для Android 2.3 (уровень API 9) или более поздней версии, использует этот клиент, вам необходимо воспользоваться вместо него классом {@link java.net.HttpURLConnection}. Этот API-интерфейс более эффективный, поскольку он сокращает использование сетевого трафика за счет прозрачного сжатия и кэширования ответов, а также сводит к минимуму потребление энергии. Чтобы продолжить использовать API-интерфейсы HTTP Apache, сначала объявите в своем файле {@code build.gradle} следующую зависимость compile-time:

android {
    useLibrary 'org.apache.http.legacy'
}

Вместо OpenSSL в Android теперь будет использоваться библиотека BoringSSL . Если вы используете в ваших приложениях Android NDK, не связывайте его с криптографическими библиотеками, которые не входят в состав API-интерфейса NDK, такими как {@code libcrypto.so} и {@code libssl.so}. Эти библиотеки не являются общедоступными API-интерфейсами, и в разных выпусках или на разных устройствах они могут быть изменены или разбиты без предварительного уведомления. Кроме того, этим вы можете создать уязвимости в системе безопасности вашего продукта. Вместо этого внесите изменения в собственный код для вызова криптографических API-интерфейсов Java посредством JNI или статической ссылки на библиотеку криптографии по своему выбору.

Изменения в классе AudioManager

Теперь в платформе не поддерживается настройка уровня громкости напрямую или отключение звука определенных потоков с помощью класса {@link android.media.AudioManager}. Метод {@link android.media.AudioManager#setStreamSolo(int,boolean) setStreamSolo()} больше не используется. Вместо него следует вызывать метод {@code AudioManager.requestAudioFocus()}. Также больше не используется метод {@link android.media.AudioManager#setStreamMute(int,boolean) setStreamMute()}; вместо него следует вызывать метод {@code AudioManager.adjustStreamVolume()} и передавать в него значение направления {@code ADJUST_MUTE} или {@code ADJUST_UNMUTE}.

Выделение текста

Теперь, когда пользователь выделяет текст в приложении, такие дополнительные действия как Вырезать, Копировать и Вставить, можно отображать на перемещаемой панели инструментов. Реализация взаимодействия пользователя с текстом аналогична той, которая используется для контекстного меню, как описано в статье Запуск контекстного меню для отдельных представлений.

Чтобы реализовать перемещаемую панель инструментов для выделения текста, внесите в ваши существующие приложения следующие изменения.

  1. В объекте {@link android.view.View} или {@link android.app.Activity} измените вызовы {@link android.view.ActionMode} с {@code startActionMode(Callback)} на {@code startActionMode(Callback, ActionMode.TYPE_FLOATING)}.
  2. Возьмите свою реализацию класса {@code ActionMode.Callback} и сделайте его наследуемой от класса {@code ActionMode.Callback2}.
  3. Переопределите метод {@code Callback2.onGetContentRect()} для указания координат объекта {@link android.graphics.Rect} контента (например, прямоугольника выделения текста) в представлении.
  4. Если расположение прямоугольника больше недействительно и это единственный элемент, который не подлежит пересчитыванию, вызовите метод {@code ActionMode.invalidateContentRect()}.

Если вы используете вспомогательную библиотеку Android версии 22.2, то помните, что перемещаемым панелям инструментов не свойственна обратная совместимость и по умолчанию для управления объектами {@link android.view.ActionMode} используется библиотека appcompat. Это означает, что перемещаемые панели инструментов не будут отображаться. Чтобы включить поддержку {@link android.view.ActionMode} в {@link android.support.v7.app.AppCompatActivity}, вызовите метод {@code android.support.v7.app.AppCompatActivity.getDelegate()}, затем вызовите {@code android.support.v7.app.AppCompatDelegate.setHandleNativeActionModesEnabled()} для возвращенного объекта {@link android.support.v7.app.AppCompatDelegate} и задайте для параметра input значение {@code false}. Этот вызов возвращает управление объектами {@link android.view.ActionMode} платформе. На устройствах под управлением M Preview платформа поддерживает как режимы {@link android.support.v7.app.ActionBar}, так и режимы перемещаемых панелей инструментов, тогда как на устройствах под управлением более ранних версий поддерживаются только режимы {@link android.support.v7.app.ActionBar}.

Изменения в хранилище ключей Android

В M Preview поставщик хранилища ключей Android больше не поддерживает DSA. ECDSA по-прежнему поддерживается.

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

Изменения в работе с Wi-Fi и сетями

Ниже перечислены изменения в API-интерфейсах для работы с Wi-Fi и сетями, реализованные в M Preview.

Изменения в службе камеры

В M Preview изменена модель получения доступа к ресурсам в службе камеры. Если раньше запросы доступа обрабатывались в порядке поступления, то теперь процессы с высоким приоритетом имеют преимущество. В работе службы камеры произошли следующие изменения:

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

Среда выполнения ART теперь должным образом реализует правила доступа для метода {@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()}. Это изменение позволило устранить проблему, связанную с тем, что в предыдущих версиях система Dalvik неправильно проверяла правила доступа. Если ваше приложение использует метод {@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} и вы хотите переопределить проверки доступа, вызовите метод {@link java.lang.reflect.Constructor#setAccessible(boolean) setAccessible()}, присвоив параметру input значение {@code true}. Если ваше приложение использует библиотеку appcompat v7 или библиотеку recyclerview v7, вам необходимо установить актуальные версии этих библиотек. В противном случае убедитесь в том, что любые настраиваемые классы, на которые имеются ссылки из XML, обновлены и их конструкторы классов доступны.

В M Preview обновлено поведение динамического компоновщика. Теперь он распознает разницу между {@code soname} библиотеки и путем к ней (ошибка 6670, о которой сообщалось в открытых источниках), и позволяет выполнять поиск по {@code soname}. Приложения, которые ранее работали, но содержали неправильные записи {@code DT_NEEDED} (обычно абсолютные пути в файловой системе компьютера для сборки), теперь при загрузке могут выдавать ошибки.

В M Preview правильно реализован флаг {@code dlopen(3) RTLD_LOCAL}. Обратите внимание, что {@code RTLD_LOCAL} используется по умолчанию, поэтому будут затронуты вызовы {@code dlopen(3)}, которые явно не используют {@code RTLD_LOCAL} (за исключением случаев, когда ваше приложение явным образом использует{@code RTLD_GLOBAL}). Поскольку используется {@code RTLD_LOCAL}, символы не будут доступны для библиотек, загруженных с использованием последующих вызовов {@code dlopen(3)} (в противоположность ссылкам из записей {@code DT_NEEDED}).

Проверка пакетов APK

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

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

В M Preview представлены следующие изменения работы Android for Work: