From 4fd1a573eb0724251b5c0986c7f0ae7b36d52369 Mon Sep 17 00:00:00 2001
From: David Friedman M Developer Preview — ознакомительная версия предстоящего выпуска платформы Android,
+в котором реализованы новые возможности как для пользователей, так и для
+разработчиков приложений. В этой статье мы расскажем о наиболее интересных API-интерфейсах. Версия M Developer Preview предназначена для тех, кто хочет первым ознакомиться с новой платформой,
+а также для тестировщиков. M Developer Preview — прекрасная возможность
+повлиять на вектор развития
+платформы Android.
+Мы с нетерпением ждем ваших отзывов! Внимание! Не публикуйте в магазине Google Play приложения,
+предназначенные для M Developer Preview. Примечание. В этой статье часто упоминаются классы и методы,
+для которых на сайте developer.android.com пока еще нет справочных материалов. Такие элементы API-интерфейса обозначаются здесь следующим образом:
+{@code code style} (без гиперссылок). Чтобы ознакомиться с предварительной документацией по этим элементам,
+загрузите справочное руководство по предварительной версии. Если вы ранее публиковали приложения для Android, то примите во внимание, что изменения в платформе могут повлиять
+на работу опубликованных приложений. Подробные сведения представлены в статье Изменения в работе. В M Preview улучшена система намерений Android за счет более эффективного связывания приложений.
+Теперь у вас есть возможность связывать приложения с вашими собственными веб-доменами. Благодаря этому
+платформа может сама, без вмешательства пользователя, определить приложение, которое будет использоваться по умолчанию
+для обработки определенной веб-ссылки. О том, как реализовать такую возможность, можно почитать в статье
+Связывание приложений.
+
+ Теперь система автоматически выполняет полное резервное копирование и восстановление данных ваших приложений. Для приложений,
+написанных под M Preview, эта функция включена по умолчанию — вам даже не нужно добавлять отдельный код. Если пользователь решит удалить свою учетную запись Google, все резервные копии его данных также будут удалены.
+ О том, как работает эта функция и как настроить параметры резервного копирования элементов файловой системы,
+ рассказано в статье
+Автоматическое резервное копирование для приложений. В M Preview представлены новые API-интерфейсы, которые позволяют авторизовать пользователей по отпечатку пальца
+(на устройствах, поддерживающих такую возможность), а также подтвердить учетные данные, если пользователь недавно авторизовался через механизмы разблокировки устройства
+(например, вводил пароль для разблокировки экрана). Эти API-интерфейсы рекомендуется использовать совместно с
+системой хранилища ключей Android. Чтобы авторизовать пользователя по отпечатку пальца, получите экземпляр нового класса
+{@code android.hardware.fingerprint.FingerprintManager} и вызовите метод
+{@code FingerprintManager.authenticate()}. Эта функция доступна для совместимых
+устройств, оснащенных сканером отпечатков пальцев. Прежде всего, вам необходимо реализовать в своем приложении пользовательский интерфейс проверки
+подлинности по отпечатку пальца, а также использовать для него стандартный значок отпечатка пальца Android.
+Этот значок ({@code c_fp_40px.png}) вы можете найти в
+примере приложения. При разработке нескольких приложений, использующих функцию авторизации по отпечатку пальца,
+помните, что каждое из них должно самостоятельно выполнять проверку подлинности.
+ Чтобы реализовать эту функцию, сначала добавьте в файл манифеста разрешение {@code USE_FINGERPRINT}.
+ Пример такой проверки подлинности вы найдете в
+примере
+диалогового окна авторизации по отпечатку пальца. Если вы тестируете эту функцию, выполните следующие действия: В Windows, возможно, потребуется выполнить команду {@code telnet 127.0.0.1 <emulator-id>}, а затем
+{@code finger touch <finger_id>}.
+ Для авторизации пользователей ваше приложение может обратиться к сведениям о том, как давно они разблокировали свое устройство в последний раз. Эта функция
+избавляет пользователя от необходимости запоминать отдельные пароли для каждого приложения, а вас — от необходимости
+реализовывать собственный пользовательский интерфейс авторизации. В приложении эту функцию следует
+использовать совместно с реализацией открытого или секретного ключа для авторизации пользователей. Чтобы задать временя ожидания, в течение которого после успешной
+авторизации можно использовать ключ повторно, вызовите новый метод
+{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()}
+при настройке {@link javax.crypto.KeyGenerator} или
+{@link java.security.KeyPairGenerator}. На сегодняшний день эта функция совместима с симметричными криптографическими
+операциями. Не стоит слишком часто отображать диалоговое окно повторной авторизации — ваше
+приложение должно сначала попробовать использовать криптографический объект и только потом, если окажется, что время ожидания истекло, обратиться к методу
+{@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()}
+для повторной авторизации пользователя.
+ Как можно реализовать эту функцию, показано в
+примерепроверки учетных данных.
+ M Preview содержит API-интерфейсы для интуитивно понятного и быстрого обмена контентом между пользователями. Теперь вы можете
+определить целевые объекты прямого обмена, которые будут запускать определенную операцию в приложении
+и открываться в меню Поделиться. С помощью данной функции пользователи могут обмениваться контентом
+с целевыми объектами, такими как контакты, в других приложениях. Например, целевой объект прямого обмена может запустить операцию
+в другом приложении социальной сети, что позволит пользователю напрямую делиться контентом с другом
+или членами сообщества через это приложение. Чтобы включить использование целевых объектов прямого обмена, необходимо определить класс, который наследует класс
+{@code android.service.} В примере ниже показано, как объявить {@code ChooserTargetService}
+ в вашем манифесте. Для каждого действия, которое необходимо сделать доступным для {@code ChooserTargetService}, добавьте в манифест вашего приложения элемент
+{@code <meta-data>} с именем
+{@code "android.service.chooser.chooser_target_service"}.
+
+В M Preview представлен новый голосовой API-интерфейс, который, наряду с
+голосовыми командами,
+позволяет встраивать в приложение диалоговое голосовое взаимодействие. Вызовите метод
+{@code android.app.Activity.isVoiceInteraction()}, чтобы определить, была ли операция запущена
+в ответ на голосовую команду. Если это так, ваше приложение может использовать класс
+{@code android.app.VoiceInteractor}, чтобы получить голосовое подтверждение от пользователя, предложить ему список вариантов
+на выбор и многое другое. Подробнее о реализации голосовых команд можно почитать в
+руководстве к голосовому интерфейсу.
+
+M Preview предлагает новый способ взаимодействия пользователей с приложением — взаимодействие посредством помощника. Для этого
+пользователю необходимо разришить помощнику использовать текущий контекст, после чего он сможет вызывать помощника
+в любом приложении, удерживая кнопку Домой. Разработчик может также запретить приложению сообщать помощнику текущий контекст. Для этого установите флаг
+{@link android.view.WindowManager.LayoutParams#FLAG_SECURE}. Кроме стандартного набора
+информации, который платформа передает помощнику, ваше приложение может сообщать ему дополнительные
+сведения посредством нового класса {@code android.app.Activity.AssistContent}. Чтобы предоставить помощнику дополнительный контекст из вашего приложения, выполните следующие действия: В API-интерфейс уведомлений внесены следующие изменения: В M Preview улучшена поддержка ввода с помощью пера Bluetooth. Пользователи могут подключить
+совместимое перо Bluetooth к своему смартфону или планшету. Когда перо подключено, данные о его
+положении объединяются со сведениями о степени нажима и нажатия кнопки на пере,
+и таким образом при сенсорном вводе используются не только возможности сенсорного экрана. Ваше приложение может отслеживать
+нажатия кнопки пера и выполнять дополнительные действия, регистрируя в операции новые методы обратного вызова
+{@code View.onStylusButtonPressListener} и
+{@code GestureDetector.OnStylusButtonPressListener}. Для определения нажатий кнопок пера используйте методы и константы {@link android.view.MotionEvent}:
+
+Если ваше приложение выполняет сканирование Bluetooth с низким потреблением энергии, вы можете при помощи нового метода
+{@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} указать, что обратные вызовы следует уведомлять только в случае, если прежде обнаружен пакет объявления,
+ совпадающий с заданным фильтром
+{@link android.bluetooth.le.ScanFilter}, или если он не обнаруживается в течение заданного периода времени.
+ Такой подход к сканированию обеспечивает еще большую экономию энергии, чем это было возможно в предыдущей
+версии платформы.
+
+В M Preview включена поддержка Hotspot 2.0 (выпуск 1) для устройств Nexus 6 и Nexus 9. Для
+предоставления учетных данных Hotspot 2.0 в вашем приложении используйте новые методы класса
+{@link android.net.wifi.WifiEnterpriseConfig}, такие как {@code setPlmn()} и
+{@code setRealm()}. В объекте {@link android.net.wifi.WifiConfiguration} можно задать поля
+{@link android.net.wifi.WifiConfiguration#FQDN} и {@code providerFriendlyName}.
+Новое свойство{@code ScanResult.PasspointNetwork} показывает, является ли обнаруженная
+сеть точкой доступа Hotspot 2.0.
+ Теперь платформа позволяет приложениям запрашивать увеличение разрешения экрана до 4K при обработке изображения
+на совместимом устройстве. Чтобы запросить текущее физическое разрешение, используйте новые API-интерфейсы
+{@code android.view.Display.Mode}. Если элементы пользовательского интерфейса, отрисованные в более низком логическом разрешении, масштабируются до
+более высокого физического разрешения, обратите внимание, что метод физического разрешения
+{@code Display.Mode.getPhysicalWidth()} возвращает результат, который может отличаться от результата выполнения метода логического разрешения
+{@link android.view.Display#getSize(android.graphics.Point) getSize()} . Можно отправить запрос системе на изменение физического разрешения в активном приложении, задав для окна вашего приложения свойство
+{@code WindowManager.LayoutParams.preferredDisplayModeId}. Эта
+функция особенно полезна в случаях, когда требуется переключиться на разрешение экрана 4K. В режиме отображения в формате 4K элементы
+пользовательского интерфейса отрисовываются в исходном разрешении (например, 1080p) и масштабируются до 4K, однако содержимое
+{@link android.view.SurfaceView} объектов может отображаться с использованием основного разрешения. Теперь метод
+{@link android.content.res.ColorStateList} для устройств под управлением M Preview поддерживает атрибуты темы. Методы
+{@link android.content.res.Resources#getColorStateList(int) getColorStateList()} и
+{@link android.content.res.Resources#getColor(int) getColor()} уже неактуальны. Если вы
+вызываете эти API-интерфейсы, вызовите вместо них новые методы {@code Context.getColorStateList()} или
+{@code Context.getColor()}, Доступные также в библиотеке v4 appcompat
+посредством {@link android.support.v4.content.ContextCompat}. В M Preview реализован ряд улучшений в области обработки аудиофайлов системой Android, включая следующие: В M Preview вы обнаружите новые возможности API-интерфейсов для обработки видео, в том числе: В M Preview представлены следующие API-интерфейсы для вспышки камеры и повторной обработки
+изображений камерой. Если камера оснащена вспышкой, вы можете вызвать метод{@code CameraManager.setTorchMode()},
+чтобы включить или отключить режим фонарика, не запуская камеру. Приложение
+не может заполучить вспышку или камеру в единоличное пользование. Режим фонарика отключается
+и становится недоступен, когда камера недоступна или ресурсов камеры недостаточно для использования вспышки в качестве
+фонарика. Кроме того, другие приложения могут вызывать метод {@code setTorchMode()}
+для отключения режима фонарика. При закрытии приложения, которое включило режим фонарика, этот режим
+отключается. Чтобы зарегистрировать обратный вызов для уведомления о режиме фонарика, вызовите метод
+{@code CameraManager.registerTorchCallback()}. При первой регистрации обратного вызова
+он сразу же вызывается со сведениями о состоянии режима фонарика для всех известных к настоящему моменту устройств,
+оснащенных вспышкой. При успешном включении или отключении фонарика вызывается метод
+{@code CameraManager.TorchCallback.onTorchModeChanged()}. API-интерфейс {@link android.hardware.camera2 Camera2} теперь поддерживает повторную обработку цветовых моделей YUV и изображений в собственном
+формате непрозрачности. Чтобы определить, возможна ли повторная обработка, приложение использует метод
+{@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES}. Если устройство поддерживает повторную обработку,
+вы можете создать сеанс захвата изображения с камеры с возможностью повторной обработки, вызвав метод
+{@code CameraDevice.createReprocessableCaptureSession()}, а затем создать запросы на повторную обработку буфера
+входных данных. Чтобы подключить поток буфера входных данных к модулю повторной обработки изображения с камеры, используйте класс
+{@code ImageWriter}. Чтобы получить пустой буфер, выполните следующие действия: Если вы используете объект {@code ImageWriter} вместе с изображением
+{@code android.graphics.ImageFormat.PRIVATE}, вашему приложению не удастся получить доступ к изображению
+напрямую. Вместо этого передайте изображение {@code ImageFormat.PRIVATE} прямо в
+{@code ImageWriter}, вызвав метод {@code ImageWriter.queueInputImage()} без копии
+буфера. Класс {@code ImageReader} теперь поддерживает потоки изображений в формате {@code android.graphics.ImageFormat.PRIVATE}.
+ Благодаря этому ваше приложение может организовать циклическую очередь выходных изображений
+{@code ImageReader}, выбрать одно или несколько изображений и отправить их в
+{@code ImageWriter} для повторной обработки камерой. В M Preview представлены новые API-интерфейсы для Android for Work: Кроме того, задав ограничения на использование служб Google Play, компонент «Владелец устройства» может указать альтернативные учетные записи
+Google для разблокировки FRP и замены учетных записей, активированных на устройстве. Владелец профиля или устройства может задавать политику разрешений
+для всех запросов на использование среды выполнения любых приложений с помощью
+{@code DevicePolicyManager.setPermissionPolicy()}. Это позволяет выбрать, будет ли система предлагать пользователю предоставить разрешение
+как обычно, или она будет автоматически предоставлять разрешения или отказывать в них. В последнем случае
+пользователю не удастся изменить выбор, сделанный владельцем профиля или устройства на экране
+разрешений приложения в разделе Настройки.
+ Подробные сведения обо всех изменениях в API-интерфейсах в версии M Developer Preview представлены в отчете о различиях между API-интерфейсами.
+ Наряду с новыми функциями и возможностями, версия M Developer Preview также включает в себя ряд
+системных изменений и изменений в работе API-интерфейсов. В этом документе рассматриваются
+определенные ключевые изменения, о которых следует знать, чтобы учитывать их при разработке приложений. Если вы ранее публиковали приложения для Android, то примите во внимание,
+что эти изменения в платформе могут повлиять на работу ваших уже опубликованных приложений. В M Preview представлена новая модель разрешений: теперь пользователи могут управлять разрешениями приложений
+напрямую во время работы с ними. Такая модель обеспечивает улучшенное управление
+разрешениями и одновременно позволяет оптимизировать установку и автоматическое обновление для разработчиков.
+Пользователи могут предоставлять разрешения или отзывать их отдельно для каждого установленного приложения. В ваших приложениях, предназначенных для M Preview, следует в обязательном порядке проверить такие разрешения и при необходимости
+запросить их. Чтобы определить, было ли вашему приложению предоставлено разрешение, вызовите новый метод
+{@code Context.checkSelfPermission()}. Чтобы запросить разрешение, вызовите новый метод
+{@code Activity.requestPermission()}. Даже если ваше приложение не предназначено для использования в версии M, вам все равно следует
+протестировать его с использованием новой модели разрешений. Подробные сведения о поддержке новой модели
+разрешений вашим приложением представлены в статье
+Разрешения. Как можно проверить влияние новой модели на ваше приложение, читайте в
+руководстве по тестированию В M Preview реализован ряд новых функций оптимизации экономии энергии для неактивных устройств и приложений. Если устройство отключено от сети и остается неактивным (и с выключенным экраном) в течение определенного времени,
+оно переходит в режим Doze и старается, чтобы система не выходила из спящего состояния. В этому режиме
+устройство периодически возобновляет свою обычную работу на краткие промежутки времени, чтобы произвести
+синхронизацию и позволить системе выполнить какие-либо отложенные операции. Когда устройство находится в режиме «Doze», к приложениям применяются следующие ограничения:Содержание
+
+ развернуть
+
+
+
+
+Различия между API-интерфейсами
+
+
+Важные изменения в работе приложений
+
+Связывание приложений
+Автоматическое резервное копирование для приложений
+Авторизация
+Авторизация по отпечатку пальца
+
+
+<uses-permission
+ android:name="android.permission.USE_FINGERPRINT" />
+
+
+
+
+
+
+
+
+adb -e emu finger touch <finger_id>
+
+Подтверждение учетных данных
+Прямой обмен контентом
+
+
+
+
+{@code chooser.ChooserTargetService}. Объявите
+{@code ChooserTargetService} в манифесте. В этом объявлении укажите разрешение
+{@code BIND_CHOOSER_TARGET_SERVICE} и фильтр намерений с помощью действия
+{@code SERVICE_INTERFACE}.
+<service android:name=".ChooserTargetService"
+ android:label="@string/service_name"
+ android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
+ <intent-filter>
+ <action android:name="android.service.chooser.ChooserTargetService" />
+ </intent-filter>
+</service>
+
+
+
+<activity android:name=".MyShareActivity”
+ android:label="@string/share_activity_label">
+ <intent-filter>
+ <action android:name="android.intent.action.SEND" />
+ </intent-filter>
+<meta-data
+ android:name="android.service.chooser.chooser_target_service"
+ android:value=".ChooserTargetService" />
+</activity>
+
+
+Голосовой интерфейс
+API-интерфейс помощника
+
+
+
+Уведомления
+
+
+
+Поддержка пера Bluetooth
+
+
+
+Улучшенное сканирование Bluetooth с низким потреблением энергии
+Поддержка Hotspot 2.0, выпуск 1
+Режим отображения в формате 4K
+Метод ColorStateLists для работы с темами
+Работа с аудио
+
+
+
+
+Работа с видео
+
+
+
+Возможности камеры
+API-интерфейс вспышки
+API-интерфейс повторной обработки
+
+
+
+Возможности Android for Work
+
+
+
+
+
+
+
+
+
Содержание документа
+
+
+
+Различия между API-интерфейсами
+
+
+
+См. также:
+
+
+Разрешения на выполнение
+
Оптимизация экономии энергии
+Режим «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 ++ +
В 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 или статической ссылки на +библиотеку криптографии по своему выбору.
+ +Теперь в платформе не поддерживается настройка уровня громкости напрямую или отключение звука определенных потоков с помощью класса {@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}.
+ +Теперь, когда пользователь выделяет текст в приложении, такие дополнительные действия как +Вырезать, Копировать и Вставить, можно отображать на +перемещаемой панели инструментов. Реализация взаимодействия пользователя с текстом аналогична той, которая используется для +контекстного меню, +как описано в статье +Запуск контекстного меню для отдельных представлений.
+ +Чтобы реализовать перемещаемую панель инструментов для выделения текста, внесите в ваши существующие приложения +следующие изменения.
+Если вы используете +вспомогательную библиотеку 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}.
+ +В M Preview +поставщик хранилища ключей Android больше не поддерживает +DSA. ECDSA по-прежнему поддерживается.
+ +Ключи, для которых не требуется шифрование в хранилище, больше не будут удаляться при отключении или сбросе защищенного экрана блокировки +(например, пользователем или администратором устройства). Ключи, для которых требуется шифрование +в хранилище, во время таких событий будут удалены.
+ +Ниже перечислены изменения в API-интерфейсах для работы с Wi-Fi и сетями, реализованные в M Preview.
+В M Preview изменена модель получения доступа к ресурсам в службе камеры. + Если раньше запросы доступа обрабатывались в порядке поступления, то теперь процессы с высоким приоритетом имеют преимущество. + В работе службы камеры произошли следующие изменения:
+Среда выполнения 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 подлежит повторной подписи в случае удаления любого его +содержимого.
+ +В M Preview представлены следующие изменения работы Android for Work:
++ В версии M Developer Preview представлена новая модель разрешений для приложений, которая +оптимизирует для пользователей процесс установки и обновления приложений. Если приложение, +работающее в M Preview, поддерживает новую модель разрешений, пользователю не нужно предоставлять какие-либо +разрешения при установке приложения или его обновлении. Вместо этого приложение +запрашивает разрешения, когда в них возникает необходимость, — в таких случаях система отображает для пользователя диалоговое окно с просьбой предоставить +соответствующее разрешение. +
+ ++ Если приложение поддерживает новую модель разрешений, его, тем не менее, можно установить и +запустить на устройстве под управлением одной из более ранних версий Android, и оно будет использовать старую модель +разрешений. +
+ ++ В версии M Developer Preview представлена новая +модель разрешений. Ниже приводится краткий обзор ее ключевых компонентов: +
+ +CONTACTS
находятся разрешения на чтение и запись
+контактов пользователя и информации из его профиля.
+ Ограниченные разрешения, предоставляемые во время установки. Когда +пользователь устанавливает или обновляет приложение, система предоставляет такому приложению все запрашиваемые им +разрешения, соответствующие константе {@link +android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL}. + Например, разрешения для будильника и подключения к Интернету соответствуют константе {@link +android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL}, +поэтому они предоставляются автоматически во время установки. +
+ +Система также может предоставить приложению подпись и системные разрешения, как описано в разделе +Предоставление приложениям системных разрешений и +подписи. Пользователю не предлагается предоставить какие-либо разрешения +во время установки.
++ Новая модель разрешений влияет на поведение приложений при работе с функциями, для +которых требуются разрешения. При использовании этой модели в разработке + обратите внимание на следующие рекомендации: +
+ ++ Рисунок 1. Экран разрешений в настройках приложения. +
++ Примечание. Если приложение предназначено для M Developer Preview, оно +должно в обязательном порядке использовать новую модель разрешений. +
+ ++ На момент выпуска M Developer Preview не все приложения Google в полной мере реализуют + новую модель разрешений. Google обновляет эти приложения +по мере разработки M Developer Preview, чтобы они должным образом поддерживали настройки +разрешений. +
+ ++ Примечание. Если у вашего приложения имеется собственная поверхность API-интерфейса, прежде чем проксировать +разрешения, убедитесь сначала в том, что у вызывающей операции имеются надлежащие +разрешения на доступ к данным. +
+ ++ Как правило, когда пользователь устанавливает приложение, система предоставляет такому приложению только те +разрешения, которые соответствуют константе {@link android.content.pm.PermissionInfo#PROTECTION_NORMAL +PROTECTION_NORMAL}. Однако в определенных ситуациях система предоставляет +приложению больше разрешений: +
+ ++ В обоих случаях пользователь по-прежнему может в любое время отозвать разрешения, обратившись к +экрану Настройки и выбрав Приложения +> название_приложения > Разрешения. Поэтому приложение все равноу +должно проверять наличие разрешений во время выполнения и при необходимости запрашивать их. + +
+ ++ Если приложение не предназначено для M Developer Preview, оно +продолжает использовать старую модель разрешений даже на устройствах под управлением M Preview. В таком случае при установке приложения + система предлагает пользователю предоставить все разрешения, +указанные в манифесте приложения. +
+ ++ Примечание. На устройствах под управлением M Developer Preview пользователь может отключить +разрешения для любого приложения (включая устаревшие приложения) на экране «Настройки». + Если пользователь решит отключить разрешения для устаревших приложений, система +автоматически отключит соответствующие функциональные возможности. Когда приложение пытается +выполнить операцию, для которой требуется такое разрешение, это +не обязательно приведет к возникновению исключения. Вместо этого оно может выдать пустой набор данных, +сигнал об ошибке или иным образом обозначить непредвиденное поведение. Например, если запросить +календарь, не имея соответствующего разрешения, метод возвратит пустой набор данных. +
+ ++ При установке приложения с использованием новой модели разрешений на устройство +под управлением другой версии ОС, отличной от M Preview, +система рассматривает такое приложение как любое другое и предлагает +пользователю предоставить все объявленные разрешения уже во время установки. +
+ ++ Примечание. В случае с предварительной версией в качестве минимальной версии пакета SDK +следует задать версию SDK M Preview, чтобы получить возможность компилировать код с помощью пакета SDK предварительной версии. Это означает, +что вы не сможете протестировать такие приложения на старых платформах +во время использования предварительной версии для разработчиков. +
+ ++ Во многих случаях при разработке приложения у вас есть выбор между двумя способами выполнения задачи: + вы можете настроить приложение таким образом, чтобы оно самостоятельно запрашивало соответствующие разрешения на выполнение +операции, или же можно указать ему использовать намерение, чтобы задачу выполнило +другое приложение. +
+ +
+ Например, предположим, что вашему приложению требуется возможность делать снимки с помощью камеры устройства.
+ Ваше приложение может запросить разрешение
+android.permission.CAMERA
, которое позволит ему напрямую получить доступ
+к камере. Затем ваше приложение использует API-интерфейсы камеры
+для управления камерой и получения снимков. Благодаря такому подходу ваше приложение получает
+полный контроль над процессом фотографирования. Кроме того, это позволяет вам вставить пользовательский интерфейс камеры
+в свое приложение.
+
+ Если же вам не требуется такой контроль, просто воспользуйтесь намерением {@link +android.provider.MediaStore#ACTION_IMAGE_CAPTURE ACTION_IMAGE_CAPTURE} +для запроса изображения. Когда вы запускаете намерение, пользователю предлагается выбрать +приложение камеры (если оно отличается от приложения камеры по умолчанию), после чего +это приложение делает снимок. Приложение камеры возвращает полученное изображение в метод {@link +android.app.Activity#onActivityResult onActivityResult()} вашего приложения. +
+ ++ Аналогичным образом, если вам необходимо позвонить, получить доступ к контактам пользователя и так далее, +можно создать соответствующее намерение или запросить +разрешение и напрямую получить доступ к нужным объектам. У каждого подхода есть +как преимущества, так и недостатки. +
+ ++ При использовании разрешений: +
+ ++ При использовании намерений: +
+ ++ Если ваше приложение предназначено для новой версии M Developer Preview, вы должны в обязательном порядке использовать +новую модель разрешений. Это означает, что кроме объявления требуемых разрешений +в манифесте, вам следует проверять наличие этих разрешений +во время выполнения, а также запрашивать их, если у вас +еще нет необходимых разрешений. +
+ +
+ Чтобы активировать новую модель разрешений M Developer Preview, задайте для атрибута
+targetSdkVersion
приложения значение "MNC"
, а для атрибута
+compileSdkVersion
– значение "android-MNC"
. Это позволит
+включить все функции новой модели разрешений.
+
+ В случае с предварительной версией необходимо задать для параметра minSdkVersion
значение
+"MNC"
, чтобы получить возможность компилировать код с помощью пакета SDK предварительной версии.
+
+ В манифесте приложения можно использовать новый элемент <uses-permission-sdk-m>
,
+чтобы указать, что разрешение требуется только для M Developer Preview. Если объявить
+разрешение таким способом, то при установке приложения на устройство с более старой версией платформы
+система не будет отправлять запрос пользователю или предоставлять разрешение приложению.
+С помощью элемента <uses-permission-sdk-m>
+вы можете добавлять новые разрешения
+в обновленные версии вашего приложения без принудительного запроса у пользователей разрешений при
+установке обновления.
+
+ Если приложение запущено на устройстве под управлением M Developer Preview,
+поведение элемента <uses-permission-sdk-m>
аналогично поведению
+<uses-permission>
.
+ Система не запрашивает у пользователей предоставление каких-либо разрешений, когда они устанавливают
+приложение. Вместо этого приложение само запрашивает разрешения, когда они требуются.
+
+ Если ваше приложение использует новую модель разрешений M Developer Preview, то при первом запуске приложения +на устройстве под управлением +M Preview пользователю не предлагается предоставить все разрешения. Вместо этого приложение само запрашивает разрешения, когда они +требуются. Когда приложение запрашивает разрешение, система отображает для пользователя соответствующее диалоговое +окно. +
+ +
+ Если ваше приложение запущено на устройстве с пакетом SDK уровня 22 или более низкого, то приложение использует старую
+модель разрешений. То есть при каждой устновке приложения пользователю будет предложено предоставить приложению все разрешения,
+запрашиваемые в манифесте приложения, кроме
+отмеченных элементом <uses-permission-sdk-m>
.
+
+ Новая модель разрешений поддерживается только на устройствах под управлением M Developer
+Preview. Прежде чем вызывать любые из этих методов, приложению следует проверить,
+на какой платформе оно выполняется,
+обратившись к значению параметра {@link android.os.Build.VERSION#CODENAME
+Build.VERSION.CODENAME}. Если устройство работает под управлением M Developer Preview,
+то значение параметра{@link android.os.Build.VERSION#CODENAME CODENAME} будет "MNC"
.
+
Когда пользователи пытаются выполнить какое-либо действие, для которого требуется разрешение, приложение
+проверяет, имеется ли у него в настоящее время разрешение на выполнение этой операции. Для этого
+приложение вызывает метод
+Context.checkSelfPermission(permission_name)
. Приложению
+следует выполнять такую проверку даже в том случае, если ему известно, что пользователь уже предоставил
+необходимое разрешение,
+поскольку пользователь может в любое время отозвать разрешения приложения. Например, если пользователь
+хочет получить снимок с помощью приложения, то приложение вызывает метод
+Context.checkSelfPermission(Manifest.permission.CAMERA)
.
+ Таблица 1. Разрешения и группы разрешений.
+Группа разрешений | +Разрешения | +
---|---|
android.permission-group.CALENDAR |
+
+
|
+
android.permission-group.CAMERA |
+
+
|
+
android.permission-group.CONTACTS |
+
+
|
+
android.permission-group.LOCATION |
+
+
|
+
android.permission-group.MICROPHONE |
+
+
|
+
android.permission-group.PHONE |
+
+
|
+
android.permission-group.SENSORS |
+
+
|
+
android.permission-group.SMS |
+
+
|
+
Если у приложения нет требуемого разрешения, оно вызывает метод
+Activity.requestPermissions(String[], int)
, чтобы запросить его.
+ Приложение передает в него
+требуемые разрешения, а также целочисленный код запроса.
+ Этот метод выполняется асинхронно: он возвращает результат сразу же, а после того как пользователь
+предоставляет ответ в диалоговом окне, система вызывает метод обратного вызова
+приложения с результатами и передает в него тот же код запроса, который приложение передало в метод
+requestPermissions()
.
Ниже представлен пример кода для проверки наличия у приложения разрешения на чтение контактов +пользователя и запроса соответствующего разрешения при необходимости.
+ ++if (checkSelfPermission(Manifest.permission.READ_CONTACTS) + != PackageManager.PERMISSION_GRANTED) { + requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, + MY_PERMISSIONS_REQUEST_READ_CONTACTS); + + // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an + // app-defined int constant + + return; +} ++ +
+ Когда приложение запрашивает разрешения, система отображает для пользователя соответствующее диалоговое
+окно. После получения ответа от пользователя система вызывает метод
+Activity.onRequestPermissionsResult(int, String[], int[])
+вашего приложения и передает в него ответ пользователя. Вашему приложению необходимо переопределить этот метод. В обратном
+вызове передается тот же код запроса, который вы передали в метод
+requestPermissions()
. Например, если приложение запрашивает доступ на
+READ_CONTACTS
, то метод обратного вызова
+может быть следующим:
+
+@Override +public void onRequestPermissionsResult(int requestCode, + String permissions[], int[] grantResults) { + switch (requestCode) { + case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + + // permission was granted, yay! do the + // calendar task you need to do. + + } else { + + // permission denied, boo! Disable the + // functionality that depends on this permission. + } + return; + } + + // other 'switch' lines to check for other + // permissions this app might request + } +} ++ +
Если пользователь предоставляет разрешение, система, в свою очередь, представляет все разрешения, +запрашиваемые в манифесте приложения для обозначенной функциональной области. Если пользователь +отказывает в предоставлении разрешения, вам необходимо принять меры. Например, вы можете отключить любые пункты меню +, для использования которых требуется это разрешение. + +
+ +
+ Когда система предлагает пользователю предоставить разрешение, он может указать системе,
+чтобы она больше не запрашивала это разрешение. В этом случае,
+когда приложение использует метод requestPermissions()
для запроса такого разрешения,
+система сразу же отклоняет запрос. При этом система вызывает ваш метод
+onRequestPermissionsResult()
так же, как если бы пользователь повторно
+отклонил ваш запрос. Поэтому ваше приложение
+не считает, что имело место прямое взаимодействие с пользователем.
+
+ Если ваше приложение предназначено для новой версии M Developer Preview, то вы должны протестировать +его и убедиться в том, что оно должным образом обрабатывает разрешения. Не надо исходить из того, что к началу работы ваше приложение уже имеет +любые определенные разрешения. При первом запуске приложения оно, +скорее всего, не будет обладать разрешениями, а в дальнейшем пользователь может в любой момент отозвать или восстановить +разрешения. +
+ ++ Вам следует протестировать ваше приложение и убедиться в том, что оно ведет себя должным образом в +любых ситуациях, касающихся разрешений. Мы включили в состав пакета SDK M Preview SDK новые команды +Android +Debug Bridge (ADB), чтобы вы могли протестировать ваше приложение с любыми настройками разрешений, +которые вы хотите попробовать в действии. +
+ ++ В состав пакета инструментов SDK M Preview входит ряд новых команд, позволяющих протестировать обработку разрешений +вашим приложением. +
+ +
+ Можно воспользоваться новым параметром -g
команды adb
+ install
, который служит для установки
+приложения и предоставления всех разрешений, указанных в его манифесте:
+
+$ adb install -g <path_to_apk> ++ +
+ Для предоставления разрешений установленному приложению и их отзыва можно использовать новые команды диспетчера пакетов +ADB. +Такая функциональная возможность может быть полезна для автоматизированного тестирования. +
+ +
+ Для представления разрешения используйте команду grant
диспетчера пакетов:
+
+$ adb pm grant <package_name> <permission_name> ++ +
+ Например, чтобы представить пакету com.example.myapp разрешение на запись +аудио, воспользуйтесь следующей командой: +
+ ++$ adb pm grant com.example.myapp android.permission.RECORD_AUDIO ++ +
+ Чтобы отозвать разрешение, используйте команду revoke
диспетчера пакетов:
+
+$ adb pm revoke <package_name> <permission_name> ++ +
+ Новая модель разрешений делает работу пользователей удобнее, +упрощает для них процесс установки приложений и позволяет лучше понимать, +что делает то или иное приложение. Чтобы использовать все преимущества +этой модели, примите во внимание следующие рекомендации: +
+ + ++ Каждый раз, когда вы запрашиваете разрешение, вы заставляете пользователя делать выбор. + Если пользователь отклоняет запрос, соответствующая функциональная возможность приложения отключается. + Вам следует сократить количество таких запросов. +
+ ++ Например, во многих случаях можно предоставить приложению доступ к нужной функции посредством +намерения вместо +запроса разрешений. Если вашему приложению необходимо получить снимки с камеры +телефона, можно использовать намерение {@link +android.provider.MediaStore#ACTION_IMAGE_CAPTURE +MediaStore.ACTION_IMAGE_CAPTURE}. Когда ваше приложение выполняет намерение, система +предлагает пользователю выбрать уже установленное приложение камеры для +получения снимков. +
+ ++ Если на пользователя обрушивается сразу много запросов разрешений, он может +решить, что все это слишком сложно, и просто закрыть приложение. Поэтому разрешения следует +запрашивать только тогда, когда это необходимо. +
+ ++ Иногда приложению жизненно необходимы одно или несколько разрешений. +В таких случаях имеет смысл запросить все разрешения +сразу при запуске приложения. Например, если вы разрабатываете приложение для фотографирования, то ему +однозначно потребуется доступ к камере устройства. Когда пользователь в первый раз запускает приложение, +он не удивится, если приложение запросит у него разрешение на +использование камеры. Однако если в этом же приложении имеется функция обмена фотографиями с +контактами пользователя, возможно, не следует запрашивать соответствующее разрешение при +первом запуске приложения. Лучше дождаться, когда пользователю потребуется функция обмена контентом, +и уже тогда запросить разрешение. +
+ ++ Если в вашем приложении имеются обучающие материалы, может оказаться целесообразным запросить необходимые разрешения +после того, как пользователь изучит материалы. +
+ +
+ В диалоговом окне запроса разрешений, которое система отображает при вызове вами метода
+requestPermissions()
, обозначается требуемое для приложения разрешение,
+однако не указывается, для чего оно необходимо. В некоторых случаях это может озадачить пользователя.
+ Поэтому, прежде чем вызывать метод
+requestPermissions()
, стоит пояснить пользователю, для чего вашему приложению требуются разрешения.
+
+ Например, приложению для фотографирования может потребоваться доступ к службам геолокации, чтобы фотографии можно было снабдить
+геотегами. Не все пользователи знают, что
+фотография может содержать данные о месте съемки, и им может показаться странным, что приложение для фотографирования запрашивает данные
+о местоположении. В этом случае полезно
+рассказать пользователю о такой возможности, прежде чем вызывать метод
+requestPermissions()
.
+
+ Это можно сделать, в частности, внедрив такие запросы в обучающие материалы приложения. В обучающих
+материалах могут содержаться описания каждой из функций приложения с пояснением,
+какие разрешения необходимы для их использования. Например, в обучающий материал по работе с приложением для фотографирования
+можно включить описание функции обмена контентом с контактами, после чего
+пояснить, что для этого пользователю следует предоставить приложению доступ к его контактам.
+ После этого приложение может вызвать метод requestPermissions()
для запроса
+доступа. Конечно, не все пользователи обращаются к обучающим материалам,
+поэтому вам по-прежнему следует проверять наличие разрешений и при необходимости запрашивать
+их во время обычной работы приложения.
+
+ Добро пожаловать в программу Android M Developer Preview, участники которой получают всё необходимоедля тестирования и оптимизации своих приложений для следующей версии платформы Android. + + Это бесплатная программа, и приступить к ее использованию можно прямо сейчас, загрузив +инструменты M Developer Preview. +
+ ++ Запускайте и тестируйте ваши приложения на устройствах Nexus 5, 6, 9 и Player (для Android TV), а также в эмуляторе. + +
++ Во время знакомства с предварительной версией платформы мы будем предоставлять различные обновления, поэтому вы сможете протестировать самые актуальные изменения в платформе. + +
++ После прошивки своего устройства для работы с предварительной версией платформы вы сможете получать обновления по беспроводной связи. + +
++ Начните уже заранее реализовывать в своих приложениях поддержку расширенной функциональности платформы, например, новую модель разрешений на выполнение и функции сбережения энергии. + +
++ В течение первых нескольких недель мы будем рассматривать отчеты об ошибках, поступающие от разработчиков, в приоритетном порядке, поэтому не теряйте времени и приступайте к тестированию и составлению отзывов как можно раньше. + +
++ Отправляйте нам отчеты об ошибках и предоставляйте свои отзывы с помощью нашей системы отслеживания проблем. + Обменивайтесь идеями и предложениями с другими разработчиками в сообществе разработчиков Android M. + +
++ Тестирование версии M Developer Preview запланировано на период с 28 мая до выпуска окончательной версии пакета SDK Android M, который +состоится незадолго до публикации новой платформы в открытом доступе в +третьем квартале 2015 г. +
+ ++ На ключевых этапах разработки платформы мы предоставим обновления для тестовых устройств. + Ниже перечислены предварительные даты этих ключевых этапов. +
+ ++ Завершающим этапом обновлений станет выход окончательной версии пакета SDK (в третьем квартале), +где будут представлены официальные API-интерфейсы для новой версии Android, а также +окончательные версии функций и поведений системы. +
+ ++ Мы настоятельно рекомендуем вам в ходе тестирования и разработки приложений для Android M постоянно +обновлять вашу среду разработки по мере выхода обновлений для версии Preview. + Чтобы упростить этот процесс, мы будем отправлять на устройства, которые уже прошиты для работы с предварительной версией платформы, обновления по беспроводной сети. +Мы также будем предоставлять вам системные образы, которые можно +загрузить и использовать для прошивки устройства вручную. +
++ Примечание. Окончательные версии пакета SDK и системных образов не будут отправляться по беспроводной сети, +их придется вручную установить на +тестовые устройства. +
+ ++ Мы будем сообщать о появлении обновлений для версии Preview в блоге разработчиков Android, а +также на этом сайте и в +сообществе разработчиков Android M. +
+ ++ M Developer Preview содержит всё, что вам необходимо для тестирования ваших существующих приложений на экранах различных размеров, +тестирования с использованием различных сетевых технологий, чипсетов ЦП и графических процессоров, + а также на различных архитектурах оборудования. +
+ ++ С помощью менеджера SDK в Android Studio вы можете загрузить следующие компоненты: +
+ ++ На странице +Загрузки можно скачать следующие системные образы оборудования: +
+ ++ Здесь вы можете найти документацию, где представлены подробные сведения о версии Preview: +
+ ++ При тестировании и разработке приложений для M +Developer Preview рекомендуем пользоваться следующими ресурсами поддержки: +
+ +
+ Выпуск Android M Developer Preview предназначен исключительно для разработки и
+не имеет стандартного уровня API. Если вы не хотите
+проверять свое приложение на совместимость (хотя мы настоятельно рекомендуем делать это),
+выберите целевой уровень M Developer Preview, задав для параметра targetSdkVersion
+своего приложения значение “MNC”
.
+
+ В Android M Developer Preview представлены предварительные версии API-интерфейсов +—. Такие API-интерфейсы не будут официально опубликованы до выпуска окончательной версии пакета SDK, + намеченого на третий квартал 2015 г. Это означает, что в будущем можно +ожидать незначительных изменений в API-интерфейсах, особенно в +первые недели действия программы. Каждое обновление +Android M Developer Preview будет включать обзор изменений. +
+ ++ Обратите внимание, что несмотря на возможные изменения в предварительных версиях API-интерфейсов, соответствующие расширения функциональности системы, +такие как разрешения на выполнение и функции сбережения энергии, работают стабильно и уже готовы для +тестирования. +
+ ++ Что касается публикации приложений, то политика Google Play однозначно запрещает публикацию приложений, +разработанных для M Developer Preview. После выхода окончательной версии пакета SDK Android M +вы сможете выбрать официальный целевой уровень API Android M и приступить +к публикации ваших приложений в магазине Google Play. Тем временем, если вы хотите распространить приложение, предназначенное для +тестировщиков Android M, то используйте для этого электронную почту или разместите такие приложения на своем сайте +для прямой загрузки. +
+ ++ Чтобы приступить к тестированию своего приложения, выполните указанные ниже действия. +
+ ++ Благодарим за участие в программе Android M Developer! +
-- cgit v1.1