page.title=Изменения в работе page.keywords=preview,sdk,compatibility meta.tags="предварительная версия", "совместимость" page.tags="preview", "developer preview" page.image=images/cards/card-n-changes_2x.png @jd:body
Наряду с новыми функциями и возможностями в Android N появились различные изменения работы системы и API. В этом документе рассматриваются некоторые наиболее важные изменения, которые следует понимать и учитывать при разработке приложений.
Если вы ранее публиковали приложения для Android, то примите во внимание, что эти изменения в платформе могут повлиять на работу ваших уже опубликованных приложений.
Изменения в работе системы Android N нацелены на более экономное использование заряда аккумулятора и оперативной памяти, а также на повышение производительности приложений. Эти изменения могут повлиять на системные уведомления и доступность системных ресурсов для вашего приложения. Вам следует ознакомиться с этими изменениями и оценить, какие исправления могут понадобиться вашему приложению для соответствия этим изменениям.
Появившийся в Android 6.0 (уровень API 23), режим Doze экономит заряд аккумулятора, откладывая процессорные и сетевые операции, когда устройство находится не на зарядке, оно неподвижно, и его экран погашен. Android N расширяет возможности режима Doze, применяя частичный набор процессорных и сетевых ограничений в тех случаях, когда устройство находится не на зарядке, с погашенным экраном, но не обязательно неподвижно, например, когда оно находится в кармане пользователя.
Когда устройство питается от аккумулятора и его экран отключен в течение некоторого промежутка времени, устройство переходит в режим Doze и применяет первый частичный набор ограничений: закрывается доступ приложений к сети, откладывается выполнение заданий и синхронизации. Если устройство остается неподвижным в течение определенного времени после перехода в режим Doze, система применяет остальные ограничения Doze для {@link android.os.PowerManager.WakeLock}, оповещений {@link android.app.AlarmManager}, сканирования GPS и Wi-Fi. Независимо от того, были применены все или только некоторые ограничения режима Doze, устройство периодически пробуждается на короткий промежуток времени, в течение которого приложениям разрешается сетевой доступ и выполнение отложенных заданий или синхронизации.
Следует отметить, что включение экрана или подключение к источнику питания приводит к выходу устройства из режима Doze и снимает эти ограничения обработки. Эти дополнительные особенности поведения не влияют на советы и рекомендации по адаптации приложений к предыдущей версии режима Doze из Android 6.0 (уровень API 23), которые были рассмотрены в документе Оптимизация для режима Doze и режима ожидания для приложений. Вы должны следовать этим рекомендациям (например, использовать Google Cloud Messaging (GCM) для отправки и получения сообщений) и приступить к планированию обновлений для соответствия дополнительному поведению режима Doze.
В Android N удалены три неявных широковещательной рассылки с целью оптимизации потребления памяти и энергии. Причиной этого изменения стало то, что неявные широковещательные рассылки часто запускали приложения, которые прослушивали их в фоновом режиме. Удаление этих рассылок может существенно улучшить производительность устройства и работу интерфейса пользователя.
На мобильных устройствах часто могут происходить изменения подключения, например, при переключении между Wi-Fi и мобильным трафиком. Сейчас приложения могут следить за изменениями подключения, зарегистрировавшись в качестве получателя для неявных широковещательных рассылок {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} в своем манифесте. Поскольку для получения этих рассылок регистрируются многие приложения, каждое переключение сети может вызвать их активацию и одновременную обработку рассылки.
Подобным образом приложения могут регистрироваться для получения неявных широковещательных рассылок {@link android.hardware.Camera#ACTION_NEW_PICTURE} и {@link android.hardware.Camera#ACTION_NEW_VIDEO} от других приложений, например от камеры. Когда пользователь делает снимок с помощью приложения камеры, эти приложения активируются для обработки широковещательной рассылки.
Для устранения этих проблем Android N применяет следующие способы оптимизации.
В будущих выпусках Android могут быть отменены другие неявные широковещательные рассылки, а также отменена привязка некоторых фоновых служб. Поэтому следует избегать зависимостей (или удалить их) в виде объявленных в манифесте получателей неявных широковещательных рассылок или фоновых служб.
Платформа Android предоставляет несколько решений, позволяющих отказаться от таких неявных широковещательных рассылок или фоновых служб. Например, в API {@link android.app.job.JobScheduler} реализован надежный механизм планирования сетевых операций, который запускается при выполнении определенных условий, например при подключении к безлимитной сети. Вы можете даже использовать {@link android.app.job.JobScheduler}, чтобы реагировать на изменения поставщиков контента.
Дополнительная информация об этом изменении в работе системы и соответствующей адаптации приложений содержится в документе Оптимизация фоновых процессов.
В Android N внесены изменения разрешений, которые могут повлиять на ваше приложение, включая разрешения учетных записей пользователей и новое разрешение на запись во внешнем хранилище. Ниже приводится краткое описание разрешений, измененных в предварительной версии.
Разрешение GET_ACCOUNTS теперь считается устаревшим. Система игнорирует это разрешение для приложений, разработанных для Android N.
В Android N внесены изменения, которые должны сделать платформу более удобной для пользователей со слабым или нарушенным зрением. Эти изменения в целом не требуют исправления кода вашего приложения, однако вам следует проверить их и протестировать на своем приложении, чтобы оценить их возможное влияние на интерфейс пользователя.
Android N позволяет пользователям установить параметр Display size, который увеличивает или уменьшает все элементы на экране, делая таким образом устройство более удобным для пользователей со слабым зрением. Пользователи не могут масштабировать экран до ширины менее sw320dp (ширина экрана Nexus 4, обычного телефона среднего размера).
При изменении плотности экрана устройства система уведомляет запущенные приложения следующим способами.
Большинству приложений не требуются какие-либо изменения для поддержки этой возможности при условии, что эти приложения соответствуют рекомендациям по разработке для Android. Необходимо проверить следующие моменты.
sw320dp
и убедитесь в его корректной работе.
Примечание. Если вы кэшируете данные, зависящие от конфигурации, рекомендуется добавить к ним релевантные метаданные, описывающие, например, подходящий размер экрана или плотность пикселей для этих данных. Эти метаданные помогут решить, нужно ли обновлять кэшированные данные после изменения конфигурации.
dp
).
В Android N появились настройки Vision Settings на экране приветствия, где пользователи могут установить следующие параметры специальных возможностей на новом устройстве: Magnification gesture, Font size, Display size и TalkBack. В результате этого изменения становятся более заметными ошибки, связанные с различными настройками экрана. Чтобы оценить влияние этой функции, следует протестировать свое приложение, включив эти настройки на экране Settings > Accessibility.
В Android N внесены изменения пространства имен, предотвращающие загрузку закрытых API-интерфейсов. Если вы используете NDK, то вы должны использовать только открытые API-интерфейсы платформы Android. Использование закрытых API в следующем официальном выпуске Android может привести к ошибке и завершению работы приложения.
Чтобы предупредить вас об использовании закрытых API, приложения, запущенные на устройстве с Android N, создают сообщение об ошибке в журнале устройства (logcat) при вызове закрытого API. Эта ошибка также отображается на экране устройства в виде сообщения, информирующего о ситуации. Вам следует проверить код приложения, отказаться от применения закрытых API и тщательно протестировать приложение на тестовом устройстве или эмуляторе.
Если ваше приложение зависит от библиотек платформы, ознакомьтесь в документации NDK
со стандартными способами замены общих закрытых API их открытыми эквивалентами.
Вы можете ссылаться на библиотеки платформы, не замечая этого,
особенно если ваше приложение использует библиотеку, которая является частью платформы (например,
libpng
), но не входит в состав NDK. В этом случае убедитесь, что ваш
пакет APK содержит все файлы .so, на которые вы намеревались ссылаться.
Внимание! Некоторые сторонние библиотеки могут ссылаться на закрытые API. Приложение, использующее такие библиотеки, может завершиться с ошибкой при запуске в следующем официальном выпуске Android.
Приложения не должны зависеть от библиотек платформы (или использовать их), которые не входят в состав NDK, поскольку эти библиотеки могут изменяться или отсутствовать в разных выпусках Android. Примером такого изменения может служить переход от OpenSSL к BoringSSL. Разные устройства также могут обладать разными уровнями совместимости, поскольку для библиотек платформы, не включенных в NDK, отсутствуют требования к совместимости. Если вам необходимо обратиться к библиотекам не из состава NDK на более старых устройствах, эту загрузку следует сделать зависимой от уровня Android API.
Для помощи в диагностике проблем подобного рода ниже приведены несколько примеров ошибок Java и NDK, с которым вы можете столкнуться при создании приложения для Android N.
Пример ошибки Java:
java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so" is not accessible for the namespace "classloader-namespace"
Пример ошибки NDK:
dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
Ниже приведены некоторые стандартные способы устранения подобных ошибок в приложениях.
AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h> AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or JavaVM::AttachCurrentThread from <jni.h>.
#include <sys/system_properties.h>
Android N содержит изменения для приложений, предназначенных для Android for Work, включая изменения установки сертификата, сброса пароля, управления вторичным пользователем, и доступа к идентификаторам устройства. Если вы создаете приложение для среды Android for Work, вам следует ознакомиться с этими изменениями и откорректировать приложение соответствующим образом.
DevicePolicyManager.setCertInstallerPackage()
. В случае отсутствия установщика
система выдаст ошибку
IllegalArgumentException
.
DevicePolicyManager.resetPassword()
для сброса или изменения
установленных паролей. Администраторы по-прежнему могут установить пароль, но только тогда, когда для устройства не установлен
пароль, PIN-код или графический шаблон.
DISALLOW_MODIFY_ACCOUNTS
.
DISALLOW_ADD_USER
.
Это предотвращает создание неуправляемых дополнительных пользователей.
Кроме того, прекращено использование методов CreateUser()
и
createAndInitial()
, которые заменены новым методом
DevicePolicyManager.createAndManageUser()
.
DevicePolicyManagewr.getWifiMacAddress()
. Если интерфейс Wi-Fi никогда не включался
на устройстве, этот метод возвращает значение {@code null}.
Дополнительная информация об изменениях Android for Work в Android N содержится в документе Обновления Android for Work.
Вы должны протестировать свое приложение и убедиться, что оно не будет работать подобным образом. Для этого можно вызвать аналогичную ошибку, принудительно завершив процесс приложения через DDMS.
Приложения для N и последующих версий Android не завершаются автоматически при изменении плотности экрана, однако они могут плохо реагировать на изменения конфигурации.