From 8f1f66f061843185fa79b757074374898851019f Mon Sep 17 00:00:00 2001 From: David Friedman Date: Wed, 13 Apr 2016 18:11:00 -0700 Subject: [PATCH] Docs: Localized DAC pages for N Preview. Change-Id: I5f6e3784bc1a3134dcd71fe06cfa9bffd300a647 --- .../html-intl/intl/es/preview/api-overview.jd | 676 ++++++++++++++++ .../intl/es/preview/behavior-changes.jd | 480 +++++++++++ docs/html-intl/intl/es/preview/download.jd | 541 +++++++++++++ .../features/background-optimization.jd | 388 +++++++++ .../intl/es/preview/features/direct-boot.jd | 180 +++++ .../es/preview/features/icu4j-framework.jd | 158 ++++ .../intl/es/preview/features/multi-window.jd | 582 ++++++++++++++ .../preview/features/multilingual-support.jd | 214 +++++ .../preview/features/notification-updates.jd | 328 ++++++++ .../es/preview/features/picture-in-picture.jd | 186 +++++ .../preview/features/scoped-folder-access.jd | 124 +++ .../es/preview/features/security-config.jd | 744 ++++++++++++++++++ .../es/preview/features/tv-recording-api.jd | 120 +++ docs/html-intl/intl/es/preview/index.jd | 120 +++ docs/html-intl/intl/es/preview/j8-jack.jd | 183 +++++ docs/html-intl/intl/es/preview/overview.jd | 440 +++++++++++ docs/html-intl/intl/es/preview/samples.jd | 85 ++ docs/html-intl/intl/es/preview/setup-sdk.jd | 226 ++++++ .../html-intl/intl/in/preview/api-overview.jd | 676 ++++++++++++++++ .../intl/in/preview/behavior-changes.jd | 480 +++++++++++ docs/html-intl/intl/in/preview/download.jd | 541 +++++++++++++ .../features/background-optimization.jd | 388 +++++++++ .../intl/in/preview/features/direct-boot.jd | 180 +++++ .../in/preview/features/icu4j-framework.jd | 158 ++++ .../intl/in/preview/features/multi-window.jd | 582 ++++++++++++++ .../preview/features/multilingual-support.jd | 214 +++++ .../preview/features/notification-updates.jd | 328 ++++++++ .../in/preview/features/picture-in-picture.jd | 186 +++++ .../preview/features/scoped-folder-access.jd | 124 +++ .../in/preview/features/security-config.jd | 744 ++++++++++++++++++ .../in/preview/features/tv-recording-api.jd | 120 +++ docs/html-intl/intl/in/preview/index.jd | 120 +++ docs/html-intl/intl/in/preview/j8-jack.jd | 183 +++++ docs/html-intl/intl/in/preview/overview.jd | 440 +++++++++++ docs/html-intl/intl/in/preview/samples.jd | 85 ++ docs/html-intl/intl/in/preview/setup-sdk.jd | 226 ++++++ .../html-intl/intl/ja/preview/api-overview.jd | 676 ++++++++++++++++ .../intl/ja/preview/behavior-changes.jd | 480 +++++++++++ docs/html-intl/intl/ja/preview/download.jd | 541 +++++++++++++ .../features/background-optimization.jd | 388 +++++++++ .../intl/ja/preview/features/direct-boot.jd | 180 +++++ .../ja/preview/features/icu4j-framework.jd | 158 ++++ .../intl/ja/preview/features/multi-window.jd | 582 ++++++++++++++ .../preview/features/multilingual-support.jd | 214 +++++ .../preview/features/notification-updates.jd | 328 ++++++++ .../ja/preview/features/picture-in-picture.jd | 186 +++++ .../preview/features/scoped-folder-access.jd | 124 +++ .../ja/preview/features/security-config.jd | 744 ++++++++++++++++++ .../ja/preview/features/tv-recording-api.jd | 120 +++ docs/html-intl/intl/ja/preview/index.jd | 120 +++ docs/html-intl/intl/ja/preview/j8-jack.jd | 183 +++++ docs/html-intl/intl/ja/preview/overview.jd | 440 +++++++++++ docs/html-intl/intl/ja/preview/samples.jd | 85 ++ docs/html-intl/intl/ja/preview/setup-sdk.jd | 226 ++++++ .../html-intl/intl/ko/preview/api-overview.jd | 676 ++++++++++++++++ .../intl/ko/preview/behavior-changes.jd | 480 +++++++++++ docs/html-intl/intl/ko/preview/download.jd | 541 +++++++++++++ .../features/background-optimization.jd | 388 +++++++++ .../intl/ko/preview/features/direct-boot.jd | 180 +++++ .../ko/preview/features/icu4j-framework.jd | 158 ++++ .../intl/ko/preview/features/multi-window.jd | 582 ++++++++++++++ .../preview/features/multilingual-support.jd | 214 +++++ .../preview/features/notification-updates.jd | 328 ++++++++ .../ko/preview/features/picture-in-picture.jd | 186 +++++ .../preview/features/scoped-folder-access.jd | 124 +++ .../ko/preview/features/security-config.jd | 744 ++++++++++++++++++ .../ko/preview/features/tv-recording-api.jd | 120 +++ docs/html-intl/intl/ko/preview/index.jd | 120 +++ docs/html-intl/intl/ko/preview/j8-jack.jd | 183 +++++ docs/html-intl/intl/ko/preview/overview.jd | 440 +++++++++++ docs/html-intl/intl/ko/preview/samples.jd | 85 ++ docs/html-intl/intl/ko/preview/setup-sdk.jd | 226 ++++++ .../intl/pt-br/preview/api-overview.jd | 676 ++++++++++++++++ .../intl/pt-br/preview/behavior-changes.jd | 480 +++++++++++ docs/html-intl/intl/pt-br/preview/download.jd | 541 +++++++++++++ .../features/background-optimization.jd | 388 +++++++++ .../pt-br/preview/features/direct-boot.jd | 180 +++++ .../pt-br/preview/features/icu4j-framework.jd | 158 ++++ .../pt-br/preview/features/multi-window.jd | 582 ++++++++++++++ .../preview/features/multilingual-support.jd | 214 +++++ .../preview/features/notification-updates.jd | 328 ++++++++ .../preview/features/picture-in-picture.jd | 186 +++++ .../preview/features/scoped-folder-access.jd | 124 +++ .../pt-br/preview/features/security-config.jd | 744 ++++++++++++++++++ .../preview/features/tv-recording-api.jd | 120 +++ docs/html-intl/intl/pt-br/preview/index.jd | 120 +++ docs/html-intl/intl/pt-br/preview/j8-jack.jd | 183 +++++ docs/html-intl/intl/pt-br/preview/overview.jd | 440 +++++++++++ docs/html-intl/intl/pt-br/preview/samples.jd | 85 ++ .../html-intl/intl/pt-br/preview/setup-sdk.jd | 226 ++++++ .../html-intl/intl/ru/preview/api-overview.jd | 676 ++++++++++++++++ .../intl/ru/preview/behavior-changes.jd | 480 +++++++++++ docs/html-intl/intl/ru/preview/download.jd | 541 +++++++++++++ .../features/background-optimization.jd | 388 +++++++++ .../intl/ru/preview/features/direct-boot.jd | 180 +++++ .../ru/preview/features/icu4j-framework.jd | 158 ++++ .../intl/ru/preview/features/multi-window.jd | 582 ++++++++++++++ .../preview/features/multilingual-support.jd | 214 +++++ .../preview/features/notification-updates.jd | 328 ++++++++ .../ru/preview/features/picture-in-picture.jd | 186 +++++ .../preview/features/scoped-folder-access.jd | 124 +++ .../ru/preview/features/security-config.jd | 744 ++++++++++++++++++ .../ru/preview/features/tv-recording-api.jd | 120 +++ docs/html-intl/intl/ru/preview/index.jd | 120 +++ docs/html-intl/intl/ru/preview/j8-jack.jd | 183 +++++ docs/html-intl/intl/ru/preview/overview.jd | 440 +++++++++++ docs/html-intl/intl/ru/preview/samples.jd | 85 ++ docs/html-intl/intl/ru/preview/setup-sdk.jd | 226 ++++++ .../html-intl/intl/vi/preview/api-overview.jd | 676 ++++++++++++++++ .../intl/vi/preview/behavior-changes.jd | 480 +++++++++++ docs/html-intl/intl/vi/preview/download.jd | 541 +++++++++++++ .../features/background-optimization.jd | 388 +++++++++ .../intl/vi/preview/features/direct-boot.jd | 180 +++++ .../vi/preview/features/icu4j-framework.jd | 158 ++++ .../intl/vi/preview/features/multi-window.jd | 582 ++++++++++++++ .../preview/features/multilingual-support.jd | 214 +++++ .../preview/features/notification-updates.jd | 328 ++++++++ .../vi/preview/features/picture-in-picture.jd | 186 +++++ .../preview/features/scoped-folder-access.jd | 124 +++ .../vi/preview/features/security-config.jd | 744 ++++++++++++++++++ .../vi/preview/features/tv-recording-api.jd | 120 +++ docs/html-intl/intl/vi/preview/index.jd | 120 +++ docs/html-intl/intl/vi/preview/j8-jack.jd | 183 +++++ docs/html-intl/intl/vi/preview/overview.jd | 440 +++++++++++ docs/html-intl/intl/vi/preview/samples.jd | 85 ++ docs/html-intl/intl/vi/preview/setup-sdk.jd | 226 ++++++ .../intl/zh-cn/preview/api-overview.jd | 676 ++++++++++++++++ .../intl/zh-cn/preview/behavior-changes.jd | 480 +++++++++++ docs/html-intl/intl/zh-cn/preview/download.jd | 541 +++++++++++++ .../features/background-optimization.jd | 388 +++++++++ .../zh-cn/preview/features/direct-boot.jd | 180 +++++ .../zh-cn/preview/features/icu4j-framework.jd | 158 ++++ .../zh-cn/preview/features/multi-window.jd | 582 ++++++++++++++ .../preview/features/multilingual-support.jd | 214 +++++ .../preview/features/notification-updates.jd | 328 ++++++++ .../preview/features/picture-in-picture.jd | 186 +++++ .../preview/features/scoped-folder-access.jd | 124 +++ .../zh-cn/preview/features/security-config.jd | 744 ++++++++++++++++++ .../preview/features/tv-recording-api.jd | 120 +++ docs/html-intl/intl/zh-cn/preview/index.jd | 120 +++ docs/html-intl/intl/zh-cn/preview/j8-jack.jd | 183 +++++ docs/html-intl/intl/zh-cn/preview/overview.jd | 440 +++++++++++ docs/html-intl/intl/zh-cn/preview/samples.jd | 85 ++ .../html-intl/intl/zh-cn/preview/setup-sdk.jd | 226 ++++++ .../intl/zh-tw/preview/api-overview.jd | 676 ++++++++++++++++ .../intl/zh-tw/preview/behavior-changes.jd | 480 +++++++++++ docs/html-intl/intl/zh-tw/preview/download.jd | 541 +++++++++++++ .../features/background-optimization.jd | 388 +++++++++ .../zh-tw/preview/features/direct-boot.jd | 180 +++++ .../zh-tw/preview/features/icu4j-framework.jd | 158 ++++ .../zh-tw/preview/features/multi-window.jd | 582 ++++++++++++++ .../preview/features/multilingual-support.jd | 214 +++++ .../preview/features/notification-updates.jd | 328 ++++++++ .../preview/features/picture-in-picture.jd | 186 +++++ .../preview/features/scoped-folder-access.jd | 124 +++ .../zh-tw/preview/features/security-config.jd | 744 ++++++++++++++++++ .../preview/features/tv-recording-api.jd | 120 +++ docs/html-intl/intl/zh-tw/preview/index.jd | 120 +++ docs/html-intl/intl/zh-tw/preview/j8-jack.jd | 183 +++++ docs/html-intl/intl/zh-tw/preview/overview.jd | 440 +++++++++++ docs/html-intl/intl/zh-tw/preview/samples.jd | 85 ++ .../html-intl/intl/zh-tw/preview/setup-sdk.jd | 226 ++++++ docs/html/preview/preview_toc.cs | 103 ++- 163 files changed, 52062 insertions(+), 16 deletions(-) create mode 100644 docs/html-intl/intl/es/preview/api-overview.jd create mode 100644 docs/html-intl/intl/es/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/es/preview/download.jd create mode 100644 docs/html-intl/intl/es/preview/features/background-optimization.jd create mode 100644 docs/html-intl/intl/es/preview/features/direct-boot.jd create mode 100644 docs/html-intl/intl/es/preview/features/icu4j-framework.jd create mode 100644 docs/html-intl/intl/es/preview/features/multi-window.jd create mode 100644 docs/html-intl/intl/es/preview/features/multilingual-support.jd create mode 100644 docs/html-intl/intl/es/preview/features/notification-updates.jd create mode 100644 docs/html-intl/intl/es/preview/features/picture-in-picture.jd create mode 100644 docs/html-intl/intl/es/preview/features/scoped-folder-access.jd create mode 100644 docs/html-intl/intl/es/preview/features/security-config.jd create mode 100644 docs/html-intl/intl/es/preview/features/tv-recording-api.jd create mode 100644 docs/html-intl/intl/es/preview/index.jd create mode 100644 docs/html-intl/intl/es/preview/j8-jack.jd create mode 100644 docs/html-intl/intl/es/preview/overview.jd create mode 100644 docs/html-intl/intl/es/preview/samples.jd create mode 100644 docs/html-intl/intl/es/preview/setup-sdk.jd create mode 100644 docs/html-intl/intl/in/preview/api-overview.jd create mode 100644 docs/html-intl/intl/in/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/in/preview/download.jd create mode 100644 docs/html-intl/intl/in/preview/features/background-optimization.jd create mode 100644 docs/html-intl/intl/in/preview/features/direct-boot.jd create mode 100644 docs/html-intl/intl/in/preview/features/icu4j-framework.jd create mode 100644 docs/html-intl/intl/in/preview/features/multi-window.jd create mode 100644 docs/html-intl/intl/in/preview/features/multilingual-support.jd create mode 100644 docs/html-intl/intl/in/preview/features/notification-updates.jd create mode 100644 docs/html-intl/intl/in/preview/features/picture-in-picture.jd create mode 100644 docs/html-intl/intl/in/preview/features/scoped-folder-access.jd create mode 100644 docs/html-intl/intl/in/preview/features/security-config.jd create mode 100644 docs/html-intl/intl/in/preview/features/tv-recording-api.jd create mode 100644 docs/html-intl/intl/in/preview/index.jd create mode 100644 docs/html-intl/intl/in/preview/j8-jack.jd create mode 100644 docs/html-intl/intl/in/preview/overview.jd create mode 100644 docs/html-intl/intl/in/preview/samples.jd create mode 100644 docs/html-intl/intl/in/preview/setup-sdk.jd create mode 100644 docs/html-intl/intl/ja/preview/api-overview.jd create mode 100644 docs/html-intl/intl/ja/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/ja/preview/download.jd create mode 100644 docs/html-intl/intl/ja/preview/features/background-optimization.jd create mode 100644 docs/html-intl/intl/ja/preview/features/direct-boot.jd create mode 100644 docs/html-intl/intl/ja/preview/features/icu4j-framework.jd create mode 100644 docs/html-intl/intl/ja/preview/features/multi-window.jd create mode 100644 docs/html-intl/intl/ja/preview/features/multilingual-support.jd create mode 100644 docs/html-intl/intl/ja/preview/features/notification-updates.jd create mode 100644 docs/html-intl/intl/ja/preview/features/picture-in-picture.jd create mode 100644 docs/html-intl/intl/ja/preview/features/scoped-folder-access.jd create mode 100644 docs/html-intl/intl/ja/preview/features/security-config.jd create mode 100644 docs/html-intl/intl/ja/preview/features/tv-recording-api.jd create mode 100644 docs/html-intl/intl/ja/preview/index.jd create mode 100644 docs/html-intl/intl/ja/preview/j8-jack.jd create mode 100644 docs/html-intl/intl/ja/preview/overview.jd create mode 100644 docs/html-intl/intl/ja/preview/samples.jd create mode 100644 docs/html-intl/intl/ja/preview/setup-sdk.jd create mode 100644 docs/html-intl/intl/ko/preview/api-overview.jd create mode 100644 docs/html-intl/intl/ko/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/ko/preview/download.jd create mode 100644 docs/html-intl/intl/ko/preview/features/background-optimization.jd create mode 100644 docs/html-intl/intl/ko/preview/features/direct-boot.jd create mode 100644 docs/html-intl/intl/ko/preview/features/icu4j-framework.jd create mode 100644 docs/html-intl/intl/ko/preview/features/multi-window.jd create mode 100644 docs/html-intl/intl/ko/preview/features/multilingual-support.jd create mode 100644 docs/html-intl/intl/ko/preview/features/notification-updates.jd create mode 100644 docs/html-intl/intl/ko/preview/features/picture-in-picture.jd create mode 100644 docs/html-intl/intl/ko/preview/features/scoped-folder-access.jd create mode 100644 docs/html-intl/intl/ko/preview/features/security-config.jd create mode 100644 docs/html-intl/intl/ko/preview/features/tv-recording-api.jd create mode 100644 docs/html-intl/intl/ko/preview/index.jd create mode 100644 docs/html-intl/intl/ko/preview/j8-jack.jd create mode 100644 docs/html-intl/intl/ko/preview/overview.jd create mode 100644 docs/html-intl/intl/ko/preview/samples.jd create mode 100644 docs/html-intl/intl/ko/preview/setup-sdk.jd create mode 100644 docs/html-intl/intl/pt-br/preview/api-overview.jd create mode 100644 docs/html-intl/intl/pt-br/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/pt-br/preview/download.jd create mode 100644 docs/html-intl/intl/pt-br/preview/features/background-optimization.jd create mode 100644 docs/html-intl/intl/pt-br/preview/features/direct-boot.jd create mode 100644 docs/html-intl/intl/pt-br/preview/features/icu4j-framework.jd create mode 100644 docs/html-intl/intl/pt-br/preview/features/multi-window.jd create mode 100644 docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd create mode 100644 docs/html-intl/intl/pt-br/preview/features/notification-updates.jd create mode 100644 docs/html-intl/intl/pt-br/preview/features/picture-in-picture.jd create mode 100644 docs/html-intl/intl/pt-br/preview/features/scoped-folder-access.jd create mode 100644 docs/html-intl/intl/pt-br/preview/features/security-config.jd create mode 100644 docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd create mode 100644 docs/html-intl/intl/pt-br/preview/index.jd create mode 100644 docs/html-intl/intl/pt-br/preview/j8-jack.jd create mode 100644 docs/html-intl/intl/pt-br/preview/overview.jd create mode 100644 docs/html-intl/intl/pt-br/preview/samples.jd create mode 100644 docs/html-intl/intl/pt-br/preview/setup-sdk.jd create mode 100644 docs/html-intl/intl/ru/preview/api-overview.jd create mode 100644 docs/html-intl/intl/ru/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/ru/preview/download.jd create mode 100644 docs/html-intl/intl/ru/preview/features/background-optimization.jd create mode 100644 docs/html-intl/intl/ru/preview/features/direct-boot.jd create mode 100644 docs/html-intl/intl/ru/preview/features/icu4j-framework.jd create mode 100644 docs/html-intl/intl/ru/preview/features/multi-window.jd create mode 100644 docs/html-intl/intl/ru/preview/features/multilingual-support.jd create mode 100644 docs/html-intl/intl/ru/preview/features/notification-updates.jd create mode 100644 docs/html-intl/intl/ru/preview/features/picture-in-picture.jd create mode 100644 docs/html-intl/intl/ru/preview/features/scoped-folder-access.jd create mode 100644 docs/html-intl/intl/ru/preview/features/security-config.jd create mode 100644 docs/html-intl/intl/ru/preview/features/tv-recording-api.jd create mode 100644 docs/html-intl/intl/ru/preview/index.jd create mode 100644 docs/html-intl/intl/ru/preview/j8-jack.jd create mode 100644 docs/html-intl/intl/ru/preview/overview.jd create mode 100644 docs/html-intl/intl/ru/preview/samples.jd create mode 100644 docs/html-intl/intl/ru/preview/setup-sdk.jd create mode 100644 docs/html-intl/intl/vi/preview/api-overview.jd create mode 100644 docs/html-intl/intl/vi/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/vi/preview/download.jd create mode 100644 docs/html-intl/intl/vi/preview/features/background-optimization.jd create mode 100644 docs/html-intl/intl/vi/preview/features/direct-boot.jd create mode 100644 docs/html-intl/intl/vi/preview/features/icu4j-framework.jd create mode 100644 docs/html-intl/intl/vi/preview/features/multi-window.jd create mode 100644 docs/html-intl/intl/vi/preview/features/multilingual-support.jd create mode 100644 docs/html-intl/intl/vi/preview/features/notification-updates.jd create mode 100644 docs/html-intl/intl/vi/preview/features/picture-in-picture.jd create mode 100644 docs/html-intl/intl/vi/preview/features/scoped-folder-access.jd create mode 100644 docs/html-intl/intl/vi/preview/features/security-config.jd create mode 100644 docs/html-intl/intl/vi/preview/features/tv-recording-api.jd create mode 100644 docs/html-intl/intl/vi/preview/index.jd create mode 100644 docs/html-intl/intl/vi/preview/j8-jack.jd create mode 100644 docs/html-intl/intl/vi/preview/overview.jd create mode 100644 docs/html-intl/intl/vi/preview/samples.jd create mode 100644 docs/html-intl/intl/vi/preview/setup-sdk.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/api-overview.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/download.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/features/icu4j-framework.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/features/multi-window.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/features/notification-updates.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/features/picture-in-picture.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/features/scoped-folder-access.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/features/security-config.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/index.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/j8-jack.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/overview.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/samples.jd create mode 100644 docs/html-intl/intl/zh-cn/preview/setup-sdk.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/api-overview.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/behavior-changes.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/download.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/features/icu4j-framework.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/features/multi-window.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/features/notification-updates.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/features/picture-in-picture.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/features/scoped-folder-access.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/features/security-config.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/index.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/j8-jack.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/overview.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/samples.jd create mode 100644 docs/html-intl/intl/zh-tw/preview/setup-sdk.jd diff --git a/docs/html-intl/intl/es/preview/api-overview.jd b/docs/html-intl/intl/es/preview/api-overview.jd new file mode 100644 index 000000000000..02a13e7a29cb --- /dev/null +++ b/docs/html-intl/intl/es/preview/api-overview.jd @@ -0,0 +1,676 @@ +page.title=Android N para desarrolladores +meta.tags=“preview”, “Android N” +page.tags="preview", "developer preview" +page.image=images/cards/card-n-apis_2x.png +@jd:body + + + + +
+ +
+ + + +

Android N aún se encuentra en proceso activo de desarrollo, pero puedes probarlo +ahora como parte de la N Developer Preview. En las secciones siguientes se destacan algunas de +las nuevas funciones para desarrolladores.

+ +

+ Asegúrate de ver los Cambios de comportamiento para obtener información sobre + áreas en las cuales los cambios en las plataformas puedan tener efecto en tus aplicaciones, consultar las + guías del desarrollador para conocer mejor las funciones claves y descargar la Referencia de la API para obtener información sobre + API nuevas. +

+ +

Compatibilidad con ventanas múltiples

+ + +

En Android N, presentamos una nueva y muy solicitada función multitarea +en la plataforma: la compatibilidad con ventanas múltiples.

+ +

Los usuarios ahora pueden abrir dos aplicaciones al mismo tiempo en la pantalla.

+ + +
+ +

+ Figura 1: Aplicaciones en ejecución en el modo de pantalla dividida. +

+
+ +

En las tabletas, en particular, y en otros dispositivos de pantallas más grandes, la compatibilidad con ventanas múltiples +ofrece nuevas maneras de captar a los usuarios. Puedes, incluso, habilitar acciones de arrastrar y soltar en +tu aplicación para que los usuarios arrastren contenido hacia tu aplicación o desde ella; es una excelente +manera de mejorar su experiencia.

+ +

Es sencillo agregar compatibilidad con ventanas múltiples a tu aplicación y configurar la manera en que +administra la visualización de estas ventanas. Por ejemplo, puedes especificar las dimensiones mínimas +permitidas de tu actividad, y evitar así que los usuarios den a la actividad un tamaño inferior +al que establecen estas. También puedes deshabilitar la visualización de ventanas múltiples para tu aplicación, lo cual + garantiza que en el sistema solo se muestre tu aplicación en el modo de pantalla completa.

+ +

+ Para obtener más información, consulta la documentación sobre Compatibilidad con ventanas múltiples +para desarrolladores. +

+ +

Mejoras en las notificaciones

+ +

En Android N, hemos rediseñado las notificaciones para facilitar y agilizar su +uso. Entre los cambios se incluyen los siguientes:

+ + + +
+ +
+ +
+ +
+ +
+ +
+ + +

+ Figura 2: Notificaciones agrupadas y respuesta directa. +

+ +

Para obtener información acerca de cómo implementar las nuevas funciones, consulta la guía + + Notificaciones.

+ + + +

Compilación de JIT y AOT guiada por perfiles

+ +

En Android N, agregamos un compilador “Just in Time” (JIT) con generación de perfiles de código para +ART, lo cual le permite mejorar constantemente el rendimiento de las aplicaciones de Android mientras se +ejecutan. El compilador JIT complementa al compilador “Ahead of Time” (AOT) actual de ART +y permite mejorar el rendimiento del tiempo de ejecución, ahorrar espacio de almacenamiento y acelerar las actualizaciones +de aplicaciones y del sistema.

+ +

La compilación guiada por perfiles permite que ART maneje la compilación de AOT y JIT de cada aplicación +conforme a su uso real, además de las condiciones en el dispositivo. Por +ejemplo, conserva un perfil de los métodos directos de cada aplicación, y puede compilar previamente +y almacenar en el caché dichos métodos para obtener el mejor rendimiento. A su vez, deja otras partes de la aplicación +sin compilar hasta que se aplican verdaderamente.

+ +

Además de mejorar el rendimiento de partes claves de la aplicación, la compilación guiada por +perfiles permite reducir la superficie de memora RAM total de una aplicación, incluidos los archivos binarios +asociados. Esta función tiene particular importancia en los dispositivos de memoria reducida.

+ +

ART administra la compilación guiada por perfiles de una manera que minimiza el impacto sobre la batería +del dispositivo. Realiza compilaciones previas únicamente cuando el dispositivo se encuentra inactivo y +en proceso de carga, con lo cual permite ahorrar tiempo y batería al hacer el trabajo en forma anticipada.

+ +

Acceso rápido a la instalación de aplicaciones

+ +

Uno de los beneficios más palpables del compilador JIT de ART es la velocidad de instalación de las +aplicaciones y de actualización del sistema. Incluso las aplicaciones de mayor tamaño, en cuyos casos se necesitaban varios minutos para la +optimización y la instalación en Android 6.0, ahora pueden instalarse en cuestión de +segundos. Las actualizaciones del sistema también son más rápidas debido a que ya no hay paso de optimización.

+ +

Doze en movimiento...

+ +

En Android 6.0 se presentó Doze, un modo de sistema que ahorra batería al aplazar +actividades de CPU y red de las aplicaciones cuando el dispositivo se encuentra inactivo; por ejemplo, al hallarse +sobre una mesa o en un cajón.

+ +

Ahora, en Android N, el modo Doze ofrece el beneficio adicional de ahorrar batería en movimiento. +Siempre que la pantalla permanezca apagada durante un tiempo y el dispositivo esté desenchufado, +Doze aplicará un subconjunto de las restricciones de CPU y red conocidas a las aplicaciones. +Esto significa que los usuarios pueden ahorrar batería aun cuando lleven sus dispositivos +en los bolsillos.

+ + + +

+ Figura 3: Doze ahora aplica + restricciones para prolongar la duración de la batería aun cuando el dispositivo no está quieto. +

+ + +

Poco tiempo después de que la pantalla se apaga, cuando el dispositivo no está enchufado, Doze +restringe el acceso a la red y aplaza tareas y sincronizaciones. Durante períodos de mantenimiento +breves, las aplicaciones tienen acceso a la red y se ejecutan todas sus +tareas y sincronizaciones aplazadas. Al encenderse la pantalla o enchufarse el dispositivo se desactiva el modo +Doze del dispositivo.

+ +

Cuando el dispositivo vuelve a estar quieto, desenchufado y con la pantalla apagada durante un +tiempo, Doze aplica todas las restricciones de CPU y redes en {@link +android.os.PowerManager.WakeLock}, alarmas de {@link android.app.AlarmManager} y análisis de +GPS o Wi-Fi.

+ +

Las prácticas recomendadas para adaptar tu aplicación a Doze no varían si el +dispositivo estará en movimiento o no. Por lo tanto, si ya actualizaste tu aplicación para que administre +Doze en forma equilibrada, estarás listo. Si no lo hiciste, comienza a adaptarla +a Doze ahora.

+ +

Project Svelte: Optimizaciones en segundo plano

+ +

Project Svelte representa un esfuerzo constante por minimizar el uso de memoria RAM a través del sistema y de las aplicaciones +en los diferentes dispositivos Android del ecosistema. En Android N, el objetivo principal de Project +Svelte es optimizar la manera en que las aplicaciones se ejecutan en segundo plano.

+ +

El procesamiento en segundo plano es una parte esencial de la mayoría de las aplicaciones. Cuando se maneja en forma adecuada, puede +hacer que la experiencia de tu usuario sea increíble (inmediata, rápida y pertinente al contexto). +Cuando no se maneja de tal manera, el procesamiento en segundo plano puede suponer un consumo innecesario de memoria RAM (y +batería), y afectar el rendimiento del sistema para otras aplicaciones.

+ +

A partir de Android 5.0, {@link android.app.job.JobScheduler} ha sido el +método preferido para ejecutar tareas en segundo plano con resultados positivos +para los usuarios. Las aplicaciones pueden programar tareas y, al mismo tiempo, permitir que el sistema se optimice según las condiciones de +memoria, energía y conectividad. JobScheduler ofrece control y +simpleza, y nuestro deseo es que todas las aplicaciones lo usen.

+ +

+ Otra buena opción es + GCMNetworkManager, que forma parte de Google Play Services y + ofrece una capacidad similar de programación de tareas con compatibilidad en versiones heredadas de + Android. +

+ +

Continuaremos ampliando JobScheduler y +GCMNetworkManager para que se apliquen a más +casos de uso de tus aplicaciones; por ejemplo, en Android N ahora puedes programar procesos +en segundo plano según los cambios de los proveedores de contenido. Al mismo tiempo, comenzaremos a +dejar de usar algunos de los patrones anteriores que pueden reducir el rendimiento del sistema, +en especial en dispositivos de memoria reducida.

+ +

En Android N, eliminaremos tres difusiones implícitas que se usan normalmente ( + {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link + android.hardware.Camera#ACTION_NEW_PICTURE} y {@link + android.hardware.Camera#ACTION_NEW_VIDEO}), ya que pueden activar los +procesos en segundo plano de varias aplicaciones al mismo tiempo, y así exigir la memoria y la batería. Si +tu aplicación recibe estas difusiones, aprovecha la N Developer Preview y + realiza la migración a JobScheduler y hacia las API relacionadas, como alternativa.

+ +

+ Para obtener información detallada, consulta la documentación de Optimizaciones + en segundo plano. +

+ + +

Ahorro de datos

+ +
+ + +

+ Figura 4: Ahorro de datos en la configuración. +

+
+ +

Durante la vida útil de un dispositivo móvil, el costo de un plan de datos móviles normalmente +superará el costo del propio dispositivo. Para muchos usuarios, los datos móviles son un +recurso costoso que desean conservar.

+ +

En Android N se presenta el modo de ahorro de datos, un nuevo servicio del sistema que permite reducir +el uso de datos móviles de las aplicaciones, ya sea con servicio de itinerancia, cerca del final del ciclo de facturación +o con un paquete de datos prepagos. El ahorro de datos permite que los usuarios controlen la manera en que las aplicaciones +usan los datos móviles y que los desarrolladores brinden un servicio más eficaz cuando el ahorro +de datos se encuentra activo.

+ +

Cuando un usuario habilita el ahorro de datos en Settings y el dispositivo está +conectado a una red de uso medido, el sistema bloquea el uso de datos en segundo plano y ordena a las aplicaciones +usar menos datos en primer plano siempre que sea posible (por ejemplo, limitando +la tasa de bits para la transmisión, reduciendo la calidad de la imagen y aplazando el valor optimista de almacenamiento previo en caché, +entre otras posibilidades). Los usuarios pueden permitir que aplicaciones específicas habiliten el uso de datos medidos en segundo plano +aun cuando esté activo el ahorro de datos.

+ +

Android N extiende {@link android.net.ConnectivityManager} para que las aplicaciones +tengan una manera de recuperar las +preferencias de ahorro de datos del usuario y los monitor +cambios en estas. Todas las aplicaciones deben verificar si el usuario habilitó el ahorro de +datos e intentar limitar el uso de datos en primer y segundo plano.

+ + +

API para Mosaico de Configuración rápida

+ + +
+ + +

+ Figura 5: Mosaicos de Quick Settings del panel de notificaciones. +

+ + +

Quick Settings es una manera popular y simple de exhibir configuraciones y acciones claves +directamente desde el panel de notificaciones. En Android N, expandimos el alcance de +Quick Settings para que sea más útil y práctico.

+ +

Agregamos más espacio para mosaicos adicionales de Quick Settings, a los cuales los usuarios pueden +acceder desde un área de visualización paginada deslizando el dedo hacia la izquierda o la derecha. También permitimos +que los usuarios determinen los mosaicos de Quick Settings que aparecerán y los puntos en los cuales +se mostrarán; pueden agregar o mover mosaicos con solo arrastrarlos y soltarlos.

+ +

Para los desarrolladores, en Android N también se agrega una nueva API que les permite definir mosaicos de + Quick Settings propios para facilitar, dentro de sus aplicaciones, el acceso a controles y acciones claves por parte de los usuarios.

+ +

+ Los mosaicos de Quick Settings se reservan para controles o acciones que se necesiten + con urgencia o se usen con frecuencia; no deben emplearse como accesos directos para + iniciar una aplicación. +

+ +

+ Una vez que hayas definido tus mosaicos, puedes dejarlos a disposición de los usuarios, quienes tendrán la posibilidad de agregarlos + a Quick Settings con solo arrastrarlos y soltarlos. +

+ +

+ Para obtener información sobre la creación de un mosaico de aplicación, consulta + android.service.quicksettings.Tile en la Referencia de la API descargable. +

+ + + +

Bloqueo de números

+ +

Android N ahora admite el bloqueo de números en la plataforma y proporciona una API +de framework para que los proveedores de servicios dispongan de una lista con números bloqueados. La +aplicación de SMS predeterminada, la aplicación telefónica predeterminada y las aplicaciones de proveedores tienen capacidad de lectura y +escritura en la lista de números bloqueados. Otras aplicaciones no pueden acceder a la lista.

+ +

Al hacer que el bloqueo de números sea una función estándar de la plataforma, Android permite que las +aplicaciones admitan de manera uniforme el bloqueo de números en una amplia variedad de +dispositivos. Entre los demás beneficios que pueden aprovecharse en las aplicaciones, se encuentran los siguientes:

+ + + +

De manera adicional, la integración de aplicaciones de proveedores a través de Android permite que estos +lean la lista de números bloqueados del dispositivo y realicen un bloqueo de servicio +para el usuario, a fin de evitar que el usuario reciba llamadas o mensajes de texto no deseados +por cualquier medio, como terminales VOIP o teléfonos con transferencia de llamadas.

+ +

+ Para obtener más información, consulta android.provider.BlockedNumberContract + en la Referencia de la API + descargable. +

+ +

Filtración de llamadas

+ +

+ Android N permite que la aplicación predeterminada de un teléfono filtre las llamadas entrantes. La aplicación + hace esto a través del nuevo CallScreeningService, + que le permite realizar varias acciones según la clase + {@link android.telecom.Call.Details Call.Details} de la llamada entrante. Algunos ejemplos: +

+ + + +

+ Para obtener más información, consulta android.telecom.CallScreeningService + en la Referencia de la API + descargable. +

+ + +

Compatibilidad con varias configuraciones regionales y más idiomas

+ + +

Android N permite a los usuarios seleccionar varias configuraciones regionales en Settings, +para brindar una mejor compatibilidad con casos de uso de dos idiomas. Las aplicaciones pueden usar +una nueva API para obtener las configuraciones regionales seleccionadas del usuario y luego ofrecer experiencias +más sofisticadas para usuarios que usen varias configuraciones regionales; por ejemplo, pueden mostrar resultados de búsqueda en +varios idiomas y no ofrecer traducciones de páginas web con idiomas que el +usuario conozca.

+ +

Además de la compatibilidad con varias configuraciones regionales, en Android N también se amplía la variedad de idiomas +disponibles para los usuarios. Se ofrecen 25 variantes, cada una de ellas para idiomas de uso +común, como el inglés, el español, el francés y el árabe. También se agrega compatibilidad +parcial con más de 100 idiomas nuevos.

+ +

Las aplicaciones pueden obtener la lista de configuraciones regionales establecida por el usuario llamando a LocaleList.GetDefault(). A fin de admitir la cantidad ampliada de configuraciones regionales, en Android N se modificará la forma de +resolver recursos. Asegúrate de controlar que tus aplicaciones +funcionen de la manera esperada con la nueva lógica de resolución de recursos.

+ +

Para obtener información sobre el nuevo comportamiento de resolución de recursos y las prácticas recomendadas que +debes aplicar, consulta Compatibilidad con varios idiomas.

+ +

API de ICU4J en Android

+ +

+ Android N ahora ofrece un subconjunto de API de ICU4J dentro del framework de Android, en el paquete + android.icu. La migración es sencilla y en mayor medida implica + simplemente un cambio del espacio de nombres com.java.icu a + android.icu. Si ya usas el paquete ICU4J en tus + aplicaciones, el cambio a las API de android.icu en el framework de Android + puede reducir notablemente el tamaño del APK. +

+ +

+ Para obtener más información sobre las API de ICU4J de Android, consulta Compatibilidad con ICU4J. +

+ + + +

API™ de OpenGL ES 3.2

+ +

En Android N se agregan interfaces de framework y compatibilidad con plataformas para OpenGL ES 3.2, entre las que se incluye lo siguiente:

+ + + +

En Android N, la API de framework para OpenGL ES 3.2 se proporciona con la clase +GLES32. Al usar OpenGL ES 3.2, asegúrate de declarar el +requisito en tu archivo de manifiesto, con la etiqueta <uses-feature> y el +atributo android:glEsVersion.

+ +

Para obtener información sobre el uso de OpenGL ES, incluida la manera de comprobar la +versión de OpenGL ES que admite el dispositivo durante el tiempo de ejecución, consulta laguía de la API OpenGL ES.

+ + +

Grabación de Android TV

+ +

En Android N se agrega la capacidad de grabar y reproducir contenido de servicios +de entrada de Android TV a través de las nuevas API de grabación. Aprovechando las mejoras existentes de las API time shifting +, los servicios de entrada de TV pueden controlar los datos de canales que pueden grabarse y la manera +en que se guardan las sesiones grabadas, y administrar la interacción del usuario con el contenido grabado.

+ +

Para obtener más información, consulta API de grabación de Android TV.

+ + +

Android for Work

+ +

Android for Work suma muchas funciones y API nuevas para dispositivos con Android N. +A continuación, se muestran algunos aspectos destacados. Para hallar una lista completa de actualizaciones de Android for Work +relacionadas con Android N, consulta la sección de cambios en Android for Work.

+ +

Comprobación de seguridad para perfiles de trabajo

+ +

+ Quienes posean perfiles pueden especificar una comprobación de seguridad separada para aplicaciones que se ejecuten en el + perfil de trabajo. La comprobación para perfiles de trabajo se muestra cuando un usuario intenta abrir + aplicaciones de trabajo. Cuando la comprobación de seguridad es exitosa, se desbloquea el + perfil de trabajo y se descifra si es necesario. Para quienes posean perfiles, + ACTION_SET_NEW_PASSWORD solicita al usuario establecer una comprobación de + trabajo y ACTION_SET_NEW_PARENT_PROFILE_PASSWORD le solicita + establecer un bloqueo de dispositivo. +

+ +

+ Quienes posean perfiles pueden establecer políticas de contraseñas diferentes + (por ejemplo, la extensión que debe tener el PIN o la posibilidad de usar una huella digital + para desbloquear el perfil) usando setPasswordQuality(), + setPasswordMinimumLength() y métodos relacionados. También + pueden establecer el bloqueo del dispositivo usando la instancia de DevicePolicyManager + devuelta por el nuevo método getParentProfileInstance(). + Además, tiene la posibilidad de personalizar la pantalla de credenciales de la + comprobación de trabajo usando los nuevos métodos setOrganizationColor() y + setOrganizationName(). +

+

Desactivación del modo de trabajo

+ +

En dispositivos con perfil de trabajo, los usuarios pueden alternar el modo de trabajo. Cuando este último está +inactivo, el usuario administrado queda deshabilitado temporalmente, con lo cual se desactivan las aplicaciones de perfiles +de trabajo, la sincronización en segundo plano y las notificaciones. Esto incluye la aplicación del propietario del +perfil. Cuando el modo de trabajo está inactivo, en el sistema se muestra un icono de estado persistente +para recordar al usuario que no puede iniciar aplicaciones de trabajo. El lanzador +indica que no es posible acceder a aplicaciones ni widgets de trabajo.

+ +

Always on VPN

+ +

Los propietarios de dispositivos y perfiles pueden asegurarse de que las aplicaciones de trabajo siempre se conecten +a través de una VPN especificada. El sistema inicia dicha VPN en forma automática después del +inicio del dispositivo.

+ +

+ Los nuevos métodos de DevicePolicyManager son + setAlwaysOnVpnPackage() y + getAlwaysOnVpnPackage(). +

+ +

Debido a que los servicios de VPN pueden enlazarse directamente a través del sistema sin interacción con +aplicaciones, los clientes de VPN deben administrar nuevos puntos de entrada para Always on VPN. Al igual que +antes, los servicios se indican al sistema con una clase android.net.VpnService de acción de coincidencia de filtro +de intenciones.

+ +

+ Los usuarios también pueden establecer clientes Always on VPN que implementen métodos + VPNService en el usuario principal con + Settings>More>Vpn. +

+ +

Mejoras de accesibilidad

+ +

Android N ahora ofrece Vision Settings directamente en la pantalla de Bienvenida para la configuración de +dispositivos nuevos. Esto permite a los usuarios descubrir y configurar de manera mucho más sencilla +funciones de accesibilidad en sus dispositivos, como el gesto de ampliación, el tamaño +de fuente, el tamaño de pantalla y TalkBack.

+ +

Al tener estas funciones de accesibilidad una disposición más prominente, es más probable +que tus usuarios prueben tu aplicación con ellas habilitadas. Asegúrate de probar tus aplicaciones +en forma anticipada con esta configuración habilitada. Puedes activarla en Settings > +Accessibility.

+ +

Otra posibilidad en Android N: los servicios de accesibilidad ahora pueden asistir a los usuarios con discapacidades +motoras para el uso de la pantalla. La nueva API permite crear servicios con +funciones como el seguimiento de rostros u ojos y la exploración por puntos, entre otros, para satisfacer +las necesidades de estos usuarios.

+ +

Para obtener más información, consulta android.accessibilityservice.GestureDescription + en la Referencia de la API descargable.

+ + +

Inicio directo

+ +

El inicio directo optimiza los tiempos de inicio del dispositivo y permite una funcionalidad +limitada de las aplicaciones aun después de un reinicio inesperado. +Por ejemplo, si un dispositivo cifrado se reinicia mientras el usuario duerme, +este último puede continuar recibiendo en forma normal notificaciones de alarmas, llamadas entrantes y mensajes +registrados. Esto también significa que los servicios de accesibilidad también pueden estar + disponibles de inmediato después de un reinicio.

+ +

El inicio directo aprovecha el cifrado basado en archivos de Android N, +a fin de habilitar políticas de cifrado específicas para datos del sistema y de aplicaciones. +El sistema usa un depósito cifrado por el dispositivo para datos de sistema seleccionados y datos de aplicaciones +explícitamente registrados. En forma predeterminada, se usa un depósito cifrado con credenciales para los + datos de sistema, los datos de usuario, las aplicaciones y los datos de aplicaciones restantes.

+ +

Durante el inicio, el sistema se carga en un modo restringido con acceso únicamente +a datos cifrados por el dispositivo y sin acceso general a aplicaciones o datos. +Si hay componentes que deseas ejecutar en este modo, puedes registrarlos +configurando un marcador en el manifiesto. Después del reinicio, el sistema activa +componentes registrados transmitiendo la intención + LOCKED_BOOT_COMPLETED. El sistema garantiza que estén disponibles los datos de aplicaciones cifrados por el dispositivo +antes de la desactivación del bloqueo. No es posible acceder a los demás datos hasta que el usuario confirme sus credenciales de pantalla de + bloqueo para descifrarlos.

+ +Para obtener más información, consulta Inicio directo.

+

+ + +

Atestación de claves

+ +

Los depósitos de claves guardados en hardware proporcionan un método mucho más seguro para crear, almacenar +y usar claves criptográficas en dispositivos Android. Protegen las claves contra funciones del kernel de +Linux, vulnerabilidades potenciales de Android y extracciones +de dispositivos con derechos de administrador.

+ +

Para hacer más sencillo y seguro el uso de depósitos de claves guardados en hardware, +en Android N se presenta la atestación de claves. En las aplicaciones y en los servicios que no dependen de los dispositivos se puede usar la atestación +de claves para determinar fehacientemente el almacenamiento de un par de claves RSA o EC se +en hardware, las propiedades de dicho par y las + limitaciones aplicadas a su uso y validez.

+ +

Los servicios que no dependen de los dispositivos y las aplicaciones pueden solicitar información acerca de un par de claves +a través de un certificado de atestación X.509 que debe firmarse con una clave de atestación +válida. La claves de atestación es una clave de firma ECDSA que se +inyecta en el depósito de claves guardado en hardware en la fábrica. +Por lo tanto, un certificado de atestación firmado con una clave de atestación +válida confirma la existencia de un depósito de claves guardado en hardware y de información detallada + sobre los pares de claves en dicho depósito de claves.

+ +

Para asegurarse de que el dispositivo use una imagen segura y oficial de fábrica de +Android, la atestación de claves solicita que el bootloader +del dispositivo proporcione la siguiente información al entorno de ejecución +seguro (TEE):

+ + + +

Para obtener más información sobre la función de depósitos de claves guardados en hardware, +consulta la guía deDepósito de clave guardado en hardware.

+ +

Además de la atestación de claves, en Android N también se presentan + claves enlazadas a huellas digitales no revocadas en la inscripción con estas huellas.

+ +

Configuración de seguridad de la red

+ +

En Android N, las aplicaciones pueden personalizar el comportamiento de sus conexiones protegidas (HTTPS y TLS) +en forma segura, sin modificaciones en el código, a través de la +Configuración de seguridad de la red en lugar de las API +convencionales, propensas a generar errores (p. ej., X509TrustManager).

+ +

Funciones admitidas:

+ + +

Para obtener más información, consulta Configuración de seguridad de +la red.

+ +

Entidad de certificación de confianza predeterminada

+ +

De manera predeterminada, en las aplicaciones orientadas a Android N solo se consideran como confiables los certificados proporcionados por el sistema +y ya no se da esta misma consideración a las entidades de certificación (CA) añadidas por usuarios. En aquellas aplicaciones orientadas a Android +N para las cuales se desee considerar tales CA como válidas, se debe usar la +Configuración de seguridad de la red a fin de +especificar los términos de confianza de dichas CA.

+ +

Esquema de firma de APK v2

+ +

La clase PackageManager ahora admite la verificación de aplicaciones con el esquema +de firma de APK v2. Se trata de un esquema de firma de archivos completos +que agiliza considerablemente la verificación y refuerza las garantías de + integridad al detectar todos los cambios no autorizados en archivos APK.

+ +

Para conservar la compatibilidad con versiones anteriores, se debe firmar un APK con el esquema de firma +v1 (esquema de firma JAR) antes de la firma con el esquema de firma v2. +Si se usa este último, la verificación experimenta errores cuando se firma el APK con un + certificado adicional después de la firma con el esquema v2.

+ +

Se ofrecerá disponibilidad con el esquema de firma de APK v2 más adelante en la N Developer +Preview.

+ +

Acceso a directorios determinados

+ +

En Android N, las aplicaciones pueden usar nuevas API para solicitar acceso a directorios dealmacenamiento +externo específicos, incluidos los directorios de medios extraíbles, como las tarjetas +SD. Las nuevas API simplifican enormemente la manera en que tu aplicación accede a directorios +de almacenamiento externo estándares, como Pictures. Las aplicaciones +de fotografía pueden usar estas API en lugar de +READ_EXTERNAL_STORAGE, que otorga acceso a todos los directorios +de almacenamiento, o del framework de acceso a almacenamiento, con el cual el usuario debe navegar hasta +el directorio.

+ +

A su vez, las nuevas API simplifican los pasos que un usuario debe seguir para otorgar a tu aplicación acceso a almacenamiento +externo. Cuando se usan las nuevas API, el sistema emplea una IU de +permisos simple en la que se detallan claramente los directorios a los cuales +la aplicación solicita acceso.

+ +

Para obtener más información, consulta la documentación sobre +Acceso +a directorios determinados para desarrolladores.

+ + + + + + diff --git a/docs/html-intl/intl/es/preview/behavior-changes.jd b/docs/html-intl/intl/es/preview/behavior-changes.jd new file mode 100644 index 000000000000..fdc85464df54 --- /dev/null +++ b/docs/html-intl/intl/es/preview/behavior-changes.jd @@ -0,0 +1,480 @@ +page.title=Cambios en los comportamientos +page.keywords=preview,sdk,compatibility +meta.tags=“preview”, “compatibilidad” +page.tags="preview", "developer preview" +page.image=images/cards/card-n-changes_2x.png +@jd:body + + +
+ +
+ + +

+ Además de nuevas funciones y capacidades, en Android N + se incluyen varios cambios en el comportamiento del sistema y de las API. En este documento + se destacan algunos de los cambios principales que debes comprender y tener en cuenta + en tus aplicaciones. +

+ +

+ Si publicaste anteriormente una aplicación para Android, ten en cuenta que tu aplicación + podría verse afectada por estos cambios en la plataforma. +

+ + +

Mejoras de rendimiento

+ +

+ Android N contiene cambios en el comportamiento del sistema destinados a lograr mejoras en la duración + de las baterías de los dispositivos, el uso de la memoria RAM y el rendimiento de las aplicaciones. Estos cambios pueden tener efecto en la + disponibilidad de recursos y notificaciones de sistema para tu aplicación. Debes + revisar estos cambios y evaluar las posibles formas en que tu aplicación deba adecuarse a + ellas. +

+ +

Doze

+ +

+ Doze, presentado en Android 6.0 (nivel de API 23), prolonga la duración de la batería + aplazando actividades de CPU y red cuando un usuario deja un dispositivo desenchufado, + quieto y con la pantalla apagada. En Android N se ofrecen más + mejoras para Doze a través de la aplicación de un subconjunto de restricciones de CPU y red + mientras el dispositivo se encuentra desenchufado y con la pantalla apagada, aunque no necesariamente + quieto; por ejemplo, al ir dentro del bolsillo de un usuario en movimiento. +

+ + + +

+ Figura 1: Ilustración del modo en que Doze aplica un primer nivel de + restricciones de actividad del sistema para prolongar la duración de la batería. +

+ +

+ Cuando un dispositivo funciona con la batería y la pantalla permanece apagada durante un tiempo + determinado, se activa en este el modo Doze y se aplica el primer subconjunto de restricciones: se desactiva + el acceso de las aplicaciones a la red y se aplazan tareas y sincronizaciones. Si el dispositivo + permanece quieto durante un tiempo determinado tras activarse el modo Doze, el sistema aplica el + resto de las restricciones del modo a alarmas de {@link android.os.PowerManager.WakeLock}, + {@link android.app.AlarmManager} y análisis de GPS o Wi-Fi. Independientemente de que + se apliquen algunas o todas las restricciones del modo Doze, el sistema activa el + dispositivo durante plazos de mantenimiento breves en los cuales las aplicaciones tienen + acceso a la red y pueden ejecutar sincronizaciones o procesos aplazados. +

+ + + +

+ Figura 2: Ilustración del modo en que Doze aplica un segundo nivel de + restricciones de actividad del sistema después de que el dispositivo permanece quieto durante un tiempo determinado. +

+ +

+ Ten en cuenta que cuando se activar la pantalla o se enchufa el dispositivo se desactiva el modo Doze y + se retiran estas restricciones de procesamiento. El comportamiento adicional no + tiene efecto sobre las recomendaciones ni las prácticas recomendadas para adaptar tu aplicación a la versión + anterior de Doze, presentada en Android 6.0 (nivel de API 23), según lo descrito en + + Optimización para Doze y App Standby. De todos modos, debes + seguir las recomendaciones; por ejemplo, la de usar Google Cloud Messaging (GCM) para + enviar y recibir mensajes, y la de planificar actualizaciones para considerar + el comportamiento adicional de Doze. +

+ + +

Project Svelte: Optimizaciones en segundo plano

+ +

+ En Android N se eliminan tres difusiones implícitas para optimizar el uso de la + memoria y el consumo de energía. Este cambio es necesario porque las difusiones + implícitas a menudo inician aplicaciones que se registran para realizar un seguimiento de ellas en + segundo plano. La eliminación de estas difusiones puede mejorar sustancialmente el rendimiento + del dispositivo y la experiencia del usuario. +

+ +

+ Los dispositivos móviles están sujetos a cambios de conectividad frecuentes + entre los modos de datos Wi-Fi y móviles. Actualmente, las aplicaciones pueden realizar controles en busca de cambios en la + conectividad registrando un receptor para la difusión implícita {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} en su + manifiesto. Debido a que muchas aplicaciones se registran para recibir esta difusión, un cambio de + red puede hacer que todas se activen y procesen la difusión a la + vez. +

+ +

+ Asimismo, las aplicaciones pueden registrarse para recibir las difusiones implícitas {@link + android.hardware.Camera#ACTION_NEW_PICTURE} y {@link + android.hardware.Camera#ACTION_NEW_VIDEO} de otras aplicaciones, como la + cámara. Cuando un usuario toma una foto con la aplicación de la cámara, estas aplicaciones se activan + para procesar la difusión. +

+ +

+ Para corregir estos problemas, en Android N se aplican las siguientes + optimizaciones: +

+ + + +

+ En versiones futuras de Android, es posible que dejen de usarse más difusiones implícitas y + servicios en segundo plano no asociados. Por esta razón, debes evitar dependencias en receptores declarados en manifiestos para difusiones implícitas o + eliminarlas de ellos, + y aplicar lo mismo a los servicios en segundo plano. +

+ +

+ El framework de Android proporciona varias soluciones para reducir la necesidad de + difusiones implícitas o servicios en segundo plano. Por ejemplo, la API de {@link + android.app.job.JobScheduler} proporciona un mecanismo sólido para programar + operaciones de red cuando se cumplen condiciones especificadas, como la conexión a una red + de uso no medido. Puedes incluso usar {@link + android.app.job.JobScheduler} para responder a cambios de los proveedores de contenido. +

+ +

+ Para obtener más información sobre este cambio en el comportamiento y la manera de adaptar tu aplicación, + consulta Optimizaciones + en segundo plano. +

+ + +

Cambios en los permisos

+ +

+ En Android N se incorporan cambios en permisos que pueden tener efecto en tu aplicación. + Se incluyen cambios en permisos de cuentas de usuarios y un nuevo permiso para operaciones de escritura en + dispositivos de almacenamiento externo. A continuación, se ofrece un resumen de los permisos que se modificaron en + la muestra: +

+ + + + + +

Mejoras de accesibilidad

+ +

+ En Android N se incluyen cambios destinados a mejorar la utilidad de la + plataforma para usuarios con defectos o discapacidades visuales. Estos cambios + generalmente no exigirán modificaciones en el código de tu aplicación. Sin embargo, debes revisar + estas funciones y probarlas con tu aplicación para avaluar el posible impacto en la experiencia + del usuario. +

+ + +

Zoom de la pantalla

+ +

+ Android N permite a los usuarios configurar Display size, el ajuste que expande + o contrae todos los elementos de la pantalla lo cual mejora la accesibilidad al dispositivo + para usuarios con poca visión. Estos no podrán superar el valor de zoom mínimo de zoom de + + sw320dp para el ancho de pantalla, que es el ancho de un Nexus 4, un teléfono común de tamaño intermedio. +

+ +
+ +
+ +
+
+ +
+ +
+

+ Figura 3: En la pantalla de la derecha se muestra el efecto que tiene + aumentar Display size para un dispositivo con una imagen de sistema de Android N. +

+ + +

+ Al cambiar la densidad del dispositivo, el sistema notifica a las aplicaciones de las + siguientes maneras: +

+ + + +

+ En la mayoría de las aplicaciones no se necesitan cambios para admitir esta función, ya que + en ellas rigen prácticas recomendadas de Android. Verificaciones específicas que deben realizarse: +

+ + + +

Vision Settings en el asistente de configuración

+ +

+ Vision Settings se incluye en la pantalla de Bienvenida de Android N, en la cual los usuarios pueden + pueden configurar los siguientes ajustes de accesibilidad para un nuevo dispositivo: + Magnification gesture, Font size, + Display size y TalkBack. Este cambio + aumenta la visibilidad de errores relacionados con diferentes ajustes de pantalla. Para + evaluar el impacto de esta función, debes probar tus aplicaciones con estos + ajustes habilitados. Puedes encontrarlos en Settings > + Accessibility. +

+ +

Aplicaciones de NDK con vínculos a bibliotecas de plataformas

+ +

+ En Android N, se incluyen cambios en el espacio de nombres a fin de evitar la carga de API no públicas. + Si usas el NDK, solo debes emplear API públicas de la plataforma de + Android. El uso de API no públicas en la próxima versión oficial de Android + puede hacer que tu aplicación se bloquee. +

+ +

+ Con el propósito de alertarte sobre el uso de API no públicas, las aplicaciones que funcionen en un dispositivo con + Android N producirán un error de salida de logcat cuando una de ellas llame a una API no pública. + Este error también aparecerá en la pantalla del dispositivo con forma de mensaje para + generar conciencia respecto de la situación. Debes revisar el código de tu aplicación para + eliminar el uso de API de plataforma no públicas y probar por completo tus aplicaciones con + un dispositivo de prueba o emulador. +

+ +

+ Si tu aplicación depende de bibliotecas de plataformas, consulta la documentación sobre NDK para hallar + soluciones típicas para el reemplazo de API privadas comunes por API equivalentes. + También es posible que establezcas vínculos con bibliotecas de plataformas sin notarlo, + en especial si tu aplicación usa una biblioteca que forma parte de la plataforma (como + libpng), pero no del NDK. En ese caso, asegúrate de que + tu APK contenga todos los archivos .so con los cuales intentaste establecer vínculos. +

+ +

+ Precaución: Algunas bibliotecas de terceros pueden establecer vínculos con API + no públicas. Si tu aplicación usa estas bibliotecas, es probable que se bloquee al ejecutarse + en la próxima versión oficial de Android. +

+ +

+ Las aplicaciones no deben depender de bibliotecas nativas no incluidas en el NDK + ni usarlas, ya que pueden modificarse o eliminarse en la transición de una versión de Android a + otra. El cambio de OpenSSL a BoringSSL es un ejemplo de modificaciones como esta. + A su vez, los diferentes dispositivos pueden ofrecer distintos niveles de compatibilidad debido a que + no existen requisitos de compatibilidad para bibliotecas de plataformas no incluidas + en el NDK. Si debes acceder a bibliotecas no relacionadas en dispositivos anteriores, haz que la + carga dependa del nivel de la Android API. +

+ +

+ Para ayudarte a diagnosticar estos tipos de problemas, a continuación se ofrecen ejemplos de errores de Java y + NDK que podrías hallar al intentar crear tu aplicación con Android N: +

+ +

Ejemplo de error de Java:

+
+java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
+    is not accessible for the namespace "classloader-namespace"
+
+ +

Ejemplo de error de NDK:

+
+dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
+
+ + +

+ Aquí se ofrecen soluciones típicas para aplicaciones en las que se produzcan estos tipos de errores: +

+ + + +

Android for Work

+

+ Android N contiene cambios para aplicaciones orientadas a Android for Work, entre los que se incluyen + modificaciones en la instalación de certificados, el restablecimiento de contraseñas, la gestión de usuarios + secundarios y el acceso a identificadores de dispositivos. Si planeas crear aplicaciones para entornos de + Android for Work, debes repasar estos cambios y modificar + tu aplicación de manera correspondiente. +

+ + + +

+ Para obtener más información sobre los cambios de Android for Work en Android N, consulta + Actualizaciones de Android for Work. +

+ +

Otros aspectos importantes

+ + + diff --git a/docs/html-intl/intl/es/preview/download.jd b/docs/html-intl/intl/es/preview/download.jd new file mode 100644 index 000000000000..b3135d1cefec --- /dev/null +++ b/docs/html-intl/intl/es/preview/download.jd @@ -0,0 +1,541 @@ +page.title=Pruebe en un dispositivo +meta.tags=“Versión preliminar”, “Nexus”,“imagen de sistema” +page.tags="preview", "androidn" +page.image=images/cards/card-n-downloads_2x.png + +@jd:body + +
+ + + + +
+ + + +

+ Para ejecutar y probar tu aplicación en la plataforma nueva necesitas configurar el tiempo de ejecución de Android N + . Puedes realizar eso de las siguientes maneras: +

+ +
    +
  • Instalar Android N en un dispositivo de hardware compatible o
  • +
  • Configurar un emulador de Android a través de la ejecución de Android N
  • +
+ +

+ Si deseas un entorno para realizarle pruebas básicas de compatibilidad a tu aplicación en la plataforma nueva + , todo lo que necesitas es tu actual APK y un dispositivo de hardware o + emulador. No necesitas actualizar todo tu entorno de desarrollo + para realizar pruebas básicas. +

+ +

+ Si deseas modificar tu aplicación para seleccionar como destino Android N o usar las API nuevas de Android N, + debes configurar un entorno de desarrollo que esté actualizado para que admita + Android N. En Configuración para el desarrollo de + Android N se ofrece información detallada. +

+ + +

Configurar un dispositivo de hardware

+ +

+ En la N Developer Preview se ofrecen actualizaciones del sistema para una variedad de dispositivos de hardware +que puedes usar para realizarle pruebas a tu aplicación, desde teléfonos hasta tablets y TV. +

+ +

+ Si tienes acceso a un dispositivo compatible, puedes actualizarlo a una versión "milestone" de la Developer Preview + de las siguientes maneras: +

+ +
    +
  • Registrar el dispositivo en actualizaciones automáticas del sistema vía OTA a través del + Programa de Android beta. Una vez registrado, tu dispositivo recibirá actualizaciones inalámbricas regulares (OTA) + de todas las compilaciones de hitos en la N Developer Preview. Se recomienda este + enfoque porque te permite realizar una transición sin inconvenientes desde tu entorno actual + a través de varios lanzamientos de la N Developer Preview.
  • +
  • Descargar una imagen de sistema de la Developer Preview y actualizar el dispositivo. + Las actualizaciones OTA no se proporcionan de manera automática para los dispositivos que actualizas de manera manual, pero + puedes registrar esos dispositivos en el Programa de Android beta para obtener actualizaciones OTA.
  • +
+ +

Registrar el dispositivo en actualizaciones automáticas OTA

+ +

+ Si tienes acceso a un dispositivo compatible (consulta la lista en la tabla de descargas + ), puedes recibir actualizaciones inalámbricas para mostrar versiones de Android + registrando el dispositivo en el Programa de Android beta. Estas actualizaciones + se descargan de manera automática y actualizarán tu dispositivo como otras + actualizaciones oficiales del sistema. +

+ +

+ Puedes dar de baja el registro de un dispositivo en cualquier momento. El dispositivo recibirá una actualización OTA + para la versión de producción más reciente de Android que se encuentre disponible para ese dispositivo + (por ejemplo, Android 6.0 Marshmallow). La actualización requiere un restablecimiento completo del dispositivo + , entonces se quitarán los datos del usuario en el dispositivo. Asegúrate de realizar una + copia de seguridad de los datos importantes antes de dar de baja un dispositivo. +

+ +

+ Para obtener más información y para registrar tu dispositivo, consulta + el sitio web del Programa de Android beta . +

+ +

Nota: + Dar de baja el registro requiere un restablecimiento completo del dispositivo. Realice una copia de seguridad de los + datos importantes primero. +

+ +

Actualizar un dispositivo manualmente

+ +

+ En cualquier momento, puedes descargar las últimas imágenes de sistema de la Developer Preview y + puedes actualizarlas manualmente en tu dispositivo. Consulta la siguiente tabla para descargar la imagen de + sistema para tu dispositivo de prueba. La actualización manual de un dispositivo es útil si necesitas + un control preciso del entorno de prueba o necesitas reinstalar con frecuencia, + como en pruebas automatizadas. +

+ +

+ El proceso de instalación de una imagen de sistema en un dispositivo elimina todos los datos del + dispositivo, por lo tanto, deberás hacer una copia de seguridad de los datos en primer lugar. +

+ +

+ Después de que realices una copia de seguridad y que descargues la siguiente imagen de sistema que + se adecua a tu dispositivo, sigue las instrucciones que se describen en developers.google.com/android + para actualizar la imagen en tu dispositivo. +

+ +

+ Las imágenes de sistema actualizadas de manera manual no + reciben actualizaciones OTA de manera automática para posteriores "milestone" + de la Developer Preview. Asegúrate de mantener tu entorno actualizado y actualiza una + nueva imagen de sistema en cada "milestone" de la Developer Preview. +

+ +

+ Si decides que quieres obtener actualizaciones OTA después de actualizar de manera manual un dispositivo, + lo único que debes hacer es registrar el dispositivo en el Programa + de Android beta. Puedes registrar el dispositivo en cualquier momento para recibir la siguiente actualización de la Preview + vía inalámbrica. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DispositivoDescarga/sumas de comprobación
Nexus 5X
“bullhead”
bullhead-npc56p-preview-6c877a3d.tgz
+ MD5: b5cf874021023b398f5b983b24913f5d
+ SHA-1: 6c877a3d9fae7ec8a1678448e325b77b7a7b143a +
Nexus 6
“shamu”
shamu-npc56p-preview-54b13c67.tgz
+ MD5: af183638cf34e0eb944a1957d7696f60
+ SHA-1: 54b13c6703d369cc79a8fd8728fe4103c6343973 +
Nexus 6P
“angler”
angler-npc56p-preview-85ffc1b1.tgz
+ MD5: bc4934ea7bd325753eee1606d3725a24
+ SHA-1: 85ffc1b1be402b1b96f9ba10929e86bba6c6c588 +
Nexus 9
“volantis”
volantis-npc56p-preview-0e8ec8ef.tgz
+ MD5: c901334c6158351e945f188167ae56f4
+ SHA-1: 0e8ec8ef98c7a8d4f58d15f90afc5176303efca4 +
Nexus 9G
“volantisg”
volantisg-npc56p-preview-1bafdbfb.tgz
+ MD5: 7bb95bebc478d7257cccb4652899d1b4
+ SHA-1: 1bafdbfb502e979a9fe4c257a379c4c7af8a3ae6 +
Nexus Player
“fugu”
fugu-npc56r-preview-7027d5b6.tgz
+ MD5: f5d3d8f75836ccfe4c70e8162e498be4
+ SHA-1: 7027d5b662bceda4c80a91a0a14ef0e5a7ba795b +
Pixel C
“ryu”
ryu-npc56p-preview-335a86a4.tgz
+ MD5: 4e21fb183bbbf467bee91598d587fd2e
+ SHA-1: 335a86a435ee51f18464de343ad2e071c38f0e92 +
4G móviles en general (Android One)
“seed”
seed_l8150-npc56p-preview-82472ebc.tgz
+ MD5: 983e083bc7cd0c4a2d39d6ebaa20202a
+ SHA-1: 82472ebc9a6054a103f53cb400a1351913c95127 +
+ +

Desinstalar la Preview de un dispositivo

+ +

+ Si quieres desinstalar la Preview de un dispositivo, puedes hacerlo de las + siguientes maneras:

+
    +
  • Obtener una imagen de sistema con las especificaciones de fábrica y luego actualízala de manera manual + para el dispositivo. +
      +
    • Para los dispositivos Nexus y Pixel C, consulta la página + Imágenes de fábrica para dispositivos Nexus + para descargas.
    • +
    • Para otros dispositivos, comunícate directamente con el fabricante del dispositivo + . De manera alternativa, si el dispositivo es compatible con + el Programa de Android beta, puedes registrar el dispositivo en el + programa y luego darlo de baja (consulta a continuación).
    • +
    +
  • +
  • Dar de baja el dispositivo del Programa de Android beta. Si el + dispositivo se registra en el Programa de Android beta + , independientemente del dispositivo, puedes simplemente darlo de baja desde el programa. +

    + El dispositivo recibirá una actualización OTA para la versión de producción más reciente + de Android que se encuentre disponible para ese dispositivo (por ejemplo, Android 6.0 Marshmallow). + La actualización requiere un restablecimiento completo del dispositivo, entonces se quitarán + los datos del usuario en el dispositivo. Asegúrate de realizar una copia de seguridad de los datos importantes antes + de dar de baja un dispositivo. +

    +
  • +
+ +

Nota: + Desinstalar una imagen de sistema de la Developer Preview antes + del final del programa requiere un restablecimiento completo del dispositivo y elimina todos los datos del usuario + en el dispositivo. +

+ + +

Configurar un emulador

+ +

Para usar el emulador de Android para la ejecución de la Android N Preview, necesitas +descargar Android N Preview SDK y crear un dispositivo virtual para el +emulador.

+ +

Primero, descarga Android N Preview SDK de la siguiente manera (si +ya lo obtuviste durante la configuración +para desarrollar Android N, puedes omitir esta parte): + +

    +
  1. En Android Studio, abre el diálogo de configuración + (File > Settings en Windows y Linux, o + Android Studio > Preferences en Mac). En el panel + izquierdo, selecciona Appearance & Behavior > + System Settings > Android SDK. + +
  2. Haz clic en la pestaña SDK platforms y luego selecciona la casilla de verificación + Android N Preview.
  3. + +
  4. Haz clic en la pestaña SDK Tools y luego selecciona las casillas de verificación + Android SDK Build Tools, Android SDK + Platform-Tools y + Android SDK Tools. +
  5. + +
  6. Haz clic en OK y acepta los contratos + de licencia para instalar cualquier paquete. +
  7. +
+ +

Ahora debes tener Android SDK Built-Tools 24.0 0 rc1, +Platform-Tools 24.0.0 rc1, y SDK Tools +25.0.9. Si no actualizas las SDK Tools a 25.0.9, luego no podrás +ejecutar las imágenes de sistema x86_64 para Android N.

+ + +

Ahora crea un dispositivo virtual con la imagen de sistema de Android N:

+ +
    +
  1. Abre el Administrador de AVD seleccionando Tools > Android > + AVD Manager.
  2. +
  3. Haz clic en Create Virtual Device.
  4. +
  5. Selecciona un dispositivo como Nexus 5X, Nexus 6P, Nexus 9, o Android TV, + luego haz clic en Next.
  6. +
  7. Selecciona la imagen de sistema N (con la ABI + x86 ), luego haz clic en Next. + (Solo las imágenes de sistema x86 son actualmente compatibles con el emulador de Android +para la Android N Preview). +
  8. Completa el resto de la configuración AVD y haz clic en + Finish.
  9. +
+ +

Ahora puedes lanzar el emulador de Android con el AVD de la Android N Preview.

+ +

+A fin de garantizar la mejor experiencia en el emulador de Android, instala la +Android Studio 2.1 Preview, que admite el emulador Android 2.0 Beta +con mayor rendimiento en comparación con el emulador en +Android Studio 1.5.

+ +

Nota: + Si actualmente estás usando Android Studio 2.0 Beta, existe un problema conocido + que no te permite crear AVD con las imágenes de sistema de la N Preview; + por el momento necesitas usar la muestra de Android Studio 2.1 para crear AVD. +

+ +

Para obtener más información sobre la creación de dispositivos virtuales, consulte la Administración de dispositivos virtuales. +

+ + + + + + + + + + + + + + +
+ +
+ + + + diff --git a/docs/html-intl/intl/es/preview/features/background-optimization.jd b/docs/html-intl/intl/es/preview/features/background-optimization.jd new file mode 100644 index 000000000000..3f5cf2217b8e --- /dev/null +++ b/docs/html-intl/intl/es/preview/features/background-optimization.jd @@ -0,0 +1,388 @@ +page.title=Optimizaciones en segundo plano +page.metaDescription=Nuevas restricciones para difusiones implícitas. +page.keywords="android N", "implicit broadcasts", "job scheduler" +@jd:body + +
+ +
+ +

+ Los procesos en segundo plano pueden consumir mucha memoria y batería. Por ejemplo, una + difusión implícita puede iniciar muchos procesos en segundo plano registrados para + escucharla, aunque esos procesos quizá no desempeñen un trabajo considerable. Esto puede + afectar de forma significativa tanto el rendimiento del dispositivo como la experiencia de usuario. +

+ +

+ Para atenuar este problema, la N Developer Preview aplica las siguientes + restricciones: +

+ + + +

+ El framework de Android ofrece varias soluciones para mitigar la necesidad de + estas difusiones implícitas. Por ejemplo, {@link android.app.job.JobScheduler} + y + {@code GcmNetworkManager} proporcionan mecanismos sólidos para programar operaciones + de red cuando se cumplen las condiciones especificadas, como una conexión a una + red de uso no medido. Ahora también puedes usar {@link android.app.job.JobScheduler} + para reaccionar a cambios en relación con los proveedores de contenido. Los objetos {@link android.app.job.JobInfo} + encapsulan los parámetros que usa {@link android.app.job.JobScheduler} + para programar el trabajo. Cuando se cumplen las condiciones del trabajo, el sistema + ejecuta ese trabajo en el {@link android.app.job.JobService} de tu aplicación. +

+ +

+ En este documento, aprenderemos cómo usar métodos alternativos, como + {@link android.app.job.JobScheduler}, para adaptar tu aplicación a esas nuevas + restricciones. +

+ +

+ Restricciones en CONNECTIVITY_ACTION +

+ +

+ Las aplicaciones orientadas a la N Developer Preview no reciben difusiones {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} si en su + manifiesto registran que las reciben, y los procesos dependen de que + no se inicie esa difusión. Esto podría ser un problema para aplicaciones que buscan + escuchar los cambios en la red o realizar múltiples actividades en red cuando el + dispositivo se conecta a una red sin medición de uso. Ya existen varias soluciones + en relación con esta restricción en el framework de Android, pero elegir + la correcta depende de lo que quieras lograr con tu aplicación. +

+ +

+ Nota: Un {@link android.content.BroadcastReceiver} registrado con + {@link android.content.Context#registerReceiver Context.registerReceiver()} + continúa recibiendo esas difusiones mientras la aplicación está en segundo plano. +

+ +

+ Programación de trabajos en red en conexiones sin medición de uso +

+ +

+ Cuando uses la clase {@link android.app.job.JobInfo.Builder JobInfo.Builder} + para crear tu objeto {@link android.app.job.JobInfo}, aplica el método {@link + android.app.job.JobInfo.Builder#setRequiredNetworkType + setRequiredNetworkType()} y pasa {@link android.app.job.JobInfo + JobInfo.NETWORK_TYPE_UNMETERED} como parámetro de trabajo. El siguiente ejemplo de código + programa la ejecución de un servicio cuando el dispositivo se conecta a una red sin + medición de uso y se está cargando: +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+      (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo job = new JobInfo.Builder(
+    MY_BACKGROUND_JOB,
+    new ComponentName(context, MyJobService.class))
+      .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
+      .setRequiresCharging(true)
+      .build();
+  js.schedule(job);
+}
+
+ +

+ Cuando se cumplan las condiciones para tu trabajo, tu aplicación recibirá un callback para ejecutar + el método {@link android.app.job.JobService#onStartJob onStartJob()} en la + {@code JobService.class} especificada. Para ver más ejemplos de la implementación de {@link + android.app.job.JobScheduler}, consulta la aplicación de ejemplo JobScheduler. +

+ +

+ Las aplicaciones que usan servicios de GMSCore y están orientadas a Android 5.0 (API nivel 21) + o anterior, pueden usar + {@code GcmNetworkManager} y especificar {@code Task.NETWORK_STATE_UNMETERED}. +

+ +

+ Control de la conectividad de la red mientras la aplicación se está ejecutando +

+ +

+ Las aplicaciones que se ejecutan en segundo plano aún pueden escuchar {@code + CONNECTIVITY_CHANGE} con un {@link + android.content.BroadcastReceiver} registrado. No obstante, la API {@link + android.net.ConnectivityManager} ofrece un método más robusto para solicitar + un callback solo cuando se cumplen las condiciones de red especificadas. +

+ +

+ Los objetos {@link android.net.NetworkRequest} definen los parámetros del + callback de la red en términos de {@link android.net.NetworkCapabilities}. Creas + objetos {@link android.net.NetworkRequest} con la clase {@link + android.net.NetworkRequest.Builder NetworkRequest.Builder}. {@link + android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, + android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} + y luego pasa el objeto {@link android.net.NetworkRequest} al sistema. Cuando + se cumplen las condiciones de la red, la aplicación recibe un callback para ejecutar el método + {@link android.net.ConnectivityManager.NetworkCallback#onAvailable + onAvailable()} definido en su clase {@link + android.net.ConnectivityManager.NetworkCallback}. +

+ +

+ La aplicación continuará recibiendo callbacks hasta que la aplicación salga o llame a + {@link android.net.ConnectivityManager#unregisterNetworkCallback + unregisterNetworkCallback()}. +

+ +

+ Restricciones en NEW_PICTURE y NEW_VIDEO +

+ +

+ En la N Developer Preview, las aplicaciones no pueden enviar ni recibir difusiones {@link + android.hardware.Camera#ACTION_NEW_PICTURE} ni {@link + android.hardware.Camera#ACTION_NEW_VIDEO}. Esta restricción ayuda a + aliviar el impacto en el rendimiento y la experiencia de usuario cuando varias aplicaciones deben + activarse para procesar una nueva imagen o video. La N Developer Preview + extiende {@link android.app.job.JobInfo} y {@link + android.app.job.JobParameters} para proporcionar una solución alternativa. +

+ +

+ Nuevos métodos de JobInfo +

+ +

+ Para activar trabajos en los cambios del URI de contenido, la N Developer Preview amplía + la API {@link android.app.job.JobInfo} con los siguientes métodos: +

+ +
+
+ {@code JobInfo.TriggerContentUri()} +
+ +
+ Encapsula parámetros necesarios para activar un trabajo en cambios del URI de contenido. +
+ +
+ {@code JobInfo.Builder.addTriggerContentUri()} +
+ +
+ Pasa un objeto {@code TriggerContentUri} a {@link + android.app.job.JobInfo}. Un {@link android.database.ContentObserver} + controla el URI de contenido encapsulado. Si hay múltiples objetos {@code + TriggerContentUri} asociados a un trabajo, el sistema proporciona un + callback aunque se informe un cambio en un solo URI de contenido. +
+ +
+ Si cambia algún desencadenante del URI determinado, agrega el marcador {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} para + activar el trabajo. Este marcador + corresponde al parámetro {@code notifyForDescendants} pasado a {@link + android.content.ContentResolver#registerContentObserver + registerContentObserver()}. +
+
+ +

+ Nota: no se puede usar {@code TriggerContentUri()} junto + con {@link android.app.job.JobInfo.Builder#setPeriodic + setPeriodic()} ni {@link android.app.job.JobInfo.Builder#setPersisted + setPersisted()}. Para controlar de forma constante la presencia de cambios, programa un nuevo + {@link android.app.job.JobInfo} antes de que el {@link + android.app.job.JobService} de la aplicación termine de administrar la callback más reciente. +

+ +

+ El siguiente código de ejemplo programa la activación de un trabajo cuando el sistema informe + un cambio en el URI de contenido, {@code MEDIA_URI}: +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+          (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo.Builder builder = new JobInfo.Builder(
+          MY_BACKGROUND_JOB,
+          new ComponentName(context, MediaContentJob.class));
+  builder.addTriggerContentUri(
+          new JobInfo.TriggerContentUri(MEDIA_URI,
+          JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
+  js.schedule(builder.build());
+}
+
+

+ Cuando el sistema informa un cambio en el(los) URI de contenido especificado(s), tu aplicación + recibe un callback y se pasa un objeto {@link android.app.job.JobParameters} + al método {@link android.app.job.JobService#onStartJob onStartJob()} + en {@code MediaContentJob.class}. +

+ +

+ Nuevos métodos de JobParameter +

+ +

+ La N Developer Preview también amplía {@link android.app.job.JobParameters} para + permitir que tu aplicación reciba información útil sobre qué autoridades de contenido + y URI activaron el trabajo: +

+ +
+
+ {@code Uri[] getTriggeredContentUris()} +
+ +
+ Devuelve el arreglo de los URI que activaron el trabajo. Ese arreglo será {@code + null} si ningún URI activó el trabajo (por ejemplo, el trabajo + se activó debido al cumplimiento de un plazo o por otro motivo), o la cantidad de URI + modificados es superior a 50. +
+ +
+ {@code String[] getTriggeredContentAuthorities()} +
+ +
+ Devuelve el arreglo de cadenas de autoridades de contenido que activaron el trabajo. + Si el arreglo devuelto no es {@code null}, usa {@code getTriggeredContentUris()} + para recuperar los detalles de los URI que se modificaron. +
+
+ +

+ El siguiente código de ejemplo anula el método {@link + android.app.job.JobService#onStartJob JobService.onStartJob()} y + registra las autoridades de contenido y los URI que activaron el trabajo: +

+ +
+@Override
+public boolean onStartJob(JobParameters params) {
+  StringBuilder sb = new StringBuilder();
+  sb.append("Media content has changed:\n");
+  if (params.getTriggeredContentAuthorities() != null) {
+      sb.append("Authorities: ");
+      boolean first = true;
+      for (String auth :
+          params.getTriggeredContentAuthorities()) {
+          if (first) {
+              first = false;
+          } else {
+             sb.append(", ");
+          }
+           sb.append(auth);
+      }
+      if (params.getTriggeredContentUris() != null) {
+          for (Uri uri : params.getTriggeredContentUris()) {
+              sb.append("\n");
+              sb.append(uri);
+          }
+      }
+  } else {
+      sb.append("(No content)");
+  }
+  Log.i(TAG, sb.toString());
+  return true;
+}
+
+ +

+ Cómo optimizar aún más tu aplicación +

+ +

+ Optimizar tus aplicaciones para que se ejecuten en dispositivos con poca memoria o en condiciones de niveles bajos + de memoria puede mejorar el rendimiento y la experiencia del usuario. Eliminar + dependencias en servicios en segundo plano y receptores de difusiones implícitas + registrados estadísticamente puede ayudar a que tu aplicación se ejecute mejor en esos dispositivos. Si bien + la N Developer Preview toma medidas para reducir algunos de esos problemas, te + recomendamos que optimices tu aplicación para que pueda ejecutarse sin utilizar esos + procesos en segundo plano. +

+ +

+ La N Developer Preview presenta algunos comandos adicionales de Puente de Depuración Android (en inglés, Android Debug Bridge, ADB) que + puedes usar para probar el comportamiento de la aplicación con esos procesos en segundo plano deshabilitados: +

+ + \ No newline at end of file diff --git a/docs/html-intl/intl/es/preview/features/direct-boot.jd b/docs/html-intl/intl/es/preview/features/direct-boot.jd new file mode 100644 index 000000000000..1992e481d14f --- /dev/null +++ b/docs/html-intl/intl/es/preview/features/direct-boot.jd @@ -0,0 +1,180 @@ +page.title=Arranque directo +page.keywords=preview,sdk,direct boot +page.tags=androidn + +@jd:body + +
+ +
+ +

Android N se ejecuta en un modo de arranque directo seguro +cuando el dispositivo se enciende pero el usuario no lo ha +desbloqueado. Para permitir esto, el sistema brinda dos ubicaciones de almacenamiento para los datos:

+ + + +

De forma predeterminada, las aplicaciones no se ejecutan durante el modo de arranque directo. +Si necesita que su aplicación se ejecute durante el modo de arranque directo, puede registrar +los componentes de la aplicación que deberían ejecutarse durante este modo. Algunos casos comunes de +aplicaciones que necesitan ejecutarse durante el modo de arranque directo incluyen los siguientes:

+ + + +

Si necesita que su aplicación acceda a datos mientras se ejecuta el modo de arranque directo, use +el almacenamiento cifrado por dispositivo. Este tipo de almacenamiento contiene datos +cifrados con una clave que solo está disponible luego de que el dispositivo haya realizado un inicio +verificado correctamente.

+ +

Para los datos que se deben cifrar con una clave asociada con credenciales del +usuario, como un PIN o una contraseña, use el almacenamiento cifrado por credencial. +Este tipo de almacenamiento solo está disponible luego de que el usuario haya desbloqueado +correctamente el dispositivo y hasta que el usuario reinicie nuevamente el dispositivo. Si el +usuario habilita el bloqueo de pantalla luego de desbloquear el dispositivo, esto no bloquea +el almacenamiento cifrado por credencial.

+ +

Solicitar acceso para ejecutar durante el arranque directo

+ +

Debes registrar los componentes de las aplicaciones con el sistema antes de que estas puedan +ejecutarse durante el modo de arranque directo o acceder al almacenamiento cifrado por +dispositivo. Para registrar una aplicación en el sistema, debes marcar los componentes como +reconocimiento de cifrado. Para marcar su dispositivo como "con reconocimiento de cifrado" , configure el atributo +android:encryptionAware como verdadero en el manifiesto.

+ +

Los componentes con reconocimiento de cifrado pueden registrarse para recibir un mensaje de difusión +LOCKED_BOOT_COMPLETED del +sistema cuando el dispositivo se haya reiniciado. En este momento, el almacenamiento +cifrado por dispositivo está disponible, y el componente puede ejecutar tareas que se deben +ejecutar durante el modo de arranque directo, como disparar una alarma programada.

+ +

El siguiente fragmento de código es un ejemplo de cómo registrar un +{@link android.content.BroadcastReceiver} como reconocimiento de cifrado y de cómo agregar un +filtro de intenciones para LOCKED_BOOT_COMPLETED en el manifiesto de la aplicación:

+ +
+<receiever
+  android:encryptionAware="true" >
+  ...
+  <intent-filter>
+    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+  </intent-filter>
+</receiver>
+
+ +

Una vez que el usuario haya desbloqueado el dispositivo, todos los componentes podrán acceder tanto al +almacenamiento cifrado por dispositivo como al almacenamiento cifrado por credencial.

+ +

Acceder al almacenamiento cifrado por dispositivo

+ +

Para acceder al almacenamiento cifrado por dispositivo, crea una segunda +instancia de {@link android.content.Context} llamando a +Context.createDeviceEncryptedStorageContext(). Todas las llamadas +de API de almacenamiento que se hacen usando este contexto acceden al almacenamiento cifrado por dispositivo. El siguiente +ejemplo accede al almacenamiento cifrado por dispositivo y abre un archivo de datos de la aplicación +existente:

+ +
+Context directBootContext = Context.createDeviceEncryptedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+
+ +

Solo debes usar el almacenamiento cifrado por dispositivo para +información que debe ser accesible durante el modo de arranque directo. +No uses este tipo de almacenamiento como un almacenamiento cifrado de propósito general. +Para información privada del usuario o datos cifrados que no son necesarios durante +el modo de arranque directo, usa el almacenamiento cifrado por credencial.

+ +

Recibir notificaciones sobre el desbloqueo del usuario

+ +

Una vez que el usuario desbloquea el dispositivo después de reiniciarlo, la aplicación puede cambiar y acceder +al almacenamiento cifrado por credencial y usar servicios del sistema comunes que +dependen de credenciales de usuario.

+ +

Para recibir una notificación cuando el usuario desbloquea el dispositivo luego de reiniciarlo, +registra un {@link android.content.BroadcastReceiver} de un componente en ejecución +para que escuche el mensaje ACTION_USER_UNLOCKED. O puedes +recibir el mensaje existente {@link android.content.Intent#ACTION_BOOT_COMPLETED +ACTION_BOOT_COMPLETED}, que ahora indica que el dispositivo se ha iniciado y +que el usuario ha desbloqueado el dispositivo.

+ +

Puedes consultar directamente si el usuario ha desbloqueado el dispositivo llamando a +UserManager.isUserUnlocked().

+ +

Migrar datos existentes

+ +

Si un usuario actualiza el dispositivo para usar el modo de arranque directo, es posible que haya +datos existentes que se deben migrar al almacenamiento cifrado por dispositivo. Usa +Context.migrateSharedPreferencesFrom() y +Context.migrateDatabaseFrom() para migrar los datos de preferencia y de base de datos +del almacenamiento cifrado por credencial al almacenamiento cifrado por dispositivo.

+ +

Debes tener cuidado cuando decidas qué datos migrar entre +estos dos tipos de almacenamiento. No deberías migrar +información de usuario privada, como contraseñas o tokens de autorización, al + almacenamiento cifrado por dispositivo. En algunos casos, es posible que debas gestionar +conjuntos separados de datos en ambos tipos de almacenamiento cifrado.

+ +

Probar la aplicación con reconocimiento de cifrado

+ +

Prueba la aplicación con reconocimiento de cifrado usando el nuevo modo de arranque directo. Hay dos +maneras de habilitar el arranque directo.

+ +

Advertencia: habilitar el arranque directo +borrará todos los datos de usuario del dispositivo.

+ +

Para los dispositivos compatibles que tienen Android N instalado, habilita +el arranque directo mediante una de las siguientes opciones:

+ + + +

También está disponible un modo de arranque directo emulado en caso de que debas cambiar +de modo en los dispositivos de prueba. El modo emulado solo debería usarse durante +el desarrollo, y puede provocar la pérdida de datos. Para habilitar el modo de arranque directo emulado, +debes establecer un patrón de bloqueo en el dispositivo, elegir "No thanks" si te pregunta si deseas un +inicio seguro cuando estás estableciendo el patrón de bloqueo y, luego, usar el +siguiente comando shell ADB:

+ +
+$ adb shell sm set-emulate-fbe true
+
+ +

Para deshabilitar el modo de arranque directo emulado, usa el siguiente comando:

+ +
+$ adb shell sm set-emulate-fbe false
+
+ +

Usar estos comandos provoca el reinicio del dispositivo.

diff --git a/docs/html-intl/intl/es/preview/features/icu4j-framework.jd b/docs/html-intl/intl/es/preview/features/icu4j-framework.jd new file mode 100644 index 000000000000..4c5fc7b30ea0 --- /dev/null +++ b/docs/html-intl/intl/es/preview/features/icu4j-framework.jd @@ -0,0 +1,158 @@ +page.title=API de ICU4J del framework de Android + +@jd:body + +
+ +
+ +

+ ICU4J es un conjunto de bibliotecas de Java de código abierto y amplio uso que brinda soporte de Unicode + y de globalización para aplicaciones de software. Android N + expone un subconjunto de las API de ICU4J en el framework de Android para que los desarrolladores de aplicaciones + lo usen debajo del paquete {@code android.icu}. Estas API usan + datos de ubicación que están presentes en el dispositivo. Como resultado, puedes reducir la superficie de APK + evitando la compilación de las bibliotecas de ICU4J en APK. En lugar de esto, puedes + llamarlas en el framework. (En este caso, posiblemente debas brindar + versiones múltiples + del APK, de modo que los usuarios que usan versiones de Android inferiores a Android N + puedan descargar una versión de la aplicación que incluya las bibliotecas de ICU4J). +

+ +

+ Al principio de este documento, encontrarás información básica sobre el mínimo de niveles de Android API + necesarios para soportar estas bibliotecas. Más adelante, encontrarás explicaciones sobre qué + necesitas saber acerca de la implementación de ICU4J específica para Android. Por último, + encontrarás explicaciones sobre cómo usar las API de ICU4J en el framework de Android. +

+ +

Relación con ICU4J

+ +

+ Android N expone un subconjunto de las API de ICU4J mediante el + paquete android.icu, en lugar de com.ibm.icu. El +framework de Android puede elegir no + exponer las API de ICU4J por varias razones; por ejemplo, Android N no expone + algunas API obsoletas o algunas que el equipo de ICU aún no ha declarado como + estables. A medida que el equipo de ICU deje de usar API en el futuro, Android también las marcará + como obsoletas, pero las seguirá incluyendo. +

+ +

Tabla 1. Versiones de ICU y CLDR usadas + en Android N.

+ + + + + + + + + + + +
Nivel de Android APIVersión de ICUVersión de CLDR
Android N5628
+ +

Debes tener en cuenta lo siguiente:

+ + + +

Migración hacia el paquete android.icu desde com.ibm.icu

+ +

+ Si ya estás usando las API de ICU4J en tu aplicación y las + API de android.icu cumplen con tus requisitos, migrar hacia las + API del framework implicará que cambies tus importaciones de Java + de com.ibm.icu a android.icu. Luego, puedes + quitar tu propia copia de los archivos de ICU4J del APK. +

+ +

+ Nota: Las API del framework de ICU4J usan el espacio de nombres {@code android.icu} + en lugar de {@code com.ibm.icu}. El motivo de esto es evitar conflictos de espacio de nombres + en APK que contienen sus propias bibliotecas de {@code com.ibm.icu}. +

+ +

+ Migración hacia API de android.icu desde otras Android SDK API +

+ +

+ Algunas clases de los paquetes de java y de android son + equivalentes a las clases de ICU4J. Sin embargo, ICU4J a menudo brinda una compatibilidad + más amplia para estándares e idiomas. +

+

Aquí tienes algunos ejemplos para comenzar:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClaseAlternativa
java.lang.Character android.icu.lang.UCharacter
java.text.BreakIterator android.icu.text.BreakIterator
java.text.DecimalFormat android.icu.text.DecimalFormat
java.util.Calendar +android.icu.util.Calendar
android.text.BidiFormatter + android.icu.text.Bidi +
android.text.format.DateFormat + android.icu.text.DateFormat +
android.text.format.DateUtils android.icu.text.DateFormat +android.icu.text.RelativeDateTimeFormatter +
+ +

Licencias

+ +

+ ICU4J se presenta bajo la licencia de ICU. Para obtener información más detallada, consulta la Guía de usuario + de ICU. +

diff --git a/docs/html-intl/intl/es/preview/features/multi-window.jd b/docs/html-intl/intl/es/preview/features/multi-window.jd new file mode 100644 index 000000000000..4415ba97760d --- /dev/null +++ b/docs/html-intl/intl/es/preview/features/multi-window.jd @@ -0,0 +1,582 @@ +page.title=Compatibilidad con ventanas múltiples +page.metaDescription=Nueva compatibilidad en Android N para mostrar más de una aplicación a la vez. +page.keywords="multi-window", "android N", "split screen", "free-form" + +@jd:body + +
+ +
+ +

+ Android N agrega compatibilidad con la visualización de más de una aplicación + a la vez. En dispositivos portátiles, se pueden ejecutar dos aplicaciones una al lado de la otra o + una por encima de la otra en modo de pantalla dividida. En dispositivos de TV, las aplicaciones pueden + usar el modo imagen en imagen para continuar la reproducción de video mientras los usuarios + interactúan con otra aplicación. +

+ +

+ Si compilas tu aplicación con el N Preview SDK, puedes configurar la manera en que tu aplicación + administra la visualización de ventanas múltiples. Por ejemplo, puedes especificar las dimensiones + mínimas permitidas de tu actividad. También puedes inhabilitar la visualización de ventanas múltiples para + tu aplicación asegurándote de que el sistema solo muestre tu aplicación en modo de + pantalla completa. +

+ +

Información general

+ +

+ Android N permite que varias aplicaciones compartan la pantalla al mismo tiempo. Por + ejemplo, un usuario podría dividir la pantalla y ver una página web a la izquierda + mientras escribe un correo electrónico a la derecha. La experiencia de usuario depende + del dispositivo: +

+ + + + +

+ Figura 1: Dos aplicaciones ejecutándose una al lado de la otra en modo de pantalla dividida. +

+ +

+ El usuario puede cambiar a modo de ventanas múltiples de la siguiente manera: +

+ + + +

+ Los usuarios pueden arrastrar y + soltar datos de una actividad a otra mientras las actividades comparten + la pantalla. (Antes, los usuarios solo podían arrastrar y soltar datos dentro de una sola + actividad). +

+ +

Ciclo de vida en modo de ventanas múltiples

+ +

+ El modo de ventanas múltiples no cambia el ciclo de vida + de la actividad. +

+ +

+ En modo de ventanas múltiples, solo la actividad con la que el usuario interactuó más recientemente + está activa en un momento determinado. Esa actividad se considera la principal. + Todas las demás actividades están pausadas, aunque estén visibles. + No obstante, el sistema les da a esas actividades pausadas pero visibles una prioridad más alta + que las actividades que no están visibles. Si el usuario interactúa con una de las + actividades pausadas, se reanuda esa actividad y se pausa la actividad que antes + era la principal. +

+ +

+ Nota: En modo de ventanas múltiples, una aplicación puede estar pausada + y aún visible para el usuario. Es posible que una aplicación necesite continuar sus + actividades mientras está pausada. Por ejemplo, una aplicación de reproducción de video que está + pausada pero visible debería continuar mostrando el video. Por ese + motivo, recomendamos que las actividades que reproducen video no pausen el + video en sus controladores{@link android.app.Activity#onPause onPause()}. + En su lugar, deben pausar el video en {@link android.app.Activity#onStop + onStop()} y reanudar la reproducción en {@link android.app.Activity#onStart + onStart()}. +

+ +

+ Cuando el usuario coloca una aplicación en modo de ventanas múltiples, el sistema le notifica a la + actividad acerca de un cambio de configuración, tal como se especifica en Control de cambios en + tiempo de ejecución. Básicamente, este cambio tiene las mismas consecuencias en el ciclo de vida + de la actividad que cuando el sistema notifica a la aplicación que el dispositivo cambió de + modo vertical a modo horizontal, excepto porque se modifican las dimensiones del dispositivo + en lugar de intercambiarse solamente. Como se aborda en Control de cambios en + tiempo de ejecución, tu actividad puede administrar el cambio de configuración por sí misma, o + puede permitir que el sistema destruya la actividad y la vuelva a crear con las nuevas + dimensiones. +

+ +

+ Si el usuario cambia el tamaño de una ventana y la agranda en cualquier dirección, el + sistema modifica el tamaño de la actividad para que coincida con la acción del usuario y emite cambios en tiempo de ejecución + según sean necesarios. Si la aplicación se retrasa en el trazado de áreas recientemente expuestas, el + sistema rellena esas áreas con el color especificado por el atributo {@link + android.R.attr#windowBackground windowBackground} o por el atributo de estilo predeterminado + windowBackgroundFallback. +

+ +

Configuración de tu aplicación para el modo de ventanas múltiples

+ +

+ Si tu aplicación está orientada a Android N, puedes configurar cómo y + si quieres que las actividades de tu aplicación admitan la visualización de ventanas múltiples. Puedes establecer + atributos en tu manifiesto para controlar el tamaño y el diseño. + La configuración de atributos de una actividad raíz aplica a todas las actividades + de su pila de tareas. +

+ +

+ Nota: Si compilas una aplicación con múltiples orientaciones con una versión del + SDK anterior a Android N, y el usuario usa la aplicación en + modo de ventanas múltiples, el sistema cambia el tamaño de la aplicación de forma forzada. El sistema presenta un + cuadro de diálogo en el que se advierte al usuario que la aplicación puede comportarse de forma inesperada. El sistema + no modifica el tamaño de aplicaciones con orientación fija; si + el usuario intenta abrir una aplicación con orientación fija en modo de ventanas múltiples, + la aplicación ocupará toda la pantalla. +

+ +

android:resizeableActivity

+

+ Establece este atributo en el nodo <activity> o + <application> de tu manifiesto para habilitar o deshabilitar la visualización + en modo de ventanas múltiples: +

+ +
+android:resizeableActivity=["true" | "false"]
+
+ +

+ Si este atributo se establece en true, la actividad puede iniciarse en + los modos de pantalla dividida y forma libre. Si el atributo se establece en false, la + actividad no admite el modo de ventanas múltiples. Si el valor es false, y el + usuario intenta iniciar la actividad en modo de ventanas múltiples, la actividad ocupará + toda la pantalla. +

+ +

+ Si tu aplicación está orientada a Android N, pero no especificas un valor + para este atributo, el valor predeterminado del atributo será true. +

+ +

android:supportsPictureInPicture

+ +

+ Establece este atributo en el nodo <activity> de tu manifiesto + para indicar si la actividad admite la visualización de imagen en imagen. Este + atributo se ignora si android:resizeableActivity es false. +

+ +
+android:supportsPictureInPicture=["true" | "false"]
+
+ +

Atributos de diseño

+ +

+ Con Android N, el elemento de manifiesto <layout> + admite varios atributos que afectan cómo se comporta una actividad en + modo de ventanas múltiples: +

+ +
+
+ android:defaultWidth +
+ +
+ Ancho predeterminado de la actividad cuando se inicia en modo de forma libre. +
+ +
+ android:defaultHeight +
+ +
+ Altura predeterminada de la actividad cuando se inicia en modo de forma libre. +
+ +
+ android:gravity +
+ +
+ Ubicación inicial de la actividad cuando se inicia en modo de forma libre. Consulta la referencia + {@link android.view.Gravity} para obtener valores adecuados. +
+ +
+ android:minimalSize +
+ +
+ Altura y ancho mínimos para la actividad tanto en el modo de pantalla dividida como en el + modo de forma libre. Si el usuario mueve la línea divisoria en el modo de pantalla dividida + para reducir el tamaño respecto del tamaño mínimo especificado, el sistema recorta + la actividad para ajustarla a los requisitos del usuario. +
+
+ +

+ Por ejemplo, el siguiente código muestra cómo especificar el tamaño + y la ubicación predeterminados de una actividad, y su tamaño mínimo, cuando la actividad se visualiza en + modo de forma libre: +

+ +
+<activity android:name=".MyActivity">
+    <layout android:defaultHeight="500dp"
+          android:defaultWidth="600dp"
+          android:gravity="top|end"
+          android:minimalSize="450dp" />
+</activity>
+
+ +

Ejecución de tu aplicación en modo de ventanas múltiples

+ +

+ Android N ofrece nuevas funcionalidades para admitir aplicaciones que puedan ejecutarse + en modo de ventanas múltiples. +

+ +

Funciones deshabilitadas en modo de ventanas múltiples

+ +

+ Ciertas funciones están deshabilitadas o se ignoran cuando un dispositivo se encuentra en modo de + ventanas múltiples, ya que no resultan útiles para una actividad que podría estar compartiendo la + pantalla del dispositivo con otras actividades o aplicaciones. Esas funciones incluyen las siguientes: + +

+ +

Notificación y consulta de cambios en modo de ventanas múltiples

+ +

+ Se agregaron los siguientes métodos nuevos a la clase {@link android.app.Activity} + para admitir la visualización de ventanas múltiples. Para obtener información detallada sobre cada método, consulta la + Referencia del N Preview SDK. +

+ +
+
+ Activity.inMultiWindow() +
+ +
+ Realiza una llamada para averiguar si la actividad está en modo de ventanas múltiples. +
+ +
+ Activity.inPictureInPicture() +
+ +
+ Realiza una llamada para averiguar si la actividad está en modo de imagen en imagen. + +

+ Nota: El modo de Picture-in-Picture es un caso especial del + modo de ventanas múltiples. Si myActivity.inPictureInPicture() + devuelve true, myActivity.inMultiWindow() también devuelve + true. +

+
+ +
+ Activity.onMultiWindowChanged() +
+ +
+ El sistema llama a este método siempre que la actividad entra en modo de ventanas + múltiples o sale de él. El sistema le pasa al método un valor de true si la + actividad entra en modo de ventanas múltiples, y false si la actividad + sale del modo de ventanas múltiples. +
+ +
+ Activity.onPictureInPictureChanged() +
+ +
+ El sistema llama a este método siempre que la actividad entre en modo de imagen en imagen + o sale de él. El sistema le pasa al método un valor de true si + la actividad entra en modo de imagen en imagen, y false si la actividad + sale del modo de imagen en imagen. +
+
+ +

+ También hay versiones {@link android.app.Fragment} de cada uno de esos + métodos; por ejemplo, Fragment.inMultiWindow(). +

+ +

Cómo entrar en modo de imagen en imagen

+ +

+ Para que una actividad entre en modo de imagen en imagen, debes llamar al nuevo método + Activity.enterPictureInPicture(). Este método no tiene efecto si + el dispositivo no admite el modo de imagen en imagen. Para obtener más información, + consulta la documentación de Picture-in-Picture. +

+ +

Inicia nuevas actividades en modo de ventanas múltiples

+ +

+ Cuando inicias una nueva actividad, puedes indicarle al sistema que la nueva + actividad se debe mostrar adyacente a la actual, si fuera posible. Para hacer + esto, usa el marcador + Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT. Pasar + este marcador requiere el siguiente comportamiento: +

+ + + +

+ Si un dispositivo está en modo de forma libre e inicias una nueva actividad, puedes + especificar las dimensiones y la ubicación de la pantalla de la nueva actividad al llamar a + ActivityOptions.setLaunchBounds(). Este método no tiene efecto si + el dispositivo no está en modo de ventanas múltiples. +

+ +

+ Nota: Si inicias una actividad en una pila de tareas, esa + actividad reemplaza la actividad en pantalla y hereda todas sus + propiedades de ventanas múltiples. Si quieres iniciar la nueva actividad en una ventana + independiente en modo de ventanas múltiples, debes iniciarla en una nueva pila de tareas. +

+ +

Admisión de la funcionalidad de arrastrar y soltar

+ +

+ Los usuarios pueden arrastrar y + soltar datos de una actividad a otra mientras las dos actividades + comparten la pantalla. (Antes, los usuarios solo podían arrastrar y soltar datos dentro de una + sola actividad). Por este motivo, te recomendamos que agregues la funcionalidad de arrastrar y + soltar a tu aplicación si es que aún no la admite. +

+ +

+ El N Preview SDK amplía el paquete android.view + para admitir la funcionalidad de arrastrar y soltar entre aplicaciones diferentes. Para obtener información detallada sobre las siguientes + clase y métodos, consulta la Referencia + del N Preview SDK. +

+ +
+
+ android.view.DropPermissions +
+ +
+ Objeto token responsable de especificar los permisos otorgados a la aplicación + que recibe datos mediante la funcionalidad de arrastrar y soltar. +
+ +
+ View.startDragAndDrop() +
+ +
+ Nuevo alias para {@link android.view.View#startDrag View.startDrag()}. Para + habilitar la funcionalidad arrastrar y soltar entre diferentes actividades, pasa el nuevo marcador + View.DRAG_FLAG_GLOBAL. Si necesitas otorgar permisos de URI a + la actividad receptora, pasa los nuevos marcadores + View.DRAG_FLAG_GLOBAL_URI_READ o + View.DRAG_FLAG_GLOBAL_URI_WRITE, según corresponda. +
+ +
+ View.cancelDragAndDrop() +
+ +
+ Cancela una operación de arrastrar actualmente en curso. Solo puede ser llamado por la + aplicación que originó la operación de arrastrar. +
+ +
+ View.updateDragShadow() +
+ +
+ Reemplaza la sombra del arrastre por una operación de arrastrar actualmente en curso. Solo + puede ser llamado por la aplicación que originó la operación de arrastrar. +
+ +
+ Activity.requestDropPermissions() +
+ +
+ Solicita los permisos para los URI de contenido que se pasan con el {@link + android.content.ClipData} incluido en un {@link android.view.DragEvent}. +
+
+ +

Prueba de la compatibilidad de tu aplicación con el uso de ventanas múltiples

+ +

+ Ya sea que actualices o no tu aplicación para Android N, debes + verificar la forma en que se comporta en modo de ventanas múltiples en caso de que un usuario intente iniciarla + en modo de ventanas múltiples en un dispositivo con Android N. +

+ +

Configuración de un dispositivo de prueba

+ +

+ Si instalas Android N en un dispositivo, se admite automáticamente el modo + de pantalla dividida. +

+ +

Si tu aplicación no se compiló con el N Preview SDK

+ +

+ Si no creaste tu aplicación con el N Preview SDK y el usuario intenta usar + la aplicación en modo de ventanas múltiples, el sistema cambia el tamaño de la aplicación de forma forzada, a menos que la aplicación + declare una orientación fija. +

+ +

+ Si tu aplicación no declara una orientación fija, debes iniciar tu aplicación + en un dispositivo con Android N e intentar colocar la aplicación en + modo de pantalla dividida. Cuando se modifique el tamaño de la aplicación de forma forzada, + comprueba que la experiencia de usuario sea aceptable. +

+ +

+ Si la aplicación declara una orientación fija, debes intentar colocar la aplicación en + modo de ventanas múltiples. Cuando lo hagas, verifica que la aplicación + continúe en modo de pantalla completa. +

+ +

Si admites el modo de ventanas múltiples

+ +

+ Si compilaste tu aplicación con el N Preview SDK y no deshabilitaste + la compatibilidad con ventanas múltiples, verifica el siguiente comportamiento tanto en modo de pantalla dividida + como en modo de forma libre. +

+ + + +

Lista de comprobación de pruebas

+ +

+ Para verificar el rendimiento de tu aplicación en modo de ventanas múltiples, intenta las siguientes + operaciones. Debes probar estas operaciones tanto en modo de pantalla dividida como en + modo de ventanas múltiples, excepto cuando se indique algo diferente. +

+ + + +

Si deshabilitaste la compatibilidad con el modo de ventanas múltiples

+ +

+ Si deshabilitaste la compatibilidad con el modo de ventanas múltiples al configurar + android:resizableActivity="false", debes iniciar tu aplicación en + un dispositivo con Android N e intentar colocar la aplicación en los + modos de forma libre y pantalla dividida. Cuando lo hagas, verifica que la aplicación + continúe en modo de pantalla completa. +

diff --git a/docs/html-intl/intl/es/preview/features/multilingual-support.jd b/docs/html-intl/intl/es/preview/features/multilingual-support.jd new file mode 100644 index 000000000000..3963f988acaa --- /dev/null +++ b/docs/html-intl/intl/es/preview/features/multilingual-support.jd @@ -0,0 +1,214 @@ +page.title=Idioma y configuración regional +@jd:body + +
+ +
+ +

Android N brinda un soporte mejorado para los usuarios de diferentes idiomas +y les permite seleccionar múltiples configuraciones regionales en la configuración. Android N +brinda esta capacidad expandiendo ampliamente la cantidad de configuraciones regionales compatibles +y cambiando la forma en que el sistema resuelve los recursos. El nuevo método de resolución +de recursos es más robusto y está diseñado para ser compatible con APK existentes, pero +debes tener especial cuidado para detectar cualquier comportamiento inesperado. Por ejemplo, debes +realizar pruebas para asegurarte de que tu aplicación muestre el idioma esperado de forma predeterminada. Además, +si tu aplicación permite múltiples idiomas, debes asegurarte de que esta compatibilidad funcione +como debería. Por último, debes tratar de asegurarte de que tu aplicación administre con facilidad +los idiomas para los cuales no diseñaste explícitamente la aplicación.

+ +

Al inicio de este documento, encontrarás una explicación sobre la estrategia de resolución de recursos anterior a +Android N. Luego, encontrarás una descripción de la estrategia de resolución de recursos +mejorada de Android N. Por último, encontrarás una explicación sobre cómo aprovechar +la cantidad expandida de configuraciones regionales para permitir acceso a más usuarios de diferentes idiomas.

+ +

Desafíos para la resolución de recursos de idioma

+ +

Antes de Android N, Android no siempre podía +hacer coincidir correctamente las configuraciones regionales de la aplicación y del sistema. Por ejemplo, supongamos que el idioma predeterminado + de tu aplicación es inglés de EE. UU., pero que también tiene cadenas en español localizadas en archivos de recursos {@code es_ES}. +

+

Cuando el código Java se refería a las cadenas, resolvía el idioma de las cadenas como +se muestra a continuación:

+ + + +

Estos problemas de resolución surgieron debido a que el sistema quitaba el código de país +de la configuración regional si no podía encontrar una coincidencia exacta. Por ejemplo:

+

+Tabla 1. Resolución de recursos sin una coincidencia de configuración regional exacta. +

+ + + + + + + + + + + + + +
Configuración del usuarioRecursos de la aplicaciónResolución de recursos
fr_CH +Predeterminado (en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+Intentar fr_CH => Error
+Intentar fr => Error
+Usar predeterminado (en) +
+ + +

En este ejemplo, el sistema muestra las cadenas en inglés sin +saber si el usuario comprende este idioma. Este comportamiento es muy común +hoy en día. Android N debería reducir sustancialmente la frecuencia +de resultados como este.

+ +

Mejoras de la estrategia de resolución de recursos

+

Android N brinda una resolución de recursos más robusta y +encuentra mejores recursos de forma automática. Sin embargo, para acelerar la resolución y mejorar la +facilidad de mantenimiento, debes almacenar los recursos en el dialecto primario. + Por ejemplo, si antes almacenabas los recursos en español en el directorio {@code es-US} +, pásalos al directorio {@code es-419}, que contiene la variante de Latinoamérica. + De forma similar, si tienes cadenas de recursos en una carpeta llamada {@code en-GB}, cámbiale + el nombre a {@code en-001} (inglés internacional), ya que el dialecto primario más común + para las cadenas en en-GB es {@code en-001}. + Los siguientes ejemplos explican por qué estas prácticas mejoran el desempeño + y la confiabilidad de la resolución de recursos.

+ +

Ejemplos de resolución de recursos

+ +

Con Android N, el caso descrito en la Tabla 1 se resuelve +de otra forma:

+ +

+Tabla 2. Una estrategia de resolución mejorada para los casos en que no +hay una coincidencia de configuración regional exacta.

+ + + + + + + + + + + + +
Configuración del usuarioRecursos de la aplicaciónResolución de recursos
    +
  1. fr_CH
  2. +
+
+Predeterminado (en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+Intentar fr_CH => Error
+Intentar fr => Error
+Intentar secundario de fr => fr_FR
+Usar fr_FR +
+ + +

Así, los recursos se muestran en francés en lugar de en inglés. Este ejemplo también muestra + por qué deberías almacenar las cadenas en francés en {@code fr} en lugar de en {@code fr_FR} + para Android N. Aquí, el procedimiento se basa en hacer coincidir el dialecto primario más cercano, + lo cual hace que la resolución sea más rápida y más predecible.

+ +

Además de esta lógica de resolución mejorada, Android ofrece ahora más + idiomas de usuario de entre los cuales elegir. Volvamos a ver el ejemplo anterior con el idioma italiano + especificado como un idioma de usuario adicional, pero sin compatibilidad de la aplicación con el idioma francés.

+ +

+Tabla 3. Resolución de recursos cuando la aplicación solo hace coincidir la +configuración regional de segunda preferencia del usuario.

+ + + + + + + + + + + + + + +
Configuración del usuarioRecursos de la aplicaciónResolución de recursos
    +
  1. fr_CH
  2. +
  3. it_CH
  4. +
+
+Predeterminado (en)
+de_DE
+es_ES
+it_IT
+
+Intentar fr_CH => Error
+Intentar fr => Error
+Intentar secundario de fr => Error
+Intentar it_CH => Error
+Intentar it => Error
+Intentar secundario de it => it_IT
+Usar it_IT +
+

El usuario recibe la información en un idioma que comprende, si bien la aplicación no +es compatible con el idioma francés.

+ + +

Diseño de la aplicación para permitir configuraciones regionales adicionales

+

API LocaleList

+ +

Android N incorpora una nueva API, {@code LocaleList.GetDefault()}, +que les permite a las aplicaciones consultar directamente la lista de idiomas que ha especificado el usuario. Esta API + te permite crear un comportamiento de la aplicación + más sofisticado y una presentación de contenido más optimizada. Por ejemplo, las búsquedas + pueden mostrar resultados en múltiples idiomas según la configuración del usuario. Las aplicaciones de navegadores + pueden evitar ofrecer la traducción de páginas que están en un idioma que el usuario comprende, + y las aplicaciones de teclado pueden habilitar automáticamente todos los diseños correctos.

+ +

Formateadores

+ +

Hasta Android 6.0 (API nivel 23), Android solo permitía una o dos + configuraciones regionales para muchos idiomas comunes + (en, es, ar, fr, ru). Debido a que había solo unas pocas variantes para cada idioma, +las aplicaciones podían almacenar algunos números y fechas como cadenas preprogramadas +en los archivos de recursos. Sin embargo, con el conjunto ampliado de configuraciones regionales +compatibles de Android, puede haber diferencias importantes +en los formatos de fecha, hora, moneda e +información similar, incluso dentro de una sola configuración regional. Preprogramar los formatos puede generar +una experiencia confusa para los usuarios. Por lo tanto, cuando desarrolles aplicaciones para Android, +asegúrate de usar formateadores en lugar de preprogramar las cadenas de números y fechas.

+ +

Un muy buen ejemplo es el árabe. Android N expandió su compatibilidad de +una configuración regional, {@code ar_EG}, a 27 configuraciones regionales. Estas configuraciones regionales pueden compartir la mayoría de los recursos, +pero algunas prefieren dígitos ASCII, mientras que otras prefieren dígitos nativos. Por ejemplo, +cuando desees crear una oración con una variable de dígito, como +"Elige un PIN de 4 dígitos", usa formateadores como se muestra a continuación:

+ +
 format(locale, "Choose a %d-digit PIN", 4)
diff --git a/docs/html-intl/intl/es/preview/features/notification-updates.jd b/docs/html-intl/intl/es/preview/features/notification-updates.jd new file mode 100644 index 000000000000..2679c3e32053 --- /dev/null +++ b/docs/html-intl/intl/es/preview/features/notification-updates.jd @@ -0,0 +1,328 @@ +page.title=Notificaciones +page.tags=notifications +helpoutsWidget=true +page.image=/preview/images/notifications-card.png + +trainingnavtop=true + +@jd:body + +
+
+ + +

Este documento incluye lo siguiente:

+
    +
  1. Respuesta directa
  2. +
  3. Notificaciones integradas
  4. +
  5. Vistas personalizadas
  6. +
+ +
+
+ +

Android N incluye varias API nuevas que permiten a las aplicaciones publicar +notificaciones altamente visibles e interactivas.

+ +

Android N amplía la API de notificación existente {@link android.support.v4.app.RemoteInput} +para admitir respuestas en línea en teléfonos celulares. Esta función permite a los usuarios + responder rápidamente desde el panel de notificaciones sin tener que visitar tu aplicación.

+ +

+ Android N también te permite agrupar notificaciones similares para que + aparezcan como una sola notificación. Para que esto sea posible, Android N usa el método existente {@link + android.support.v4.app.NotificationCompat.Builder#setGroup + NotificationCompat.Builder.setGroup()}. Los usuarios pueden expandir cada una de las + notificaciones y realizar acciones como responder e ignorar en cada una + de ellas, de forma individual desde el panel de notificaciones. +

+ +

Por último, Android N también suma nuevas API que te permiten aprovechar las decoraciones +del sistema en las vistas de notificación personalizadas de tu aplicación. Estas API ayudan a +garantizar que las vistas de notificaciones compartan una presentación acorde a las +plantillas estándar.

+ +

En este documento se destacan algunos de los cambios clave que puedes tener en cuenta + al usar las nuevas funciones de notificación en tus aplicaciones.

+ +

Respuesta directa

+ +

Con la función de respuesta directa en Android N, los usuarios pueden responder +rápidamente mensajes de texto o actualizar listas de tareas directamente dentro de la interfaz de +notificación. En un dispositivo portátil, la acción de respuesta en línea aparece como un botón adicional + anexado a la notificación. Cuando un usuario responde mediante un teclado, el sistema adjunta + la respuesta de texto a la intención + que especificaste para la acción de notificación y envía la intención a tu + aplicación para dispositivos portátiles. + + + +

+ Figura 1. Android N agrega el botón de acción Reply +. +

+ +

Adición de acciones de respuesta en línea

+ +

Para crear una acción de notificación que admita respuesta directa: +

+ +
    +
  1. Crea una instancia de {@link android.support.v4.app.RemoteInput.Builder} + que puedas agregar a tu acción de +notificación. El constructor de esta clase acepta una cadena que el sistema usa como clave + para la inserción de texto. Luego, tu aplicación para dispositivos portátiles usará esa clave para recuperar el texto + de la entrada. + +
    +// Key for the string that's delivered in the action's intent
    +private static final String KEY_TEXT_REPLY = "key_text_reply";
    +String replyLabel = getResources().getString(R.string.reply_label);
    +RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
    +        .setLabel(replyLabel)
    +        .build();
    +
    +
  2. +
  3. Adjunta el objeto {@link android.support.v4.app.RemoteInput} + a una acción usando addRemoteInput(). + +
    +// Create the reply action and add the remote input
    +Notification.Action action =
    +        new Notification.Action.Builder(R.drawable.ic_reply_icon,
    +                getString(R.string.label), replyPendingIntent)
    +                .addRemoteInput(remoteInput)
    +                .build();
    +
    +
  4. + +
  5. Aplica la acción a una notificación y emite la notificación. + +
    +// Build the notification and add the action
    +Notification notification =
    +        new Notification.Builder(mContext)
    +                .setSmallIcon(R.drawable.ic_message)
    +                .setContentTitle(getString(R.string.title))
    +                .setContentText(getString(R.string.content))
    +                .addAction(action))
    +                .build();
    +
    +// Issue the notification
    +NotificationManager notificationManager =
    +        NotificationManager.from(mContext);
    +notificationManager.notify(notificationId, notification);
    +
    +
    +
  6. + +
+ + +

Cuando se active la acción de notificación, +el sistema le solicitará al usuario que ingrese una respuesta.

+ + +

+ Figura 2. El usuario ingresa texto desde el panel de notificaciones. +

+ +

Recuperación de entradas del usuario de la respuesta directa

+ +

Para recibir entradas del usuario de la interfaz de notificación a la actividad que +declaraste en la intención de la acción de respuesta:

+
    +
  1. Llama a {@link android.support.v4.app.RemoteInput#getResultsFromIntent + getResultsFromIntent()} pasando la intención de la acción de notificación como + el parámetro de entrada. Este método devuelve un {@link android.os.Bundle} que + contiene la respuesta de texto. +
  2. + +
    +Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
    +
    + +
  3. Consulta el paquete con la clave de resultado (proporcionada al constructor {@link + android.support.v4.app.RemoteInput.Builder}). +
  4. +
+ +

El siguiente fragmento de código ilustra cómo un método recupera el texto de entrada +de un paquete:

+ +
+// Obtain the intent that started this activity by calling
+// Activity.getIntent() and pass it into this method to
+// get the associated string.
+
+private CharSequence getMessageText(Intent intent) {
+    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+    if (remoteInput != null) {
+            return remoteInput.getCharSequence(KEY_TEXT_REPLY);
+            }
+    return null;
+ }
+
+ +

Las aplicaciones pueden aplicar lógica para decir qué medidas tomar con respecto al texto +recuperado. +Para las aplicaciones interactivas (como los chats), proporciona más contexto sobre la notificación + (por ejemplo, varias líneas de historial de chat, incluidos los mensajes del usuario) + de modo que el usuario pueda responder correctamente. +Cuando el usuario responda a través de {@link android.support.v4.app.RemoteInput}, + incluye el texto del historial de respuestas con el método {@code setRemoteInputHistory()} +.

+ +

Notificaciones integradas

+ +

Android N ofrece a los desarrolladores una nueva manera de representar + una cola de notificaciones: notificaciones integradas. Esto es similar a la función + Pilas de + notificaciones en Android Wear. Por ejemplo, si tu aplicación crea notificaciones + para los mensajes recibidos, cuando se recibe más de un mensaje, agrupa las + notificaciones en un solo paquete. Puedes + usar el método existente {@link android.support.v4.app.NotificationCompat.Builder#setGroup +Builder.setGroup()} para agrupar notificaciones similares.

+ +

+ El grupo de notificaciones impone una jerarquía en las notificaciones que lo integran. + En la parte superior de esa jerarquía se encuentra una notificación principal que muestra información + resumida para el grupo. El usuario puede expandir + progresivamente el grupo de notificaciones, y el sistema muestra más información a medida que el + usuario continúa indagando. Cuando el usuario expande el paquete, el sistema revela más + información para todas sus notificaciones secundarias; cuando el usuario + expande una de esas notificaciones, el sistema revela todo su contenido. +

+ + +

+ Figura 3. El usuario puede expandir progresivamente el grupo de + notificaciones. +

+ +

Para obtener información acerca de cómo agregar notificaciones a un grupo, consulta +Agregar +cada notificación a un grupo.

+ + +

Prácticas recomendadas para las notificaciones integradas

+

Esta sección proporciona pautas acerca de cuándo usar grupos de notificaciones en lugar +de las notificaciones {@link android.app.Notification.InboxStyle InboxStyle} +que estaban disponibles en versiones anteriores de la +plataforma Android.

+ +

Cuándo usar notificaciones integradas

+ +

Solo debes usar grupos de notificaciones si se cumplen todas las siguientes condiciones +para tu caso de uso:

+ + + +

Algunos ejemplos de buenos casos de uso para grupos de notificaciones incluyen: una aplicación de mensajería +que exhiba una lista de mensajes entrantes, o una aplicación de correo electrónico que exhiba una lista de +correos electrónicos recibidos.

+ +

+Algunos ejemplos de casos en los que se prefiere una sola notificación + incluyen mensajes individuales de una sola persona, o una lista de + elementos de texto de una sola línea. Para lograr esto, puedes usar +({@link android.app.Notification.InboxStyle InboxStyle} o +{@link android.app.Notification.BigTextStyle BigTextStyle}) +. +

+ +

Visualización de notificaciones integradas

+ +

+ La aplicación siempre debe publicar un resumen del grupo, aún si el grupo contiene una sola + notificación secundaria. Si contiene una sola notificación, el sistema suprimirá el resumen y mostrará directamente la + notificación secundaria. Esto garantiza + que el sistema pueda proporcionar una experiencia uniforme cuando el usuario quita con un gesto de "deslizar" notificaciones + secundarias de un grupo. +

+ +

+ Nota: Esta versión de Android N aún no + suprime el resumen para los grupos de notificaciones que contienen una sola notificación secundaria. Esta + funcionalidad se agregará en una versión posterior de Android N. +

+ +

Inspección de notificaciones

+ +

Si bien el sistema generalmente muestra las notificaciones secundarias como un grupo, puedes configurarlas + para que aparezcan temporalmente como + + notificaciones emergentes. Esta función es especialmente útil porque permite + el acceso inmediato a la notificación secundaria más reciente y a las acciones asociadas a ella. +

+ + +

Compatibilidad con versiones anteriores

+ +

+ Tanto los grupos de notificaciones como las entradas remotas han formado parte de la API {@link + android.app.Notification} desde Android 5.0 (API nivel 21) para soportar dispositivos + con Android Wear. Si ya compilaste notificaciones con esas API, + lo único que debes hacer es verificar que el comportamiento de la aplicación concuerde + las pautas antes descritas y considerar la implementación de {@code + setRemoteInputHistory()}. +

+ +

+ Para poder ser compatible con versiones anteriores, están disponibles las mismas API con + la clase {@link android.support.v4.app.NotificationCompat} + de la biblioteca de soporte, que te permite crear notificaciones que funcionan en versiones de Android + anteriores. En dispositivos portátiles y tablets, los usuarios solo ven la notificación de resumen + de modo que una aplicación aún debe tener un estilo de bandeja de entrada o una notificación equivalente + que represente todo el contenido del grupo. Dado que los dispositivos con Android + Wear permiten a los usuarios ver todas las notificaciones secundarias incluso en + niveles anteriores de la plataforma, debes crear notificaciones secundarias independientemente del nivel de + API. +

+ +

Vistas personalizadas

+

A partir de la versión Android N, puedes personalizar vistas de notificaciones y +aún obtener decoraciones del sistema, como encabezados de notificaciones, acciones y diseños +expandibles.

+ +

Para habilitar esta característica, Android N suma las siguientes API para que puedas diseñar tu + vista personalizada:

+ +
+
+{@code DecoratedCustomViewStyle()}
+
Permite diseñar notificaciones que no sean notificaciones +de medios.
+
+{@code DecoratedMediaCustomViewStyle()}
+
Permite diseñar notificaciones de medios.
+
+ +

Para usar esta nueva API, llama al método {@code setStyle()} y pásale +el estilo de la vista personalizada que hayas elegido.

+ +

Este fragmento muestra cómo crear un objeto de notificación personalizada con el método +{@code DecoratedCustomViewStyle()}.

+ +
+Notification noti = new Notification.Builder()
+           .setSmallIcon(R.drawable.ic_stat_player)
+           .setLargeIcon(albumArtBitmap))
+           .setCustomContentView(contentView);
+           .setStyle(new Notification.DecoratedCustomViewStyle())
+           .build();
+
+
diff --git a/docs/html-intl/intl/es/preview/features/picture-in-picture.jd b/docs/html-intl/intl/es/preview/features/picture-in-picture.jd new file mode 100644 index 000000000000..01e39a2a0010 --- /dev/null +++ b/docs/html-intl/intl/es/preview/features/picture-in-picture.jd @@ -0,0 +1,186 @@ +page.title=Picture-in-picture +page.keywords=preview,sdk,PIP,Picture-in-picture +page.tags=androidn + +@jd:body + +
+ +
+ +

Con Android N, los usuarios de Android TV ahora pueden ver un video +en una ventana fija que se ubica en una esquina de la pantalla mientras navegan dentro de +aplicaciones. El modo picture-in-picture (PIP) permite que las aplicaciones reproduzcan un video +en una ventana fija mientras se lleva a cabo otra actividad +en el fondo. La ventana de PIP les permite a los usuarios realizar múltiples tareas mientras usan tu aplicación, lo cual les permite +ser más productivos.

+ +

Tu aplicación puede decidir cuándo activar el modo PIP. Aquí te mostramos algunos ejemplos de +situaciones en las que se podría usar el modo PIP:

+ + + +

La ventana de PIP es de 240x135 dp y se muestra en la capa delantera en una de las +cuatro esquinas de la pantalla que el sistema elige. El usuario puede acceder a un menú de +PIP que le permite cambiar la ventana de PIP a pantalla completa o cerrarla +presionando el botón Home en el control remoto. Si se comienza a reproducir +otro video en la pantalla principal, la ventana de PIP se cierra +automáticamente. Los usuarios también pueden cerrar la ventana de PIP desde Recents.

+ + +

Imagen 1. Un video picture-in-picture +visible en una esquina de la pantalla mientras el usuario explora contenido +en la pantalla principal.

+ +

El modo PIP aprovecha las API de ventanas múltiples disponibles en Android N para +brindar la ventana superpuesta fija de video. Para agregarle el modo PIP a tu aplicación, debes +registrar las actividades que permitan este modo, cambiar la actividad al modo PIP según +sea necesario y asegurarte de que los elementos de IU se oculten y que la reproducción de video continúe mientras +la actividad se encuentra en modo PIP.

+ +

Declarar que la actividad permite el modo picture-in-picture

+ +

De forma predeterminada, el sistema no permite el modo PIP para aplicaciones automáticamente. +Si deseas permitir este modo en tu aplicaciones, registra la actividad +de video en tu manifiesto configurando +android:supportsPictureInPicture y +android:resizeableActivity en true. Además, debes especificar +que tu actividad gestiona los cambios de configuración de la presentación para que la actividad +no se reinicie cuando ocurran cambios de presentación durante las transiciones en el modo PIP.

+ +
+<activity android:name="VideoActivity"
+    android:resizeableActivity="true"
+    android:supportsPictureInPicture="true"
+    android:configChanges=
+        "screenSize|smallestScreenSize|screenLayout|orientation"
+    ...
+
+ +

Cuando registres la actividad, ten en cuenta que, en el modo PIP, la +actividad se muestra en una ventana superpuesta pequeña en una pantalla de TV. Las actividades de reproducción +de videos con IU mínimas brindan la mejor experiencia de usuario. Las actividades que +incluyen elementos de IU pequeños podrían no brindar una buena experiencia de usuario +cuando se cambian al modo PIP, porque los usuarios no podrán ver los detalles de los elementos de IU +en la ventana PIP.

+ +

Cambiar la actividad al modo picture-in-picture

+ +Cuando necesites cambiar la actividad al modo PIP, llama a +Activity.enterPictureInPicture(). El siguiente ejemplo cambia +al modo PIP cuando el usuario selecciona un botón PIP especial en una barra +de control de medios:

+ +
+@Override
+public void onActionClicked(Action action) {
+    if (action.getId() == R.id.lb_control_picture_in_picture) {
+        getActivity().enterPictureInPicture();
+        return;
+    }
+    ...
+
+ +

Agregar un botón PIP a la barra de control de medios le permite al usuario cambiar +fácilmente al modo PIP y seguir controlando la reproducción de video.

+ + +

Imagen 1. Un botón +PIP en una barra de control de medios.

+ +

Android N incluye una nueva clase +PlaybackControlsRow.PictureInPictureAction que define +las acciones de PIP de la barra de control y usa el ícono PIP.

+ +

Gestionar las IU durante el modo picture-in-picture

+ +

Cuando la actividad ingresa al modo PIP, esta solo debería mostrar la reproducción +de video. Debes quitar los elementos de IU antes de que la actividad ingrese al modo PIP +y volver a mostrarlos cuando la actividad vuelva al modo de pantalla completa. +Sobrescribe Activity.onPictureInPictureChanged() o +Fragment.onPictureInPictureChanged() y habilita +o deshabilita los elementos de IU según sea necesario, por ejemplo:

+ +
+@Override
+public void onPictureInPictureChanged(boolean inPictureInPicture) {
+    if (inPictureInPicture) {
+        // Hide the controls in picture-in-picture mode.
+        ...
+    } else {
+        // Restore the playback UI based on the playback status.
+        ...
+    }
+}
+
+ +

Continuar la reproducción de video durante +el modo picture-in-picture

+ +

Cuando la actividad cambia al modo PIP, el sistema considera que se encuentra en +pausa y llama al método onPause() de la actividad. La reproducción +de video no debería pausarse y debería continuar si la actividad se +pausa debido al modo PIP. Busca el modo PIP en el método +onPause() de la actividad y controla la reproducción según corresponda, por +ejemplo:

+ +
+@Override
+public void onPause() {
+    // If called due to PIP, do not pause playback
+    if (inPictureInPicture()) {
+        // Continue playback
+        ...
+    }
+    // If paused but not in PIP, pause playback if necessary
+    ...
+}
+
+ +

Cuando la actividad sale del modo PIP y vuelve al modo de pantalla completa, el +sistema reinicia la actividad y llama al método onResume().

+ +

Prácticas recomendadas

+ +

El modo PIP está diseñado para actividades que reproducen un video en pantalla completa. Cuando cambies la +actividad al modo PIP, evita que se muestre cualquier elemento que no sea el contenido del video. +Rastrea el cambio a modo PIP de la actividad y oculta los elementos de IU, como se explica +en la sección Gestionar las IU durante el modo picture-in-picture.

+ +

Debido a que la ventana de PIP se muestra como una ventana flotante en una +esquina de la pantalla, debes evitar mostrar información importante en la pantalla principal +en cualquier área que pueda quedar oculta detrás de la ventana de PIP.

+ +

Cuando una actividad se encuentra en modo PIP, de forma predeterminada, no tiene focalización en las entradas. Para +recibir eventos de entradas durante este modo, usa +MediaSession.setMediaButtonReceiver().

diff --git a/docs/html-intl/intl/es/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/es/preview/features/scoped-folder-access.jd new file mode 100644 index 000000000000..7a8c4c82cc80 --- /dev/null +++ b/docs/html-intl/intl/es/preview/features/scoped-folder-access.jd @@ -0,0 +1,124 @@ +page.title=Acceso a directorios determinados +page.keywords=preview,sdk,scoped directory access +page.tags=androidn + +@jd:body + +
+ +
+ +

Las aplicaciones como las aplicaciones de fotografía generalmente solo necesitan acceso a directorios de +almacenamiento externo, como el directorio Pictures. Los métodos +existentes para acceder a almacenamiento externo no están diseñados para brindar un +acceso fácil a determinados directorios para estos tipos de aplicaciones. Por ejemplo:

+ + + +

Android N brinda una API nueva y simplificada para acceder a + directorios de almacenamiento externo comunes.

+ +

Acceder a un directorio de almacenamiento externo

+ +

Usa la clase StorageManager para obtener la instancia de +StorageVolume correcta. Luego, crea una intención llamando al + método StorageVolume.createAccessIntent() de esa instancia. +Usa esta intención para acceder a directorios de almacenamiento externo. Para obtener una lista de +todos los volúmenes disponibles, incluidos los volúmenes de medios extraíbles, usa +StorageManager.getVolumesList().

+ +

El siguiente fragmento de código es un ejemplo de cómo abrir el +directorio Pictures en el almacenamiento compartido principal:

+ +
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

El sistema intenta otorgar acceso al directorio externo y, si +es necesario, confirma el acceso con el usuario usando una IU simplificada:

+ + +

Imagen 1. Una aplicación solicitando +acceso al directorio Pictures.

+ +

Si el usuario otorga el acceso, el sistema llama a tu + invalidación de onActivityResult() con un código resultante de +Activity.RESULT_OK y datos de intención que contienen el URI. Usa +el URI brindado para acceder a la información del directorio. Es similar a usar URI +generados por el +framework +de acceso al almacenamiento.

+ +

Si el usuario no otorga el acceso, el sistema llama a tu +invalidación de onActivityResult() con un código resultante de +Activity.RESULT_CANCELED y datos de intención nulos.

+ +

Nota: obtener acceso a un directorio externo específico +también otorga el acceso a los subdirectorios de ese directorio.

+ +

Acceder a un directorio de un medio extraíble

+ +

Para usar el acceso a directorios determinados para acceder a directorios de medios extraíbles, +primero debes agregar un {@link android.content.BroadcastReceiver} que escuche la +notificación{@link android.os.Environment#MEDIA_MOUNTED}, por ejemplo:

+ +
+<receiver
+    android:name=".MediaMountedReceiver"
+    android:enabled="true"
+    android:exported="true" >
+    <intent-filter>
+        <action android:name="android.intent.action.MEDIA_MOUNTED" />
+        <data android:scheme="file" />
+    </intent-filter>
+</receiver>
+
+ +

Cuando el usuario conecta un medio extraíble, como una tarjeta SD, el sistema envía una +notificación{@link android.os.Environment#MEDIA_MOUNTED}. Esta notificación +brinda un objeto StorageVolume en los datos de intención que puedes +usar para acceder a directorios del medio extraíble. El siguiente ejemplo +accede al directorio Pictures de medios extraíbles:

+ +
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+    mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

Prácticas recomendadas

+ +

Cuando sea posible, sigue usando el URI de acceso a directorios externos de modo que no tengas +que solicitarle acceso al usuario continuamente. Una vez que el usuario haya otorgado el acceso, llama a +getContentResolver().takePersistableUriPermssion() con el +URI de acceso a directorios. El sistema continuará el URI, y las siguientes solicitudes +de acceso generarán RESULT_OK y no le mostrarán una IU de confirmación al +usuario.

+ +

Si el usuario deniega el acceso a un directorio externo, no vuelvas a solicitar el +acceso inmediatamente. Hacer esto provocaría una mala experiencia +de usuario.

diff --git a/docs/html-intl/intl/es/preview/features/security-config.jd b/docs/html-intl/intl/es/preview/features/security-config.jd new file mode 100644 index 000000000000..862fcd94df20 --- /dev/null +++ b/docs/html-intl/intl/es/preview/features/security-config.jd @@ -0,0 +1,744 @@ +page.title=Configuración de seguridad de la red +page.keywords=preview,security,network + +@jd:body + +
+ +
+ + +

+ Android N incluye una función de configuración de seguridad de la red + que les permite a las aplicaciones personalizar los ajustes de seguridad de la red mediante un archivo + de configuración declarativo seguro sin que haya que modificar el código de la aplicación. Estos ajustes se pueden + configurar para dominios específicos y para una aplicación específica. Las capacidades + clave de esta función son las siguientes: +

+ + + + +

Agregar un archivo de configuración de seguridad

+ +

+ La función de configuración de seguridad de la red usa un archivo XML donde + se especifican los ajustes para la aplicación. Debes incluir una entrada en el manifiesto de tu + aplicación que apunte a este archivo. El siguiente fragmento de código de un manifiesto + demuestra cómo crear esta entrada: +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+...
+<app ...>
+    <meta-data android:name="android.security.net.config"
+               android:resource="@xml/network_security_config" />
+    ...
+</app>
+
+ +

Personalizar las CA de confianza

+ +

+ Una aplicación podría querer otorgar confianza a un conjunto personalizado de CA en lugar de hacerlo según los ajustes + predeterminados de la plataforma. Las razones más comunes son las siguientes: +

+ + + +

+ De forma predeterminada, las conexiones seguras (p. ej.: TLS, HTTP) de todas las aplicaciones dependen de + las CA preinstaladas del sistema; las aplicaciones que tienen como objetivo a la API nivel 23 + (Android M) e inferiores también dependen de la tienda de CA agregada por el usuario de forma predeterminada. Una + aplicación puede personalizar sus propias conexiones usando {@code base-config} (para + la personalización de toda la aplicación) o {@code domain-config} (para la personalización + por dominio). +

+ + +

Configurar una CA personalizada

+ +

+ Supongamos que deseas conectarte a tu host, el cual usa un certificado SSL + autofirmado, o a un host cuyo certificado SSL está emitido por una CA no pública + en la cual confías, como la CA interna de tu empresa. +

+ +

+ res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ Agrega el certificado de CA autofirmado o no público, en formato PEM o DER, a + {@code res/raw/my_ca}. +

+ + +

Limitar el conjunto de CA de confianza

+ +

+ Una aplicación que no desee confiar en todas las CA en que confía el sistema puede, + en su lugar, especificar su propio conjunto reducido de CA en las que confía. Esto protege a la aplicación + de certificados fraudulentos emitidos por cualquiera de las demás CA. +

+ +

+ La configuración para limitar el conjunto de CA de confianza es similar a confiar en una CA personalizada para un dominio específico, con la diferencia + de que se brindan múltiples CA en el recurso. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">secure.example.com</domain>
+        <domain includeSubdomains="true">cdn.example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/trusted_roots"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ Agrega las CA de confianza, en formato PEM o DER, a {@code res/raw/trusted_roots}. + Ten en cuenta que, si usas el formato PEM, el archivo debe incluir solo datos PEM + y ningún texto adicional. También puedes brindar elementos +<certificates> + múltiples en lugar de solo uno. +

+ + +

+ Otorgar confianza a CA adicionales +

+ +

+ Una aplicación podría querer otorgar confianza a CA adicionales en las cuales el sistema no confía, + ya sea porque el sistema aún no incluye la CA o porque la CA no + cumple con los requisitos de inclusión del sistema Android. La + aplicación puede hacerlo especificando múltiples fuentes de certificado para una + configuración. +

+

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="@raw/extracas"/>
+            <certificates src="system"/>
+        </trust-anchors>
+    </base-config>
+</network-security-config>
+
+

+ + +

Configurar las CA para depuración

+ +

+ Cuando depuras una aplicación que se conecta mediante HTTPS, podrías querer + conectarte a un servidor de desarrollo local que no tiene el certificado + SSL de tu servidor de producción. Para poder hacerlo sin + tener que modificar el código de tu aplicación, puedes especificar CA de solo depuración que + solo son de confianza cuando +android:debuggable + es {@code true} usando {@code debug-overrides}. Generalmente, las herramientas de IDE + y de compilación configuran esta marca automáticamente para las versiones que no son de lanzamiento. +

+ +

+ Esto es más seguro que el código condicional habitual ya que, como precaución + de seguridad, las tiendas de aplicaciones no aceptan aplicaciones que están marcadas + como depurables. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="@raw/debug_cas"/>
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+

+ + +

Desactivar el tráfico de Cleartext

+ +

+ Las aplicaciones que deseen conectarse a destinos usando solo conexiones + seguras pueden desactivar Cleartext (usando el protocolo + HTTP no cifrado en lugar del protocolo HTTPS) para esos destinos. Esta opción ayuda a prevenir + las regresiones accidentales en aplicaciones debido a cambios en direcciones URL generados por fuentes + externas como servidores backend. + Consulta {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted + NetworkSecurityPolicy.isCleartextTrafficPermitted()} para obtener más información. +

+ +

+ Por ejemplo, una aplicación puede querer garantizar que todas las conexiones a {@code +secure.example.com} se hagan siempre mediante HTTPS para proteger el tráfico sensible + de redes hostiles. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config usesCleartextTraffic="false">
+        <domain includeSubdomains="true">secure.example.com</domain>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Fijar certificados

+ +

+ Generalmente, una aplicación otorga confianza a todas las CA preinstaladas. Si alguna de estas CA emitiera + un certificado fraudulento, la aplicación estaría en riesgo de sufrir un ataque + MiTM. Algunas aplicaciones eligen limitar el conjunto de certificados que aceptan + ya sea limitando el conjunto de CA al que otorgan confianza o fijando certificados. +

+ +

+ La fijación de certificados se hace brindando un conjunto de certificados por hash de la + clave pública (SubjectPublicKeyInfo del certificado X.509). De este modo, + una cadena de certificados solo es válida si contiene al menos una de + las claves públicas fijadas. +

+ +

+ Ten en cuenta que, cuando uses la fijación de certificados, siempre debes incluir una clave + de respaldo para que, si te ves obligado a cambiar a claves nuevas o a cambiar de CA (cuando + fijas un certificado de CA o un intermediario de esa CA), la conectividad + de la aplicación no se vea afectada. Si no, deberás actualizar + la aplicación para recuperar la conectividad. +

+ +

+ Además, se puede configurar un tiempo de expiración para las fijaciones, + luego del cual las fijaciones dejan de realizarse. Esto ayuda a evitar los problemas de conectividad + en aplicaciones que no se han actualizado. Sin embargo, configurar un tiempo de expiración + para las fijaciones puede habilitar la omisión de fijaciones. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <pin-set expiration="2018-01-01">
+            <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+            <!-- backup pin -->
+            <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Comportamiento de herencia de configuración

+ +

+ Los valores que no se establecen en una configuración específica se heredan. Este comportamiento permite configuraciones + más complejas y un archivo de configuración de fácil lectura. +

+ +

+ Si no se establece un valor en una entrada específica, se usa el valor de + la siguiente entrada más general. Los valores no establecidos en una {@code domain-config} se + toman de la {@code domain-config} primaria, si están anidados, o de la {@code +base-config}, si no están anidados. Los valores no establecidos en la {@code base-config} usan + los valores predeterminados de la plataforma. +

+ +

+ Por ejemplo, cuando todas las conexiones a subdominios de {@code +example.com} deben usar un conjunto personalizado de CA. Además, el tráfico de Cleartext a + estos dominios se permite excepto con las conexiones a {@code + secure.example.com}. Anidando la configuración para {@code +secure.example.com} dentro de la configuración para {@code example.com}, + {@code trust-anchors} no necesita duplicación. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+        <domain-config cleartextTrafficPermitted="false">
+            <domain includeSubdomains="true">secure.example.com</domain>
+        </domain-config>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Formato del archivo de configuración

+ +

+ La función de configuración de seguridad de la red usa un formato de archivo XML. + La estructura general del archivo se muestra en el siguiente ejemplo de código: +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </base-config>
+
+    <domain-config>
+        <domain>android.com</domain>
+        ...
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+        <pin-set>
+            <pin digest="...">...</pin>
+            ...
+        </pin-set>
+    </domain-config>
+    ...
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+ +

+ Las siguientes secciones describen la sintaxis y otros detalles del formato + de archivo. +

+ +

+ <network-security-config> +

+ +
+
+ PUEDE CONTENER: +
+ +
+ 0 o 1 de <base-config>
+ Cualquier cantidad de <domain-config>
+ 0 o 1 de <debug-overrides> +
+
+ +

+ <base-config> +

+ +
+
+ SINTAXIS: +
+
+ +
+<base-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</base-config>
+
+
+
+ PUEDE CONTENER: +
+ +
+ <trust-anchors> +
+ +
+ DESCRIPCIÓN: +
+ +
+ La configuración predeterminada usada por todas las conexiones cuyo destino no + está cubierto por una domain-config. + +

+ Los valores que no están configurados usan los valores predeterminados de la plataforma. La configuración predeterminada + para aplicaciones con API nivel 24 o superior es: +

+ +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+    </trust-anchors>
+</base-config>
+
+La configuración predeterminada para aplicaciones con API nivel 23 o inferior es: +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+        <certificates src="user" />
+    </trust-anchors>
+</base-config>
+
+ +
+
+ +

<domain-config>

+
+
SINTAXIS:
+
+
<domain-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</domain-config>
+
+ +
PUEDE CONTENER:
+ +
+1 o más <domain> +
0 o 1 <trust-anchors> +
0 o 1 <pin-set> +
Cualquier cantidad de <domain-config> anidadas
+ +
DESCRIPCIÓN
+
Configuración usada para conexiones con destinos específicos, como los definidos por elementos de {@code domain}. + +

Ten en cuenta que, si múltiples elementos de {@code domain-config} cubren un destino, la configuración con la regla de coincidencia de dominio más específica (más larga) + es la que se usa.

+
+ + +

<domain>

+ +
+
+ SINTAXIS: +
+ +
+
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+
+
+ +
+ ATRIBUTOS: +
+ +
+
+
+ {@code includeSubdomains} +
+ +
+ Si es {@code "true"}, esta regla de dominio coincide con el dominio + y con todos los subdominios, incluidos los subdominios de subdominios. Si no, la regla + solo se aplica a coincidencias exactas. +
+
+
+ +
+ DESCRIPCIÓN: +
+
+ +

<debug-overrides>

+ +
+
+ SINTAXIS: +
+ +
+
+<debug-overrides>
+    ...
+</debug-overrides>
+
+
+ +
+ PUEDE CONTENER: +
+ +
+ 0 o 1 <trust-anchors> +
+ +
+ DESCRIPCIÓN: +
+ +
+ Sobrescrituras que se deben aplicar cuando android:debuggable + es {@code "true"}, que es, generalmente, el caso de las versiones que no sean de lanzamiento + generadas por herramientas de IDE y de compilación. Los anclajes de confianza especificados en {@code + debug-overrides} se agregan a todas las demás configuraciones, y la fijación + de certificados no se lleva a cabo cuando la cadena de certificados del servidor usa uno de estos + anclajes de confianza de solo depuración. Si android:debuggable + es {@code "false"}, entonces, esta sección se omite por completo. +
+
+ +

<trust-anchors>

+
+
+ SINTAXIS: +
+ +
+
+<trust-anchors>
+...
+</trust-anchors>
+
+
+ +
+ PUEDE CONTENER: +
+ +
+ Cualquier cantidad de <certificates> +
+ +
+ DESCRIPCIÓN: +
+ +
+ Conjunto de anclajes de confianza para conexiones seguras. +
+
+ + +

<certificates>

+
+
SINTAXIS:
+
<certificates src=["system" | "user" | "raw resource"]
+              overridePins=["true" | "false"] />
+
+
DESCRIPCIÓN:
+
Conjunto de certificados X.509 para elementos de {@code trust-anchors}.
+ +
ATRIBUTOS:
+
+
{@code src}
+
+La fuente de los certificados de CA puede ser una de las siguientes opciones: +
    +
  • Una ID de recurso sin procesar que apunta a un archivo que contiene certificados X.509. + Los certificados deben estar codificados en formato DER o PEM. En el caso de los certificados + PEM, el archivo no debe contener datos adicionales que no sean de PEM, como + comentarios. +
  • + +
  • {@code "system"} para los certificados de CA preinstalados del sistema. +
  • + +
  • {@code "user"} para los certificados de CA agregados por el usuario. +
  • +
+
+ +
{@code overridePins}
+
+

+ Especifica si las CA de esta fuente omiten la fijación de certificados. Si es {@code +"true"}, las cadenas de certificados se encadenan mediante una de estas CA + desde esta fuente, y la fijación no se lleva a cabo. Esto puede ser útil para CA de depuración + o para poder permitirle al usuario hacer un ataque MiTM al tráfico seguro de la aplicación. +

+ +

+ Es {@code "false"} de forma predeterminada, a menos que se especifique en un elemento de {@code debug-overrides} +, en cuyo caso, es {@code "true"} de forma predeterminada. +

+
+
+
+ + +

<pin-set>

+ +
+
+ SINTAXIS: +
+ +
+
+<pin-set expiration="date">
+...
+</pin-set>
+
+
+ +
+ PUEDE CONTENER: +
+ +
+ Cualquier cantidad de <pin> +
+ +
+ DESCRIPCIÓN: +
+ +
+ Un conjunto de fijaciones de claves públicas. Para que una conexión segura sea de confianza, una de las + claves públicas de la cadena de confianza debe estar en el conjunto de fijaciones. Consulta + <pin> para el formato de las fijaciones. +
+ +
+ ATRIBUTOS: +
+ +
+
+
+ {@code expiration} +
+ +
+ La fecha, en formato {@code yyyy-MM-dd}, a partir de la cual + expiran las fijaciones, lo cual deshabilita la fijación. Si el atributo no está establecido, las fijaciones + no expiran. +

+ La expiración ayuda a evitar problemas de conectividad en aplicaciones + que no reciben actualizaciones para el conjunto de fijaciones, por ejemplo, +porque el usuario deshabilitó las actualizaciones de la aplicación. +

+
+
+
+
+ +

<pin>

+
+
+ SINTAXIS: +
+ +
+
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+    SubjectPublicKeyInfo (SPKI)</pin>
+
+
+ +
+ ATRIBUTOS: +
+ +
+
+
+ {@code digest} +
+ +
+ Resumen del algoritmo usado para generar la fijación. Actualmente, solo se admite + {@code "SHA-256"}. +
+
+
+
diff --git a/docs/html-intl/intl/es/preview/features/tv-recording-api.jd b/docs/html-intl/intl/es/preview/features/tv-recording-api.jd new file mode 100644 index 000000000000..459d48f0a9c0 --- /dev/null +++ b/docs/html-intl/intl/es/preview/features/tv-recording-api.jd @@ -0,0 +1,120 @@ +page.title=Grabación de TV +page.keywords=preview,sdk,tv,recording +page.tags=androidn + +@jd:body + + + +

Los servicios de entrada de TV le permiten al usuario pausar y reiniciar la reproducción de canales +mediante API de time-shifting. Android N expande la función de time-shifting + permitiéndoles a los usuarios guardar múltiples sesiones grabadas.

+ +

Los usuarios pueden programar las grabaciones por adelantado o comenzar a grabar a la vez +que miran un programa. Una vez que el sistema haya guardado una grabación, el usuario puede explorar, gestionar +y reproducir las grabaciones usando la aplicación del sistema de TV.

+ +

Si deseas brindar funcionalidades de grabación a tu servicio de entrada de TV, +debes indicarle al sistema que tu aplicación permite la grabación, implementar +la habilidad para grabar programas, gestionar y comunicar los errores que ocurren +durante la grabación y gestionar las sesiones grabadas.

+ +

Indicar la compatibilidad para la grabación

+ +

Para comunicarle al sistema que tu servicio de entrada de TV permite la grabación, debes seguir +estos pasos:

+ +
    +
  1. En el método TvInputService.onCreate(), crea un nuevo +objeto TvInputInfo usando la clase TvInputInfo.Builder. +
  2. +
  3. Cuando creer el nuevo objeto TvInputInfo, llama a +setCanRecord(true) antes de llamar a build() para +indicar que tu servicio permite la grabación.
  4. +
  5. Registra tu objeto TvInputInfo con el sistema llamando a +TvInputService.updateTvInputInfo().
  6. +
+ +

Grabar una sesión

+ +

Luego de que el servicio de entrada de TV registra la compatibilidad +con la funcionalidad de grabación, el sistema llama a tu +TvInputService.onCreateRecordingSession() cuando necesita acceder +a la implementación de grabación de tu aplicación. Implementa tu propia subclase +TvInputService.RecordingSession y devuélvela +cuando el callback de onCreateRecordingSession() +se dispare. Esta subclase es responsable de cambiar a los datos del canal correcto, +de grabar los datos solicitados y de comunicar el estado y los errores de grabación al +sistema.

+ +

Cuando el sistema llama a RecordingSession.onTune(), pasando en un +URI de canal, sintoniza el canal que el URI especifica. Notifícale al sistema que tu +aplicación se ha sintonizado al canal deseado llamando a notifyTuned() +o, si tu aplicación no pudo sintonizarse al canal correcto, llama a +notifyError().

+ +

El sistema invoca, a continuación, el callback RecordingSession.onStartRecording(). + Tu aplicación debe comenzar a grabar inmediatamente. Cuando el sistema invoca +este callback, puede brindar un URI que contiene información sobre el programa +que se está por grabar. Cuando finaliza la grabación, debes copiar estos +datos a la tabla de datos RecordedPrograms.

+ +

Finalmente, el sistema llama a RecordingSession.onStopRecording(). +En este momento, tu aplicación debe dejar de grabar inmediatamente. También debes crear +una entrada en la tabla RecordedPrograms. Esta entrada debe +incluir el URI de datos de la sesión grabada en la columna +RecordedPrograms.COLUMN_RECORDING_DATA_URI y cualquier información +del programa que el sistema haya brindado en la llamada inicial a +onStartRecording().

+ +

Para obtener más información sobre cómo acceder a la tabla RecordedPrograms +, consulta Gestionar las sesiones grabadas.

+ +

Gestionar los errores de grabación

+ +

Si ocurre un error durante la grabación que hace que los datos grabados no se puedan usar, +notifica al sistema llamando aRecordingSession.notifyError(). +De forma similar, puedes llamar a notifyError() después de que se cree una sesión de grabación +para que el sistema sepa que la aplicación ya no puede grabar sesiones.

+ +

Si ocurre un error durante la grabación, pero deseas brindarle al usuario una grabación +parcial usable para su reproducción, llama a +RecordingSession.notifyRecordingStopped() para permitir que el sistema +use la sesión parcial.

+ +

Gestionar las sesiones grabadas

+ +

El sistema mantiene información de todas las sesiones grabadas de todas +las aplicaciones de canal con funcionalidad de grabación en la tabla de proveedor de contenido TvContract.RecordedPrograms +. Esta información se accede mediante el URI de contenido +RecordedPrograms.Uri. Usa API de proveedor de contenido para +leer, agregar y eliminar entradas de esta tabla.

+ +

Para obtener más información sobre cómo trabajar con datos del proveedor de contenido, consulta + +Conceptos básicos sobre el proveedor de contenido.

+ +

Prácticas recomendadas

+ +

Los dispositivos de TV tienen un almacenamiento limitado, de modo que debes ser cuidadoso a la hora +de asignar el almacenamiento para guardar las sesiones grabadas. Usa +RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) cuando +no haya espacio suficiente para guardar una sesión grabada.

+ +

Cuando el usuario inicie la grabación, el registro de datos debe comenzar +lo antes posible. Para facilitar este proceso, completa cualquier tarea anterior demandante, +como acceder al espacio de almacenamiento y asignarlo, cuando el sistema invoque el +callback onCreateRecordingSession(). Hacerlo te permite comenzar +a grabar inmediatamente cuando el callback onStartRecording() +se dispare.

diff --git a/docs/html-intl/intl/es/preview/index.jd b/docs/html-intl/intl/es/preview/index.jd new file mode 100644 index 000000000000..f4c9189d6792 --- /dev/null +++ b/docs/html-intl/intl/es/preview/index.jd @@ -0,0 +1,120 @@ +page.title=Android N Developer Preview +page.tags="preview","developer" +meta.tags=“preview”, “android” +fullpage=true +forcelocalnav=true +header.hide=1 +footer.hide=1 +@jd:body + + + +
+
+
+ +
+

Android N Developer Preview

+

+ ¡Prepárate para Android N! + Prueba tus aplicaciones en Nexus y en otros dispositivos. Admite comportamientos del sistema nuevo + para ahorrar energía y memoria. + Amplía la funcionalidad de tus aplicaciones gracias a una IU con ventanas múltiples, + notificaciones de respuestas directas y más. +

+ + + + Comencemos + +
+
+ +
+
+
+
+
+
+
+ + + + + +
+

Recursos

+
+ Información esencial para ayudarte a preparar tus aplicaciones para Android N. +
+ +
+ +
+
+ diff --git a/docs/html-intl/intl/es/preview/j8-jack.jd b/docs/html-intl/intl/es/preview/j8-jack.jd new file mode 100644 index 000000000000..6693ea5d22d7 --- /dev/null +++ b/docs/html-intl/intl/es/preview/j8-jack.jd @@ -0,0 +1,183 @@ +page.title=Funciones del lenguaje Java 8 +page.keywords="android N", "Java 8", "Jack" +@jd:body + + + +

En Android N se ofrece compatibilidad con funciones del idioma Java 8 + que puedes usar al desarrollar aplicaciones orientadas a Android N. + En esta página se describen las funciones de idioma compatibles con la Android N + Preview, también la manera adecuada de configurar tu proyecto para usarlas y muchos problemas + conocidos que puedes experimentar. +

+ +

Para comenzar a usar estas funciones, debes descargar y configurar Android +Studio 2.1 (muestra) y el Android N Preview SDK, en el que se incluyen el conjunto de herramientas +Jack y el complemento de Android para Gradle. Si aún no instalaste +el Android N Preview SDK, consulta Configuración para desarrollar con Android N.

+ + + +

+ Nota: No es obligatorio usar las nuevas funciones del lenguaje Java 8 + para desarrollar aplicaciones orientadas a la plataforma de Android N. Si no + deseas escribir código con funciones del lenguaje Java 8, puedes mantener los valores de compatibilidad + de origen y destino de tu proyecto en Java 7, pero + debes usar JDK 8 para crear la compilación en función de la plataforma de Android N. +

+ +

+ Funciones y API admitidas del lenguaje Java 8 +

+ +

+ Actualmente, Android no admite todas las funciones del lenguaje Java 8. Sin embargo, las + siguientes características ahora se encuentran disponibles para el desarrollo de aplicaciones orientadas a la + Android N Preview: +

+ + + + +

+ A su vez, las siguientes API de funciones del lenguaje Java 8 ahora se encuentran disponibles: +

+ + + +

+ Nota: la implementación de expresiones Lambda + de Android N se basa en clases anónimas. Este enfoque permite que + tengan compatibilidad con versiones anteriores y puedan ejecutarse en versiones anteriores de Android. Para probar + expresiones Lambda en versiones anteriores, recuerda acceder a tu archivo {@code + build.gradle} y fijar {@code compileSdkVersion} y {@code + targetSdkVersion} en 23 o un valor inferior. +

+ +

+ Habilitar funciones de Java 8 y del conjunto de herramientas Jack +

+ +

+ Para usar las nuevas funciones del lenguaje Java 8, también debes usar el + nueva conjunto de herramientas Jack. Este nueva + conjunto de herramientas de Android permite compilar fuentes del lenguaje Java en código de bytes dex legible a través de + Android, también tiene su propio formato de biblioteca {@code .jack} y proporciona la mayoría de las funciones de conjunto de + herramientas como parte de una única herramienta: reempaquetado, reducción, alteración y + MultiDex. +

+ +

A continuación, se muestra una comparación de los conjuntos de herramientas empleadas para generar archivos DEX de Android:

+ + +

+ Configuración de Gradle +

+ +

+ Si deseas habilitar las funciones del lenguaje Java 8 y de Jack para tu proyecto, escribe lo + siguiente en tu archivo específico de módulo {@code build.gradle}: +

+ +
+android {
+  ...
+  defaultConfig {
+    ...
+    jackOptions {
+      enabled true
+    }
+  }
+  compileOptions {
+    sourceCompatibility JavaVersion.VERSION_1_8
+    targetCompatibility JavaVersion.VERSION_1_8
+  }
+}
+
+ +

+ Problemas conocidos +

+ +

+ Instant Run, presentado en Android Studio 2.0 (beta), actualmente no funciona + con Jack y permanecerá deshabilitado cuando se use el nuevo conjunto de herramientas. +

+ +

Debido a que Jack no genera archivos de clase intermedia al compilar una +aplicación, las herramientas que dependen de estos archivos actualmente no funcionan con Jack. Algunos +ejemplos de estas herramientas:

+ + + +

Si experimentas otros problemas al usar Jack, informa los errores.

\ No newline at end of file diff --git a/docs/html-intl/intl/es/preview/overview.jd b/docs/html-intl/intl/es/preview/overview.jd new file mode 100644 index 000000000000..6cd026a6c347 --- /dev/null +++ b/docs/html-intl/intl/es/preview/overview.jd @@ -0,0 +1,440 @@ +page.title=Información general del programa +page.metaDescription=Prepara tus aplicaciones para la próxima versión de Android. +page.image=images/cards/card-n-overview_2x.png +meta.tags=“preview”, “desarrollador”, “Android” +page.tags="preview", "developer", "android" + +@jd:body + + +

+ Bienvenido al plan de la Android N Developer Preview, un programa en el que + se ofrece todo lo que necesitas a fin de probar y optimizar tus aplicaciones para la próxima + versión de Android. Es gratis y puedes dar tus primeros pasos + descargando las herramientas de la N Developer Preview. +

+ + + + + + + +
+
+
+
+
+ Imágenes de hardware y emuladores +
+ +

+ Ejecuta y prueba tus aplicaciones en varios dispositivos o en un emulador. + +

+
+ +
+
+ El código de plataforma más reciente +
+ +

+ Durante la Preview, ofreceremos varias actualizaciones mensuales. De esta manera, realizarás tus pruebas con los últimos cambios de la plataforma. +

+
+ +
+
+ Prioridad para problemas de desarrolladores +
+ +

+ Durante las primeras semanas, daremos prioridad a los problemas informados por los desarrolladores; + por lo tanto, debes realizar las pruebas y enviar tus comentarios lo antes posible. +

+
+ +
+ +
+ + +
+
+ Capacidades y comportamientos nuevos +
+ +

+ Comienza a trabajar temprano para admitir los comportamientos de la nueva plataforma y realizar desarrollos con nuevas funciones. +

+
+ +
+
+ Actualizaciones inalámbricas +
+ +

+ Actualizaciones inalámbricas sin inconvenientes para dispositivos admitidos a través del + Programa de Android beta. No se requieren actualizaciones. +

+
+ +
+
+ Comentarios y soporte +
+ +

+ Informa los problemas y envíanos comentarios a través de nuestro + sistema de seguimiento de problemas. Conéctate con otros desarrolladores + en la + comunidad de desarrolladores de Android N. +

+
+
+
+
+ + + +

Escala de tiempo y actualizaciones

+ + +

+ La N Developer Preview rige desde el 9 de marzo de 2016 hasta el lanzamiento público de Android N + para AOSP y OEM, previsto para el tercer trimestre de 2016. +

+ +

+ En momentos claves del desarrollo, ofreceremos actualizaciones para tu entorno de desarrollo y + prueba. En general, podrás contar con una actualización por mes (intervalo de 4 a 6 + semanas). A continuación, se mencionan las versiones milestone: +

+ + + +

+ En cada actualización se incluyen herramientas de SDK, imágenes de sistema de la muestra, emuladores, documentación de + referencia y diferencias de API. +

+ +

+ En las primeras tres milestone de la muestra se proporciona un entorno + de prueba y desarrollo tempranos que te permitirá identificar + problemas de compatibilidad en tus aplicaciones actuales y planificar tareas relacionadas con la migración o las funciones + que se necesitan para orientar la nueva plataforma. Este será el período de prioridad en el cual nos + enviarás tus comentarios sobre funciones y problemas de compatibilidad de API y archivos; + para hacerlo, usa el sistema se seguimiento de + problemas. Podrás contar con cambios en las API en estas actualizaciones. +

+ +

+ Entre las Preview 4 y 5, tendrás acceso a las API + y al SDK finales de Android N para tareas de desarrollo, y también a imágenes de sistema casi definitivas + para poner a prueba comportamientos y funciones del sistema. Durante este período, Android N ofrecerá un nivel de API + estándar. Puedes iniciar la prueba de compatibilidad de tus aplicaciones + heredadas y optimizar el código nuevo en el que se usen las API o funciones de Android N. +

+ +

+ A su vez, a partir de la Preview 4, podrás publicar aplicaciones en + dispositivos con Android N cuyo nivel de API sea el oficial (por ejemplo, + dispositivos de consumidores inscritos en el Programa de Android beta). Puedes + realizar primero publicaciones en los canales alpha y beta de Google Play, a fin de probar + tus aplicaciones con consumidores de Android beta antes de proceder con la distribución a gran escala en la + tienda. +

+ +

+ A medida que pruebes Android N y lo uses para tus desarrollos, te recomendamos enfáticamente mantener + actualizado tu entorno de desarrollo conforme se lancen actualizaciones de la + muestra. Para facilitar el proceso, puedes registrar tus dispositivos de prueba en el + Programa de Android Beta y obtener actualizaciones inalámbricas (OTA) en + cada versión milestone. Como alternativa, habrá disponibles imágenes de preview actualizadas que puedes + descargar y actualizar de manera manual. +

+ +

+ Cuando haya disponibles las actualizaciones de la muestra, te informaremos a través del blog para desarrolladores de Android, de + este sitio y de la Comunidad de desarrolladores + de Android N. +

+ + +

¿Qué es la N Developer Preview?

+ +

+ En la N Developer Preview se incluye todo lo que necesitas para probar tus aplicaciones + existentes con diferentes tamaños de pantalla, tecnologías de red, chipsets de CPU y GPU, + y arquitecturas de hardware. +

+ +

Herramientas del SDK

+ +

Puedes descargar todos estos componentes a través de SDK Manager en Android Studio:

+ + + +

+ Ofreceremos actualizaciones para estas herramientas de desarrollo en cada versión milestone según sea necesario. +

+ +

Imágenes de sistema de hardware

+ +

+ En la N Developer Preview se incluyen, entre otras, imágenes de sistema del hardware de Nexus que puedes usar al + realizar pruebas y desarrollos en dispositivos físicos. Consulta la sección de imágenes de sistema para encontrar la lista completa + de imágenes de hardware. +

+ +

+ Ofreceremos imágenes de sistema actualizadas para estos dispositivos en cada versión milestone. Puedes + descargar y actualizar manualmente las imágenes de sistema renovadas en tus dispositivos de prueba + con la frecuencia que desees. Esto resulta particularmente útil para entornos + de prueba automatizados en los cuales probablemente debas volver a actualizar tu dispositivo varias + veces. +

+ +

Nota: + Los dispositivos actualizados de manera manual no recibirán actualizaciones OTA, como en la + muestra del año pasado. Este año, podrás recibir OTA registrando dispositivos en el + Programa de Android Beta. Consulta la sección siguiente para obtener información detallada. +

+ +

Actualizaciones OTA a través del Programa de Android beta

+ +

+ Como novedad en Android N, se ofrece un programa de actualización inalámbrica (OTA) que + proporciona las últimas actualizaciones de las muestras de Android N directamente para dispositivos registrados + en él. Es gratuito y está pensado para quienes tengan dispositivos + compatibles registrados en sus cuentas de Google. +

+ +

+ Para el registro, visita el sitio del Programa de Android + beta. En él, verás + todos los dispositivos registrados en tu cuenta que cumplen con los requisitos para registrarse en + el programa. +

+ +
    +
  1. Selecciona los dispositivo para los cuales deseas recibir actualizaciones de Android N. +
  2. Haz clic en Registrar, lee y acepta las condiciones de servicio y luego haz clic en Aceptar. +
+ +

+ Una vez que realices el registro, tu dispositivo recibirá pronto una actualización. En la mayoría de los casos, + no necesitarás restablecer por completo tus datos para la migración a Android N, pero + te recomendamos hacer una copia de respaldo de los datos que no desees perder antes de + registrar el dispositivo. +

+ +

+ A medida que tu dispositivo reciba actualizaciones, te recomendamos descargarlas e + instalarlas lo más pronto posible. Te convendrá mantenerte actualizado respecto de + las últimas modificaciones en la IU, el comportamiento, las API y las funciones del sistema. +

+ +

+ Al finalizar la Developer Preview, tus dispositivos registrados + recibirán una actualización a la versión oficial de Android N. +

+ +

+ Puedes dar de baja tus dispositivos del Programa de Android beta en cualquier momento desde el + sitio de Android beta. Antes de hacerlo, asegúrate de realizar una copia de respaldo de los datos de tu + dispositivo. +

+ +

Nota: + Cuando des de baja tu dispositivo, este se someterá a un restablecimiento de fábrica + a través del cual se cargará la última versión + de Android 6.0 Marshmallow (no necesariamente la versión + instalada antes del registro). Para garantizar que la instalación sea nueva, + se borrarán tus datos del dispositivo; entre otros, los contactos, los mensajes y + las fotos. +

+ +

Documentación y ejemplo de código

+ +

+ Los siguientes recursos de documentación se encuentran disponibles en el sitio Developer Preview y con ellos + podrás obtener información sobre Android N: +

+ + + +

Referencia de la API descargable

+ +

+ Durante las actualizaciones de la muestra, puedes descargar la + Referencia de la API + más reciente para la plataforma de Android N como un archivo .zip separado. En esta descarga + también se incluye un informe de diferencias que te permite identificar cambios en la API + en comparación con la API 23 y la actualización anterior. +

+ +

+ Cuando las API de Android N sean definitivas y se asigne el nivel de API oficial, + te proporcionaremos la referencia de la API en línea en https://developer.android.com. +

+ +

+ Recursos de soporte +

+ +

+ A medida que realices pruebas y desarrollos con la N Developer Preview, recurre a los siguientes canales + para informar problemas y enviar comentarios. +

+ + + +

Orientación, API de la muestra y publicación

+ +

+ En la N Developer Preview se proporciona un sistema exclusivo para desarrollo y una biblioteca + de Android cuyo nivel de API no es estándar. Si deseas + no incluir comportamientos de compatibilidad para probar tu aplicación (muy + recomendado), puedes orientar la versión preview de Android N fijando el valor de + targetSdkVersion + de tu aplicación en “N”. +

+ +

+ La Android N Developer Preview ofrece las API de preview; + estas no serán oficiales hasta el lanzamiento de la versión definitiva del SDK, + actualmente previsto para el tercer trimestre de 2016. Esto significa que podrás + contar con cambios menores en las API conforme pase el tiempo, en especial durante + las primeras semanas del programa. Te proporcionaremos un resumen de cambios con + cada actualización de la Android N Developer Preview. +

+ +

+ Nota: Aunque las API de la muestra pueden modificarse, los comportamientos del sistema + subyacente permanecen estables y disponibles para cualquier prueba + inmediata. +

+ +

+ Google Play evita la publicación de aplicaciones orientadas a la N Developer + Preview. Cuando esté disponible el SDK definitivo de Android N, podrás + apuntar hacia el nivel de API oficial de Android N y publicar tu aplicación en Google + Play a través de los canales para versiones alpha y beta. Mientras tanto, si deseas + distribuir una aplicación orientada a Android N para testers, puedes hacerlo por correo electrónico o + mediante descarga directa desde tu sitio. +

+ +

+ Cuando se lance la versión completa de Android N para AOSP y OEM, evento previsto para el tercer trimestre de 2016, + podrás publicar tus aplicaciones orientadas a Android N en el canal de lanzamientos + públicos de Google Play. +

+ + +

Primeros pasos

+ +

+ Para comenzar a probar tu aplicación con Android N: +

+ +
    +
  1. Revisa las secciones Información general de la API + y Cambios en los comportamientos a fin de + conocer las novedades y el efecto que tienen en tus aplicaciones. En particular, + procura obtener información sobre las nuevas funciones de notificaciones y la + compatibilidad con ventanas múltiples.
  2. +
  3. Configura tu entorno siguiendo las instrucciones para configurar el SDK Preview + y los dispositivos de prueba.
  4. +
  5. Sigue las instrucciones de + actualización a fin de usar la última imagen de sistema de Android N para tu dispositivo.
  6. +
  7. Revisa la Referencia de la API + y los Ejemplos de Android N para obtener más + información sobre las nuevas funciones de la API y la manera de usarlas en tu aplicación. +
  8. Únete a la comunidad de + desarrolladores de Android N para recibir las últimas noticias y para contactarte con otros + desarrolladores que estén trabajando con la nueva plataforma.
  9. +
+ +

+ ¡Te agradecemos por participar de la Android N Developer Preview! +

diff --git a/docs/html-intl/intl/es/preview/samples.jd b/docs/html-intl/intl/es/preview/samples.jd new file mode 100644 index 000000000000..0c271f6fd650 --- /dev/null +++ b/docs/html-intl/intl/es/preview/samples.jd @@ -0,0 +1,85 @@ +page.title=Ejemplos +page.tags="preview", "samples", "android" +page.image=images/cards/card-n-samples_2x.png +@jd:body + +

+ Los siguientes ejemplos de código se proporcionan para Android N. Para + descargarlos en Android Studio, selecciona la opción de menú File > Import + Samples. +

+ +

+ Nota: Estos proyectos descargables están diseñados + para usarse con Gradle y Android Studio. +

+ + +

“Área de juegos” de ventanas múltiples

+ +

+ En este ejemplo se muestra la manera de aprovechar interfaces de usuario + de ventanas múltiples con tu aplicación. +

+

+ +Obtener en GitHub +

+ +
+

Notificaciones activas

+ +

+ Este es un ejemplo preexistente en el cual se muestra un servicio simple que envía + notificaciones con NotificationCompat. Cada conversación no leída + se envía como una notificación diferente. +

+

+ Este ejemplo se actualizó para aprovechar nuevas funciones de notificación + disponibles en Android N. +

+

+ +Obtener en GitHub +

+ +
+

Servicio de mensajería

+ +

+ Este es un ejemplo preexistente en el que se demuestra la manera de usar + NotificationManager para indicar la cantidad de notificaciones que se aparecen actualmente en una + aplicación. +

+

+ Este ejemplo se actualizó para aprovechar nuevas funciones de notificación + disponibles en Android N. +

+

+ +Obtener en GitHub +

+ +
+

Inicio directo

+ +

+ En este ejemplo se demuestra la manera de almacenar datos, y de acceder a ellos, en un medio de almacenamiento cifrado por + dispositivo que esté siempre disponible mientras el dispositivo se haya iniciado. +

+

+ +Obtener en GitHub +

+ +
+

Acceso a directorios determinados

+ +

+ En este ejemplo se demuestra la manera de leer y escribir datos de + directorios específicos y, al mismo tiempo, evitar más permisos. +

+

+ +Obtener en GitHub +

\ No newline at end of file diff --git a/docs/html-intl/intl/es/preview/setup-sdk.jd b/docs/html-intl/intl/es/preview/setup-sdk.jd new file mode 100644 index 000000000000..4ccc4f814b7f --- /dev/null +++ b/docs/html-intl/intl/es/preview/setup-sdk.jd @@ -0,0 +1,226 @@ +page.title=Configuración de la Preview +meta.keywords=“preview”, “Android” +page.tags="preview", "developer preview" +page.image=images/cards/card-n-sdk_2x.png + +@jd:body + + + + +

A fin de desarrollar aplicaciones para la Android N Preview, debes aplicar algunas actualizaciones +a tu entorno de desarrollo, como se describe en esta página.

+ +

Para solo probar la compatibilidad de tu aplicación en la +imagen de sistema de Android N, sigue la guía de Prueba en un dispositivo Android N.

+ + + + +

Obtener Android Studio 2.1 (muestra)

+ +

La plataforma de Android N agrega compatibilidad para funciones de lenguaje de Java 8, +que requieren un nuevo compilador llamado Jack. La última versión de Jack +actualmente solo es compatible con Android Studio 2.1. Por lo tanto, si deseas +usar funciones de lenguaje de Java 8, debes usar Android Studio 2.1 para +crear tu aplicación. De lo contrario, no necesitarás el compilador Jack, pero +deberás aplicar una actualización a JDK 8 para compilar tu proyecto en función a la plataforma de Android N, +según lo descrito a continuación. +

+ + + +

Android Studio 2.1 actualmente se encuentra disponible como muestra en el canal de +versiones Canary. Si ya +cuentas con Android Studio y no deseas realizar la actualización al canal Canary, puedes +descargar Android Studio 2.1 como una instalación independiente, usarlo +para desarrollar aplicaciones con Android N y así dejar el entorno Android Studio +inalterado.

+ +

Para descargar Android Studio 2.1 como una instalación independiente, sigue estos +pasos (si deseas recibir Android Studio 2.1 como una actualización a tu +instalación existente, omite el paso 4):

+ +
    +
  1. Modifica el nombre de tu + instalación existente de Android Studio y anéxale el número de versión. De esta manera, + la versión nueva no reemplazará a la existente al instalarse.
  2. +
  3. Descarga el archivo .zip correspondiente para tu sistema operativo desde la + página de descarga del canal Canary. +
  4. +
  5. Descomprime el paquete y mueve el contenido de Android Studio 2.1 a la ubicación + que corresponda para las aplicaciones de tu sistema. Luego inícialo.
  6. +
  7. Abre el cuadro de diálogo Settings + (File > Settings en Windows y Linux, o + Android Studio > Preferences en Mac). En el panel + izquierdo, selecciona Appearance & Behavior > System Settings > + Updates. +
  8. +
  9. En el panel Updates, selecciona la casilla de verificación Automatically + check updates for y luego + Canary Channel en la lista desplegable. +
  10. +
+ +

Mantén esta ventana de configuración abierta para el paso siguiente.

+ + +

Obtener el N Preview SDK

+ +

Para comenzar a desarrollar proyectos con las API de Android N, debes instalar el +Android N Preview SDK en Android Studio de la siguiente manera:

+ +
    +
  1. Con el panel Updates aún a la vista (paso 4 anterior), + selecciona la casilla de verificación Automatically + check updates for Android SDK y luego + Preview Channel en la lista desplegable. +
  2. +
  3. Haz clic en Check Now.
  4. + +
  5. En el panel izquierdo, selecciona Appearance & Behavior > + System Settings > Android SDK. + +
  6. Haz clic en la pestaña SDK Platforms y luego selecciona la casilla de verificación + Android N Preview.
  7. + +
  8. Haz clic en la pestaña SDK Tools y luego selecciona las casillas de verificación + Android SDK Build Tools, Android SDK + Platform-Tools y + Android SDK Tools. +
  9. + +
  10. Haz clic en OK y acepta los acuerdos + de licencia para instalar cualquier paquete que se necesite. +
  11. +
+ +

Obtener documentación de referencia de la Android N Preview

+ +

+ En la documentación de referencia de la Android N Preview, se encuentra disponible información + detallada acerca de las API de Android N. Puedes descargar la documentación de la tabla siguiente. + Este paquete contiene una versión abreviada y de uso sin conexión del sitio web para desarrolladores + de Android, y en ella se incluyen una referencia de API actualizada para las API de Android N y un + informe de diferencia de API. +

+ + + + + + + + + + +
DocumentaciónSumas de comprobación
+ n-preview-1-docs.zip + MD5: 4ab33ccbe698f46f125cc5b807cf9c2f
+ SHA-1: 6a3880b3ccd19614daae5a4d0698ea6ae11c20a5 +
+ + + +

Obtener el JDK y JRE de Java 8

+ +

Para compilar tu aplicación en función de la plataforma de Android N debes usar +el Java 8 Developer Kit (JDK 8), y para usar algunas herramientas con Android +Studio 2.1 debes instalar Java 8 Runtime Environment (JRE 8). Si +aún no cuentas con la última versión de las dos herramientas, descarga JDK 8 y JRE 8 +ahora.

+ +

Luego configura la versión de JDK en Android Studio de la siguiente manera:

+ +
    +
  1. Abre un proyecto de Android en Android Studio y luego el + cuadro de diálogo de estructura del proyecto seleccionando File > + Project Structure. (Como alternativa, puedes fijar el valor predeterminado + para todos los proyectos seleccionando File > Other Settings > + Default Project Structure). +
  2. +
  3. En el panel izquierdo del cuadro de diálogo, haz clic en SDK Location. +
  4. +
  5. En el campo JDK Location, escribe la ubicación del + JDK de Java 8 (haz clic en el botón de la derecha + para explorar tus archivos) y luego haz clic en OK. +
  6. +
+ + + + +

Actualizar o crear un proyecto

+ +

+ Para usar las API de Android N, debes configurar tu proyecto en forma correspondiente. +

+ +

Si planeas usar funciones del lenguaje Java 8, también debes leer +Funciones del lenguaje Java 8 +para obtener información sobre las funciones de Java 8 admitidas y +la manera de configurar tu proyecto con el compilador Jack.

+ + +

Actualizar un proyecto existente

+ +

Abre el archivo + build.gradle de tu módulo y actualiza los valores de la siguiente + manera: +

+ +
+android {
+  compileSdkVersion 'android-N'
+  buildToolsVersion '24.0.0-rc1'
+  ...
+
+  defaultConfig {
+     minSdkVersion 'N'
+     targetSdkVersion 'N'
+     ...
+  }
+  ...
+}
+ + +

Crear un proyecto nuevo

+ + +

Si deseas crear un proyecto nuevo para realizar desarrollos con el Android N Preview SDK:

+ +
    +
  1. Haz clic en File > New Project y sigue los pasos correspondientes hasta + llegar a la página Target Android Devices. +
  2. +
  3. En la página, selecciona la opción Phone and Tablet.
  4. +
  5. En la opción Phone and Tablet, dentro de la lista de opciones Minimum + SDK, selecciona + N: Android API 23, N Preview (Preview).
  6. +
+ + +

Próximos pasos

+ + + diff --git a/docs/html-intl/intl/in/preview/api-overview.jd b/docs/html-intl/intl/in/preview/api-overview.jd new file mode 100644 index 000000000000..26c539c7b542 --- /dev/null +++ b/docs/html-intl/intl/in/preview/api-overview.jd @@ -0,0 +1,676 @@ +page.title=Android N untuk Pengembang +meta.tags="preview", "androidn" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-apis_2x.png +@jd:body + + + + + + + + +

Android N masih dalam pengembangan aktif, namun Anda bisa mencobanya +sekarang sebagai bagian dari N Developer Preview. Bagian-bagian di bawah ini akan menyoroti sebagian dari +fitur baru untuk pengembang.

+ +

+ Pastikan memeriksa Perubahan Perilaku untuk mengetahui selengkapnya tentang + bagian-bagian perubahan platform yang bisa memengaruhi aplikasi Anda, lihatlah + panduan pengembang untuk mengetahui selengkapnya tentang fitur-fitur utama, dan unduh Referensi API untuk mengetahui detail tentang + API baru. +

+ +

Dukungan multi-jendela

+ + +

Di Android N, kami memperkenalkan fitur multitasking baru yang banyak diminta +ke dalam platform — dukungan multi-jendela.

+ +

Pengguna sekarang bisa membuka dua aplikasi sekaligus di layar.

+ + +
+ +

+ Gambar 1. Aplikasi yang dijalankan dalam mode layar terbagi. +

+
+ +

Terutama pada tablet dan perangkat yang berlayar lebih besar lainnya, dukungan multi-jendela +memberi cara baru untuk memikat pengguna. Anda bahkan bisa mengaktifkan fitur seret-dan-letakkan dalam +aplikasi Anda untuk memudahkan pengguna menyeret konten ke dan dari aplikasi Anda — cara yang bagus +untuk menyempurnakan pengalaman pengguna.

+ +

Tidak sulit menambahkan dukungan multi-jendela ke aplikasi Anda dan mengonfigurasi cara +menangani tampilan multi-jendela. Misalnya, Anda bisa menetapkan dimensi +minimum aktivitas, sehingga mencegah pengguna mengubah ukuran aktivitas di bawah +ukuran itu. Anda juga bisa menonaktifkan tampilan multi-jendela untuk aplikasi Anda, yang + akan memastikan sistem hanya menampilkan aplikasi dalam mode layar penuh.

+ +

+ Untuk informasi selengkapnya, lihat dokumentasi pengembang Dukungan Multi-Jendela. + +

+ +

Penyempurnaan pemberitahuan

+ +

Di Android N kami telah mengubah desain pemberitahuan agar lebih mudah dan lebih cepat +digunakan. Beberapa perubahan tersebut antara lain:

+ + + +
+ +
+ +
+ +
+ +
+ +
+ + +

+ Gambar 2. Bundel pemberitahuan dan balasan langsung. +

+ +

Untuk mengetahui cara mengimplementasikan fitur-fitur baru ini, lihat panduan +Pemberitahuan. +

+ + + +

Kompilasi JIT/AOT yang dipandu profil

+ +

Di Android N, kami telah menambahkan compiler Just in Time (JIT) dengan pembuatan profil kode ke +ART, yang memungkinkannya terus meningkatkan kinerja aplikasi Android saat +dijalankan. Compiler JIT melengkapi compiler Ahead of Time (AOT) pada ART +dan membantu memperbaiki kinerja runtime, menghemat ruang penyimpanan, dan mempercepat +pembaruan aplikasi serta pembaruan sistem.

+ +

Kompilasi yang dipandu profil memungkinkan ART mengelola kompilasi AOT/JIT untuk setiap aplikasi +sesuai dengan penggunaan sebenarnya, serta kondisi pada perangkat. Misalnya, +ART menyimpan profil setiap metode terbaik aplikasi dan bisa melakukan kompilasi lebih awal +serta menyimpan sementara metode-metode tersebut di cache untuk mendapatkan kinerja terbaik. Hal ini membuat bagian lain dari aplikasi +dibiarkan tidak dikompilasi hingga benar-benar digunakan.

+ +

Di samping meningkatkan kinerja bagian-bagian penting aplikasi, kompilasi yang dipandu profil +membantu mengurangi footprint RAM keseluruhan aplikasi, termasuk biner +terkait. Fitur ini terutama penting pada perangkat dengan memori minim.

+ +

ART mengelola kompilasi yang dipandu profil dengan cara yang meminimalkan dampak terhadap baterai perangkat. +ART melakukan prakompilasi hanya bila perangkat sedang diam dan +mengisi daya, sehingga menghemat waktu dan baterai dengan melakukan pekerjaan tersebut di awal.

+ +

Jalur cepat untuk menginstal aplikasi

+ +

Salah satu manfaat paling nyata dari compiler JIT pada ART adalah kecepatan instalasi aplikasi +dan pembaruan sistem. Bahkan aplikasi besar yang tadinya perlu beberapa menit untuk +dioptimalkan dan diinstal di Android 6.0 sekarang bisa diinstal hanya dalam hitungan +detik. Pembaruan sistem juga lebih cepat, karena tidak ada lagi langkah pengoptimalan.

+ +

Doze di perjalanan...

+ +

Android 6.0 memperkenalkan Doze, yaitu mode sistem yang menghemat baterai dengan menangguhkan +aktivitas CPU dan jaringan di aplikasi bila perangkat sedang diam, misalnya saat +diletakkan di atas meja atau dalam laci.

+ +

Sekarang di Android N, Doze jauh lebih maju dan menghemat baterai saat di perjalanan. +Setiap kali layar mati selama jangka waktu tertentu dan perangkat tidak terhubung ke sumber daya, +Doze akan menerapkan subset pembatasan CPU dan jaringan yang sudah familier pada aplikasi. +Ini berarti pengguna bisa menghemat daya baterai meskipun saat membawa perangkat mereka di +saku.

+ + + +

+ Gambar 3. Doze sekarang menerapkan + pembatasan untuk meningkatkan daya tahan baterai bahkan saat perangkat sedang tidak diam. +

+ + +

Tidak lama setelah layar mati saat perangkat menggunakan daya baterai, Doze +akan membatasi akses jaringan serta menangguhkan pekerjaan dan sinkronisasi. Selama jeda +pemeliharaan singkat, aplikasi diizinkan mengakses jaringan dan menjalankan semua +pekerjaan/sinkronisasi yang ditangguhkan. Menyalakan layar atau menghubungkan perangkat ke listrik akan +menutup Doze di perangkat.

+ +

Bila perangkat dalam kondisi diam lagi, dengan layar mati dan menggunakan daya baterai selama +jangka waktu tertentu, Doze akan menerapkkan pembatasan CPU dan jaringan pada {@link +android.os.PowerManager.WakeLock}, alarm {@link android.app.AlarmManager}, dan +pemindaian GPS/Wi-Fi.

+ +

Praktik terbaik untuk menyesuaikan aplikasi Anda dengan Doze adalah sama, baik +perangkat sedang bergerak maupun diam, jadi jika Anda sudah memperbarui aplikasi untuk +menjalankan Doze dengan lancar, berarti Anda sudah siap. Jika belum, mulailah menyesuaikan +aplikasi Anda dengan Doze sekarang juga.

+ +

Project Svelte: Optimisasi Latar Belakang

+ +

Project Svelte merupakan upaya berkelanjutan untuk meminimalkan penggunaan RAM oleh sistem dan aplikasi +di semua jenis perangkat Android dalam ekosistem. Di Android N, Project +Svelte berfokus pada optimisasi cara aplikasi berjalan di latar belakang.

+ +

Pemrosesan latar belakang adalah bagian sangat penting pada sebagian besar aplikasi. Bila ditangani dengan benar, pemrosesan +ini bisa membuat pengalaman pengguna jadi mengagumkan — segera, cepat, dan sesuai konteks. +Bila tidak ditangani dengan benar, pemrosesan latar belakang bisa menguras RAM (dan +baterai) dengan percuma serta memengaruhi kinerja sistem untuk aplikasi lainnya.

+ +

Sejak Android 5.0, {@link android.app.job.JobScheduler} telah menjadi +cara yang disukai untuk melakukan pekerjaan latar belakang dengan cara yang baik +bagi pengguna. Aplikasi bisa menjadwalkan pekerjaan sekaligus memungkinkan sistem mengoptimalkan berdasarkan +kondisi memori, daya, dan konektivitas. JobScheduler menawarkan kontrol serta +kemudahan, dan kami ingin semua aplikasi menggunakannya.

+ +

+ Opsi baik lainnya adalah + GCMNetworkManager, bagian dari Google Play Services, yang + menawarkan penjadwalan pekerjaan serupa dengan kompatibilitas pada semua versi lama + Android. +

+ +

Kami terus memperluas JobScheduler dan +GCMNetworkManager untuk memenuhi lebih banyak + kasus penggunaan Anda — misalnya, di Android N Anda sekarang bisa menjadwalkan pekerjaan +latar belakang berdasarkan perubahan di Penyedia Konten. Pada saat yang sama kami mulai +menghilangkan beberapa pola lama yang bisa mengurangi kinerja sistem, +terutama pada perangkat yang minim memori.

+ +

Di Android N kami menghilangkan tiga siaran implisit yang umum digunakan — + {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link + android.hardware.Camera#ACTION_NEW_PICTURE}, dan {@link + android.hardware.Camera#ACTION_NEW_VIDEO} — karena ketiganya bisa mengaktifkan +proses latar belakang pada beberapa aplikasi sekaligus serta menguras memori dan baterai. Jika +aplikasi Anda menerimanya, manfaatkan N Developer Preview untuk + beralih ke JobScheduler dan API terkait sebagai gantinya.

+ +

+ Lihat dokumentasi Optimisasi + Latar Belakang untuk mengetahui detailnya. +

+ + +

Data Saver

+ +
+ + +

+ Gambar 4. Data Saver di Settings. +

+
+ +

Selama penggunaan perangkat seluler, biaya paket data seluler biasanya +melebihi harga perangkat itu sendiri. Bagi banyak pengguna, adalah sumber daya +mahal yang ingin mereka hemat.

+ +

Android N memperkenalkan mode Data Saver, layanan sistem baru yang membantu mengurangi +penggunaan data seluler oleh aplikasi, baik sedang roaming, mendekati siklus akhir penagihan, +atau sedang menggunakan paket data prabayar yang kecil. Data Saver memberi pengguna kemampuan mengontrol cara aplikasi +menggunakan data seluler dan memungkinkan pengembang untuk memberikan layanan yang efisien bila Data +Saver sedang aktif.

+ +

Bila pengguna mengaktifkan Data Saver di Settings dan perangkat +dalam jaringan berkuota data, sistem akan memblokir penggunaan data latar belakang dan memberi tahu aplikasi +untuk menghemat penggunaan data latar depan — misalnya dengan membatasi +laju bit untuk streaming, mengurangi kualitas gambar, menangguhkan precaching optimistik, +dan seterusnya. Pengguna bisa memasukkan aplikasi tertentu ke daftar putih untuk memungkinkan penggunaan data berkuota di latar belakang +meskipun saat Data Saver diaktifkan.

+ +

Android N menambah {@link android.net.ConnectivityManager} untuk menyediakan +cara bagi aplikasi untuk mengambil +preferensi Data Saver pengguna dan memantau +perubahan preferensi. Semua aplikasi harus memeriksa apakah pengguna telah mengaktifkan Data +Saver dan melakukan upaya untuk membatasi penggunaan data di latar depan dan latar belakang.

+ + +

Quick Settings Tile API

+ + +
+ + +

+ Gambar 5. Petak Quick Settings dalam bayangan pemberitahuan. +

+ + +

Quick Settings adalah cara populer dan mudah untuk mengekspos pengaturan dan tindakan utama, +langsung dari bayangan pemberitahuan. Di Android N, kami telah memperluas lingkup +Quick Settings untuk membuatnya lebih berguna dan praktis lagi.

+ +

Kami telah menambahkan ruang lebih banyak untuk petak Quick Settings tambahan, yang bisa +diakses pengguna di semua bagian area halaman tampilan bernomor dengan mengusap ke kiri atau kanan. Kami juga menyediakan pengguna +kontrol untuk mengatur letak dan petak Quick Settings apa yang akan +ditampilkan — pengguna bisa menambahkan atau memindahkan petak dengan menyeret dan meletakkannya.

+ +

Bagi pengembang, Android N juga menambahkan API baru yang memungkinkan Anda mendefinisikan + petak Quick Settings agar pengguna bisa dengan mudah mengakses kontrol kunci dan tindakan dalam aplikasi Anda.

+ +

+ Petak Quick Settings dicadangkan untuk kontrol atau tindakan yang + mendesak atau sering digunakan, dan tidak boleh digunakan sebagai pintasan untuk + membuka aplikasi. +

+ +

+ Setelah mendefinisikan petak, Anda bisa menyediakannya kepada pengguna, yang bisa mereka tambahkan + ke Quick Settings cukup dengan menyeret dan meletakkannya. +

+ +

+ Untuk informasi tentang pembuatan petak aplikasi, lihat + android.service.quicksettings.Tile dalam Referensi API yang bisa diunduh. +

+ + + +

Pemblokiran nomor

+ +

Android N sekarang mendukung pemblokiran nomor di platform dan menyediakan +API kerangka kerja agar penyedia layanan bisa mengelola daftar nomor blokir. Aplikasi +SMS default, aplikasi telepon default, dan aplikasi penyedia layanan bisa membaca dari dan +menulis ke daftar nomor blokir. Daftar ini tidak dapat diakses oleh aplikasi lain.

+ +

Dengan membuat pemblokiran nomor sebagai fitur standar pada platformnya, Android menyediakan +cara konsisten bagi aplikasi untuk mendukung pemblokiran nomor di berbagai +perangkat. Manfaat lain yang bisa diperoleh aplikasi antara lain:

+ + + +

Selain itu, dengan integrasi aplikasi operator melalui Android berarti operator bisa +membaca daftar nomor blokir pada perangkat dan melakukan pemblokiran di sisi layanan +bagi pengguna tersebut untuk menghentikan panggilan dan SMS yang tidak diinginkan +agar tidak sampai ke pengguna lewat media apa pun, misalnya VOIP-endpoint atau meneruskan panggilan telepon.

+ +

+ Untuk informasi selengkapnya, lihat android.provider.BlockedNumberContract + dalam Referensi + API yang bisa diunduh. +

+ +

Penyaringan panggilan

+ +

+ Android N memungkinkan aplikasi telepon default untuk menyaring panggilan masuk. Aplikasi + telepon melakukannya dengan mengimplementasikan CallScreeningService baru, + yang memungkinkan aplikasi telepon untuk melakukan sejumlah tindakan berdasarkan + {@link android.telecom.Call.Details Call.Details} panggilan masuk, misalnya: +

+ + + +

+ Untuk informasi selengkapnya, lihat android.telecom.CallScreeningService + dalam Referensi + API yang bisa diunduh. +

+ + +

Dukungan multilokal, lebih banyak bahasa yang didukung

+ + +

Android N sekarang memungkinkan pengguna memilih multiple locales dalam Settings, +untuk mendukung kasus penggunaan dua-bahasa secara lebih baik. Aplikasi bisa menggunakan +API baru untuk mendapatkan lokal pilihan pengguna kemudian menawarkan pengalaman pengguna +yang lebih canggih untuk pengguna multilokal — seperti menampilkan hasil pencarian dalam +beberapa bahasa dan tidak menawarkan untuk menerjemahkan halaman web dalam bahasa +yang sudah diketahui pengguna.

+ +

Bersama dukungan multi-lokal, Android N juga memperluas ragam bahasa +yang tersedia untuk pengguna. Masing-masing ditawarkan lebih dari 25 varian untuk bahasa yang umum +digunakan seperti Inggris, Spanyol, Prancis, dan Arab. Juga ditambahkan dukungan +parsial untuk lebih dari 100 bahasa baru.

+ +

Aplikasi bisa mendapatkan daftar lokal yang diatur oleh pengguna dengan memanggil LocaleList.GetDefault(). Untuk mendukung jumlah lokal yang diperluas, Android N sedang mengubah cara +mengatasi masalah sumber daya. Pastikan Anda menguji dan memverifikasi bahwa aplikasi Anda +berfungsi seperti yang diharapkan dengan logika resolusi sumber daya baru.

+ +

Untuk mempelajari tentang perilaku resolusi sumber daya baru dan praktik terbaik yang +harus Anda ikuti, lihat Dukungan Multibahasa.

+ +

ICU4J API di Android

+ +

+ Android N saat ini menawarkan subset ICU4J API dalam kerangka kerja Android pada + paket android.icu. Migrasinya mudah, dan kebanyakan hanya + perlu mengubah namespace com.java.icu menjadi + android.icu. Jika Anda sudah menggunakan bundel ICU4J dalam aplikasi + Anda, beralih ke android.icu API yang disediakan dalam kerangka kerja + Android bisa menghasilkan penghematan besar dalam ukuran APK. +

+ +

+ Untuk mengetahui selengkapnya tentang Android ICU4J API, lihat Dukungan ICU4J. +

+ + + +

OpenGL™ ES 3.2 API

+ +

Android N menambahkan antarmuka kerangka kerja dan dukungan platform untuk OpenGL ES 3.2, termasuk:

+ + + +

Kerangka kerja API untuk OpenGL ES 3.2 pada Android N dilengkapi dengan kelas +GLES32. Saat menggunakan OpenGL ES 3.2, pastikan Anda + mendeklarasikan persyaratan dalam file manifes, dengan tag <uses-feature> dan +atribut android:glEsVersion.

+ +

Untuk informasi tentang menggunakan OpenGL ES, termasuk cara memeriksa versi +OpenGL ES yang didukung perangkat saat runtime, lihat Panduan API OpenGL ES.

+ + +

Perekaman Android TV

+ +

Android N menambahkan kemampuan untuk merekam dan memutar kembali konten dari layanan input +Android TV melalui API perekaman baru. Karena dibangun dengan API perekaman yang sudah +ada, layanan input TV bisa mengontrol data saluran apa yang bisa direkam, cara menyimpan +sesi rekaman, dan mengelola interaksi pengguna dengan konten rekaman.

+ +

Untuk informasi selengkapnya, lihat API Perekaman Android TV.

+ + +

Android for Work

+ +

Android for Work menambahkan berbagai fitur dan API baru untuk perangkat yang menjalankan Android N. +Beberapa fitur unggulannya ada di bawah ini — untuk mengetahui daftar lengkap pembaruan Android for Work +yang terkait dengan Android N, lihat Perubahan Android for Work.

+ +

Pertanyaan keamanan profil pekerjaan

+ +

+ Pemilik profil bisa menetapkan pertanyaan keamanan terpisah untuk aplikasi yang berjalan dalam + profil pekerjaan. Pertanyaan pekerjaan ditampilkan bila pengguna berusaha membuka + aplikasi pekerjaan. Jawaban pertanyaan keamanan yang benar akan membuka + profil pekerjaan dan mendekripsinya jika diperlukan. Untuk pemilik profil, + ACTION_SET_NEW_PASSWORD akan meminta pengguna untuk menetapkan pertanyaan + pekerjaan, dan ACTION_SET_NEW_PARENT_PROFILE_PASSWORD meminta + pengguna untuk menetapkan kunci perangkat. +

+ +

+ Pemilik profil bisa mengatur kebijakan kata sandi yang berbeda untuk pertanyaan pekerjaan + (seperti berapa lama PIN diperlukan, atau apakah sidik jari bisa digunakan + untuk membuka kunci profil) menggunakan setPasswordQuality(), + setPasswordMinimumLength() dan metode terkait. Pemilik + profil juga bisa menetapkan kunci perangkat menggunakan instance DevicePolicyManager + yang dikembalikan oleh metode getParentProfileInstance() baru. + Selain itu, pemilik profil bisa menyesuaikan layar kredensial untuk + pertanyaan pekerjaan dengan metode setOrganizationColor() dan + setOrganizationName() baru. +

+

Menonaktifkan pekerjaan

+ +

Pada perangkat dengan profil pekerjaan, pengguna bisa berganti-ganti mode pekerjaan. Bila mode pekerjaan +dinonaktifkan maka pengguna yang dikelola untuk sementara akan dinonaktifkan, sehingga menonaktifkan aplikasi profil +pekerjaan, sinkronisasi latar belakang, dan pemberitahuan. Ini termasuk aplikasi pemilik +profil. Bila mode pekerjaan dinonaktifkan, sistem akan menampilkan ikon status menetap +untuk mengingatkan pengguna bahwa mereka tidak bisa membuka aplikasi pekerjaan. Launcher +akan menunjukkan bahwa aplikasi dan widget pekerjaan tidak bisa diakses.

+ +

Always on VPN

+ +

Pemilik perangkat dan pemilik profil bisa memastikan bahwa aplikasi pekerjaan selalu terhubung +melalui VPN yang ditetapkan. Sistem secara otomatis akan memulai VPN itu setelah booting +perangkat.

+ +

+ Metode DevicePolicyManager baru adalah + setAlwaysOnVpnPackage() dan + getAlwaysOnVpnPackage(). +

+ +

Karena layanan VPN bisa diikat langsung oleh sistem tanpa interaksi +aplikasi, klien VPN perlu menangani titik masuk baru untuk Always on VPN. Seperti +sebelumnya, layanan ditunjukkan ke sistem melalui +tindakan pencocokan filter intent android.net.VpnService.

+ +

+ Pengguna bisa secara manual mengatur klien Always on VPN yang mengimplementasikan + metode VPNService dalam pengguna utama dengan menggunakan + Settings>More>Vpn. +

+ +

Penyempurnaan aksesibilitas

+ +

Android N saat ini menawarkan Vision Settings langsung di layar Welcome untuk +penyiapan perangkat baru. Ini sangat memudahkan pengguna untuk menemukan dan mengonfigurasi +fitur aksesibilitas pada perangkat mereka, termasuk gerakan untuk memperbesar, ukuran +font, ukuran layar, dan TalkBack.

+ +

Dengan fitur aksesibilitas yang penempatannya semakin jelas, pengguna Anda +kemungkinan besar akan mencoba aplikasi dengan fitur-fitur yang diaktifkan itu. Pastikan Anda menguji aplikasi +lebih dini dengan mengaktifkan dahulu pengaturan fitur ini. Anda bisa mengaktifkannya dari Settings > +Accessibility.

+ +

Di Android N, layanan aksesibilitas sekarang bisa membantu pengguna yang mengalami gangguan +motorik untuk menyentuh layar. API baru memungkinkan membangun layanan dengan +fitur-fitur seperti pelacakan wajah, pelacakan mata, pemindaian titik, dan seterusnya, untuk +memenuhi kebutuhan para pengguna tersebut.

+ +

Untuk informasi selengkapnya, lihat android.accessibilityservice.GestureDescription + dalam Referensi API yang bisa diunduh.

+ + +

Direct Boot

+ +

Direct Boot memperbaiki waktu startup perangkat dan memungkinkan aplikasi +yang telah didaftarkan memiliki fungsionalitas terbatas bahkan setelah reboot tak terduga. +Misalnya, jika perangkat yang direnkripsi melakukan reboot selagi pengguna tidur, +alarm terdaftar, pesan dan panggilan masuk sekarang bisa terus memberi tahu +pengguna seperti biasa. Ini juga berarti layanan aksesibilitas bisa segera + tersedia setelah restart.

+ +

Boot langsung memanfaatkan enkripsi berbasis file di Android N +untuk mengaktifkan kebijakan enkripsi yang halus bagi sistem dan data aplikasi. +Sistem akan menggunakan penyimpanan yang dienkripsi dengan perangkat untuk data sistem terpilih dan data +aplikasi yang terdaftar secara eksplisit. Secara default, penyimpanan yang dienkripsi dengan kredensial digunakan untuk semua + data sistem lainnya, data pengguna, aplikasi, dan data aplikasi.

+ +

Saat boot, sistem dimulai dalam mode terbatas dengan akses +ke data yang dienkripsi dengan perangkat saja, dan tanpa akses umum ke aplikasi atau data. +Jika Anda memiliki komponen yang ingin Anda jalankan dalam mode ini, Anda bisa mendaftarkannya +dengan mengatur flag dalam manifes. Setelah restart, sistem akan mengaktifkan +komponen terdaftar dengan menyiarkan intent LOCKED_BOOT_COMPLETED. +Sistem akan memastikan data aplikasi yang dienkripsi dengan perangkat tersedia +sebelum membuka kunci. Semua data lainnya tidak tersedia sebelum Pengguna mengonfirmasi kredensial + layar kunci mereka untuk mendekripsinya.

+ +Untuk informasi selengkapnya, lihat Direct Boot.

+

+ + +

Pengesahan Kunci

+ +

Keystore yang didukung perangkat keras menyediakan metode yang jauh lebih aman untuk membuat, menyimpan, +dan menggunakan kunci kriptografi pada perangkat Android. Keystore itu melindungi kunci dari +kernel Linux, potensi kerentanan Android, dan ekstraksi +dari perangkat yang di-root.

+ +

Agar lebih mudah dan lebih aman dalam menggunakan keystore yang didukung perangkat keras, +Android N memperkenalkan Pengesahan Kunci. Aplikasi dan perangkat-nonaktif bisa menggunakan Pengesahan +Kunci untuk menentukan apakah pasangan kunci RSA atau EC +didukung perangkat keras, apa properti dari pasangan kunci, dan batasan + apa yang diterapkan terhadap penggunaan dan validitasnya.

+ +

Aplikasi dan layanan perangkat-nonaktif bisa meminta informasi tentang pasangan kunci +melalui sertifikat pengesahan X.509 yang harus ditandatangani dengan kunci +pengesahan yang valid. Kunci pengesahan adalah kunci penandatangan ECDSA yang +telah diinjeksikan ke dalam keystore yang didukung perangkat keras pada perangkat saat di pabriknya. +Karena itu, sertifikat pengesahan yang ditandatangani oleh kunci pengesahan yang +valid akan mengonfirmasi keberadaan keystore yang didukung perangkat keras, bersama + detail pasangan kunci dalam keystore itu.

+ +

Untuk memastikan perangkat ini menggunakan citra Android resmi yang +aman dari pabrik, Pengesahan Kunci mengharuskan bootloader perangkat +menyediakan informasi berikut kepada Trusted +Execution Environment (TEE):

+ + + +

Untuk informasi selengkapnya tentang fitur keystore yang didukung perangkat keras, +lihat panduan untuk Keystore yang Didukung Perangkat Keras.

+ +

Selain Pengesahan Kunci, Android N juga memperkenalkan + kunci yang terikat sidik jari yang tidak dipanggil saat pendaftaran sidik jari.

+ +

Network Security Config

+ +

Di Android N, aplikasi bisa menyesuaikan perilaku koneksi aman mereka +(HTTPS, TLS) secara aman, tanpa modifikasi kode, dengan menggunakan +Network Security Config deklaratif sebagai ganti menggunakan API programatik +konvensional yang rawan kesalahan (misalnya X509TrustManager).

+ +

Fitur yang didukung:

+ + +

Untuk informasi selengkapnya, lihat Network Security +Config.

+ +

Certificate Authority Tepercaya Default

+ +

Secara default, aplikasi yang menargetkan Android N hanya mempercayai sertifikat yang disediakan sistem +dan tidak lagi mempercayai Certificate Authorities (CA) yang ditambahkan pengguna. Aplikasi yang menargetkan Android +N dan ingin mempercayai CA yang ditambahkan pengguna harus menggunakan +Network Security Config untuk +menetapkan cara mempercayai CA pengguna.

+ +

APK Signature Scheme v2

+ +

Kelas PackageManager sekarang mendukung verifikasi aplikasi menggunakan +APK Signature Scheme v2. APK Signature Scheme v2 adalah skema tanda tangan seluruh file +yang secara signifikan meningkatkan kecepatan verifikasi dan memperkuat jaminan + integritas dengan mendeteksi setiap perubahan tidak sah terhadap file APK.

+ +

Untuk menjaga kompatibilitas mundur, APK harus ditandatangani dengan Signature Scheme +v1 (skema tanda tangan JAR) sebelum ditandatangani dengan Signature Scheme v2. +Dengan Signature Scheme v2, verifikasi akan gagal jika Anda menandatangani APK dengan + sertifikat tambahan setelah menandatangani dengan Signature Scheme v2.

+ +

Dukungan APK Signature Scheme v2 akan tersedia nanti dalam N Developer +Preview.

+ +

Scoped Directory Access

+ +

Di Android N, aplikasi bisa menggunakan API baru untuk meminta akses ke direktori penyimpanan +eksternal tertentu, termasuk direktori di media lepas-pasang seperti kartu +SD. API baru ini sangat menyederhanakan cara aplikasi Anda mengakses direktori +penyimpanan eksternal standar, seperti direktori Pictures. Aplikasi +seperti aplikasi foto bisa menggunakan API ini sebagai ganti menggunakan +READ_EXTERNAL_STORAGE, yang memberikan akses ke semua direktori +penyimpanan, atau Storage Access Framework, yang membuat pengguna mengarah ke +direktori tersebut.

+ +

Selain itu, API baru ini menyederhanakan langkah-langkah yang diambil pengguna untuk memberikan akses +penyimpanan eksternal ke aplikasi Anda. Bila Anda menggunakan API baru, sistem akan menggunakan UI izin +sederhana yang memperinci dengan jelas direktori apa yang aksesnya diminta +oleh aplikasi.

+ +

Untuk informasi selengkapnya, lihat dokumentasi pengembang +Scoped +Directory Access.

+ + + + + + diff --git a/docs/html-intl/intl/in/preview/behavior-changes.jd b/docs/html-intl/intl/in/preview/behavior-changes.jd new file mode 100644 index 000000000000..40be38b8add2 --- /dev/null +++ b/docs/html-intl/intl/in/preview/behavior-changes.jd @@ -0,0 +1,480 @@ +page.title=Perubahan Perilaku +page.keywords=preview,sdk,compatibility +meta.tags="preview", "kompatibilitas" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-changes_2x.png +@jd:body + + + + + +

+ Selain fitur dan kemampuan baru, Android N + juga menyertakan berbagai perubahan perilaku sistem dan API. Dokumen ini + menyoroti beberapa perubahan utama yang harus dipahami dan diperhitungkan + dalam aplikasi Anda. +

+ +

+ Jika Anda sebelumnya telah mempublikasikan aplikasi untuk Android, ketahuilah bahwa aplikasi Anda + mungkin akan terpengaruh oleh perubahan dalam platform ini. +

+ + +

Peningkatan Kinerja

+ +

+ Android N berisi perubahan perilaku sistem yang bertujuan meningkatkan daya tahan + baterai perangkat, penggunaan RAM, dan kinerja aplikasi. Perubahan-perubahan ini bisa memengaruhi + ketersediaan sumber daya sistem dan pemberitahuan sistem bagi aplikasi. Anda + harus meninjau perubahan ini dan mengevaluasi cara menyesuaikan aplikasi Anda terhadap perubahan + tersebut. +

+ +

Doze

+ +

+ Diperkenalkan dalam Android 6.0 (API level 23), Doze meningkatkan daya tahan baterai dengan + menangguhkan aktivitas CPU dan jaringan bila pengguna mencabut steker perangkat, + diam, dan layar dinonaktifkan. Android N + menyempurnakan Doze lebih jauh dengan menerapkan subset CPU dan pembatasan jaringan + bila perangkat dicabut stekernya dan layar dinonaktifkan, namun tidak harus + diam, misalnya, bila handset dibawa bepergian di saku pengguna. +

+ + + +

+ Gambar 1. Ilustrasi tentang cara Doze menerapkan pembatasan + aktivitas sistem tingkat pertama untuk meningkatkan daya tahan baterai. +

+ +

+ Bila perangkat sedang menggunakan daya baterai, dan layar telah nonaktif selama jangka waktu + tertentu, perangkat akan memasuki Doze dan menerapkan pembatasan subset pertama: Perangkat + akan menutup akses jaringan aplikasi, serta menangguhkan pekerjaan dan sinkronisasi. Jika perangkat + sedang diam selama jangka waktu tertentu setelah memasuki Doze, sistem akan menerapkan pembatasan + Doze lainnya terhadap alarm {@link android.os.PowerManager.WakeLock}, + {@link android.app.AlarmManager}, GPS, dan pemindaian Wi-Fi. Tidak peduli + apakah sebagian atau semua pembatasan Doze diterapkan, sistem akan membangunkan + perangkat selama jeda pemeliharaan singkat, dan selama itu aplikasi diizinkan + mengakses jaringan dan bisa mengeksekusi semua pekerjaan/sinkronisasi yang telah ditangguhkan. +

+ + + +

+ Gambar 2. Ilustrasi tentang cara Doze menerapkan pembatasan + aktivitas sistem tingkat kedua setelah perangkat diam selama jangka waktu tertentu. +

+ +

+ Perhatikan, mengaktifkan layar atau memasang steker perangkat akan menyebabkan keluar dari Doze dan + menghilangkan pembatasan pemrosesan ini. Perilaku tambahan ini tidak + memengaruhi rekomendasi dan praktik terbaik dalam menyesuaikan aplikasi Anda dengan versi + Doze sebelumnya yang diperkenalkan dalam Android 6.0 (API level 23), seperti yang dibahas di + + Mengoptimalkan untuk Doze dan App Standby. Anda tetap harus + mengikuti rekomendasi itu, seperti menggunakan Google Cloud Messaging (GCM) untuk + mengirim dan menerima pesan, dan mulai merencanakan pembaruan untuk mengakomodasi + perilaku Doze tambahan. +

+ + +

Project Svelte: Optimisasi Latar Belakang

+ +

+ Android N menghilangkan tiga siaran implisit untuk membantu mengoptimalkan + penggunaan memori dan konsumsi daya. Perubahan ini penting karena siaran + implisit sering memulai aplikasi yang telah didaftarkan untuk mendengarkannya di + latar belakang. Menghilangkan siaran ini bisa sangat menguntungkan kinerja perangkat dan pengalaman + pengguna. +

+ +

+ Perangkat seluler sering mengalami perubahan konektivitas, seperti saat berpindah + antara Wi-Fi dan data seluler. Saat ini, aplikasi bisa memantau perubahan dalam + konektivitas dengan mendaftarkan suatu penerima untuk siaran implisit {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} dalam manifes + mereka. Karena banyak aplikasi yang didaftarkan untuk menerima siaran ini, switch + jaringan tunggal bisa menyebabkan semuanya aktif dan memproses siaran tersebut + secara bersamaan. +

+ +

+ Demikian pula, aplikasi bisa mendaftar untuk menerima siaran implisit {@link + android.hardware.Camera#ACTION_NEW_PICTURE} dan {@link + android.hardware.Camera#ACTION_NEW_VIDEO} dari aplikasi lain, seperti + Kamera. Bila pengguna mengambil gambar dengan aplikasi Kamera, semua aplikasi ini akan aktif + untuk memproses siaran. +

+ +

+ Untuk meminimalkan masalah ini, Android N menerapkan optimisasi + berikut: +

+ + + +

+ Rilis Android mendatang mungkin akan menghilangkan siaran implisit tambahan, + juga layanan latar belakang tak terikat. Karena itu, Anda harus menghindari atau + menghilangkan dependensi terhadap penerima yang dideklarasikan manifes untuk siaran implisit, + serta layanan latar belakang. +

+ +

+ Kerangka kerja Android menyediakan beberapa solusi untuk mengurangi kebutuhan akan + siaran implisit atau layanan latar belakang ini. Misalnya, {@link + android.app.job.JobScheduler} API menyediakan mekanisme yang tangguh untuk menjadwalkan + operasi jaringan bila syarat yang ditetapkan terpenuhi, misalnya koneksi ke suatu + jaringan berbiaya tetap. Anda bahkan bisa menggunakan {@link + android.app.job.JobScheduler} untuk bereaksi terhadap perubahan kepada penyedia konten. +

+ +

+ Untuk informasi selengkapnya tentang perubahan perilaku ini dan cara menyesuaikan aplikasi Anda, + lihat Optimalisasi + Latar Belakang. +

+ + +

Perubahan Izin

+ +

+ Android N menyertakan perubahan pada izin yang bisa memengaruhi aplikasi Anda, + termasuk izin akun pengguna dan izin baru untuk menulis ke + penyimpanan eksternal. Inilah rangkuman izin-izin yang telah berubah dalam + preview: +

+ + + + + +

Peningkatan Aksesibilitas

+ +

+ Android N menyertakan perubahan yang bertujuan meningkatkan kegunaan + platform ini untuk pengguna dengan penglihatan yang kurang atau lemah. Perubahan ini secara umum tidak + akan mengharuskan perubahan kode dalam aplikasi Anda, akan tetapi Anda harus meninjau + fitur ini dan mengujinya dengan aplikasi Anda untuk menilai dampak potensial terhadap pengalaman + pengguna. +

+ + +

Zoom Layar

+ +

+ Android N memungkinkan pengguna untuk mengatur Display size yang akan memperbesar + atau memperkecil semua elemen pada layar, sehingga meningkatkan aksesibilitas perangkat + bagi pengguna yang kurang melihat. Pengguna tidak bisa memperbesar layar melewati lebar layar + minimum + sw320dp, yang merupakan lebar Nexus 4, yakni ponsel ukuran sedang pada umumnya. +

+ +
+ +
+ +
+
+ +
+ +
+

+ Gambar 3. Layar di sebelah kanan menampilkan efek + penambahan Display size perangkat yang menjalankan citra sistem Android N. +

+ + +

+ Bila densitas perangkat berubah, sistem akan memberi tahu aplikasi yang sedang berjalan dengan + cara berikut: +

+ + + +

+ Sebagian besar aplikasi tidak perlu melakukan perubahan untuk mendukung fitur ini, asalkan + aplikasi tersebut mengikuti praktik terbaik Android. Hal-hal tertentu yang harus diperiksa: +

+ + + +

Vision Settings di Setup Wizard

+ +

+ Android N menyertakan Vision Settings pada layar Welcome, di mana pengguna bisa + menyiapkan pengaturan aksesibilitas berikut pada perangkat baru: + Magnification gesture, Font size, + Display size dan TalkBack. Perubahan ini + menambah visibilitas bug yang terkait dengan berbagai pengaturan layar. Untuk + menilai dampak dari fitur ini, Anda harus menguji aplikasi dengan mengaktifkan + pengaturan ini. Anda bisa menemukan pengaturan ini pada Settings > + Accessibility. +

+ +

Menautkan Aplikasi NDK ke Pustaka Platform

+ +

+ Android N menyertakan perubahan namespace untuk mencegah pemuatan API non-publik. + Jika Anda menggunakan NDK, Anda hanya bisa menggunakan API publik dari platform + Android. Menggunakan API non-publik dalam rilis Android resmi berikutnya + bisa menyebabkan aplikasi mengalami crash. +

+ +

+ Untuk memperingatkan Anda terhadap penggunaan API non-publik, aplikasi yang berjalan pada perangkat + Android N akan menghasilkan kesalahan output logcat bila sebuah aplikasi memanggil API non-publik. + Kesalahan ini juga ditampilkan pada layar perangkat berupa pesan untuk membantu + meningkatkan kesadaran akan situasi ini. Anda harus meninjau kode aplikasi untuk + menghilangkan penggunaan API platform non-publik dan secara saksama menguji aplikasi Anda menggunakan + perangkat preview atau emulator. +

+ +

+ Jika aplikasi Anda bergantung pada pustaka platform, lihat dokumentasi NDK untuk + perbaikan tipikal guna menggantikan API privat umum dengan padanan API publik. + Anda mungkin juga menautkan ke pustaka platform tanpa menyadarinya, + terutama jika aplikasi Anda menggunakan pustaka yang merupakan bagian dari platform ini (seperti + libpng), namun bukan bagian dari NDK. Dalam hal ini, pastikan + APK Anda berisi semua file .so yang ingin ditautkan. +

+ +

+ Peringatan: Beberapa pustaka pihak ketiga mungkin menautkan ke API + non-publik. Jika aplikasi Anda menggunakan pustaka ini, aplikasi Anda mungkin akan crash saat dijalankan + pada rilis resmi Android berikutnya. +

+ +

+ Aplikasi tidak boleh bergantung pada atau menggunakan pustaka bawaan yang tidak disertakan dalam + NDK, karena bisa mengalami perubahan, atau dipindahkan dari satu rilis Android ke + rilis lainnya. Peralihan dari OpenSSL ke BoringSSL merupakan satu contoh dari perubahan semacam ini. + Selain itu, perbedaan perangkat juga bisa menawarkan tingkat kompatibilitas, karena + tidak ada persyaratan kompatibilitas bagi pustaka platform yang tidak disertakan + dalam NDK. Jika Anda harus mengakses pustaka non-NDK pada perangkat yang lebih lama, jadikan + pemuatan bergantung pada level API Android. +

+ +

+ Untuk membantu Anda mendiagnosis tipe masalah ini ada beberapa contoh kesalahan Java dan NDK + yang mungkin Anda temui saat berusaha membangun aplikasi dengan Android N: +

+ +

Contoh kesalahan Java:

+
+java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
+    is not accessible for the namespace "classloader-namespace"
+
+ +

Contoh kesalahan NDK:

+
+dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
+
+ + +

+ Inilah beberapa perbaikan tipikal untuk aplikasi yang mengalami tipe kesalahan ini: +

+ + + +

Android for Work

+

+ Android N berisi perubahan untuk aplikasi yang menargetkan Android for Work, termasuk + perubahan pada instalasi sertifikat, pengaturan ulang kata sandi, manajemen pengguna + tambahan, dan akses ke identifier perangkat. Jika Anda membangun aplikasi untuk + lingkungan Android for Work, Anda harus meninjau perubahan ini dan memodifikasi + aplikasi sebagaimana mestinya. +

+ + + +

+ Untuk informasi selengkapnya tentang perubahan pada Android for Work di Android N, lihat + Pembaruan Android for Work. +

+ +

Poin penting lainnya

+ + + diff --git a/docs/html-intl/intl/in/preview/download.jd b/docs/html-intl/intl/in/preview/download.jd new file mode 100644 index 000000000000..565ed90b6ab6 --- /dev/null +++ b/docs/html-intl/intl/in/preview/download.jd @@ -0,0 +1,541 @@ +page.title=Menguji pada Perangkat +meta.tags="preview", "nexus","citra sistem" +page.tags="preview", "androidn" +page.image=images/cards/card-n-downloads_2x.png + +@jd:body + +
+ + + + +
+ + + +

+ Untuk menjalankan dan menguji aplikasi Anda pada platform baru, Anda perlu menyiapkan lingkungan runtime + Android N. Anda bisa melakukannya dengan salah satu cara ini: +

+ +
    +
  • Instal Android N pada perangkat keras yang didukung, atau
  • +
  • Siapkan emulator Android yang menjalankan Android N
  • +
+ +

+ Jika Anda ingin lingkungan untuk pengujian kompatibilitas dasar aplikasi Anda pada + platform baru, maka Anda hanya perlu APK saat ini dan perangkat keras atau + emulator. Anda tidak perlu memperbarui lingkungan + pengembangan penuh untuk melakukan pengujian dasar. +

+ +

+ Jika Anda ingin memodifikasi aplikasi untuk menargetkan Android N atau menggunakan API baru Android N, + Anda perlu menyiapkan lingkungan pengembangan yang telah diperbarui untuk mendukung + Android N. Menyiapkan Pengembangan + Android N berisi detail mengenai hal ini. +

+ + +

Menyiapkan perangkat keras

+ +

+ N Developer Preview menawarkan pembaruan sistem untuk berbagai jenis perangkat keras + yang bisa Anda gunakan untuk menguji aplikasi Anda, dari ponsel hingga tablet dan TV. +

+ +

+ Jika Anda memiliki akses ke perangkat yang didukung, Anda bisa memperbaruinya ke build tahapan pencapaian Developer + Preview dengan salah satu cara berikut: +

+ +
    +
  • Daftarkan perangkat dalam pembaruan sistem OTA otomatis melalui + Android Beta Program. Setelah didaftarkan, perangkat Anda akan menerima pembaruan + lewat jaringan seluler (OTA) untuk semua build tahapan pencapaian dalam N Developer Preview. Pendekatan + ini disarankan karena akan membantu Anda melakukan transisi secara mulus dari lingkungan saat ini + ke berbagai rilis N Developer Preview.
  • +
  • Unduh citra sistem a Developer Preview dan flash perangkat. + Pembaruan OTA tidak disediakan secara otomatis untuk perangkat yang Anda flash secara manual, namun + Anda bisa mendaftarkan perangkat tersebut dalam Android Beta Program untuk memperoleh pembaruan OTA.
  • +
+ +

Mendaftarkan perangkat dalam pembaruan OTA otomatis

+ +

+ Jika Anda memiliki akses ke perangkat yang didukung (lihat daftar dalam tabel + Unduhan), Anda bisa menerima pembaruan lewat jaringan seluler ke versi preview Android + dengan mendaftarkan perangkat itu ke Android Beta Program. Pembaruan ini + secara otomatis akan diunduh dan memperbarui perangkat Anda seperti + pembaruan sistem resmi. +

+ +

+ Anda bisa membatalkan pendaftaran perangkat kapan saja. Perangkat akan menerima pembaruan OTA + ke versi produksi terbaru Android yang tersedia untuk perangkat itu + (misalnya, Android 6.0 Marshmallow). Pembaruan mengharuskan pengaturan ulang + perangkat secara penuh, jadi data pengguna pada perangkat itu akan dihapus. Pastikan mencadangkan + data penting sebelum membatalkan pendaftaran perangkat. +

+ +

+ Untuk informasi selengkapnya dan untuk mendaftarkan perangkat Anda, lihat + situs web Android Beta Program. +

+ +

Catatan: + Membatalkan pendaftaran mengharuskan pengaturan ulang perangkat secara penuh. Cadangkan + data penting terlebih dahulu. +

+ +

Mem-flash perangkat secara manual

+ +

+ Anda bisa mengunduh citra sistem Developer Preview terbaru dan + mem-flash-nya secara manual ke perangkat Anda. Lihat tabel di bawah untuk mengunduh citra sistem + bagi perangkat pengujian Anda. Mem-flash perangkat secara manual berguna jika Anda harus + mengontrol secara persis lingkungan pengujian tersebut atau harus menginstal ulang secara rutin, + misalnya untuk pengujian otomatis. +

+ +

+ Menginstal citra sistem pada perangkat akan menghapus semua data dari + perangkat, karena itu Anda harus mencadangkan data terlebih dahulu. +

+ +

+ Setelah Anda mencadangkan data perangkat dan mengunduh citra sistem di bawah ini yang + sesuai dengan perangkat Anda, ikuti instruksi di developers.google.com/android + untuk mem-flash citra ini ke perangkat Anda. +

+ +

+ Mem-flash citra sistem secara manual + tidak secara otomatis akan menerima pembaruan OTA ke build + tahapan pencapaian Developer Preview terbaru. Pastikan lingkungan Anda selalu diperbarui dan lakukan flash + citra sistem yang baru di setiap tahapan pencapaian Developer Preview. +

+ +

+ Jika Anda memutuskan ingin mendapatkan pembaruan OTA setelah mem-flash perangkat secara manual, + Anda tinggal mendaftarkan perangkat dalam + Android Beta Program. Anda bisa mendaftarkan perangkat kapan saja untuk menerima pembaruan Preview + berikutnya lewat jaringan seluler. +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PerangkatUnduhan / Checksum
Nexus 5X
"bullhead"
bullhead-npc56p-preview-6c877a3d.tgz
+ MD5: b5cf874021023b398f5b983b24913f5d
+ SHA-1: 6c877a3d9fae7ec8a1678448e325b77b7a7b143a +
Nexus 6
"shamu"
shamu-npc56p-preview-54b13c67.tgz
+ MD5: af183638cf34e0eb944a1957d7696f60
+ SHA-1: 54b13c6703d369cc79a8fd8728fe4103c6343973 +
Nexus 6P
"angler"
angler-npc56p-preview-85ffc1b1.tgz
+ MD5: bc4934ea7bd325753eee1606d3725a24
+ SHA-1: 85ffc1b1be402b1b96f9ba10929e86bba6c6c588 +
Nexus 9
"volantis"
volantis-npc56p-preview-0e8ec8ef.tgz
+ MD5: c901334c6158351e945f188167ae56f4
+ SHA-1: 0e8ec8ef98c7a8d4f58d15f90afc5176303efca4 +
Nexus 9G
"volantisg"
volantisg-npc56p-preview-1bafdbfb.tgz
+ MD5: 7bb95bebc478d7257cccb4652899d1b4
+ SHA-1: 1bafdbfb502e979a9fe4c257a379c4c7af8a3ae6 +
Nexus Player
"fugu"
fugu-npc56r-preview-7027d5b6.tgz
+ MD5: f5d3d8f75836ccfe4c70e8162e498be4
+ SHA-1: 7027d5b662bceda4c80a91a0a14ef0e5a7ba795b +
Pixel C
"ryu"
ryu-npc56p-preview-335a86a4.tgz
+ MD5: 4e21fb183bbbf467bee91598d587fd2e
+ SHA-1: 335a86a435ee51f18464de343ad2e071c38f0e92 +
General Mobile 4G (Android One)
"seed"
seed_l8150-npc56p-preview-82472ebc.tgz
+ MD5: 983e083bc7cd0c4a2d39d6ebaa20202a
+ SHA-1: 82472ebc9a6054a103f53cb400a1351913c95127 +
+ +

Menghapus instalasi Preview dari perangkat

+ +

+ Jika Anda ingin menghapus instalasi Preview dari perangkat, Anda bisa melakukannya dengan salah satu cara + ini:

+ + +

Catatan: + Menghapus instalasi citra sistem Developer Preview sebelum + program berakhir akan mengharuskan perangkat diatur ulang secara penuh dan menghapus semua data pengguna + pada perangkat. +

+ + +

Menyiapkan emulator

+ +

Untuk menggunakan Android Emulator guna menjalankan Android N Preview, Anda perlu +mengunduh Android N Preview SDK dan membuat perangkat maya untuk +emulator.

+ +

Pertama, unduh Android N Preview SDK sebagai berikut (jika +Anda sudah memperolehnya saat menyiapkan +pengembangan Android N, Anda bisa melewatkan bagian ini): + +

    +
  1. Di Android Studio, buka dialog Settings + (File > Settings pada Windows/Linux, atau + Android Studio > Preferences pada Mac). Di panel kiri, + pilih Appearance & Behavior > + System Settings > Android SDK. + +
  2. Klik tab SDK Platforms, kemudian pilih kotak cek + Android N Preview.
  3. + +
  4. Klik tab SDK Tools, kemudian pilih + kotak cek Android SDK Build Tools, Android SDK + Platform-Tools, dan Android SDK Tools. + +
  5. + +
  6. Klik OK, dan terima + perjanjian lisensi untuk setiap paket yang akan diinstal. +
  7. +
+ +

Sekarang Anda seharusnya telah memiliki Android SDK Built-Tools 24.0 0 rc1, +Platform-Tools 24.0.0 rc1, dan SDK Tools +25.0.9. Jika Anda tidak memperbarui SDK Tools ke 25.0.9, maka Anda tidak akan +dapat menjalankan citra sistem x86_64 untuk Android N.

+ + +

Sekarang buatlah perangkat maya dengan citra sistem Android N:

+ +
    +
  1. Buka AVD Manager dengan memilih Tools > Android > + AVD Manager.
  2. +
  3. Klik Create Virtual Device.
  4. +
  5. Pilih perangkat misalnya Nexus 5X, Nexus 6P, Nexus 9, atau Android TV, + kemudian klik Next.
  6. +
  7. Pilih citra sistem N (dengan + x86 ABI), kemudian klik Next. + (Hanya citra sistem x86 yang saat ini didukung dengan Emulator +untuk Android N Preview.) +
  8. Selesaikan konfigurasi AVD selanjutnya dan klik + Finish.
  9. +
+ +

Anda sekarang bisa meluncurkan Emulator Android dengan Android N Preview AVD.

+ +

+Untuk mendapatkan pengalaman terbaik di Android Emulator, instal +Android Studio 2.1 Preview, yang mendukung Android Emulator 2.0 Beta +dengan kinerja jauh lebih cepat dibandingkan Emulator di +Android Studio 1.5.

+ +

Catatan: + Jika Anda saat ini menggunakan Android Studio 2.0 Beta, maka ada masalah yang telah diketahui + yang mencegah Anda membuat AVD dengan citra sistem N Preview, jadi + Anda saat ini perlu menggunakan preview Android Studio 2.1 untuk membuat AVD. +

+ +

Untuk informasi selengkapnya tentang membuat perangkat maya, lihat Mengelola Perangkat Maya. +

+ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html-intl/intl/in/preview/features/background-optimization.jd b/docs/html-intl/intl/in/preview/features/background-optimization.jd new file mode 100644 index 000000000000..2836959af990 --- /dev/null +++ b/docs/html-intl/intl/in/preview/features/background-optimization.jd @@ -0,0 +1,388 @@ +page.title=Optimisasi Latar Belakang +page.metaDescription=Pembatasan baru untuk siaran implisit. +page.keywords="android N", "implicit broadcasts", "job scheduler" +@jd:body + + + +

+ Proses latar belakang bisa menguras memori dan baterai. Misalnya, sebuah + siaran implisit dapat memulai banyak proses latar belakang yang telah didaftarkan + untuk mendengarkannya, sekalipun proses-proses itu mungkin tidak melakukan banyak pekerjaan. Ini bisa + berdampak besar pada kinerja perangkat dan pengalaman pengguna. +

+ +

+ Untuk meminimalkan masalah ini, N Developer Preview menerapkan pembatasan + berikut: +

+ + + +

+ Kerangka kerja Android menyediakan beberapa solusi untuk mengurangi kebutuhan akan + siaran implisit ini. Misalnya, {@link android.app.job.JobScheduler} + dan + {@code GcmNetworkManager} menyediakan mekanisme yang tangguh untuk menjadwalkan operasi + jaringan bila kondisi yang ditetapkan, seperti koneksi ke jaringan + berbiaya tetap, terpenuhi. Anda sekarang juga bisa menggunakan {@link android.app.job.JobScheduler} + untuk bereaksi terhadap perubahan penyedia konten. Objek {@link android.app.job.JobInfo} + membungkus parameter yang digunakan {@link android.app.job.JobScheduler} + untuk menjadwalkan pekerjaan Anda. Bila syarat-syarat pekerjaan sudah terpenuhi, sistem + akan mengeksekusi pekerjaan ini pada {@link android.app.job.JobService} aplikasi Anda. +

+ +

+ Dalam dokumen ini, kita akan mempelajari cara menggunakan metode alternatif, seperti + {@link android.app.job.JobScheduler}, untuk menyesuaikan aplikasi Anda dengan pembatasan + yang baru. +

+ +

+ Pembatasan pada CONNECTIVITY_ACTION +

+ +

+ Aplikasi yang menargetkan N Developer Preview tidak menerima siaran {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} jika mereka + mendaftar untuk menerimanya dalam manifes mereka, dan proses yang bergantung pada siaran + ini tidak akan dimulai. Hal ini bisa menimbulkan masalah bagi aplikasi yang ingin + mendengarkan perubahan jaringan atau melakukan aktivitas jaringan dalam jumlah besar bila perangkat + menghubungkan ke jaringan berbiaya tetap. Beberapa solusi untuk menyiasati pembatasan + ini sudah ada dalam kerangka kerja Android, namun pemilihan solusi + yang tepat bergantung pada apa yang ingin dicapai oleh aplikasi Anda. +

+ +

+ Catatan: Sebuah {@link android.content.BroadcastReceiver} yang didaftarkan dengan + {@link android.content.Context#registerReceiver Context.registerReceiver()} + akan terus menerima siaran ini saat aplikasi berada di latar depan. +

+ +

+ Menjadwalkan Pekerjaan Jaringan pada Koneksi Berbiaya Tetap +

+ +

+ Saat menggunakan kelas {@link android.app.job.JobInfo.Builder JobInfo.Builder} + untuk membuat objek {@link android.app.job.JobInfo} Anda, terapkan metode {@link + android.app.job.JobInfo.Builder#setRequiredNetworkType + setRequiredNetworkType()} dan teruskan {@link android.app.job.JobInfo + JobInfo.NETWORK_TYPE_UNMETERED} sebagai parameter pekerjaan. Contoh kode berikut + menjadwalkan layanan yang akan dijalankan bila perangkat menghubungkan ke jaringan + berbiaya tetap dan saat mengisi baterai: +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+      (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo job = new JobInfo.Builder(
+    MY_BACKGROUND_JOB,
+    new ComponentName(context, MyJobService.class))
+      .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
+      .setRequiresCharging(true)
+      .build();
+  js.schedule(job);
+}
+
+ +

+ Bila syarat untuk pekerjaan Anda terpenuhi, aplikasi Anda akan menerima callback untuk menjalankan + metode {@link android.app.job.JobService#onStartJob onStartJob()} dalam + {@code JobService.class} yang ditetapkan. Untuk melihat contoh selengkapnya mengenai implementasi {@link + android.app.job.JobScheduler}, lihat aplikasi contoh JobScheduler. +

+ +

+ Aplikasi yang menggunakan layanan GMSCore, dan menargetkan Android 5.0 (API tingkat 21) + atau lebih rendah, bisa menggunakan + {@code GcmNetworkManager} dan menetapkan {@code Task.NETWORK_STATE_UNMETERED}. +

+ +

+ Memantau Konektivitas Jaringan Saat Aplikasi Dijalankan +

+ +

+ Aplikasi yang berjalan di latar depan tetap bisa mendengarkan {@code + CONNECTIVITY_CHANGE} dengan {@link + android.content.BroadcastReceiver} yang didaftarkan. Akan tetapi, {@link + android.net.ConnectivityManager} API menyediakan metode yang lebih tangguh untuk meminta + callback hanya bila syarat jaringan yang ditetapkan terpenuhi. +

+ +

+ Objek {@link android.net.NetworkRequest} mendefinisikan parameter + callback jaringan dari segi {@link android.net.NetworkCapabilities}. Anda + membuat objek {@link android.net.NetworkRequest} dengan kelas {@link + android.net.NetworkRequest.Builder NetworkRequest.Builder}. {@link + android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, + android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} + kemudian meneruskan objek {@link android.net.NetworkRequest} ke sistem. Bila + syarat jaringan terpenuhi, aplikasi akan menerima callback untuk mengeksekusi + metode {@link android.net.ConnectivityManager.NetworkCallback#onAvailable + onAvailable()} yang didefinisikan dalam kelas {@link + android.net.ConnectivityManager.NetworkCallback}. +

+ +

+ Aplikasi akan terus menerima callback hingga aplikasi keluar atau memanggil + {@link android.net.ConnectivityManager#unregisterNetworkCallback + unregisterNetworkCallback()}. +

+ +

+ Pembatasan pada NEW_PICTURE dan NEW_VIDEO +

+ +

+ Di N Developer Preview, aplikasi tidak dapat mengirim atau menerima siaran {@link + android.hardware.Camera#ACTION_NEW_PICTURE} atau {@link + android.hardware.Camera#ACTION_NEW_VIDEO}. Pembatasan ini membantu + meminimalkan dampak negatif terhadap kinerja dan pengalaman pengguna bila beberapa aplikasi harus + aktif untuk memproses gambar atau video baru. N Developer Preview + menambahkan {@link android.app.job.JobInfo} dan {@link + android.app.job.JobParameters} untuk memberikan solusi alternatif. +

+ +

+ Metode JobInfo baru +

+ +

+ Untuk memicu pekerjaan saat perubahan URI konten, N Developer Preview menambahkan + {@link android.app.job.JobInfo} API dengan metode berikut: +

+ +
+
+ {@code JobInfo.TriggerContentUri()} +
+ +
+ Membungkus parameter yang diperlukan untuk memicu pekerjaan saat perubahan URI konten. +
+ +
+ {@code JobInfo.Builder.addTriggerContentUri()} +
+ +
+ Meneruskan objek {@code TriggerContentUri} ke {@link + android.app.job.JobInfo}. Sebuah {@link android.database.ContentObserver} + akan memantau URI konten yang dibungkus. Jika ada beberapa objek {@code + TriggerContentUri} yang dikaitkan dengan pekerjaan, sistem akan memberikan sebuah + callback sekalipun itu melaporkan perubahan di salah satu URI konten saja. +
+ +
+ Tambahkan flag {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} untuk + memicu pekerjaan jika ada turunan dari perubahan URI yang diberikan. Flag ini + berkaitan dengan parameter {@code notifyForDescendants} yang diteruskan ke {@link + android.content.ContentResolver#registerContentObserver + registerContentObserver()}. +
+
+ +

+ Catatan: {@code TriggerContentUri()} tidak bisa digunakan + bersama-sama dengan {@link android.app.job.JobInfo.Builder#setPeriodic + setPeriodic()} atau {@link android.app.job.JobInfo.Builder#setPersisted + setPersisted()}. Untuk terus memantau perubahan konten, jadwalkan + {@link android.app.job.JobInfo} baru sebelum {@link + android.app.job.JobService} aplikasi selesai menangani callback terbaru. +

+ +

+ Kode contoh berikut menjadwalkan pekerjaan yang akan dipicu bila sistem melaporkan + perubahan ke URI konten, {@code MEDIA_URI}: +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+          (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo.Builder builder = new JobInfo.Builder(
+          MY_BACKGROUND_JOB,
+          new ComponentName(context, MediaContentJob.class));
+  builder.addTriggerContentUri(
+          new JobInfo.TriggerContentUri(MEDIA_URI,
+          JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
+  js.schedule(builder.build());
+}
+
+

+ Bila sistem melaporkan perubahan dalam URI konten yang ditetapkan, aplikasi Anda + akan menerima callback dan objek {@link android.app.job.JobParameters} + akan diteruskan ke metode {@link android.app.job.JobService#onStartJob onStartJob()} + dalam {@code MediaContentJob.class}. +

+ +

+ Metode JobParameter Baru +

+ +

+ N Developer Preview juga menambahkan {@link android.app.job.JobParameters} untuk + memungkinkan aplikasi Anda menerima informasi yang berguna tentang otoritas konten + dan URI yang memicu pekerjaan: +

+ +
+
+ {@code Uri[] getTriggeredContentUris()} +
+ +
+ Mengembalikan larik URL yang telah memicu pekerjaan. Ini akan berupa {@code + null} jika tidak ada URI yang memicu pekerjaan (misalnya, pekerjaan + dipicu karena batas waktu atau alasan lainnya), atau jumlah + URI yang berubah lebih dari 50. +
+ +
+ {@code String[] getTriggeredContentAuthorities()} +
+ +
+ Mengembalikan larik string otoritas konten yang telah memicu pekerjaan. + Jika larik yang dikembalikan bukan {@code null}, gunakan {@code getTriggeredContentUris()} + untuk mengambil detail URI yang telah berubah. +
+
+ +

+ Kode contoh berikut mengesampingkan metode {@link + android.app.job.JobService#onStartJob JobService.onStartJob()} dan + mencatat otoritas konten serta URI yang telah memicu pekerjaan: +

+ +
+@Override
+public boolean onStartJob(JobParameters params) {
+  StringBuilder sb = new StringBuilder();
+  sb.append("Media content has changed:\n");
+  if (params.getTriggeredContentAuthorities() != null) {
+      sb.append("Authorities: ");
+      boolean first = true;
+      for (String auth :
+          params.getTriggeredContentAuthorities()) {
+          if (first) {
+              first = false;
+          } else {
+             sb.append(", ");
+          }
+           sb.append(auth);
+      }
+      if (params.getTriggeredContentUris() != null) {
+          for (Uri uri : params.getTriggeredContentUris()) {
+              sb.append("\n");
+              sb.append(uri);
+          }
+      }
+  } else {
+      sb.append("(No content)");
+  }
+  Log.i(TAG, sb.toString());
+  return true;
+}
+
+ +

+ Mengoptimalkan Aplikasi Anda Lebih Jauh +

+ +

+ Mengoptimalkan aplikasi Anda untuk berjalan pada perangkat minim memori, atau dalam kondisi + minim memori, bisa meningkatkan kinerja dan pengalaman pengguna. Menghilangkan + dependensi pada layanan latar belakang dan penerima siaran + implisit yang terdaftar secara statis bisa membantu aplikasi Anda berjalan lebih baik pada perangkat demikian. Meskipun + N Developer Preview telah mengambil langkah-langkah untuk mengurangi sebagian masalah ini, Anda disarankan + agar mengoptimalkan aplikasi untuk berjalan tanpa menggunakan + proses latar belakang ini seluruhnya. +

+ +

+ N Developer Preview memperkenalkan beberapa tambahan perintah Android Debug Bridge (ADB) yang + bisa Anda gunakan untuk menguji perilaku aplikasi dengan proses latar belakang dinonaktifkan: +

+ + \ No newline at end of file diff --git a/docs/html-intl/intl/in/preview/features/direct-boot.jd b/docs/html-intl/intl/in/preview/features/direct-boot.jd new file mode 100644 index 000000000000..2952bb56693d --- /dev/null +++ b/docs/html-intl/intl/in/preview/features/direct-boot.jd @@ -0,0 +1,180 @@ +page.title=Direct Boot +page.keywords=preview,sdk,direct boot +page.tags=androidn + +@jd:body + + + +

Android N berjalan dalam mode Direct Boot yang aman +bila perangkat telah dihidupkan namun pengguna tidak membuka +kunci perangkat. Untuk mendukung hal ini, sistem menyediakan dua lokasi penyimpanan untuk data:

+ + + +

Secara default, aplikasi tidak berjalan selama mode Direct Boot. +Jika aplikasi Anda perlu melakukan tindakan selama mode Direct Boot, Anda bisa mendaftarkan +komponen aplikasi yang harus dijalankan selama mode ini. Beberapa kasus penggunaan umum +untuk aplikasi yang perlu dijalankan selama mode Direct Boot antara lain:

+ + + +

Jika aplikasi Anda perlu mengakses data saat dijalankan dalam mode Direct Boot, gunakan +penyimpanan yang dienkripsi dengan perangkat. Penyimpanan yang dienkripsi dengan perangkat berisi data +yang dienkripsi dengan kunci yang hanya tersedia setelah perangkat melakukan +boot yang berhasil diverifikasi.

+ +

Untuk data yang harus dienkripsi dengan kunci yang dikaitkan dengan kredensial +pengguna, seperti PIN atau kata sandi, gunakan penyimpanan yang dienkripsi dengan kredensial. +Penyimpanan yang dienkripsi dengan kredensial hanya tersedia setelah pengguna berhasil +membuka kunci perangkat, hingga saat pengguna menghidupkan ulang perangkat lagi. Jika +pengguna mengaktifkan layar kunci setelah membuka kunci perangkat, hal ini tidak akan mengunci +penyimpanan yang dienkripsi dengan kredensial.

+ +

Meminta Akses untuk Berjalan Selama Direct Boot

+ +

Aplikasi harus mendaftarkan komponennya pada sistem agar +bisa berjalan selama mode Direct Boot atau mengakses +penyimpanan yang dienkripsi dengan perangkat. Aplikasi mendaftar pada sistem dengan menandai komponen sebagai +peka enkripsi. Untuk menandai komponen Anda sebagai peka enkripsi, atur atribut +android:encryptionAware ke true dalam manifes Anda.

+ +

Komponen yang peka enkripsi bisa mendaftar untuk menerima pesan siaran +LOCKED_BOOT_COMPLETED dari +sistem bila perangkat telah dihidupkan ulang. Pada tahap ini +penyimpanan yang dienkripsi dengan perangkat akan tersedia, dan komponen Anda bisa mengeksekusi tugas-tugas yang perlu +dijalankan selama mode Direct Boot, seperti memicu alarm yang terjadwal.

+ +

Cuplikan kode berikut adalah contoh cara mendaftarkan +{@link android.content.BroadcastReceiver} sebagai peka enkripsi, dan menambahkan sebuah +filter intent untuk LOCKED_BOOT_COMPLETED, dalam manifes aplikasi:

+ +
+<receiever
+  android:encryptionAware="true" >
+  ...
+  <intent-filter>
+    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+  </intent-filter>
+</receiver>
+
+ +

Setelah pengguna membuka kunci perangkat, semua komponen bisa mengakses +penyimpanan yang dienkripsi dengan perangkat serta penyimpanan yang dienkripsi dengan kredensial.

+ +

Mengakses Penyimpanan yang Dienkripsi dengan Perangkat

+ +

Untuk mengakses penyimpanan yang dienkripsi dengan perangkat, buat instance +{@link android.content.Context} kedua dengan memanggil +Context.createDeviceEncryptedStorageContext(). Semua panggilan +API penyimpanan yang dibuat menggunakan konteks ini akan mengakses penyimpanan yang dienkripsi dengan perangkat. Contoh +berikut mengakses penyimpanan yang dienkripsi dengan perangkat dan membuka file data aplikasi +yang ada:

+ +
+Context directBootContext = Context.createDeviceEncryptedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+
+ +

Gunakan penyimpanan yang dienkripsi dengan perangkat hanya untuk +informasi yang harus bisa diakses selama mode Direct Boot. +Jangan gunakan penyimpanan yang dienkripsi dengan perangkat sebagai penyimpanan terenkripsi serba guna. +Untuk informasi pengguna yang bersifat pribadi, atau data terenkripsi yang tidak diperlukan selama +mode Direct Boot, gunakan penyimpanan yang dienkripsi dengan kredensial.

+ +

Mendapatkan Pemberitahuan saat Pengguna Membuka Kunci

+ +

Setelah pengguna membuka kunci perangkat setelah restart, aplikasi Anda bisa beralih untuk +mengakses penyimpanan yang dienkripsi dengan kredensial dan menggunakan layanan sistem biasa yang +bergantung pada kredensial pengguna.

+ +

Agar diberi tahu bila pengguna membuka kunci perangkat setelah reboot, +daftarkan {@link android.content.BroadcastReceiver} dari komponen yang berjalan +untuk mendengarkan pesan ACTION_USER_UNLOCKED. Atau, Anda bisa +menerima pesan {@link android.content.Intent#ACTION_BOOT_COMPLETED +ACTION_BOOT_COMPLETED} yang ada, yang sekarang menunjukkan bahwa perangkat telah dihidupkan dan +pengguna telah membuka kunci perangkat.

+ +

Anda bisa langsung melakukan query apakah pengguna telah membuka kunci perangkat dengan memanggil +UserManager.isUserUnlocked().

+ +

Migrasi Data yang Ada

+ +

Jika pengguna memperbarui perangkat mereka untuk menggunakan mode Direct Boot, +data Anda yang ada mungkin perlu dipindahkan ke penyimpanan yang dienkripsi dengan perangkat. Gunakan +Context.migrateSharedPreferencesFrom() dan +Context.migrateDatabaseFrom() untuk memindahkan data preferensi dan +database antara penyimpanan yang dienkripsi dengan kredensial dan penyimpanan yang dienkripsi dengan perangkat.

+ +

Pertimbangkan dengan baik saat memutuskan data apa yang akan dipindahkan dari +penyimpanan yang dienkripsi dengan kredensial ke penyimpanan yang dienkripsi dengan perangkat. Anda sebaiknya tidak memindahkan +informasi pengguna yang bersifat rahasia, seperti kata sandi atau token otorisasi, ke +penyimpanan yang dienkripsi dengan perangkat. Dalam beberapa skenario, Anda mungkin perlu mengelola +set data terpisah pada dua tempat penyimpanan yang dienkripsi.

+ +

Menguji Aplikasi Peka Enkripsi Anda

+ +

Uji aplikasi peka enkripsi Anda menggunakan mode Direct Boot baru. Ada +dua cara untuk mengaktifkan Direct Boot.

+ +

Perhatian: Mengaktifkan Direct Boot +akan menghapus semua data pengguna pada perangkat.

+ +

Pada perangkat yang didukung dengan Android N terinstal, aktifkan +Direct Boot dengan melakukan salah satu hal berikut:

+ + + +

Mode emulasi Direct Boot juga tersedia, jika Anda perlu mengganti +mode pada perangkat pengujian. Mode emulasi sebaiknya hanya digunakan selama +pengembangan dan bisa menyebabkan kehilangan data. Untuk mengaktifkan mode emulasi Direct Boot, +atur pola kunci pada perangkat, pilih "No thanks" jika ditanya mengenai +layar start-up aman saat menetapkan pola kunci, kemudian gunakan +perintah shell adb berikut:

+ +
+$ adb shell sm set-emulate-fbe true
+
+ +

Untuk menonaktifkan mode emulasi Direct Boot, gunakan perintah berikut:

+ +
+$ adb shell sm set-emulate-fbe false
+
+ +

Menggunakan perintah ini akan menyebabkan perangkat melakukan reboot.

diff --git a/docs/html-intl/intl/in/preview/features/icu4j-framework.jd b/docs/html-intl/intl/in/preview/features/icu4j-framework.jd new file mode 100644 index 000000000000..5b7547f83712 --- /dev/null +++ b/docs/html-intl/intl/in/preview/features/icu4j-framework.jd @@ -0,0 +1,158 @@ +page.title=ICU4J Android Framework API + +@jd:body + + + +

+ ICU4J merupakan serangkaian pustaka Java sumber terbuka yang banyak digunakan dan menyediakan Unicode + serta dukungan globalisasi untuk aplikasi perangkat lunak. Android N + mengekspos subset ICU4J API dalam kerangka kerja Android bagi pengembang aplikasi + untuk digunakan pada paket {@code android.icu}. API ini menggunakan + data pelokalan yang ada pada perangkat. Hasilnya, Anda bisa mengurangi footprint + APK dengan tidak mengompilasi pustaka ICU4J ke APK Anda; sebagai gantinya, + cukup memanggilnya dalam kerangka kerja. (Dalam hal ini, Anda mungkin perlu menyediakan + beberapa versi + APK Anda, sehingga pengguna yang menjalankan versi Android lebih rendah dari Android N + bisa mengunduh versi aplikasi yang berisi pustaka ICU4J.) +

+ +

+ Dokumen ini diawali dengan menyediakan beberapa informasi dasar tentang level API Android + minimum yang diperlukan untuk mendukung pustaka-pustaka ini. Kemudian dijelaskan tentang apa + yang perlu Anda ketahui tentang implementasi ICU4J spesifik Android. Terakhir, + Anda akan diberi tahu cara menggunakan ICU4J API dalam kerangka kerja Android. +

+ +

Hubungan dengan ICU4J

+ +

+ Android N mengekspos subset ICU4J API lewat + paket android.icu, bukannya com.ibm.icu. Kerangka kerja + Android dapat memilih untuk tidak + mengekspos ICU4J API karena berbagai alasan; misalnya, Android N tidak mengekspos + beberapa API yang tidak digunakan lagi atau yang dinyatakan belum + stabil oleh tim ICU. Karena tim ICU tidak lagi menggunakan API di masa mendatang, Android juga akan menandainya + sebagai tidak digunakan lagi namun akan terus menyertakannya. +

+ +

Tabel 1. Versi ICU dan CLDR yang digunakan + di Android N.

+ + + + + + + + + + + +
Level API AndroidVersi ICUVersi CLDR
Android N5628
+ +

Inilah beberapa hal penting yang harus diperhatikan:

+ + + +

Migrasi ke paket android.icu dari com.ibm.icu

+ +

+ Jika Anda sudah menggunakan ICU4J API dalam aplikasi, dan + android.icu API memenuhi persyaratan Anda, maka migrasi ke + API kerangka kerja mengharuskan Anda untuk mengubah impor Java + dari com.ibm.icu ke android.icu. Kemudian Anda bisa + menghapus salinan file ICU4J dari APK. +

+ +

+ Catatan: API kerangka kerja ICU4J menggunakan namespace {@code android.icu} + sebagai ganti {@code com.ibm.icu}. Hal ini untuk menghindari konflik + namespace di APK yang berisi pustaka {@code com.ibm.icu} sendiri. +

+ +

+ Migrasi ke API android.icu dari Android SDK API lainnya +

+ +

+ Beberapa kelas dalam paket java dan android memiliki + padanannya dengan yang ditemukan di ICU4J. Akan tetapi, ICU4J seringkali menyediakan dukungan + yang lebih luas untuk standar dan bahasa. +

+

Inilah beberapa contoh untuk membantu Anda memulai:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KelasAlternatif
java.lang.Character android.icu.lang.UCharacter
java.text.BreakIterator android.icu.text.BreakIterator
java.text.DecimalFormat android.icu.text.DecimalFormat
java.util.Calendar +android.icu.util.Calendar
android.text.BidiFormatter + android.icu.text.Bidi +
android.text.format.DateFormat + android.icu.text.DateFormat +
android.text.format.DateUtils android.icu.text.DateFormat +android.icu.text.RelativeDateTimeFormatter +
+ +

Lisensi

+ +

+ ICU4J dirilis dengan lisensi ICU. Untuk detailnya, lihat Panduan Pengguna + ICU. +

diff --git a/docs/html-intl/intl/in/preview/features/multi-window.jd b/docs/html-intl/intl/in/preview/features/multi-window.jd new file mode 100644 index 000000000000..f879dc5ad0ac --- /dev/null +++ b/docs/html-intl/intl/in/preview/features/multi-window.jd @@ -0,0 +1,582 @@ +page.title=Dukungan Multi-Jendela +page.metaDescription=Dukungan baru di Android N untuk menampilkan lebih dari satu aplikasi sekaligus. +page.keywords="multi-window", "android N", "split screen", "free-form" + +@jd:body + + + +

+ Android N menambahkan dukungan untuk menampilkan lebih dari satu aplikasi + sekaligus. Pada perangkat genggam, dua aplikasi bisa berjalan berdampingan atau + atas-bawah dalam mode layar terbagi. Pada perangkat TV, aplikasi bisa + menggunakan mode gambar-dalam-gambar untuk melanjutkan pemutaran video selagi pengguna + berinteraksi dengan aplikasi lain. +

+ +

+ Jika Anda membangun aplikasi Anda dengan N Preview SDK, Anda bisa mengonfigurasi cara aplikasi + menangani tampilan multi-jendela. Misalnya, Anda bisa menetapkan dimensi + minimum yang diizinkan aktivitas Anda. Anda juga bisa menonaktifkan tampilan multi-jendela untuk + aplikasi, sehingga memastikan sistem hanya menampilkan aplikasi Anda dalam mode + layar penuh. +

+ +

Ikhtisar

+ +

+ Android N memungkinkan beberapa aplikasi berbagi layar sekaligus. Misalnya, + pengguna bisa membagi layar, melihat halaman web di sisi kiri + sambil menulis email di sisi kanan. Pengalaman pengguna bergantung pada + perangkat: +

+ + + + +

+ Gambar 1. Dua aplikasi berjalan berdampingan dalam mode layar terbagi. +

+ +

+ Pengguna bisa beralih ke mode multi-jendela dengan cara berikut: +

+ + + +

+ Pengguna bisa menyeret dan + meletakkan data dari aktivitas satu ke aktivitas lain sewaktu aktivitas berbagi + layar. (Sebelumnya, pengguna hanya bisa menyeret dan meletakkan data dalam aktivitas + tunggal.) +

+ +

Daur Hidup Multi-Jendela

+ +

+ Mode multi-jendela tidak mengubah daur hidup + aktivitas. +

+ +

+ Dalam mode multi-jendela, hanya aktivitas yang paling sering digunakan pengguna + yang akan aktif pada waktu tertentu. Aktivitas ini dianggap teratas. + Semua aktivitas lainnya dalam keadaan berhenti sementara, sekalipun terlihat. + Akan tetapi, sistem memberikan aktivitas, yang berhenti-sementara-namun-terlihat ini, prioritas lebih tinggi + daripada aktivitas yang tidak terlihat. Jika pengguna berinteraksi dengan salah satu + aktivitas yang berhenti sementara, aktivitas tersebut akan dilanjutkan kembali, dan aktivitas + teratas sebelumnya akan dihentikan sementara. +

+ +

+ Catatan: Dalam mode multi-jendela, aplikasi bisa berada dalam keadaan berhenti sementara + dan masih terlihat oleh pengguna. Sebuah aplikasi mungkin perlu melanjutkan aktivitasnya + bahkan saat berhenti sementara. Misalnya, aplikasi pemutar video yang ada dalam + mode berhenti sementara namun terlihat harus tetap menampilkan videonya. Karena alasan + ini, kami menyarankan aktivitas yang memutar videotidak menghentikan sementara video + dalam handler {@link android.app.Activity#onPause onPause()} mereka. + Sebagai gantinya, aktivitas itu harus menghentikan sementara video di {@link android.app.Activity#onStop + onStop()}, dan melanjutkan pemutaran di {@link android.app.Activity#onStart + onStart()}. +

+ +

+ Bila pengguna menempatkan aplikasi dalam mode multi-jendela, sistem akan memberi tahu + aktivitas tersebut mengenai perubahan konfigurasi, sebagaimana ditetapkan dalam Menangani Perubahan + Runtime. Pada dasarnya, perubahan ini memiliki implikasi siklus hidup aktivitas yang sama + seperti saat sistem memberi tahu aplikasi bahwa perangkat telah beralih + dari mode potret ke mode lanskap, kecuali dimensi perangkat + telah berubah sebagai ganti bertukar posisi. Seperti yang dibahas di Menangani Perubahan + Runtime, aktivitas Anda bisa menangani perubahan konfigurasi itu sendiri, atau + mengizinkan sistem memusnahkan aktivitas dan membuatnya kembali dengan dimensi + baru. +

+ +

+ Jika pengguna mengubah ukuran jendela dan membuat dimensinya jadi lebih besar, sistem + akan mengubah ukuran aktivitas untuk menyesuaikan dengan tindakan pengguna dan mengeluarkan perubahan runtime + sebagaimana diperlukan. Jika aplikasi tertinggal dari gambar di bidang yang baru saja diekspos, + sistem untuk sementara akan mengisi bidang tersebut dengan warna yang ditetapkan oleh atribut {@link + android.R.attr#windowBackground windowBackground} atau dengan atribut gaya + windowBackgroundFallback secara default. +

+ +

Mengonfigurasi Aplikasi Anda untuk Mode Multi-Jendela

+ +

+ Jika aplikasi Anda menargetkan Android N, Anda bisa mengonfigurasi bagaimana dan + apakah aktivitas aplikasi Anda mendukung tampilan multi-jendela. Anda bisa mengatur + atribut dalam manifes untuk mengontrol ukuran dan layoutnya. + Pengaturan atribut aktivitas root berlaku untuk semua aktivitas + dalam tumpukan tugasnya. +

+ +

+ Catatan: Jika Anda membangun aplikasi multi-orientasi dengan versi + SDK lebih rendah dari Android N, dan pengguna menggunakan aplikasi + dalam mode multi-jendela, sistem akan mengubah ukuran aplikasi secara paksa. Sistem akan menampilkan kotak + dialog yang memperingatkan pengguna bahwa aplikasi mungkin berperilaku tidak terduga. Sistem + tidak mengubah ukuran aplikasi yang berorientasi tetap; jika + pengguna berusaha membuka aplikasi berorientasi tetap saat mode multi-jendela, + aplikasi akan menggunakan seluruh layar. +

+ +

android:resizeableActivity

+

+ Atur atribut ini dalam manifes <activity> Anda atau simpul + <application> untuk mengaktifkan atau menonaktifkan tampilan + multi-jendela: +

+ +
+android:resizeableActivity=["true" | "false"]
+
+ +

+ Jika atribut ini diatur ke true, aktivitas bisa dijalankan di + mode layar terbagi dan mode bentuk bebas. Jika atribut ini diatur ke false, aktivitas + tidak akan mendukung mode multi-jendela. Jika nilai ini false, dan pengguna + berusaha memulai aktivitas dalam mode multi-jendela, aktivitas akan menggunakan + layar penuh. +

+ +

+ Jika aplikasi Anda menargetkan Android N, namun Anda tidak menetapkan nilai + untuk atribut ini, nilai atribut default adalah true. +

+ +

android:supportsPictureInPicture

+ +

+ Atur atribut ini dalam simpul <activity> manifes Anda untuk + menunjukkan apakah aktivitas mendukung tampilan gambar-dalam-gambar. Atribut ini + diabaikan jika android:resizeableActivity bernilai false. +

+ +
+android:supportsPictureInPicture=["true" | "false"]
+
+ +

Atribut layout

+ +

+ Dengan Android N, elemen manifes <layout> + mendukung beberapa atribut yang memengaruhi cara aktivitas berperilaku dalam + mode multi-jendela: +

+ +
+
+ android:defaultWidth +
+ +
+ Lebar default aktivitas saat dijalankan dalam mode bentuk bebas. +
+ +
+ android:defaultHeight +
+ +
+ Tinggi default aktivitas saat dijalankan dalam mode bentuk bebas. +
+ +
+ android:gravity +
+ +
+ Penempatan awal dari aktivitas saat dibuka dalam mode bentuk bebas. Lihat referensi + {@link android.view.Gravity} untuk mengetahui nilai yang cocok. +
+ +
+ android:minimalSize +
+ +
+ Tinggi dan lebar minimum untuk aktivitas dalam mode layar terbagi + dan mode bentuk bebas. Jika pengguna memindahkan pembagi dalam mode layar terbagi + untuk membuat aktivitas lebih kecil dari minimum yang ditetapkan, sistem akan memangkas + aktivitas sesuai dengan ukuran yang diminta pengguna. +
+
+ +

+ Misalnya, kode berikut menampilkan cara menetapkan ukuran dan lokasi default + aktivitas, dan ukuran minimumnya, bila aktivitas ditampilkan dalam + mode bentuk bebas: +

+ +
+<activity android:name=".MyActivity">
+    <layout android:defaultHeight="500dp"
+          android:defaultWidth="600dp"
+          android:gravity="top|end"
+          android:minimalSize="450dp" />
+</activity>
+
+ +

Menjalankan Aplikasi Anda dalam Mode Multi-Jendela

+ +

+ Android N menawarkan fungsionalitas baru untuk mendukung aplikasi yang bisa berjalan + dalam mode multi-jendela. +

+ +

Fitur yang dinonaktifkan dalam mode multi-jendela

+ +

+ Fitur tertentu akan dinonaktifkan atau diabaikan bila perangkat berada dalam mode + multi-jendela, karena dianggap tidak logis bagi suatu aktivitas yang mungkin berbagi + layar perangkat dengan aktivitas atau aplikasi lainnya. Fitur tersebut meliputi: + +

+ +

Pemberitahuan perubahan multi-jendela dan melakukan query

+ +

+ Metode baru berikut telah ditambahkan ke kelas {@link android.app.Activity} + untuk mendukung tampilan multi-jendela. Untuk mengetahui detail tentang setiap metode, lihat + Referensi N Preview SDK. +

+ +
+
+ Activity.inMultiWindow() +
+ +
+ Panggil untuk mengetahui apakah aktivitas berada dalam mode multi-jendela. +
+ +
+ Activity.inPictureInPicture() +
+ +
+ Panggil untuk mengetahui apakah aktivitas berada dalam mode gambar-dalam-gambar. + +

+ Catatan: Mode gambar-dalam-gambar adalah kasus khusus pada + mode multi-jendela. Jika myActivity.inPictureInPicture() + mengembalikan nilai true, maka myActivity.inMultiWindow() juga mengembalikan nilai + true. +

+
+ +
+ Activity.onMultiWindowChanged() +
+ +
+ Sistem akan memanggil metode ini bila aktivitas masuk atau keluar dari + mode multi-jendela. Sistem akan meneruskan metode sebuah nilai true jika + aktivitas tersebut memasuki mode multi-jendela, dan nilai false jika aktivitas + tersebut meninggalkan mode multi-jendela. +
+ +
+ Activity.onPictureInPictureChanged() +
+ +
+ Sistem akan memanggil metode ini bila aktivitas masuk atau keluar dari + mode gambar-dalam-gambar. Sistem akan meneruskan metode sebuah nilai true jika + aktivitas tersebut memasuki mode gambar-dalam-gambar, dan nilai false jika aktivitas + tersebut meninggalkan mode gambar-dalam-gambar. +
+
+ +

+ Ada juga versi {@link android.app.Fragment} untuk setiap + metode ini, misalnya Fragment.inMultiWindow(). +

+ +

Memasuki mode gambar-dalam-gambar

+ +

+ Untuk menempatkan aktivitas dalam mode gambar-dalam-gambar, panggil metode baru + Activity.enterPictureInPicture(). Metode ini tidak berpengaruh jika + perangkat tidak mendukung mode gambar-dalam-gambar. Untuk informasi selengkapnya, + lihat dokumentasi Gambar-dalam-Gambar. +

+ +

Meluncurkan Aktivitas Baru dalam Mode Multi-Jendela

+ +

+ Bila meluncurkan aktivitas baru, Anda bisa memberi petunjuk pada sistem bahwa aktivitas + baru harus ditampilkan bersebelahan dengan aktivitas yang sedang aktif, jika memungkinkan. Caranya, + gunakan flag + Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT. Meneruskan + flag ini akan meminta perilaku berikut: +

+ + + +

+ Jika perangkat berada dalam mode bentuk bebas dan Anda meluncurkan aktivitas baru, Anda bisa + menetapkan dimensi dan lokasi layar aktivitas baru dengan memanggil + ActivityOptions.setLaunchBounds(). Metode ini tidak berpengaruh jika + perangkat tidak berada dalam mode multi-jendela. +

+ +

+ Catatan: Jika Anda meluncurkan aktivitas dalam tumpukan tugas, aktivitas + tersebut akan menggantikan aktivitas pada layar, dengan mewarisi semua + properti multi-jendelanya. Jika Anda ingin meluncurkan aktivitas baru sebagai jendela + terpisah dalam mode multi-jendela, Anda harus meluncurkannya dalam tumpukan tugas baru. +

+ +

Mendukung seret dan letakkan

+ +

+ Pengguna bisa menyeret dan + meletakkan data dari satu aktivitas ke aktivitas yang lain selagi kedua aktivitas + berbagi layar. (Sebelumnya, pengguna hanya bisa menyeret dan meletakkan data dalam + aktivitas tunggal.) Karena alasan ini, Anda mungkin perlu menambahkan fungsionalitas + seret dan letakkan ke aplikasi Anda jika aplikasi Anda saat ini belum mendukungnya. +

+ +

+ N Preview SDK menambahkan paket android.view + untuk mendukung seret dan letakkan lintas-aplikasi. Untuk mengetahui detail tentang kelas dan metode + berikut, lihat Referensi N + Preview SDK. +

+ +
+
+ android.view.DropPermissions +
+ +
+ Objek token bertanggung jawab menetapkan izin yang diberikan kepada aplikasi + yang menerima peletakan tersebut. +
+ +
+ View.startDragAndDrop() +
+ +
+ Alias baru untuk {@link android.view.View#startDrag View.startDrag()}. Untuk + mengaktifkan seret dan letakkan lintas-aktivitas, teruskan flag baru + View.DRAG_FLAG_GLOBAL. Jika Anda perlu memberikan izin URI ke + aktivitas penerima, teruskan flag baru, + View.DRAG_FLAG_GLOBAL_URI_READ atau + View.DRAG_FLAG_GLOBAL_URI_WRITE, sebagaimana mestinya. +
+ +
+ View.cancelDragAndDrop() +
+ +
+ Membatalkan operasi seret yang sedang berlangsung. Hanya bisa dipanggil oleh + aplikasi yang menghasilkan operasi seret. +
+ +
+ View.updateDragShadow() +
+ +
+ Menggantikan bayangan penyeretan untuk operasi seret yang sedang berlangsung. Hanya + bisa dipanggil oleh aplikasi yang menghasilkan operasi seret. +
+ +
+ Activity.requestDropPermissions() +
+ +
+ Meminta izin untuk URI konten yang diteruskan dengan {@link + android.content.ClipData} yang terdapat dalam {@link android.view.DragEvent}. +
+
+ +

Menguji Dukungan Multi-Jendela Aplikasi Anda

+ +

+ Baik Anda memperbarui aplikasi untuk Android N maupun tidak, Anda harus + memverifikasi caranya bertindak dalam mode multi-jendela jika pengguna mencoba meluncurkannya + dalam mode multi-jendela pada perangkat yang menjalankan Android N. +

+ +

Mengonfigurasi Perangkat Pengujian

+ +

+ Jika Anda menginstal Android N pada perangkat, mode + layar terbagi secara otomatis didukung. +

+ +

Jika aplikasi Anda tidak dibangun dengan N Preview SDK

+ +

+ Jika Anda tidak membangun aplikasi dengan N Preview SDK dan pengguna berupaya menggunakan + aplikasi dalam mode multi-jendela, sistem secara paksa akan mengubah ukuran aplikasi kecuali jika aplikasi + mendeklarasikan orientasi tetap. +

+ +

+ Jika aplikasi Anda tidak mendeklarasikan orientasi tetap, Anda harus meluncurkan aplikasi + pada perangkat yang menjalankan Android N dan berupaya menempatkan aplikasi tersebut dalam + mode layar terbagi. Pastikan pengalaman pengguna + bisa diterima bila aplikasi secara paksa diubah ukurannya. +

+ +

+ Jika aplikasi mendeklarasikan orientasi tetap, Anda harus berupaya menempatkan aplikasi dalam + mode multi-jendela. Periksa apakah Anda melakukannya, aplikasi tetap berada dalam + mode layar penuh. +

+ +

Jika Anda mendukung mode multi-jendela

+ +

+ Jika Anda membuat aplikasi Anda dengan N Preview SDK dan belum menonaktifkan + dukungan multi-jendela, periksa perilaku berikut dalam mode layar terbagi + dan mode bentuk bebas. +

+ + + +

Daftar periksa pengujian

+ +

+ Untuk memeriksa kinerja aplikasi Anda dalam mode multi-jendela, cobalah operasi + berikut. Anda harus mencoba semua operasi ini dalam mode layar terbagi dan + dan mode multi-jendela, kecuali jika dinyatakan berbeda. +

+ + + +

Jika Anda telah menonaktifkan dukungan multi-jendela

+ +

+ Jika Anda menonaktifkan dukungan multi-jendela dengan mengatur + android:resizableActivity="false", Anda harus menjalankan aplikasi pada + perangkat yang menjalankan Android N dan berusaha menempatkan aplikasi dalam + mode bentuk bebas dan mode layar terbagi. Periksa apakah Anda melakukannya, aplikasi tetap berada dalam + mode layar penuh. +

diff --git a/docs/html-intl/intl/in/preview/features/multilingual-support.jd b/docs/html-intl/intl/in/preview/features/multilingual-support.jd new file mode 100644 index 000000000000..0a73bcf879de --- /dev/null +++ b/docs/html-intl/intl/in/preview/features/multilingual-support.jd @@ -0,0 +1,214 @@ +page.title=Bahasa dan Lokal +@jd:body + + + +

Android N memberikan dukungan yang disempurnakan untuk pengguna multibahasa, +yang memungkinkan mereka memilih beberapa lokal dalam pengaturan. Android N +menyediakan kemampuan ini dengan memperbanyak jumlah lokal yang didukung +dan mengubah cara sistem mengatasi masalah sumber daya. Metode baru mengatasi +masalah sumber daya ini lebih tangguh dan didesain agar kompatibel dengan APK yang ada, namun +Anda harus ekstra hati-hati terhadap perilaku tak terduga. Misalnya, Anda +harus menguji untuk memastikan aplikasi Anda secara default diatur ke bahasa yang diinginkan. Juga, +jika aplikasi Anda mendukung beberapa bahasa, Anda harus memastikan dukungan ini berfungsi +sebagaimana diinginkan. Terakhir, Anda harus mencoba memastikan aplikasi Anda dengan lancar menangani +bahasa yang tidak secara eksplisit Anda dukung dalam desain.

+ +

Dokumen ini diawali dengan menjelaskan strategi resolusi sumber daya sebelum +Android N. Berikutnya, akan dijelaskan strategi +resolusi sumber daya Android N yang telah ditingkatkan. Terakhir, akan djelaskan cara memanfaatkan +jumlah lokal yang telah diperbanyak untuk mendukung lebih banyak pengguna multibahasa.

+ +

Tantangan dalam Mengatasi Masalah Sumber Daya Bahasa

+ +

Sebelum Android N, Android tidak selalu + berhasil mencocokkan lokal aplikasi dan lokal sistem. Misalnya, anggaplah bahasa default aplikasi Anda + adalah US English, namun aplikasi itu juga berisi string bahasa Spanyol yang dilokalkan di file sumber daya {@code es_ES}. +.

+

Bila kode Java Anda mengacu ke string, itu akan mengatasi masalah bahasa string sebagai +berikut:

+ + + +

Masalah resolusi ini muncul karena sistem menghilangkan kode negara +dari lokal jika tidak bisa menemukan yang sama persis. Misalnya:

+

+Tabel 1. Resolusi sumber daya tanpa lokal yang persis sama. +

+ + + + + + + + + + + + + +
Pengaturan PenggunaSumber Daya AplikasiResolusi Sumber Daya
fr_CH +default (en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+Coba fr_CH => Gagal
+Coba fr => Gagal
+Gunakan default (en) +
+ + +

Dalam contoh ini, sistem menampilkan string bahasa Inggris +tanpa mengetahui apakah pengguna memahami bahasa Inggris. Perilaku ini sudah sangat umum +sekarang. Android N harus mengurangi frekuensi +hasil seperti ini secara substansial.

+ +

Peningkatan pada Strategi Resolusi Sumber Daya

+

Android N menghadirkan resolusi sumber daya yang lebih handal, dan +secara otomatis menemukan solusi yang lebih baik. Akan tetapi, untuk mempercepat resolusi dan meningkatkan +kemudahan pemeliharaan, Anda harus menyimpan sumber daya dalam dialek induk yang paling umum. + Misalnya, jika sebelumnya Anda telah menyimpan sumber daya bahasa Spanyol di direktori {@code es-US} +, pindahkan ke direktori {@code es-419}, yang berisi bahasa Spanyol Amerika Latin. + Demikian pula, jika Anda memiliki string sumber daya dalam folder bernama {@code en-GB}, ganti nama + folder itu menjadi {@code en-001} (bahasa Inggris internasional), karena induk yang paling umum + untuk string en-GB adalah {@code en-001}. + Contoh berikut menjelaskan mengapa praktik-praktik ini meningkatkan kinerja dan +reliabilitas resolusi sumber daya.

+ +

Contoh resolusi sumber daya

+ +

Dengan Android N, kasus yang dijelaskan dalam Tabel 1 diatasi +secara berbeda:

+ +

+Tabel 2. Strategi resolusi yang ditingkatkan bila tidak ada +lokal yang sama persis.

+ + + + + + + + + + + + +
Pengaturan PenggunaSumber Daya AplikasiResolusi Sumber Daya
    +
  1. fr_CH
  2. +
+
+default (en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+Coba fr_CH => Gagal
+Coba fr => Gagal
+Coba anak dari fr => fr_FR
+Gunakan fr_FR +
+ + +

Sekarang pengguna mendapatkan sumber daya bahasa Prancis sebagai ganti bahasa Inggris. Contoh ini juga menunjukkan + mengapa Anda harus menyimpan string bahasa Prancis dalam {@code fr} bukan dalam {@code fr_FR} + untuk Android N. Tindakan di sini adalah untuk mencocokkan dengan induk dialek terdekat, + yang membuat resolusi menjadi lebih cepat dan lebih bisa diprediksi.

+ +

Selain logika resolusi yang diperbaiki ini, Android sekarang menawarkan lebih banyak +pilihan bahasa untuk pengguna. Mari kita coba lagi contoh di atas dengan menetapkan bahasa Italia + sebagai bahasa pengguna tambahan, tetapi tanpa dukungan aplikasi untuk bahasa Prancis.

+ +

+Tabel 3. Resolusi sumber daya bila aplikasi hanya mencocokkan +pengaturan lokal yang disukai kedua oleh pengguna.

+ + + + + + + + + + + + + + +
Pengaturan PenggunaSumber Daya AplikasiResolusi Sumber Daya
    +
  1. fr_CH
  2. +
  3. it_CH
  4. +
+
+default (en)
+de_DE
+es_ES
+it_IT
+
+Coba fr_CH => Gagal
+Coba fr => Gagal
+Coba anak dari fr => Gagal
+Coba it_CH => Gagal
+Coba it => Gagal
+Coba anak dari it => it_IT
+Gunakan it_IT +
+

Pengguna tetap mendapatkan bahasa yang mereka pahami, meskipun aplikasi tidak +mendukung bahasa Prancis.

+ + +

Mendesain Aplikasi Anda untuk Mendukung Lokal Tambahan

+

LocaleList API

+ +

Android N menambahkan API baru {@code LocaleList.GetDefault()} +yang memungkinkan aplikasi langsung melakukan query daftar bahasa yang telah ditetapkan pengguna. API ini +memungkinkan Anda untuk membuat + perilaku aplikasi yang lebih canggih dan tampilan konten yang lebih optimal. Misalnya, Pencarian + bisa menampilkan hasil dalam beberapa bahasa berdasarkan pengaturan pengguna. Aplikasi browser + bisa menghindari penawaran menerjemahkan halaman dalam bahasa yang sudah diketahui pengguna, + dan aplikasi keyboard bisa mengaktifkan otomatis semua layout yang sesuai.

+ +

Formatter

+ +

Hingga Android 6.0 (API level 23), Android hanya mendukung satu atau dua lokal + untuk banyak bahasa umum +(en, es, ar, fr, ru). Karena hanya ada beberapa varian dari setiap bahasa, +aplikasi bisa menghindar dengan menyimpan beberapa nomor dan tanggal sebagai string hard-code +dalam file sumber daya. Akan tetapi, dengan perluasan set lokal yang didukung Android, +maka akan ada +perbedaan format yang signifikan untuk tanggal, waktu, mata uang, dan informasi +serupa bahkan dalam lokal tunggal. Menjadikan format Anda sebagai hard-code bisa menghasilkan +pengalaman yang membingungkan bagi pengguna akhir. Karena itu, saat mengembangkan untuk Android N +pastikan menggunakan formatter sebagai ganti menjadikan string angka dan tanggal sebagai hard-code.

+ +

Contoh terbaik adalah bahasa Arab, yang mendukung Android N berkembang dari +satu {@code ar_EG} menjadi 27 lokal bahasa Arab. Bahasa lokal ini bisa berbagi hampir semua sumber daya, +namun sebagian lebih memilih digit ASCII, sementara yang lain memilih digit asli. Misalnya, +bila Anda ingin membuat kalimat dengan variabel digit, seperti +"Pilih PIN 4 digit", gunakan formatter seperti yang ditampilkan di bawah ini:

+ +
 format(locale, "Choose a %d-digit PIN", 4)
diff --git a/docs/html-intl/intl/in/preview/features/notification-updates.jd b/docs/html-intl/intl/in/preview/features/notification-updates.jd new file mode 100644 index 000000000000..6154e832c818 --- /dev/null +++ b/docs/html-intl/intl/in/preview/features/notification-updates.jd @@ -0,0 +1,328 @@ +page.title=Pemberitahuan +page.tags=notifications +helpoutsWidget=true +page.image=/preview/images/notifications-card.png + +trainingnavtop=true + +@jd:body + +
+
+ + +

Dokumen ini berisi

+
    +
  1. Balasan Langsung
  2. +
  3. Bundel Pemberitahuan
  4. +
  5. Tampilan Custom
  6. +
+ +
+
+ +

Android N memperkenalkan beberapa API baru yang memungkinkan aplikasi memposting +pemberitahuan yang sangat terlihat dan interaktif.

+ +

Android N menambahkan API pemberitahuan{@link android.support.v4.app.RemoteInput} +yang ada untuk mendukung balasan inline pada handset. Fitur ini memungkinkan pengguna + merespons dengan cepat dari bayangan pemberitahuan tanpa mengunjungi aplikasi Anda.

+ +

+ Android N juga memungkinkan Anda menggabungkan pemberitahuan yang serupa agar + muncul sebagai satu pemberitahuan. Untuk memungkinkan hal ini, Android N menggunakan metode {@link + android.support.v4.app.NotificationCompat.Builder#setGroup + NotificationCompat.Builder.setGroup()} yang sudah ada. Pengguna bisa memperluas setiap + pemberitahuan, dan melakukan tindakan seperti membalas dan menutup setiap + pemberitahuan, satu per satu dari bayangan pemberitahuan. +

+ +

Terakhir, Android N juga menambahkan API baru yang memungkinkan Anda untuk memanfaatkan dekorasi +sistem dalam tampilan pemberitahuan yang disesuaikan untuk aplikasi Anda. API ini membantu +memastikan semua tampilan pemberitahuan sama-sama menggunakan penyajian yang konsisten dengan +template standar.

+ +

Dokumen ini menyoroti beberapa perubahan penting yang harus Anda + perhitungkan saat menggunakan fitur pemberitahuan baru dalam aplikasi Anda.

+ +

Balasan Langsung

+ +

Dengan fitur Balasan Langsung di Android N, pengguna bisa dengan cepat +merespons pesan teks atau memperbarui daftar tugas secara langsung dalam antarmuka +pemberitahuan. Pada perangkat genggam, tindakan balasan inline muncul sebagai tombol tambahan + yang dilampirkan pada pemberitahuan. Bila pengguna membalas lewat keyboard, sistem akan melampirkan + respons teks ke intent + yang telah Anda tetapkan untuk tindakan pemberitahuan dan mengirimkan intent ke + aplikasi perangkat genggam Anda. + + + +

+ Gambar 1. Android N menambahkan tombol tindakan Reply +. +

+ +

Menambahkan tindakan balasan inline

+ +

Untuk membuat tindakan pemberitahuan yang mendukung balasan langsung: +

+ +
    +
  1. Buat instance {@link android.support.v4.app.RemoteInput.Builder} + yang bisa Anda tambahkan ke tindakan +pemberitahuan. Konstruktor kelas ini akan menerima string bahwa sistem menggunakannya sebagai kunci + untuk input teks. Kemudian, aplikasi perangkat genggam Anda akan menggunakan kunci itu untuk mengambil teks + input tersebut. + +
    +// Key for the string that's delivered in the action's intent
    +private static final String KEY_TEXT_REPLY = "key_text_reply";
    +String replyLabel = getResources().getString(R.string.reply_label);
    +RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
    +        .setLabel(replyLabel)
    +        .build();
    +
    +
  2. +
  3. Lampirkan objek {@link android.support.v4.app.RemoteInput} + pada tindakan dengan menggunakan addRemoteInput(). + +
    +// Create the reply action and add the remote input
    +Notification.Action action =
    +        new Notification.Action.Builder(R.drawable.ic_reply_icon,
    +                getString(R.string.label), replyPendingIntent)
    +                .addRemoteInput(remoteInput)
    +                .build();
    +
    +
  4. + +
  5. Terapkan tindakan pada pemberitahuan dan keluarkan pemberitahuan. + +
    +// Build the notification and add the action
    +Notification notification =
    +        new Notification.Builder(mContext)
    +                .setSmallIcon(R.drawable.ic_message)
    +                .setContentTitle(getString(R.string.title))
    +                .setContentText(getString(R.string.content))
    +                .addAction(action))
    +                .build();
    +
    +// Issue the notification
    +NotificationManager notificationManager =
    +        NotificationManager.from(mContext);
    +notificationManager.notify(notificationId, notification);
    +
    +
    +
  6. + +
+ + +

Sistem akan meminta pengguna memasukkan respons bila mereka memicu +tindakan pemberitahuan.

+ + +

+ Gambar 2. Pengguna memasukkan teks dari bayangan pemberitahuan. +

+ +

Mengambil input pengguna dari balasan inline

+ +

Untuk menerima input pengguna dari antarmuka pemberitahuan untuk aktivitas yang Anda +deklarasikan dalam intent tindakan balasan:

+
    +
  1. Panggil {@link android.support.v4.app.RemoteInput#getResultsFromIntent + getResultsFromIntent()} dengan meneruskan intent tindakan pemberitahuan sebagai + parameter input. Metode ini mengembalikan {@link android.os.Bundle} yang + berisi respons teks. +
  2. + +
    +Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
    +
    + +
  3. Lakukan query pada bundel menggunakan kunci hasil (diberikan ke konstruktor {@link + android.support.v4.app.RemoteInput.Builder}). +
  4. +
+ +

Cuplikan kode berikut mengilustrasikan cara metode mengambil teks input +dari bundel:

+ +
+// Obtain the intent that started this activity by calling
+// Activity.getIntent() and pass it into this method to
+// get the associated string.
+
+private CharSequence getMessageText(Intent intent) {
+    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+    if (remoteInput != null) {
+            return remoteInput.getCharSequence(KEY_TEXT_REPLY);
+            }
+    return null;
+ }
+
+ +

Aplikasi bisa menerapkan logika untuk memutuskan tindakan apa yang harus diambil pada teks +yang telah diambil. +Untuk aplikasi interaktif (seperti chat), memberikan lebih banyak konteks dalam pemberitahuan itu sendiri + (misalnya, beberapa baris riwayat obrolan, termasuk pesan pengguna pribadi) + sehingga pengguna bisa merespons dengan tepat. +Bila pengguna merespons melalui{@link android.support.v4.app.RemoteInput}, + sertakan teks dalam riwayat balasan dengan metode {@code setRemoteInputHistory()} +.

+ +

Bundel Pemberitahuan

+ +

Android N membekali pengembang dengan sebuah cara baru untuk menyatakan + antrean pemberitahuan: bundel pemberitahuan. Ini mirip dengan fitur + Tumpukan + Pemberitahuan dalam Android Wear. Misalnya, jika aplikasi Anda membuat pemberitahuan + untuk pesan yang diterima, bila lebih dari satu pesan diterima, pemberitahuan tersebut akan + dibundel sebagai satu grup. Anda bisa + menggunakan metode {@link android.support.v4.app.NotificationCompat.Builder#setGroup +Builder.setGroup()} yang ada untuk membundel pemberitahuan yang sama.

+ +

+ Grup pemberitahuan menerapkan hierarki pada pemberitahuan yang ada di dalamnya. + Di bagian teratas hierarki adalah pemberitahuan induk yang menampilkan informasi + rangkuman untuk grup tersebut. Pengguna secara bertahap bisa + memperbesar grup pemberitahuan, dan sistem akan menampilkan informasi lebih banyak saat + pengguna menggali lebih dalam. Bila pengguna memperbesar bundel, sistem akan memperlihatkan informasi lebih + banyak untuk semua pemberitahuan anak; bila pengguna + memperbesar salah satu pemberitahuan tersebut, sistem akan memperlihatkan seluruh isinya. +

+ + +

+ Gambar 3. Pengguna secara bertahap bisa memperluas grup + pemberitahuan. +

+ +

Untuk mengetahui cara menambahkan pemberitahuan ke grup, lihat +Menambahkan +Setiap Pemberitahuan ke Grup.

+ + +

Praktik terbaik untuk bundel pemberitahuan

+

Bagian ini memberikan panduan tentang kapan menggunakan grup pemberitahuan sebagai ganti +pemberitahuan {@link android.app.Notification.InboxStyle InboxStyle} +yang telah tersedia di +platform Android versi sebelumnya.

+ +

Kapan menggunakan bundel pemberitahuan

+ +

Anda harus menggunakan grup pemberitahuan hanya jika semua kondisi berikut ini +bernilai benar untuk kasus penggunaan Anda:

+ + + +

Contoh kasus penggunaan yang baik untuk grup pemberitahuan antara lain: aplikasi pertukaran pesan +yang menampilkan daftar pesan yang masuk, atau aplikasi email yang menampilkan daftar email +yang diterima.

+ +

+Contoh kasus di mana pemberitahuan tunggal lebih disukai + antara lain pesan individual dari satu orang, atau representasi daftar + item teks satu-baris. Anda bisa menggunakan +({@link android.app.Notification.InboxStyle InboxStyle} atau +{@link android.app.Notification.BigTextStyle BigTextStyle}) untuk mencapai +hal ini. +

+ +

Menampilkan bundel pemberitahuan

+ +

+ Aplikasi ini harus selalu memposting rangkuman grup, sekalipun grup hanya berisi + satu anak. Sistem akan menyembunyikan rangkuman dan langsung menampilkan + pemberitahuan anak jika hanya berisi pemberitahuan tunggal. Hal ini akan memastikan + sistem bisa memberikan pengalaman yang konsisten saat pengguna menggeser + anak grup. +

+ +

+ Catatan: Versi Android N ini tidak menyembunyikan + rangkuman untuk grup pemberitahuan yang berisi satu anak. Fungsionalitas + ini akan ditambahkan dalam Android N versi berikutnya. +

+ +

Mengintip pemberitahuan

+ +

Walaupun sistem biasanya menampilkan pemberitahuan anak sebagai sebuah grup, Anda bisa mengaturnya + agar muncul untuk sementara muncul sebagai + + pemberitahuan pendahuluan. Fitur ini khususnya berguna karena memungkinkan + akses langsung ke pemberitahuan anak terbaru dan tindakan yang dikaitkan dengannya. +

+ + +

Kompatibilitas mundur

+ +

+ Baik grup pemberitahuan maupun input jauh telah menjadi bagian dari {@link + android.app.Notification} API sejak Android 5.0 (API level 21) untuk mendukung + perangkat Android Wear. Jika Anda sudah membuat pemberitahuan dengan API ini, + satu-satunya tindakan yang harus Anda ambil adalah memeriksa apakah perilaku aplikasi sesuai dengan panduan yang + dijelaskan di atas, dan mempertimbangkan implementasi {@code + setRemoteInputHistory()}. +

+ +

+ Untuk mendukung kompatibilitas mundur, tersedia API yang sama bersama + kelas {@link android.support.v4.app.NotificationCompat} + pustaka dukungan, yang memungkinkan Anda untuk membuat pemberitahuan yang bekerja pada versi Android + sebelumnya. Pada perangkat genggam dan tablet, pengguna hanya melihat pemberitahuan rangkuman, + sehingga aplikasi tetap memiliki gaya kotak masuk atau representasi pemberitahuan yang sama + untuk seluruh konten informasi grup. Karena perangkat Android + Wear memungkinkan pengguna melihat semua pemberitahuan anak bahkan pada level platform + yang lebih lama, maka Anda harus membuat pemberitahuan anak dengan mengabaikan level + API. +

+ +

Tampilan Custom

+

Mulai dari Android N, Anda bisa menyesuaikan tampilan pemberitahuan dan +tetap mendapatkan dekorasi sistem seperti header pemberitahuan, tindakan, dan +layout yang bisa diperluas.

+ +

Untuk mengaktifkan kemampuan ini, Android N menambahkan API berikut untuk menata gaya + tampilan custom Anda:

+ +
+
+{@code DecoratedCustomViewStyle()}
+
Menata gaya pemberitahuan selain pemberitahuan +media.
+
+{@code DecoratedMediaCustomViewStyle()}
+
Menata gaya pemberitahuan media.
+
+ +

Untuk menggunakan API baru ini, panggil metode {@code setStyle()}, dengan meneruskan +gaya tampilan custom yang diinginkan padanya.

+ +

Cuplikan ini menampilkan cara membuat objek pemberitahuan custom dengan metode +{@code DecoratedCustomViewStyle()}.

+ +
+Notification noti = new Notification.Builder()
+           .setSmallIcon(R.drawable.ic_stat_player)
+           .setLargeIcon(albumArtBitmap))
+           .setCustomContentView(contentView);
+           .setStyle(new Notification.DecoratedCustomViewStyle())
+           .build();
+
+
diff --git a/docs/html-intl/intl/in/preview/features/picture-in-picture.jd b/docs/html-intl/intl/in/preview/features/picture-in-picture.jd new file mode 100644 index 000000000000..883b17a2d6e1 --- /dev/null +++ b/docs/html-intl/intl/in/preview/features/picture-in-picture.jd @@ -0,0 +1,186 @@ +page.title=Gambar-dalam-gambar +page.keywords=preview,sdk,PIP,Picture-in-picture +page.tags=androidn + +@jd:body + + + +

Di Android N, pengguna Android TV sekarang bisa menonton video +dalam jendela yang disematkan di sudut layar saat menyusuri +aplikasi. Mode gambar-dalam-gambar (PIP) memungkinkan aplikasi menjalankan aktivitas +video dalam jendela yang disematkan selagi aktivitas lain tetap berjalan di +latar belakang. Jendela PIP memungkinkan pengguna melakukan multitasking saat menggunakan aplikasi Anda, yang +membantu pengguna menjadi lebih produktif.

+ +

Aplikasi Anda bisa memutuskan kapan memicu mode PIP. Inilah beberapa contoh +kapan memasuki mode PIP:

+ + + +

Jendela PIP memiliki luas 240x135 dp dan ditampilkan di layer paling atas pada salah satu +dari empat sudut layar, yang dipilih oleh sistem. Pengguna bisa memunculkan +menu PIP yang memungkinkan mereka untuk beralih mode dari jendela PIP ke layar penuh, atau menutup jendela +PIP, dengan menekan dan menahan tombol Beranda pada remote. Jika video +lain mulai diputar pada layar utama, jendela PIP secara otomatis +ditutup. Pengguna juga bisa menutup jendela PIP melalui Recents.

+ + +

Gambar 1. Video +Gambar-dalam-gambar terlihat di sudut layar selagi pengguna melihat-lihat konten pada layar +utama.

+ +

PIP memanfaatkan API multi-jendela yang tersedia di Android N untuk +menyediakan jendela overlay video yang disematkan. Untuk menambahkan PIP ke aplikasi, Anda harus +mendaftarkan aktivitas yang mendukung PIP, mengalihkan aktivitas Anda ke mode PIP bila +diperlukan, serta memastikan elemen UI disembunyikan dan pemutaran video berlanjut bila +aktivitas dalam mode PIP.

+ +

Mendeklarasikan Bahwa Aktivitas Anda Mendukung Gambar-dalam-gambar

+ +

Secara default, sistem tidak secara otomatis mendukung PIP untuk aplikasi. +Jika Anda ingin mendukung PIP dalam aplikasi, daftarkan aktivitas +video Anda dalam manifes dengan mengatur +android:supportsPictureInPicture dan +android:resizeableActivity ke true. Juga, tetapkan +bahwa aktivitas Anda menangani perubahan konfigurasi layout sehingga aktivitas +Anda tidak diluncurkan ulang saat terjadi perubahan layout selama transisi mode PIP.

+ +
+<activity android:name="VideoActivity"
+    android:resizeableActivity="true"
+    android:supportsPictureInPicture="true"
+    android:configChanges=
+        "screenSize|smallestScreenSize|screenLayout|orientation"
+    ...
+
+ +

Saat mendaftarkan aktivitas Anda, ingatlah bahwa dalam mode PIP aktivitas +Anda akan ditampilkan pada jendela overlay kecil pada layar TV. Aktivitas +pemutaran video dengan UI minimal akan memberikan pengalaman pengguna terbaik. Aktivitas yang +berisi elemen UI kecil mungkin tidak memberikan pengalaman pengguna yang baik +bila beralih ke mode PIP, karena pengguna tidak bisa melihat elemen UI secara detail +di jendela PIP.

+ +

Mengalihkan Aktivitas Anda ke Gambar-dalam-gambar

+ +Bila Anda perlu untuk mengalihkan aktivitas Anda ke mode PIP, panggil +Activity.enterPictureInPicture(). Contoh berikut mengalihkan +ke mode PIP bila pengguna memilih tombol PIP khusus pada baris +kontrol media:

+ +
+@Override
+public void onActionClicked(Action action) {
+    if (action.getId() == R.id.lb_control_picture_in_picture) {
+        getActivity().enterPictureInPicture();
+        return;
+    }
+    ...
+
+ +

Menambahkan tombol PIP ke baris kontrol media Anda akan memungkinkan pengguna dengan mudah beralih +ke mode PIP selagi mengontrol pemutaran video.

+ + +

Gambar 1. Tombol +gambar-dalam-gambar pada baris kontrol media.

+ +

Android N menyertakan kelas +PlaybackControlsRow.PictureInPictureAction baru yang mendefinisikan +tindakan PIP baris kontrol dan menggunakan ikon PIP.

+ +

Menangani UI Selama Gambar-dalam-gambar

+ +

Bila aktivitas Anda memasuki mode PIP, aktivitas Anda seharusnya hanya menampilkan pemutaran +video. Hilangkan elemen UI sebelum aktivitas Anda memasuki PIP, +dan pulihkan elemen ini bila aktivitas Anda beralih ke layar penuh lagi. +Kesampingkan Activity.onPictureInPictureChanged() atau +Fragment.onPictureInPictureChanged() dan aktifkan atau +nonaktifkan elemen UI saat diperlukan, misalnya:

+ +
+@Override
+public void onPictureInPictureChanged(boolean inPictureInPicture) {
+    if (inPictureInPicture) {
+        // Hide the controls in picture-in-picture mode.
+        ...
+    } else {
+        // Restore the playback UI based on the playback status.
+        ...
+    }
+}
+
+ +

Melanjutkan Pemutaran Video Saat dalam +Gambar-dalam-gambar

+ +

Bila aktivitas Anda beralih ke PIP, sistem akan menganggap aktivitas tersebut berada dalam +keadaan berhenti sementara, dan akan memanggil metode onPause() aktivitas Anda. Pemutaran +video tidak boleh berhenti sementara dan harus terus diputar jika aktivitas tersebut +berhenti sementara karena mode PIP. Periksa PIP dalam metode +onPause() aktivitas Anda dan tangani pemutaran dengan tepat, +misalnya:

+ +
+@Override
+public void onPause() {
+    // If called due to PIP, do not pause playback
+    if (inPictureInPicture()) {
+        // Continue playback
+        ...
+    }
+    // If paused but not in PIP, pause playback if necessary
+    ...
+}
+
+ +

Bila aktivitas Anda meninggalkan mode PIP dan kembali ke mode layar penuh, sistem +akan melanjutkan aktivitas Anda dan memanggil metode onResume() Anda.

+ +

Praktik Terbaik

+ +

PIP ditujukan untuk aktivitas yang memutar video layar penuh. Saat mengalihkan +aktivitas Anda ke mode PIP, hindari menampilkan apa pun selain konten video. +Pantau saat aktivitas Anda memasuki mode PIP dan sembunyikan elemen UI, seperti dijelaskan +dalam Menangani UI Selama Gambar-dalam-gambar.

+ +

Karena jendela PIP ditampilkan sebagai jendela mengambang di sudut +layar, Anda harus menghindari menampilkan informasi penting di layar utama +di area mana saja yang bisa terhalang oleh jendela PIP.

+ +

Bila aktivitas ada berada dalam mode PIP, secara default aktivitas itu tidak mendapatkan fokus input. Untuk +menerima kejadian input saat dalam mode PIP, gunakan +MediaSession.setMediaButtonReceiver().

diff --git a/docs/html-intl/intl/in/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/in/preview/features/scoped-folder-access.jd new file mode 100644 index 000000000000..cbb7c9fc11ea --- /dev/null +++ b/docs/html-intl/intl/in/preview/features/scoped-folder-access.jd @@ -0,0 +1,124 @@ +page.title=Scoped Directory Access +page.keywords=preview,sdk,scoped directory access +page.tags=androidn + +@jd:body + + + +

Aplikasi seperti aplikasi foto biasanya hanya memerlukan akses ke direktori tertentu dalam +penyimpanan eksternal, seperti direktori Pictures. Pendekatan +yang ada untuk mengakses penyimpanan eksternal tidak didesain untuk memberikan +akses direktori target dengan mudah untuk tipe aplikasi ini. Misalnya:

+ + + +

Android N menyediakan API baru yang disederhanakan untuk mengakses +direktori penyimpanan eksternal umum.

+ +

Mengakses Direktori Penyimpanan Eksternal

+ +

Gunakan kelas StorageManager untuk mendapatkan instance +StorageVolume yang tepat. Kemudian, buat intent dengan memanggil metode +StorageVolume.createAccessIntent() dari instance itu. +Gunakan intent ini untuk mengakses direktori penyimpanan eksternal. Untuk mendapatkan daftar +semua isi yang tersedia, termasuk isi media lepas-pasang, gunakan +StorageManager.getVolumesList().

+ +

Cuplikan kode berikut adalah contoh cara membuka direktori +Pictures dalam penyimpanan bersama utama:

+ +
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

Sistem ini mencoba untuk memberikan akses ke direktori eksternal, dan jika +diperlukan mengonfirmasi akses dengan pengguna menggunakan UI yang disederhanakan:

+ + +

Gambar 1. Sebuah aplikasi yang meminta +akses ke direktori Pictures.

+ +

Jika pengguna memberi akses, sistem akan memanggil pengesampingan +onActivityResult() Anda dengan kode hasil +Activity.RESULT_OK, dan data intent yang berisi URI. Gunakan +URI yang disediakan untuk mengakses informasi direktori, serupa dengan menggunakan URI +yang dikembalikan oleh +Storage +Access Framework.

+ +

Jika pengguna tidak memberi akses, sistem akan memanggil pengesampingan +onActivityResult() Anda dengan kode hasil +Activity.RESULT_CANCELED, dan data intent nol.

+ +

Catatan: Mendapatkan akses ke direktori eksternal tertentu +juga akan memperoleh akses ke subdirektori dalam direktori tersebut.

+ +

Mengakses Direktori pada Media Lepas-Pasang

+ +

Untuk menggunakan Scoped Directory Access guna mengakses direktori pada media lepas-pasang, +pertama tambahkan {@link android.content.BroadcastReceiver} yang akan mendengarkan pemberitahuan +{@link android.os.Environment#MEDIA_MOUNTED}, misalnya:

+ +
+<receiver
+    android:name=".MediaMountedReceiver"
+    android:enabled="true"
+    android:exported="true" >
+    <intent-filter>
+        <action android:name="android.intent.action.MEDIA_MOUNTED" />
+        <data android:scheme="file" />
+    </intent-filter>
+</receiver>
+
+ +

Bila pengguna memasang media lepas-pasang, seperti kartu SD, sistem akan mengirimkan pemberitahuan +{@link android.os.Environment#MEDIA_MOUNTED}. Pemberitahuan ini +memberikan sebuah objek StorageVolume dalam data intent yang bisa +Anda gunakan untuk mengakses direktori pada media lepas-pasang. Contoh berikut +mengakses direktori Pictures pada media lepas-pasang:

+ +
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+    mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

Praktik Terbaik

+ +

Bila memungkinkan, pertahankan URI akses direktori eksternal sehingga Anda tidak perlu +berulang kali meminta akses ke pengguna. Setelah pengguna memberikan akses, panggil +getContentResolver().takePersistableUriPermssion() bersama +URI akses direktori. Sistem akan mempertahankan URI dan permintaan +akses berikutnya akan mengembalikan RESULT_OK dan tidak menampilkan UI konfirmasi kepada +pengguna.

+ +

Jika pengguna menolak akses ke direktori eksternal, jangan langsung +meminta akses lagi. Berulang kali meminta akses akan menghasilkan pengalaman +pengguna yang buruk.

diff --git a/docs/html-intl/intl/in/preview/features/security-config.jd b/docs/html-intl/intl/in/preview/features/security-config.jd new file mode 100644 index 000000000000..2eb45d4f375e --- /dev/null +++ b/docs/html-intl/intl/in/preview/features/security-config.jd @@ -0,0 +1,744 @@ +page.title=Network Security Configuration +page.keywords=preview,security,network + +@jd:body + + + + +

+ Android N menyertakan fitur + Network Security Configuration yang memungkinkan aplikasi menyesuaikan pengaturan keamanan jaringan mereka dalam + file konfigurasi deklaratif yang aman tanpa memodifikasi kode aplikasi. Pengaturan ini bisa + dikonfigurasi untuk domain dan aplikasi tertentu. Kemampuan + utama fitur ini adalah sebagai berikut: +

+ + + + +

Menambahkan File Konfigurasi Keamanan

+ +

+ Fitur Network Security Configuration menggunakan file XML tempat Anda menetapkan + pengaturan untuk aplikasi. Anda harus menyertakan sebuah entri dalam manifes aplikasi + untuk menunjuk ke file ini. Kutipan kode berikut dari sebuah manifes + yang memperagakan cara membuat entri ini: +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+...
+<app ...>
+    <meta-data android:name="android.security.net.config"
+               android:resource="@xml/network_security_config" />
+    ...
+</app>
+
+ +

Menyesuaikan CA Tepercaya

+ +

+ Aplikasi mungkin perlu mempercayai set CA custom sebagai ganti default + platform. Alasannya yang paling umum adalah: +

+ + + +

+ Secara default koneksi (misalnya TLS, HTTPS) aman dari semua aplikasi mempercayai + CA yang telah diinstal oleh sistem, dan aplikasi yang menargetkan API level 23 + (Android M) ke bawah, juga mempercayai penyimpanan CA yang ditambahkan pengguna secara default. Aplikasi + bisa menyesuaikan koneksinya sendiri menggunakan {@code base-config} (untuk + penyesuaian di tingkat aplikasi) atau {@code domain-config} (untuk penyesuaian + per-domain). +

+ + +

Mengonfigurasi CA Custom

+ +

+ Anggaplah Anda ingin menghubungkan ke host Anda yang menggunakan sertifikat + SSL yang ditandatangani sendiri atau ke host yang sertifikat SSL-nya dikeluarkan oleh CA non-publik + yang Anda percaya, seperti CA internal perusahaan Anda. +

+ +

+ res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ Menambahkan sertifikat CA yang ditandatangani sendiri atau sertifikat CA non-publik, dalam format PEM atau DER, ke + {@code res/raw/my_ca}. +

+ + +

Membatasi Set CA Tepercaya

+ +

+ Aplikasi yang tidak ingin mempercayai semua CA yang dipercaya oleh sistem + sebagai gantinya bisa menetapkan set CA sendiri yang telah dikurangi untuk dipercaya. Ini akan melindungi + aplikasi dari sertifikat palsu yang dikeluarkan oleh selain CA. +

+ +

+ Konfigurasi untuk membatasi set CA tepercaya mirip dengan mempercayai CA custom untuk domain tertentu selain + beberapa CA disediakan dalam sumber daya. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">secure.example.com</domain>
+        <domain includeSubdomains="true">cdn.example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/trusted_roots"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ Menambahkan CA tepercaya, dalam format PEM atau DER, ke {@code res/raw/trusted_roots}. + Perhatikan, jika menggunakan format PEM, file hanya boleh berisi data PEM + dan tidak ada teks tambahan. Anda juga bisa menyediakan beberapa elemen + <certificates> +sebagai ganti satu elemen. +

+ + +

+ Mempercayai CA Tambahan +

+ +

+ Sebuah aplikasi mungkin perlu mempercayai CA tambahan yang tidak dipercaya oleh sistem, + hal ini bisa disebabkan karena sistem belum menyertakan CA atau CA tidak + memenuhi persyaratan untuk memasukkan ke dalam sistem Android. Aplikasi + bisa melakukannya dengan menetapkan beberapa sumber sertifikat untuk + konfigurasi. +

+

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="@raw/extracas"/>
+            <certificates src="system"/>
+        </trust-anchors>
+    </base-config>
+</network-security-config>
+
+

+ + +

Mengonfigurasi CA untuk Perunutan

+ +

+ Saat merunut aplikasi yang terhubung melalui HTTPS, Anda mungkin perlu + menghubungkan ke server pengembangan lokal, yang tidak memiliki sertifikat + SSL untuk server produksi Anda. Untuk mendukungnya tanpa + memodifikasi kode aplikasi, Anda bisa menetapkan CA hanya-runut + yang hanya dipercaya bila +android:debuggable + adalah {@code true} dengan menggunakan {@code debug-overrides}. Biasanya IDE dan alat + build mengatur flag ini secara otomatis untuk build non-rilis. +

+ +

+ Ini lebih aman daripada kode kondisional biasa karena, sebagai tindakan + pencegahan keamanan, toko aplikasi tidak menerima aplikasi yang ditandai + bisa-dirunut. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="@raw/debug_cas"/>
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+

+ + +

Berhenti dari Lalu Lintas Cleartext

+ +

+ Aplikasi yang bermaksud menghubungkan ke tujuan dengan hanya menggunakan koneksi + aman bisa berhenti mendukung cleartext (menggunakan protokol + HTTP yang tidak dienkripsi sebagai ganti HTTPS) ke tujuan tersebut. Opsi ini akan membantu mencegah + regresi tidak disengaja dalam aplikasi karena perubahan dalam URL yang disediakan oleh sumber-sumber + eksternal seperti server backend. + Lihat {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted + NetworkSecurityPolicy.isCleartextTrafficPermitted()} untuk detail selengkapnya. +

+ +

+ Misalnya, aplikasi mungkin ingin memastikan semua koneksi ke {@code + secure.example.com} selalu dilakukan melalui HTTPS untuk melindungi lalu lintas sensitif + dari jaringan yang berbahaya. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config usesCleartextTraffic="false">
+        <domain includeSubdomains="true">secure.example.com</domain>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Menyematkan Sertifikat

+ +

+ Biasanya aplikasi mempercayai semua CA yang telah terinstal. Jika salah satu dari CA ini + mengeluarkan sertifikat palsu, aplikasi akan berisiko terkena serangan + MiTM. Beberapa aplikasi memilih untuk membatasi set sertifikat yang mereka terima + baik dengan membatasi set CA yang mereka percaya atau dengan menyematkan sertifikat. +

+ +

+ Penyematan sertifikat dilakukan dengan memberikan seperangkat sertifikat dengan hash + kunci publik (SubjectPublicKeyInfo pada sertifikat X.509). Rantai + sertifikat nanti hanya berlaku jika rantai sertifikat berisi setidaknya salah satu + dari kunci publik yang disematkan. +

+ +

+ Perhatikan, saat menggunakan penyematan sertifikat, Anda harus selalu menyertakan kunci + cadangan sehingga jika Anda terpaksa beralih ke kunci baru, atau mengubah CA (saat + menyematkan ke sertifikat CA atau perantara CA tersebut), konektivitas + aplikasi Anda tidak terpengaruh. Jika tidak, Anda harus mendorong + pembaruan ke aplikasi tersebut untuk memulihkan konektivitas. +

+ +

+ Selain itu bisa juga mengatur waktu kedaluwarsa untuk pin yang setelah + itu penyematan tidak dilakukan. Hal ini membantu mencegah masalah konektivitas dalam + aplikasi yang belum diperbarui. Akan tetapi, mengatur waktu kedaluwarsa + pada pin mungkin akan membuat penyematan bisa diabaikan. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <pin-set expiration="2018-01-01">
+            <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+            <!-- backup pin -->
+            <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Perilaku Pewarisan Konfigurasi

+ +

+ Nilai yang tidak diatur dalam konfigurasi tertentu akan diwariskan. Perilaku ini memungkinkan konfigurasi + yang lebih kompleks sambil menjaga file konfigurasi tetap terbaca. +

+ +

+ Jika nilai tidak diatur dalam entri tertentu maka nilai dari entri berikutnya yang lebih + umum akan digunakan. Nilai yang tidak diatur dalam {@code domain-config} akan + diambil dari {@code domain-config} induk, jika tersarang, atau dari {@code + base-config} jika tidak. Nilai yang tidak diatur dalam {@code base-config} akan menggunakan + nilai default platform. +

+ +

+ Misalnya pertimbangkan, bila semua koneksi ke subdomain {@code + example.com} harus menggunakan set CA custom. Selain itu, lalu lintas cleartext ke + domain ini diizinkan kecuali saat menghubungkan ke {@code + secure.example.com}. Dengan menyarangkan konfigurasi untuk {@code + secure.example.com} dalam konfigurasi untuk {@code example.com}, + {@code trust-anchors} tidak perlu digandakan. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+        <domain-config cleartextTrafficPermitted="false">
+            <domain includeSubdomains="true">secure.example.com</domain>
+        </domain-config>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Format File Konfigurasi

+ +

+ Fitur Network Security Configuration menggunakan format file XML. + Struktur keseluruhan file ditampilkan dalam contoh kode berikut: +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </base-config>
+
+    <domain-config>
+        <domain>android.com</domain>
+        ...
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+        <pin-set>
+            <pin digest="...">...</pin>
+            ...
+        </pin-set>
+    </domain-config>
+    ...
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+ +

+ Bagian berikut menjelaskan sintaks dan detail lainnya dari format + file. +

+ +

+ <network-security-config> +

+ +
+
+ bisa berisi: +
+ +
+ 0 atau 1 <base-config>
+ Sejumlah <domain-config>
+ 0 atau 1 <debug-overrides> +
+
+ +

+ <base-config> +

+ +
+
+ sintaks: +
+
+ +
+<base-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</base-config>
+
+
+
+ bisa berisi: +
+ +
+ <trust-anchors> +
+ +
+ keterangan: +
+ +
+ Konfigurasi default yang digunakan oleh semua koneksi yang tujuannya tidak + tercakup oleh domain-config. + +

+ Nilai yang tidak diatur akan menggunakan nilai default platform. Konfigurasi + default untuk aplikasi yang menargetkan API level 24 ke atas: +

+ +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+    </trust-anchors>
+</base-config>
+
+Konfigurasi default untuk aplikasi yang menargetkan API level 23 ke bawah: +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+        <certificates src="user" />
+    </trust-anchors>
+</base-config>
+
+ +
+
+ +

<domain-config>

+
+
sintaks:
+
+
<domain-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</domain-config>
+
+ +
Bisa Berisi:
+ +
+1 atau beberapa <domain> +
0 atau 1 <trust-anchors> +
0 atau 1 <pin-set> +
Sejumlah <domain-config> tersarang
+ +
Keterangan
+
Konfigurasi yang digunakan untuk koneksi ke tujuan tertentu seperti didefinisikan oleh elemen {@code domain}. + +

Perhatikan, jika beberapa elemen {@code domain-config} mencakup suatu tujuan, konfigurasi dengan aturan domain paling spesifik (terpanjang) yang cocok +akan digunakan.

+
+ + +

<domain>

+ +
+
+ sintaks: +
+ +
+
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+
+
+ +
+ Atribut: +
+ +
+
+
+ {@code includeSubdomains} +
+ +
+ Jika {@code "true"} maka aturan domain ini akan dicocokkan dengan domain dan semua + subdomain, termasuk subdomain dari subdomain, jika tidak peraturan hanya + diterapkan pada kecocokan yang persis tepat. +
+
+
+ +
+ Keterangan: +
+
+ +

<debug-overrides>

+ +
+
+ sintaks: +
+ +
+
+<debug-overrides>
+    ...
+</debug-overrides>
+
+
+ +
+ Bisa Berisi: +
+ +
+ 0 atau 1 <trust-anchors> +
+ +
+ Keterangan: +
+ +
+ Pengesampingan yang akan diterapkan bila android:debuggable + adalah {@code "true"} yang biasanya terjadi untuk build non-rilis + yang dihasilkan oleh alat IDE dan build. Trust-anchor yang ditetapkan dalam {@code + debug-overrides} akan ditambahkan ke semua konfigurasi lainnya dan penyematan + sertifikat tidak dilakukan bila rantai sertifikat server menggunakan satu dari + trust-anchor hanya-runut ini. Jika android:debuggable + adalah {@code "false"} maka bagian ini akan diabaikan sepenuhnya. +
+
+ +

<trust-anchors>

+
+
+ sintaks: +
+ +
+
+<trust-anchors>
+...
+</trust-anchors>
+
+
+ +
+ Bisa Berisi: +
+ +
+ Sejumlah <certificates> +
+ +
+ Keterangan: +
+ +
+ Set trust-anchor untuk koneksi aman. +
+
+ + +

<certificates>

+
+
sintaks:
+
<certificates src=["system" | "user" | "raw resource"]
+              overridePins=["true" | "false"] />
+
+
keterangan:
+
Set sertifikat X.509 untuk elemen {@code trust-anchors}.
+ +
atribut:
+
+
{@code src}
+
+Sumber sertifikat CA, bisa salah satu dari +
    +
  • ID sumber daya mentah yang menunjuk ke file berisi sertifikat X.509. + Sertifikat harus dikodekan dalam format DER atau PEM. Dalam hal sertifikat + PEM, file tidak boleh berisi data tambahan non-PEM seperti + komentar. +
  • + +
  • {@code "system"} untuk sertifikat CA sistem yang telah terinstal. +
  • + +
  • {@code "user"} untuk sertifikat CA yang ditambahkan pengguna. +
  • +
+
+ +
{@code overridePins}
+
+

+ Menetapkan apakah CA dari sumber akan mengabaikan penyematan sertifikat. Jika {@code + "true"} maka rantai sertifikat yang rantainya melalui salah satu CA dari + sumber ini tidak akan disematkan. Hal ini bisa berguna untuk CA + perunutan atau untuk mendukung dengan memungkinkan pengguna melakukan MiTM atas lalu lintas aman aplikasi Anda. +

+ +

+ Default-nya adalah {@code "false"} kecuali jika ditetapkan dalam elemen {@code debug-overrides}, + dalam hal demikian default-nya adalah {@code "true"}. +

+
+
+
+ + +

<pin-set>

+ +
+
+ sintaks: +
+ +
+
+<pin-set expiration="date">
+...
+</pin-set>
+
+
+ +
+ Bisa Berisi: +
+ +
+ Sejumlah <pin> +
+ +
+ Keterangan: +
+ +
+ Satu set pin kunci publik. Agar koneksi aman bisa dipercaya, salah satu + kunci publik dalam rantai kepercayaan harus berada dalam set pin. Lihat + <pin> untuk mengetahui format pin. +
+ +
+ Atribut: +
+ +
+
+
+ {@code expiration} +
+ +
+ Tanggal, dalam format {@code yyyy-MM-dd}, pada saat dan setelah pin + kedaluwarsa, sehingga menonaktifkan penyematan. Jika atribut tidak diatur maka + pin tidak kedaluwarsa. +

+ Tanggal kedaluwarsa membantu mencegah masalah konektivitas di aplikasi yang + tidak mendapatkan pembaruan untuk set pin mereka, misalnya karena pengguna + menonaktifkan pembaruan aplikasi. +

+
+
+
+
+ +

<pin>

+
+
+ sintaks: +
+ +
+
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+    SubjectPublicKeyInfo (SPKI)</pin>
+
+
+ +
+ Atribut: +
+ +
+
+
+ {@code digest} +
+ +
+ Algoritma intisari yang digunakan untuk menghasilkan pin. Saat ini, hanya + {@code "SHA-256"} yang didukung. +
+
+
+
diff --git a/docs/html-intl/intl/in/preview/features/tv-recording-api.jd b/docs/html-intl/intl/in/preview/features/tv-recording-api.jd new file mode 100644 index 000000000000..2f9ad7efe033 --- /dev/null +++ b/docs/html-intl/intl/in/preview/features/tv-recording-api.jd @@ -0,0 +1,120 @@ +page.title=Perekaman TV +page.keywords=preview,sdk,tv,recording +page.tags=androidn + +@jd:body + + + +

Layanan input TV memungkinkan pengguna menghentikan sementara dan melanjutkan pemutaran saluran melalui +API perekaman atau time-shifting. Android N telah berkembang hingga ke perekaman +dengan memungkinkan pengguna menyimpan beberapa sesi rekaman.

+ +

Pengguna bisa menjadwalkan rekaman terlebih dahulu, atau memulai rekaman sambil menonton +suatu acara. Setelah sistem menyimpan rekaman, pengguna bisa melihat-lihat, menata, +dan memutar kembali rekaman tersebut menggunakan aplikasi TV di sistem.

+ +

Jika Anda ingin menyediakan fungsionalitas perekaman untuk layanan input TV, +Anda harus menunjukkan pada sistem bahwa aplikasi Anda mendukung perekaman, mengimplementasikan +kemampuan untuk merekam acara, menangani dan memberitahukan setiap kesalahan yang terjadi +selama perekaman, serta mengelola sesi yang telah Anda rekam.

+ +

Menunjukkan Dukungan untuk Perekaman

+ +

Untuk memberi tahu sistem bahwa layanan input TV Anda mendukung perekaman, ikuti +langkah-langkah ini:

+ +
    +
  1. Dalam metodeTvInputService.onCreate() Anda, buat objek +TvInputInfo baru menggunakan kelas TvInputInfo.Builder. +
  2. +
  3. Saat membuat objek TvInputInfo baru, panggil +setCanRecord(true) sebelum memanggil build() untuk +menunjukkan bahwa layanan Anda mendukung perekaman.
  4. +
  5. Daftarkan objek TvInputInfo Anda pada sistem dengan memanggil +TvInputService.updateTvInputInfo().
  6. +
+ +

Merekam Sesi

+ +

Setelah layanan input TV Anda didaftarkan bahwa ia mendukung fungsionalitas +perekaman, sistem akan memanggil +TvInputService.onCreateRecordingSession() Anda bila perlu mengakses +implementasi perekaman aplikasi Anda. Implementasikan subkelas +TvInputService.RecordingSession Anda sendiri dan kembalikan +bila callback onCreateRecordingSession() dipicu. + Subkelas ini bertanggung jawab mengalihkan ke saluran data yang benar, +merekam data yang diminta, dan memberitahukan status perekaman serta kesalahan ke +sistem.

+ +

Bila sistem memanggil RecordingSession.onTune(), dengan meneruskan +URI saluran, setel ke saluran yang ditetapkan URI. Beri tahu sistem bahwa +aplikasi Anda telah disetel ke saluran yang diinginkan dengan memanggil notifyTuned(), +atau, jika aplikasi Anda tidak bisa disetel ke saluran yang tepat, panggil +notifyError().

+ +

Sistem berikutnya akan memanggil callback RecordingSession.onStartRecording(). + Aplikasi Anda harus segera mulai merekam. Bila sistem memanggil +callback ini, sistem mungkin akan memberikan URI yang berisi informasi tentang program +yang akan direkam. Bila perekaman selesai, Anda perlu menyalin data +ini ke tabel data RecordedPrograms.

+ +

Terakhir, sistem akan memanggil RecordingSession.onStopRecording(). +Pada tahap ini, aplikasi Anda harus segera berhenti merekam. Anda juga perlu +membuat entri dalam tabel RecordedPrograms. Entri ini harus +menyertakan URI data sesi yang direkam dalam kolom +RecordedPrograms.COLUMN_RECORDING_DATA_URI, dan informasi +program yang diberikan sistem dalam panggilan awal ke +onStartRecording().

+ +

Untuk detail selengkapnya tentang cara mengakses tabel RecordedPrograms +lihat Mengelola Sesi yang Direkam.

+ +

Menangani Kesalahan Perekaman

+ +

Jika terjadi kesalahan selama perekaman, rendering data yang terekam menjadi tidak bisa digunakan, +beri tahu sistem dengan memanggil RecordingSession.notifyError(). +Begitu pula, Anda bisa memanggil notifyError() setelah sesi perekaman dibuat +agar sistem mengetahui bahwa aplikasi Anda tidak bisa lagi merekam sesi.

+ +

Jika terjadi kesalahan selama perekaman, namun Anda ingin menyediakan rekaman parsial +yang bisa digunakan pengguna untuk pemutaran, panggil +RecordingSession.notifyRecordingStopped() untuk memungkinkan sistem +menggunakan sesi parsial.

+ +

Mengelola Sesi yang Direkam

+ +

Sistem menyimpan informasi untuk semua sesi yang direkam dari semua +aplikasi saluran yang mampu merekam dalam tabel penyedia konten TvContract.RecordedPrograms. + Informasi ini bisa diakses lewat URI konten +RecordedPrograms.Uri. Gunakan API konten penyedia untuk +membaca, menambah, dan menghapus entri dari tabel ini.

+ +

Untuk informasi selengkapnya tentang menangani data penyedia konten, lihat + +Dasar-Dasar Penyedia Konten.

+ +

Praktik Terbaik

+ +

Perangkat TV mungkin memiliki penyimpanan terbatas, jadi pertimbangkan sebaik mungkin saat +mengalokasikan penyimpanan untuk menyimpan sesi rekaman. Gunakan +RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) bila +tidak cukup ruang untuk menyimpan sesi rekaman.

+ +

Bila pengguna memulai perekaman, Anda harus memulai perekaman data +secepatnya. Untuk memfasilitasinya, selesaikan setiap tugas yang memakan waktu di awal, +seperti mengakses dan mengalokasikan ruang penyimpanan, saat sistem memanggil callback +onCreateRecordingSession(). Hal ini akan memungkinkan Anda memulai +perekaman dengan segera bila callback onStartRecording() +dipicu.

diff --git a/docs/html-intl/intl/in/preview/index.jd b/docs/html-intl/intl/in/preview/index.jd new file mode 100644 index 000000000000..38af2016e8a3 --- /dev/null +++ b/docs/html-intl/intl/in/preview/index.jd @@ -0,0 +1,120 @@ +page.title=Android N Developer Preview +page.tags="preview","developer" +meta.tags="preview", "android" +fullpage=true +forcelocalnav=true +header.hide=1 +footer.hide=1 +@jd:body + + + +
+
+
+ +
+

Android N Developer Preview

+

+ Bersiaplah menyambut Android N! + Uji aplikasi Anda pada perangkat Nexus dan perangkat lainnya. Dukunglah + perilaku sistem baru untuk menghemat daya dan memori. + Tambah aplikasi Anda dengan UI multijendela, + pemberitahuan balasan langsung dan lainnya. +

+ + + + Memulai + +
+
+ +
+
+
+
+
+
+
+ + + + + +
+

Sumber Daya

+
+ Informasi penting guna membantu mempersiapkan aplikasi untuk Android N. +
+ +
+ +
+
+ diff --git a/docs/html-intl/intl/in/preview/j8-jack.jd b/docs/html-intl/intl/in/preview/j8-jack.jd new file mode 100644 index 000000000000..4b25246c1e03 --- /dev/null +++ b/docs/html-intl/intl/in/preview/j8-jack.jd @@ -0,0 +1,183 @@ +page.title=Fitur Bahasa Java 8 +page.keywords="android N", "Java 8", "Jack" +@jd:body + + + +

Android N memperkenalkan dukungan untuk fitur bahasa Java 8 + yang bisa Anda gunakan saat mengembangkan aplikasi yang menargetkan Android N. + Halaman ini menjelaskan fitur bahasa baru yang didukung dalam Android N + Preview, cara menyiapkan proyek Anda dengan benar untuk menggunakannya, dan setiap masalah + yang diketahui yang mungkin Anda temui. +

+ +

Untuk mulai menggunakan fitur-fitur ini, Anda perlu mengunduh dan menyiapkan Android +Studio 2.1 (preview) dan Android N Preview SDK, yang menyertakan +Jack toolchain yang diperlukan dan Plugin Android untuk Gradle yang telah diperbarui. Jika Anda belum menginstal +Android N Preview SDK, lihat Menyiapkan Pengembangan untuk Android N.

+ + + +

+ Catatan: Menggunakan fitur bahasa Java 8 yang baru bukanlah + persyaratan untuk mengembangkan aplikasi yang menargetkan platform Android N. Jika Anda + tidak ingin menulis kode dengan fitur bahasa Java 8, Anda bisa membiarkan nilai kompatibilitas + sumber dan target proyek Anda diatur ke Java 7, namun Anda tetap harus + mengompilasi dengan JDK 8 untuk membangun pada platform Android N. +

+ +

+ API dan Fitur Bahasa Java 8 yang Didukung +

+ +

+ Saat ini tidak semua fitur bahasa Java 8 didukung Android. Akan tetapi, + fitur berikut sekarang tersedia saat mengembangkan aplikasi yang menargetkan + Android N Preview: +

+ + + + +

+ Selain itu, API fitur bahasa Java 8 berikut ini sekarang tersedia: +

+ +
    +
  • Reflection API dan API terkait bahasa: +
  • + +
  • +
      +
    • {@code java.lang.FunctionalInterface} +
    • + +
    • {@code java.lang.annotation.Repeatable} +
    • + +
    • {@code java.lang.reflect.Method.isDefault()} +
    • + +
    • dan Reflection API yang terkait dengan anotasi yang bisa diulang, seperti + {@code AnnotatedElement.getAnnotationsByType(Class)} +
    • +
    +
  • +
  • Utility API: +
  • + +
  • +
      +
    • {@code java.util.function} +
    • +
    +
  • +
+ +

+ Catatan: Android N mendasarkan implementasi ekspresi + lambda pada kelas anonim. Pendekatan ini memungkinkannya kompatibel + mundur dan bisa dieksekusi pada versi Android sebelumnya. Untuk menguji ekspresi + lambda pada versi sebelumnya, jangan lupa masuk ke file {@code + build.gradle} Anda, serta mengatur {@code compileSdkVersion} dan {@code + targetSdkVersion} ke 23 atau yang lebih rendah. +

+ +

+ Mengaktifkan Fitur Java 8 dan Jack Toolchain +

+ +

+ Agar bisa menggunakan fitur bahasa Java 8 yang baru, Anda juga perlu menggunakan + Jack toolchain + yang baru. Android Toolchain yang baru ini mengompilasi sumber bahasa Java menjadi dex + bytecode yang bisa dibaca Android, memiliki format pustaka {@code .jack} sendiri, dan menyediakan sebagian besar fitur + toolchain sebagai bagian dari alat tunggal: pengemasan ulang, penciutan, pengaburan dan + multidex. +

+ +

Inilah perbandingan dua toolchain yang digunakan untuk membangun file Android DEX:

+
    +
  • Toolchain javac lama:
    + javac ({@code .java} --> {@code .class}) --> dx ({@code + .class} --> {@code .dex}) +
  • + +
  • Jack Toolchain baru:
    + Jack ({@code .java} --> {@code .jack} --> {@code .dex}) +
  • +
+ +

+ Mengonfigurasi Gradle +

+ +

+ Untuk mengaktifkan fitur bahasa Java 8 dan Jack untuk proyek Anda, masukkan + yang berikut dalam file {@code build.gradle} yang spesifik untuk modul: +

+ +
+android {
+  ...
+  defaultConfig {
+    ...
+    jackOptions {
+      enabled true
+    }
+  }
+  compileOptions {
+    sourceCompatibility JavaVersion.VERSION_1_8
+    targetCompatibility JavaVersion.VERSION_1_8
+  }
+}
+
+ +

+ Masalah yang Diketahui +

+ +

+ Instant Run, yang diperkenalkan dalam Android Studio 2.0 (Beta), saat ini tidak berfungsi + dengan Jack dan akan dinonaktifkan saat menggunakan toolchain baru. +

+ +

Karena Jack tidak menghasilkan file kelas antara saat mengompilasi sebuah +aplikasi, alat yang bergantung pada file-file ini sekarang tidak berfungsi pada Jack. Beberapa +contoh alat-alat ini adalah:

+ +
    +
  • Pendeteksi lint yang beroperasi pada file kelas +
  • + +
  • Alat dan pustaka yang mewajibkan file kelas aplikasi (misalnya JaCoCo + dan Mockito)
  • +
+ +

Jika Anda menemukan masalah lain saat menggunakan Jack, laporkan bug.

\ No newline at end of file diff --git a/docs/html-intl/intl/in/preview/overview.jd b/docs/html-intl/intl/in/preview/overview.jd new file mode 100644 index 000000000000..4b48a220b5c9 --- /dev/null +++ b/docs/html-intl/intl/in/preview/overview.jd @@ -0,0 +1,440 @@ +page.title=Ikhtisar Program +page.metaDescription=Persiapkan aplikasi Anda untuk versi Android berikutnya. +page.image=images/cards/card-n-overview_2x.png +meta.tags="preview", "pengembang", "android" +page.tags="preview", "developer", "android" + +@jd:body + + +

+ Selamat datang di Android N Developer Preview, program yang + akan memberi apa saja yang Anda butuhkan untuk menguji dan mengoptimalkan aplikasi untuk versi + Android berikutnya. Program ini tersedia gratis, dan Anda bisa langsung memulai hanya dengan + mengunduh alat bantu N Developer Preview. +

+ + + + + + + +
+
+
+
+
+ Gambar perangkat keras dan emulator +
+ +

+ Jalankan dan uji aplikasi Anda pada berbagai perangkat atau pada emulator. + +

+
+ +
+
+ Kode platform terbaru +
+ +

+ Kami akan menyediakan pembaruan setiap bulan selama Preview, agar Anda bisa menguji perubahan platform terbaru. +

+
+ +
+
+ Prioritas untuk masalah pengembang +
+ +

+ Selama beberapa minggu pertama, kami akan memberikan prioritas pada masalah-masalah + yang dilaporkan pengembang, jadi ujilah dan berikan umpan balik sesegera mungkin. +

+
+ +
+ +
+ + +
+
+ Kemampuan dan perilaku baru +
+ +

+ Mulailah pekerjaan lebih awal untuk mendukung perilaku platform baru dan kembangkan dengan fitur-fitur baru. +

+
+ +
+
+ Pembaruan dikirim melalui OTA +
+ +

+ Pembaruan lewat jaringan seluler tanpa kendala untuk setiap perangkat yang didukung melalui + Android Beta Program. Flashing tidak diperlukan. +

+
+ +
+
+ Umpan balik dan dukungan +
+ +

+ Laporkan masalah dan berikan umpan balik kepada kami dengan menggunakan + Issue Tracker kami. Hubungkan dengan + pengembang lain di + N Developer Community. +

+
+
+
+
+ + + +

Kronologi dan pembaruan

+ + +

+ N Developer Preview berjalan dari 9 Maret 2016 hingga rilis publik Android N + final dirilis ke AOSP dan OEM, yang direncanakan selama Kuartal 3 2016. +

+ +

+ Pada tahapan pencapaian pengembangan utama kami akan mengirimkan pembaruan untuk lingkungan pengujian dan + pengembangan Anda. Umumnya Anda boleh berharap mendapatkan pembaruan setiap bulan (dengan interval 4 hingga 6 + minggu). Tahapan pencapaian tercantum di bawah ini. +

+ +
    +
  • Preview 1 (rilis pertama, alfa)
  • +
  • Preview 2 (pembaruan bertahap, beta)
  • +
  • Preview 3 (pembaruan bertahap, beta)
  • +
  • Preview 4 (API final dan SDK resmi, publikasi di Play)
  • +
  • Preview 5 (citra sistem hampir final untuk pengujian akhir)
  • +
  • Rilis Final ke AOSP dan ekosistem
  • +
+ +

+ Setiap pembaruan menyertakan SDK Tools, citra sistem preview, emulator, dokumentasi + referensi, dan diff API. +

+ +

+ Tiga tahapan pencapaian preview pertama memberikan pengujian + awal dan lingkungan pengembangan yang membantu Anda mengidentifikasi + masalah kompatibilitas dalam aplikasi Anda saat ini dan merencanakan migrasi atau menampilkan pekerjaan + yang diperlukan untuk menargetkan platform baru. Ini adalah periode prioritas yang akan + memberi kami umpan balik dari Anda tentang fitur dan API serta masalah kompatibilitas file + — untuk semua ini, harap gunakan Issue + Tracker. Anda boleh mengharapkan beberapa perubahan API selama pembaruan ini. +

+ +

+ Pada preview 4 dan 5 Anda akan memiliki akses ke API + dan SDK N final untuk dikembangkan, serta citra sistem yang hampir final + untuk menguji perilaku dan fitur sistem. Android N akan memberikan level API + standar pada saat ini. Anda bisa mulai melakukan pengujian kompatibilitas akhir atas aplikasi + lama dan menyempurnakan kembali setiap kode baru yang menggunakan API atau fitur N. +

+ +

+ Juga, mulai preview 4, Anda akan bisa mempublikasikan aplikasi ke + perangkat yang menjalankan Android N pada level API resmi, seperti + perangkat konsumen yang telah memilih mengikuti program Android Beta. Anda bisa + mempublikasikan ke saluran alfa dan beta Google Play terlebih dahulu, sehingga Anda bisa menguji + aplikasi pada konsumen Android Beta sebelum mendistribusikan secara luas di + toko. +

+ +

+ Saat Anda menguji dan mengembangkan di Android N, kami sangat menyarankanterus memperbarui + lingkungan pengembangan saat pembaruan preview + dirilis. Untuk mempermudah prosesnya, Anda bisa mendaftarkan perangkat pengujian di program + Android Beta dan mengambil pembaruan lewat jaringan seluler (OTA) pada + setiap tahapan pencapaian. Atau, citra preview yang diperbarui + tersedia bila Anda mengunduh dan mem-flash secara manual. +

+ +

+ Kami akan memberi tahu Anda bila pembaruan preview telah tersedia lewat Android Developers Blog serta + situs ini dan Android + N Developer Community. +

+ + +

Apa yang ada di N Developer Preview?

+ +

+ N Developer Preview menyertakan apa saja yang Anda perlukan untuk menguji aplikasi + yang ada pada berbagai ukuran layar, teknologi jaringan, chipset CPU/GPU, + dan arsitektur perangkat keras. +

+ +

SDK Tools

+ +

Anda bisa mengunduh komponen-komponen ini melalui SDK Manager di Android Studio:

+ +
    +
  • SDK dan alat N Developer Preview +
  • Citra sistem emulator N Developer Preview (32-bit & 64-bit) +
  • Citra sistem emulator N Developer Preview untuk Android TV (32-bit) +
  • N Developer Preview mendukung pustaka (untuk template aplikasi baru) +
+ +

+ Kami akan menyediakan pembaruan untuk alat pengembangan ini di setiap tahapan pencapaian jika diperlukan. +

+ +

Citra sistem perangkat keras

+ +

+ N Developer Preview menyertakan citra sistem Nexus dan perangkat keras lainnya yang bisa Anda gunakan saat + menguji dan mengembangkan pada perangkat fisik. Lihat halaman Citra Perangkat untuk melihat daftar lengkap + citra perangkat keras. +

+ +

+ Kami akan menyediakan citra sistem yang diperbarui untuk perangkat ini di setiap tahapan pencapaian. Anda + bisa mengunduh dan mem-flash citra sistem yang diperbarui ke perangkat pengujian + secara manual, sesering yang Anda perlukan. Ini terutama berguna untuk lingkungan pengujian + otomatis bila Anda mungkin perlu mem-flash ulang perangkat beberapa + kali. +

+ +

Catatan: + Perangkat yang di-flash secara manual tidak akan mendapatkan pembaruan OTA seperti di + preview tahun lalu. Tahun ini, Anda bisa memperoleh OTA dengan mendaftarkan perangkat dalam + Android Beta Program — lihat detailnya di bagian berikutnya. +

+ +

Pembaruan OTA melalui Android Beta Program

+ +

+ Yang baru untuk Android N adalah program pembaruan lewat jaringan seluler (OTA) yang secara otomatis + mengirim pembaruan preview terbaru Android N secara langsung ke perangkat yang telah mendaftar + di program ini. Program ini gratis dan terbuka bagi siapa saja yang memiliki + perangkat yang didukung dan telah didaftarkan ke akun Google mereka. +

+ +

+ Untuk mendaftarkan dalam program ini, kunjungi situs Android + Beta Program. Anda akan + melihat semua perangkat yang telah didaftarkan ke akun Anda yang memenuhi syarat untuk mendaftar + dalam Android Beta. +

+ +
    +
  1. Pilih perangkat yang Anda inginkan untuk menerima pembaruan Android N +
  2. Klik Enroll, baca dan setujui ketentuan layanan, kemudian klik OK +
+ +

+ Setelah terdaftar, perangkat Anda akan segera menerima pembaruan. Umumnya + Anda tidak perlu pengaturan ulang penuh atas data untuk beralih ke Android N, namun + Anda disarankan mencadangkan setiap data yang tidak ingin hilang sebelum + mendaftarkan perangkat. +

+ +

+ Saat pembaruan dikirim ke perangkat Anda, kami menyarankan Anda untuk segera mengunduh dan + menginstalnya sesegera mungkin. Anda perlu memantau perubahan terbaru + di UI sistem, perilaku, API, dan fitur. +

+ +

+ Di akhir periode Developer Preview, perangkat Anda yang telah didaftarkan akan + menerima pembaruan ke rilis resmi Android N. +

+ +

+ Anda bisa membatalkan pendaftaran perangkat dari program Android Beta kapan saja dari + situs Android Beta. Sebelum membatalkan pendaftaran, pastikan Anda telah mencadangkan data pada + perangkat. +

+ +

Catatan: + Bila Anda membatalkan pendaftaran, perangkat Anda akan diatur ulang + ke versi terbaru + Android 6.0 Marshmallow (tidak mesti ke versi yang telah Anda + instal sebelum mendaftarkan perangkat). Untuk memastikan instalasi yang bersih, + data Anda akan dihapus dari perangkat, termasuk kontak, pesan, + foto, dan seterusnya. +

+ +

Dokumentasi dan kode contoh

+ +

+ Sumber daya dokumentasi ini tersedia pada situs Developer Preview untuk + membantu Anda mempelajari tentang Android N: +

+ +
    +
  • Menyiapkan Pengembangan untuk +Android N memiliki + instruksi langkah demi langkah untuk memulai.
  • +
  • Perubahan + Perilaku akan menunjukkan kepada Anda bidang-bidang utama untuk diuji.
  • +
  • Dokumentasi API baru, termasuk Ikhtisar API, + Referensi + API yang bisa diunduh, dan panduan pengembang detail mengenai fitur-fitur utama seperti + menambahkan dukungan multi-jendela, bundel pemberitahuan, dukungan multilokal, dan lainnya. +
  • Kode contoh yang + memperagakan cara mendukung izin dan fitur baru lainnya. +
  • Catatan rilis + untuk versi N Developer Preview saat ini, termasuk catatan perubahan dan + laporan diff. +
+ +

Referensi API yang Bisa Diunduh

+ +

+ Selama pembaruan preview awal, Anda bisa mengunduh + Referensi API + untuk platform Android N sebagai arsip zip terpisah. Unduhan + referensi juga menyertakan laporan diff yang akan membantu Anda mengenali perubahan API dari + API 23 dan pembaruan sebelumnya. +

+ +

+ Bila API Android N sudah final dan API Level resmi telah ditetapkan, + kami akan menyediakan referensi API kepada Anda secara online di https://developer.android.com. +

+ +

+ Sumber daya dukungan +

+ +

+ Saat Anda menguji dan mengembangkan N Developer Preview, gunakan saluran + ini untuk melaporkan masalah dan memberikan umpan balik. +

+ +
    +
  • N Developer Preview Issue + Tracker adalah saluran umpan balik utama. Anda bisa melaporkan bug, masalah + kinerja, dan umpan balik umum melalui Issue Tracker. Anda juga bisa memeriksa +masalah yang telah diketahui dan + menemukan langkah-langkah solusinya. Kami akan terus mengabari mengenai masalah Anda saat masalah tersebut bila telah dipilah dan dikirimkan ke + tim teknis Android untuk ditinjau.
  • +
  • Android N Developer Community adalah + sebuah komunitas Google+ tempat Anda bisa terhubung dengan pengembang lain yang menggunakan + Android N. Anda bisa menyampaikan pengamatan atau ide atau menemukan jawaban atas + pertanyaan-pertanyaan mengenai Android N. Kami akan memoderasi komunitas ini dan memberikan jawaban serta + panduan jika diperlukan.
  • +
+ +

Menargetkan, API preview, dan mempublikasikan

+ +

+ N Developer Preview menyediakan sistem pengembangan semata dan pustaka Android + yang tidak memiliki API level standar. Jika Anda tidak ingin + mengikuti perilaku kompatibilitas untuk menguji aplikasi Anda (sangat + disarankan), Anda bisa menargetkan versi preview Android N dengan mengatur + targetSdkVersion + aplikasi Anda ke “N”. +

+ +

+ Android N Developer Preview menghasilkan API preview + — API ini tidak akan resmi hingga SDK final dirilis, + yang saat ini direncanakan pada kuartal ketiga 2016. Ini berarti Anda boleh + berharap adanya perubahan kecil pada API selama waktu ini, terutama selama + minggu-minggu pertama program ini. Kami akan menyediakan rangkuman perubahan pada Anda bersama + setiap pembaruan Android N Developer Preview. +

+ +

+ Catatan: Meskipun API preview mungkin berubah, perilaku dasar + sistem stabil dan siap diuji. + +

+ +

+ Google Play akan mencegah publikasi aplikasi yang menargetkan N Developer + Preview. Bila SDK final Android N telah tersedia, Anda akan dapat + menargetkan Android N API level resmi dan mempublikasikan aplikasi ke Google + Play lewat saluran rilis alfa dan beta. Sementara itu, jika Anda ingin + mendistribusikan aplikasi yang menargetkan Android N kepada penguji, Anda bisa melakukannya lewat email atau + melalui pengunduhan langsung dari situs Anda. +

+ +

+ Pada saat rilis penuh Android N ke AOSP dan OEM, yang direncanakan selama Kuartal 3 2016, + Anda akan dapat mempublikasikan aplikasi yang menargetkan Android N ke saluran + rilis publik di Google Play. +

+ + +

Cara memulai

+ +

+ Untuk memulai pengujian aplikasi Anda dengan Android N: +

+ +
    +
  1. Tinjau Ikhtisar API + dan Perubahan Perilaku untuk + mendapatkan gambaran mengenai apa saja yang baru dan bagaimana pengaruhnya pada aplikasi Anda. Khususnya, + pelajari tentang fitur baru pemberitahuan dan + dukungan multi-jendela.
  2. +
  3. Siapkan lingkungan Anda dengan mengikuti instruksi berikut untuk Menyiapkan SDK Preview + dan mengonfigurasi perangkat pengujian.
  4. +
  5. Ikuti instruksi + flashing untuk mem-flash citra sistem Android N terbaru ke perangkat Anda.
  6. +
  7. Tinjau Referensi API + dan contoh Android N untuk mendapatkan wawasan + lebih luas mengenai fitur-futur API yang baru dan cara menggunakannya dalam aplikasi Anda. +
  8. Bergabunglah dengan Android N + Developer Community untuk mendapatkan berita terbaru dan terhubung dengan pengembang + lainnya yang menggunakan platform baru ini.
  9. +
+ +

+ Terima kasih atas partisipasi Anda dalam program Android N Developer Preview! +

diff --git a/docs/html-intl/intl/in/preview/samples.jd b/docs/html-intl/intl/in/preview/samples.jd new file mode 100644 index 000000000000..3c51f48da3b9 --- /dev/null +++ b/docs/html-intl/intl/in/preview/samples.jd @@ -0,0 +1,85 @@ +page.title=Contoh +page.tags="preview", "samples", "android" +page.image=images/cards/card-n-samples_2x.png +@jd:body + +

+ Contoh kode berikut disediakan untuk Android N. Untuk + mengunduh contoh di Android Studio, pilih opsi menu File > Import + Samples. +

+ +

+ Catatan: Proyek yang bisa diunduh ini didesain + untuk digunakan bersama Gradle dan Android Studio. +

+ + +

Multi-Window Playground

+ +

+ Contoh ini memperagakan cara memanfaatkan antarmuka pengguna + multijendela bersama aplikasi Anda. +

+

+ + Dapatkan di GitHub +

+ +
+

Active Notifications

+ +

+ Ini adalah contoh yang telah ada sebelumnya yang menampilkan layanan sederhana yang mengirimkan + pemberitahuan menggunakan NotificationCompat. Setiap percakapan yang belum dibaca dari pengguna + akan dikirim sebagai pemberitahuan tersendiri. +

+

+ Contoh ini telah diperbarui untuk memanfaatkan fitur pemberitahuan baru + yang tersedia di Android N. +

+

+ + Dapatkan di GitHub +

+ +
+

Messaging Service

+ +

+ Ini adalah contoh yang telah ada sebelumnya yang memperagakan cara menggunakan + NotificationManager untuk memberi tahu jumlah pemberitahuan yang saat ini ditampilkan + oleh aplikasi. +

+

+ Contoh ini telah diperbarui untuk memanfaatkan fitur pemberitahuan baru + yang tersedia di Android N. +

+

+ + Dapatkan di GitHub +

+ +
+

Direct Boot

+ +

+ Contoh ini memperagakan cara menyimpan dan mengakses data dalam penyimpanan yang dienkripsi + dengan perangkat yang selalu tersedia saat perangkat booting. +

+

+ + Dapatkan di GitHub +

+ +
+

Scoped Directory Access

+ +

+ Contoh ini memperagakan cara membaca dan menulis data dari direktori + spesifik, sekaligus meminta izin lebih sedikit. +

+

+ + Dapatkan di GitHub +

\ No newline at end of file diff --git a/docs/html-intl/intl/in/preview/setup-sdk.jd b/docs/html-intl/intl/in/preview/setup-sdk.jd new file mode 100644 index 000000000000..5187e9910f9c --- /dev/null +++ b/docs/html-intl/intl/in/preview/setup-sdk.jd @@ -0,0 +1,226 @@ +page.title=Menyiapkan Preview +meta.keywords="preview", "android" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-sdk_2x.png + +@jd:body + + + + +

Untuk mengembangkan aplikasi bagi Android N Preview, Anda perlu membuat beberapa pembaruan +pada lingkungan pengembang, seperti dijelaskan pada halaman ini.

+ +

Untuk sekedar menguji kompatibilitas aplikasi Anda pada +citra sistem Android N, ikuti panduan untuk Menguji pada Perangkat Android N.

+ + + + +

Dapatkan Android Studio 2.1 (preview)

+ +

Platform Android N menambahkan dukungan untuk fitur bahasa Java 8, +yang memerlukan compiler baru yang disebut Jack. Versi terbaru Jack +saat ini hanya didukung di Android Studio 2.1. Jadi jika ingin +menggunakan fitur bahasa Java 8, Anda perlu menggunakan Android Studio 2.1 untuk +membangun aplikasi. Jika tidak, Anda tidak perlu menggunakan compiler Jack, namun Anda +tetap perlu memperbarui ke JDK 8 untuk mengompilasi pada platform Android N, +seperti dijelaskan di bawah ini. +

+ + + +

Android Studio 2.1 saat ini tersedia sebagai preview di +Canary Release Channel. Jika Anda sudah +memiliki Android Studio dan tidak ingin memperbarui ke Canary Channel, Anda bisa +mengunduh Android Studio 2.1 sebagai instalasi terpisah dan menggunakannya +untuk pengembangan dengan Android N, sehingga membuat lingkungan Android Studio +utama Anda tidak terpengaruh.

+ +

Untuk mengunduh Android Studio 2.1 sebagai instalasi terpisah, ikuti langkah-langkah +ini (atau jika Anda ingin menerima Android Studio 2.1 sebagai pembaruan pada +instalasi yang ada, lompat ke langkah 4):

+ +
    +
  1. Edit nama + instalasi Android Studio yang ada dan tambahkan nomor versinya. Dengan cara ini, + bila Anda menginstal versi baru, versi yang ada tidak akan ditimpa.
  2. +
  3. Unduh file ZIP yang sesuai untuk sistem operasi Anda dari + halaman pengunduhan Canary Channel. +
  4. +
  5. Unzip paket tersebut kemudian pindahkan konten Android Studio 2.1 ke + lokasi yang sesuai untuk aplikasi pada sistem Anda, kemudian jalankan.
  6. +
  7. Buka dialog Settings + (File > Settings pada Windows/Linux, atau + Android Studio > Preferences pada Mac). Di panel + kiri, pilih Appearance & Behavior > System Settings > + Updates. +
  8. +
  9. Pada panel Updates, pilih kotak cek Automatically + check updates for dan pilih + Canary Channel dari daftar tarik-turun. +
  10. +
+ +

Biarkan jendela pengaturan ini tetap terbuka untuk langkah berikutnya.

+ + +

Dapatkan N Preview SDK

+ +

Untuk mulai mengembangkan dengan Android N API, Anda perlu menginstal +Android N Preview SDK di Android Studio sebagai berikut:

+ +
    +
  1. Saat panel Updates masih ditampilkan (langkah 4 dari di atas), + pilih kotak cek Automatically + check updates for Android SDK dan pilih + Preview Channel dari daftar tarik-turun. +
  2. +
  3. Klik Check Now.
  4. + +
  5. Di panel kiri, pilih Appearance & Behavior > + System Settings > Android SDK. + +
  6. Klik tab SDK Platforms, kemudian pilih kotak cek + Android N Preview.
  7. + +
  8. Klik tab SDK Tools, kemudian pilih + kotak cek Android SDK Build Tools, Android SDK + Platform-Tools, dan Android SDK Tools. + +
  9. + +
  10. Klik OK, kemudian terima + perjanjian lisensi untuk setiap paket yang perlu diinstal. +
  11. +
+ +

Dapatkan dokumentasi referensi N Preview

+ +

+ Informasi detail tentang Android N API tersedia dalam dokumentasi referensi N Preview, + yang bisa Anda unduh dari tabel berikut. + Paket ini berisi versi offline untuk situs web pengembang Android yang disederhanakan, + dan termasuk referensi API yang diperbarui untuk Android N API dan + laporan perbedaan API. +

+ + + + + + + + + + +
DokumentasiChecksum
+ n-preview-1-docs.zip + MD5: 4ab33ccbe698f46f125cc5b807cf9c2f
+ SHA-1: 6a3880b3ccd19614daae5a4d0698ea6ae11c20a5 +
+ + + +

Dapatkan Java 8 JDK dan JRE

+ +

Untuk mengompilasi aplikasi Anda sesuai platform Android N, Anda perlu menggunakan +Java 8 Developer Kit (JDK 8), dan untuk menggunakan beberapa alat bersama Android +Studio 2.1, Anda perlu menginstal Java 8 Runtime Environment (JRE 8). Jadi, jika +Anda belum versi terbarunya, unduhlah JDK 8 dan JRE 8 +sekarang.

+ +

Kemudian atur versi JDK di Android Studio sebagai berikut:

+ +
    +
  1. Buka proyek Android di Android Studio, kemudian buka + dialog Project Structure dengan memilih File > + Project Structure. (Atau, Anda bisa mengatur default + untuk semua proyek dengan memilih File > Other Settings > + Default Project Structure.) +
  2. +
  3. Di panel kiri dialog, klik SDK Location. +
  4. +
  5. Dalam bidang JDK Location, masukkan lokasi + Java 8 JDK (klik tombol di sebelah kanan + untuk menjelajahi file Anda), kemudian klik OK. +
  6. +
+ + + + +

Perbarui atau Buat sebuah Proyek

+ +

+ Untuk menggunakan Android N API, proyek Anda harus dikonfigurasi dengan benar. +

+ +

Jika Anda berencana menggunakan fitur bahasa Java 8, Anda juga harus membaca +Fitur Bahasa Java 8 +untuk informasi tentang fitur Java 8 yang didukung dan +cara mengonfigurasi proyek Anda dengan Jack compiler.

+ + +

Perbarui proyek yang ada

+ +

Buka file + build.gradle untuk modul Anda dan perbarui nilainya sebagai + berikut: +

+ +
+android {
+  compileSdkVersion 'android-N'
+  buildToolsVersion '24.0.0-rc1'
+  ...
+
+  defaultConfig {
+     minSdkVersion 'N'
+     targetSdkVersion 'N'
+     ...
+  }
+  ...
+}
+ + +

Buat proyek baru

+ + +

Untuk membuat proyek baru bagi pengembangan dengan Android N Preview SDK:

+ +
    +
  1. Klik File > New Project, dan ikuti langkah-langkahnya hingga + Anda tiba di halaman Target Android Devices. +
  2. +
  3. Pada halaman ini, pilih opsi Phone and Tablet.
  4. +
  5. Pada opsi Phone and Tablet, dalam daftar opsi Minimum + SDK, pilih + N: Android API 23, N Preview (Preview).
  6. +
+ + +

Langkah Berikutnya

+ + + diff --git a/docs/html-intl/intl/ja/preview/api-overview.jd b/docs/html-intl/intl/ja/preview/api-overview.jd new file mode 100644 index 000000000000..617872b3a167 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/api-overview.jd @@ -0,0 +1,676 @@ +page.title=デベロッパー向け Android N +meta.tags="プレビュー"、"androidn" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-apis_2x.png +@jd:body + + + + + + + + +

Android N は現在も開発中ですが、N Developer Preview の一部として Android N を試用できます。以下のセクションでは、デベロッパー向けの新しい機能の一部を紹介しています。 + +

+ +

+ 動作の変更点を確認して、プラットフォームの変更がアプリに影響を及ぼす可能性のある領域について把握してください。また、デベロッパー ガイドを参照して主な機能について詳しく学習し、API リファレンスをダウンロードして、新しい API の詳細を理解してください。 + + + +

+ +

マルチ ウィンドウのサポート

+ + +

Android N では、多くのユーザーから求められていたマルチタスク機能がプラットフォームに新しく導入され、マルチ ウィンドウがサポートされています。 +

+ +

これにより、ユーザーは画面に 2 つのアプリを同時に開くことができるようになりました。

+
    +
  • Android N が動作している携帯端末やタブレットでは、分割画面モードで 2 つのアプリを左右や上下に並べて実行できます。また、2 つのアプリの間にある分割線をドラッグしてアプリのサイズを変更することもできます。 + + +
  • + +
  • Android TV デバイスでは、アプリをピクチャ イン ピクチャ モードにすると、アプリにコンテンツを表示したまま、他のアプリをブラウジングまたは操作することができます。詳細は以下をご覧ください。 + +
  • +
+ +
+ +

+ 図 1. 分割画面モードで実行されているアプリ +

+
+ +

特にタブレットや大画面のデバイスでは、マルチ ウィンドウのサポートにより、ユーザーを引き付ける新しい方法が提供されます。アプリでドラッグ アンド ドロップを有効にすると、ユーザーはアプリとの間でコンテンツを簡単にドラッグすることができるので、快適な使い心地が実現することができます。 + + +

+ +

マルチ ウィンドウのサポートをアプリに追加して、どのようにマルチ ウィンドウを処理するかを設定するのは簡単です。たとえば、アクティビティの最小許容寸法を指定すると、ユーザーはアクティビティをそのサイズ以下に変更できなくなります。また、アプリに対してマルチ ウィンドウ表示を無効にすると、アプリが全画面モードでのみ表示されます。 + + + +

+ +

+ 詳細については、マルチ ウィンドウのサポートに関するデベロッパー向けドキュメントをご覧ください。 + +

+ +

通知の機能強化

+ +

Android N では、通知が再設計されており、さらに使いやすくなっています。加えられている変更は、次のような点です。 +

+ +
    +
  • + テンプレートのアップデート: 通知テンプレートは、ヒーロー イメージやアバターを中心としたデザインにアップデートされています。デベロッパーは、コードに最小限の変更を加えるだけで、この新しいテンプレートを活用できます。 + + +
  • + +
  • + バンドル通知: メッセージをグループ化します。たとえば、メッセージをトピックごとにグループ化して、各グループを表示できます。ユーザーは、各グループに対して、消去やアーカイブといったアクションを実行できます。Android Wear 向けの通知を実装したことがある場合は、このモデルはおなじみでしょう。 + + + + +
  • + +
  • + ダイレクト リプライ: Android システムでは、インライン リプライがサポートされています。リアルタイム通信アプリを使用しているユーザーは、通知インターフェース内で直接 SMS やテキスト メッセージにすばやく応答できます。 + + +
  • + +
  • + カスタムビュー: 2 つの新しい API を使用すると、通知でカスタムビューを使用するときに、通知ヘッダーやアクションなどのシステム デコレーションを活用できます。 + + +
  • +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +

+ 図 2. バンドル通知とダイレクト リプライ +

+ +

以上の新しい機能を実装する方法の詳細については、通知に関するガイドをご覧ください。 + +

+ + + +

プロファイルに基づいた JIT/AOT コンパイル

+ +

Android N では、コード プロファイリングにも対応した Just in Time(JIT)コンパイラーが ART に追加されており、Android アプリの実行時のパフォーマンスが向上しています。JIT コンパイラーは、ART で現在使用されている Ahead of Time(AOT)コンパイラーを補完するものであり、実行時パフォーマンスの向上、記憶領域の削減、アプリとシステムのアップデートの高速化に貢献します。 + + + +

+ +

プロファイルに基づいたコンパイルを使用すると、アプリの実際の使用方法やデバイス上での状態に応じて、ART が各アプリの AOT/JIT コンパイルを管理します。たとえば、ART は各アプリのホット メソッドのプロファイルを維持し、メソッドをプリコンパイルしてキャッシュすることにより、パフォーマンスを最適化します。また、アプリの他の部分は、実際に使用されるときまでコンパイルされません。 + + + +

+ +

プロファイルに基づいたコンパイルは、アプリの主要部分のパフォーマンスを向上させ、関連するバイナリなど、アプリの全体的な RAM 使用量を削減します。この機能は、メモリが少ないデバイスで特に重要です。 + +

+ +

ART は、デバイスのバッテリーへの影響が最小限になるようにプロファイルに基づいたコンパイルを管理します。デバイスがアイドル状態および充電中のときにのみ、プリコンパイルが事前に実行されるため、時間とバッテリーが節約できます。 + +

+ +

アプリの高速インストール

+ +

ART の JIT コンパイラーの最も明確な利点の 1 つは、アプリのインストールとシステム アップデートの速度です。Android 6.0 では最適化とインストールの実行に数分かかっていたサイズの大きいアプリでも、数秒でインストールできるようになりました。最適化のステップが不要なったため、システム アップデートも高速化されています。 + + +

+ +

どこでも機能する Doze

+ +

Android 6.0 では Doze システム モードが導入されています。これにより、デバイスが机に置かれているときや引き出しに収められているときなどのアイドル時にアプリの CPU とネットワーク通信の実行を保留し、バッテリーを節約します。 + +

+ +

Android N では Doze が改良され、外出中でもバッテリーを節約できるようになっています。画面をしばらくオフにしたりデバイスを電源から抜いたりすると、Doze により、通常の CPU およびネットワーク制限の一部がアプリに適用されます。つまり、デバイスをポケットに入れて持ち歩いてるときでもバッテリーを節約できます。 + + + +

+ + + +

+ 図 3. Doze により、デバイスが静止していないときでも制限が適用され、バッテリーの寿命が延長される + +

+ + +

デバイスがバッテリーで動作しているときに画面をしばらくオフにすると、Doze はネットワーク アクセスを制限し、ジョブと同期を保留します。アプリはメンテナンス ウィンドウと呼ばれる短い時間にネットワークにアクセスしたり、保留中のジョブや同期を実行します。画面をオンにするか、デバイスを電源に接続すると、デバイスの Doze モードは解除されます。 + + + +

+ +

バッテリーで動作しているデバイスが再び静止状態になり、画面がしばらくオフになると、Doze は完全な CPU およびネットワーク制限を {@link +android.os.PowerManager.WakeLock}、{@link android.app.AlarmManager} アラーム、GPS / Wi-Fi スキャンに適用します。 + +

+ +

アプリを Doze に対応させるためのベストプラクティスはデバイスを持ち歩いているかどうかには関係ありません。そのため、Doze が適切に処理されるようにアプリを既にアップデートしている場合は、追加の対応は必要ありません。そうでない場合は、アプリの Doze 対応を行ってください。 + + +

+ +

Project Svelte: バックグラウンド処理の最適化

+ +

Project Svelte は、Android エコシステムのさまざまなデバイスでシステムやアプリによる RAM の使用を最小限にする取り組みです。Android N 向けの Project Svelte は、アプリをバックグラウンドで実行する方法を最適化することに重点を置いています。 + +

+ +

ほとんどのアプリでは、バックグラウンド処理が非常に重要になります。バックグラウンド処理を適切に実行すると、ユーザー エクスペリエンスが大幅に向上し、状況に応じてアプリより高速に実行できるようになります。バックグラウンド処理が不適切な場合は、RAM(とバッテリー)が必要以上に消費され、他のアプリのシステム パフォーマンスに影響を及ぼす可能性があります。 + + +

+ +

Android 5.0 以降では、ユーザーに適した方法でバックグラウンド処理を実行する {@link android.app.job.JobScheduler} が推奨されています。これによって、メモリ、電源、接続の状態に基づいてシステムを最適化しながら、アプリでジョブをスケジュールできます。JobScheduler はシンプルな制御を提供するため、すべてのアプリで JobScheduler を使用することが効果的です。 + + + +

+ +

+ もう 1 つの適切な選択肢は、Google Play サービスの一部である GCMNetworkManager です。この機能も同様のジョブ スケジュール機能を提供しますが、こちらはレガシー バージョンの Android とも互換性があります。 + + + +

+ +

さらに多くのユースケースに対応するために、JobSchedulerGCMNetworkManager の拡張は継続されています。たとえば、Android N では、コンテンツ プロバイダの変更に基づいてバックグラウンド処理をスケジュールできるようになります。また、特にメモリの少ないデバイスでシステム パフォーマンスを低下させる可能性のある一部の古いパターンの廃止も開始されています。 + + + + +

+ +

一般的に使用される暗黙的なブロードキャストである +{@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}、{@link + android.hardware.Camera#ACTION_NEW_PICTURE}、{@link + android.hardware.Camera#ACTION_NEW_VIDEO} は複数のアプリのバックグラウンド処理を同時に起動するので、メモリとバッテリーに負荷をかける可能性があります。そのため、Android N では、この 3 つのブロードキャストが削除されています。アプリがこれらのブロードキャストを受信する場合は、N Developer Preview を使用して、JobScheduler とそれに関連する API に移行してください。 + + +

+ +

+ 詳細については、バックグラウンド処理の最適化に関するドキュメントをご覧ください。 + +

+ + +

データセーバー

+ +
+ + +

+ 図 4. [Settings] でのデータセーバー +

+
+ +

一般的に、モバイル端末のライフサイクル全体では、携帯データ通信プランのコストがデバイス自体のコストを上回ります。多くのユーザーにとって、携帯データ通信は、節約する必要のある高価なリソースです。 + +

+ +

Android N では、ローミング、課金サイクルの終了近く、または短期間のデータパックであるかどうかに関係なく、アプリによる携帯データ通信の使用を削減する新しいシステム サービスであるデータセーバー モードが導入されています。データセーバーを使用すると、アプリによる携帯データ通信の使用方法をユーザーが制御できます。また、デベロッパーは、データセーバーがオンのときに、より効率よく通信するサービスを提供できるようになります。 + + + +

+ +

ユーザーが [Settings] でデータセーバーを有効にし、デバイスが従量制課金ネットワークに接続されている場合、システムは、ストリーミングのビットレートを制限したり、画質を低下させたり、オプティミスティックなプレキャッシングを保留したりすることにより、バックグラウンドでのデータ使用をブロックし、フォアグラウンドでデータの使用を抑えるようにアプリに指示します。ユーザーは特定のアプリをホワイトリストに登録することにより、データセーバーがオンになっているときでも、バックグラウンドで従量制課金接続を使用できます。 + + + + +

+ +

Android N は {@link android.net.ConnectivityManager} を拡張することで、ユーザーのデータセーバー設定を取得する方法と、設定の変更を監視する方法を提供しています。すべてのアプリは、ユーザーがデータセーバーを有効にしているかどうかを確認し、フォアグラウンドおよびバックグラウンドでのデータ使用を制限する必要があります。 + + + +

+ + +

クイック設定タイル API

+ + +
+ + +

+ 図 5. 通知シェードにあるクイック設定タイル +

+ + +

クイック設定を使用すると、通知シェードで主要な設定とアクションを直接公開することができます。Android N では、クイック設定の範囲が拡大され、さらに使いやすく便利な機能になっています。 + +

+ +

クイック設定タイル用のスペースが広くなったので、ユーザーは、左または右にスワイプして、ページ分割された表示領域でこれらのタイルにアクセスできます。また、ユーザーは、表示するクイック設定タイルとその表示場所を制御できるようになっています。ユーザーはタイルをドラッグ アンド ドロップして、タイルを追加または移動できます。 + + +

+ +

Android N では、デベロッパーが独自のクイック設定タイルを定義できる新しい API が追加されており、ユーザーはこの API を通じて、アプリの主なコントロールとアクションに簡単にアクセスできます。 +

+ +

+ クイック設定タイルは、緊急に必要な、または頻繁に使用されるコントロールやアクション用に用意されたものであり、アプリを起動するためのショートカットとして使用するべきではありません。 + + +

+ +

+ タイルの定義が完了すると、ユーザーにタイルを公開できるようになります。ユーザーはタイルをドラッグ アンド ドロップするだけで、クイック設定にタイルを追加できます。 + +

+ +

+ アプリタイルを作成する方法の詳細については、ダウンロード可能な API リファレンスに掲載されている android.service.quicksettings.Tile をご覧ください。 + +

+ + + +

迷惑電話のブロック

+ +

Android N では、プラットフォームで迷惑電話のブロックがサポートされており、サービス プロバイダがブロックリストを保持するためのフレームワーク API が提供されています。デフォルトの SMS アプリ、デフォルトの電話アプリ、プロバイダ アプリは、ブロックリストを読みこんだり、ブロックリストに書き込んだりできます。その他のアプリはブロックリストにアクセスできません。 + + +

+ +

Android では、迷惑電話のブロックをプラットフォームの標準の機能にすることにより、幅広いデバイスで迷惑電話をブロックできるようにする一貫した方法がアプリに提供されています。その他に、次のような機能も提供されます。 + +

+ +
    +
  • ブロックされた電話番号は、テキスト メッセージでもブロックされる +
  • ブロックされた電話番号は、リセットしたデバイスや、バックアップおよびリストア機能で移行したデバイスでも保持される + +
  • 複数のアプリが同じブロックリストを使用できる +
+ +

また、Android に携帯通信会社のアプリが組み込まれていると、携帯通信会社はデバイス上のブロックリストを読み込んで迷惑な電話やテキスト メッセージをサービス側でブロックできます。これによって、VOIP エンドポイントや転送電話などいかなる媒体を介しても、ブロックされた番号はユーザーに到達できなくなります。 + + +

+ +

+ 詳細については、ダウンロード可能な API リファレンスにある android.provider.BlockedNumberContract をご覧ください。 + + +

+ +

通話スクリーニング

+ +

+ Android N では、デフォルトの電話アプリで新しい CallScreeningService を実装することによって、着信をスクリーニング(分類)できます。電話アプリは、着信する電話の {@link android.telecom.Call.Details Call.Details} に基づいて次のようなアクションを実行できます。 + + + +

+ +
    +
  • 着信を拒否する +
  • 着信を通話履歴に含めない +
  • 着信通知をユーザーに表示しない +
+ +

+ 詳細については、ダウンロード可能な API リファレンスにある android.telecom.CallScreeningService をご覧ください。 + + +

+ + +

マルチロケールのサポートと言語の追加

+ + +

Android N では、[Settings] でマルチロケールが選択できるようになり、複数言語を使用するユーザーへのサポートが強化されました。アプリで新しい API を使用して、ユーザーが選択したロケールを取得すると、複数のロケールを設定しているユーザーに対してより洗練された使用感を提供できます。たとえば、検索結果を複数の言語で表示したり、ユーザーが知っている言語のウェブページでは翻訳の提案を行わないようなことが可能になります。 + + + + +

+ +

また、Android N では、マルチロケールのサポートに加えて、ユーザーが利用できる言語が追加されています。英語、スペイン語、フランス語、アラビア語などの一般的な言語に対して、それぞれ 25 以上の言語バリエーションが提供されます。100 以上の新しい言語も部分的にサポートされています。 + + +

+ +

アプリは、LocaleList.GetDefault() を呼び出すことにより、ユーザーが設定したロケールのリストを取得できます。Android N では、増加したロケールをサポートするために、リソースを解決する方法が変更されています。この新しいリソース解決ロジックでアプリが想定どおりに動作することをテストおよび確認してください。 + +

+ +

新しいリソース解決動作と順守する必要のあるベストプラクティスの詳細については、複数言語のサポートをご覧ください。 +

+ +

Android の ICU4J API

+ +

+ Android N では、ICU4J API のサブセットが提供されています。これは、Android フレームワークの android.icu パッケージにあります。移行は簡単で、ほとんどの場合、名前空間を com.java.icu から android.icu に変更するだけです。アプリで ICU4J バンドルを既に使用している場合は、Android フレームワークで提供されている android.icu API に移行すると、APK サイズを大幅に削減できます。 + + + + + +

+ +

+ Android ICU4J API の詳細については、ICU4J サポートをご覧ください。 +

+ + + +

OpenGL™ ES 3.2 API

+ +

Android N では、OpenGL ES 3.2 用の次のようなフレームワーク インターフェースとプラットフォーム サポートが追加されています。

+ +
    +
  • EXT_texture_sRGB_decode を除く Android エクステンション パック(AEP)のすべての拡張機能 +
  • HDR および遅延シェーディング用の浮動小数点フレームバッファ +
  • 一括処理とストリーミングを向上させるための BaseVertex 描画呼び出し +
  • WebGL のオーバーヘッドを低減するための堅牢なバッファ アクセス コントロール +
+ +

Android N の OpenGL ES 3.2 用のフレームワーク API は、GLES32 クラスで提供されます。OpenGL ES 3.2 を使用する場合、<uses-feature> タグと android:glEsVersion 属性を使用してマニフェスト ファイルで要件を宣言する必要があります。 + + +

+ +

デバイスでサポートされる OpenGL ES のバージョンを実行時に確認する方法など、OpenGL ES の使用方法については、OpenGL ES API ガイドをご覧ください。 +

+ + +

Android TV の録画機能

+ +

Android N では、新しい recording API を介して Android TV 入力サービスからコンテンツを録画して再生する機能が追加されています。TV 入力サービスは、録画できるチャンネル データや録画したセッションを保存する方法の制御、ユーザーによる録画されたコンテンツの操作の管理を行います。このサービスは、既存の time-shifting API を使用して構築されています。 + + +

+ +

詳細については、Android TV Recording API をご覧ください。

+ + +

Android for Work

+ +

Android for Work は、Android N を実行しているデバイスに多くの新しい機能と API を追加するものです。主要な機能の一部を以下に紹介します。Android N に関連する Android for Work のアップデートの完全なリストについては、Android for Work の変更点をご覧ください。 + +

+ +

ワーク プロファイルによるセキュリティ確認

+ +

+ プロファイル オーナーは、ワーク プロファイルで実行しているアプリで個別にセキュリティ確認を行うよう指定することができます。ユーザーが仕事用アプリを開こうとすると、セキュリティの確認画面が表示されます。セキュリティの確認に成功すると、ワーク プロファイルのロックが解除され、必要に応じて暗号化も解除されます。プロファイル オーナーは、ACTION_SET_NEW_PASSWORD でユーザーにワーク プロファイル用のセキュリティ確認を設定するように求めたり、ACTION_SET_NEW_PARENT_PROFILE_PASSWORD でユーザーにデバイスのロックを設定するように求めることができます。 + + + + + + +

+ +

+ プロファイル オーナーは、setPasswordQuality()setPasswordMinimumLength()、および関連するメソッドを使用して、ワーク プロファイル用のセキュリティ確認に個別のパスワード ポリシー(PIN に必要な長さや、指紋によるプロファイルのロック解除が可能かどうかなど)を設定できます。また、新しい getParentProfileInstance() メソッドが返す DevicePolicyManager インスタンスを使用してデバイスのロックを設定できます。さらに、新しい setOrganizationColor() メソッドおよび setOrganizationName() メソッドを使用してワーク プロファイル用のセキュリティ確認画面をカスタマイズすることができます。 + + + + + + + + +

+

ワークモードのオフ

+ +

ユーザーは、ワーク プロファイルがあるデバイスでワークモードのオン / オフを切り替えることができます。ワークモードがオフになると、管理されているユーザーが一時的にシャットダウンされ、ワーク プロファイルのアプリ、バックグラウンドでの同期、通知が無効になります。無効になるアプリには、プロファイル オーナーのアプリが含まれます。また、ワークモードがオフになると、仕事用アプリを起動できないことをユーザーに示すステータス アイコンが表示されたままになります。ランチャーは、仕事用アプリとウィジェットにアクセスできないことを示します。 + + + + +

+ +

Always on VPN

+ +

デバイス オーナーとプロファイル オーナーは、仕事用アプリが指定した VPN を介して常時接続するように設定できます。デバイスが起動すると、システムは VPN を自動的に開始します。 + +

+ +

+ setAlwaysOnVpnPackage()getAlwaysOnVpnPackage() は新しい DevicePolicyManager のメソッドです。 + + +

+ +

システムがアプリの介入なしに VPN サービスを直接バインドするため、Always on VPN の新しいエンドポイントは VPN クライアント側で処理する必要があります。以前と同じように、システムへのサービスの通知はインテントフィルタのマッチング アクション android.net.VpnService で行います。 + + +

+ +

+ プライマリ ユーザーは、[Settings] > [More] > [Vpn] から VPNService のメソッドを実装した Always on VPN クライアントを手動で設定することもできます。 + + +

+ +

アクセシビリティの機能強化

+ +

Android N では、新しいデバイスのセットアップのオープニング画面に [Vision Settings] が直接表示されます。これにより、ユーザーは、ズーム操作、フォントサイズ、ディスプレイ サイズ、TalkBack など、デバイスのアクセシビリティ機能を簡単に見つけて構成できるようになっています。 + + +

+ +

このようなアクセシビリティ機能が目立つ場所に配置されたため、ユーザーがこれらの機能を有効にしてアプリを試用する可能性が高まりました。アクセシビリティ機能の設定を有効にして、アプリを事前にテストするようにしてください。これらの設定は、[Settings] > [Accessibility] で有効にできます。 + + +

+ +

Android N では、アクセシビリティ サービスにより、運動障害のあるユーザーが画面をタップすることを支援できます。この新しい API を使用すると、顔追跡、視線追跡、ポイント スキャンなどの機能を備えたサービスを構築して、これらのユーザーのニーズに対応することができます。 + + +

+ +

詳細については、ダウンロード可能な API リファレンスにある android.accessibilityservice.GestureDescription をご覧ください。 +

+ + +

ダイレクト ブート

+ +

ダイレクト ブートはデバイスのスタートアップ時間を短縮し、予期しない再起動後でも、登録されたアプリの一部の機能が使用できるようにします。たとえば、ユーザーの就寝中に暗号化されたデバイスが再起動した場合でも、登録したアラーム、メッセージ、電話の着信をユーザーに通常どおり通知することができます。また、再起動後にアクセシビリティ サービスをすぐに使用することもできます。 + + + + +

+ +

ダイレクト ブートでは、Android N のファイルベースの暗号化を活用して、システムとアプリのデータに対してきめ細かい暗号化ポリシーを適用します。システムは、一部のシステムデータと明示的に登録されたアプリデータにデバイス暗号化ストアを使用します。デフォルトでは、他のすべてのシステムデータ、ユーザーデータ、アプリ、アプリデータには、資格情報暗号化ストアが使用されます。 + + + +

+ +

システムは起動時にデバイス暗号化データのみにアクセスできる制限モードになります。この状態では、アプリやデータへの一般的なアクセスは許可されません。このモードで実行する必要のあるコンポーネントがある場合、マニフェストにフラグを設定することでコンポーネントを登録できます。再起動後、システムは、LOCKED_BOOT_COMPLETED インテントをブロードキャストすることにより、登録済みのコンポーネントをアクティベートします。システムは、ロック解除する前に、登録済みのデバイス暗号化アプリデータを利用できるようにします。他のすべてのデータは、ユーザーがロック画面の資格情報を確認して暗号化解除するまで利用できません。 + + + + + + +

+ +詳細については、ダイレクト ブートをご覧ください。

+

+ + +

キーの構成証明

+ +

ハードウェアがサポートするキーストアは、Android 端末で暗号化キーを作成、格納、使用するためのより安全な方法を提供します。このキーストアは、Linux カーネル、Android の潜在的な脆弱性、ルート権限を取得された端末からの抽出からキーを保護します。 + + +

+ +

ハードウェアがサポートするキーストアの使用をさらに簡単かつ安全にするために、Android N では、キーの構成証明が導入されています。アプリや別のデバイスは、キーの構成証明を使用して RSA または EC キーペアがハードウェアでサポートされているかどうか、キーペアのプロパティはどのようなものか、使用方法や有効性にどのような制限が適用されるかを積極的に確認することができます。 + + + +

+ +

アプリや別のデバイスのサービスは、有効な構成証明キーによって署名された X.509 構成証明書を通じて、キーペアについての情報をリクエストできます。この構成証明キーは、出荷前にデバイスのハードウェアがサポートするキーストアに挿入される ECDSA 署名キーです。したがって、有効な構成証明キーによって署名される構成証明書により、ハードウェアがサポートするキーストアの存在に加えて、そのキーストアのキーペアの詳細が確認できます。 + + + + + +

+ +

デバイスが Android の安全な公式ファクトリー イメージを使用していることを確認するために、キーの構成証明では、デバイスのブートローダーが以下の情報を Trusted Execution Environment(TEE)に提供することが要求されます。 + + +

+ +
    +
  • デバイスにインストールされる OS のバージョンとパッチレベル
  • +
  • セキュアブートの公開キーとロック ステータス
  • +
+ +

ハードウェアがサポートするキーストアの機能の詳細については、ハードウェアがサポートするキーストアに関するガイドをご覧ください。 +

+ +

Android N では、キーの構成証明に加えて、指紋にバインドされたキーが導入されています。このキーは、指紋を登録しても無効になることはありません。 +

+ +

ネットワーク セキュリティ構成

+ +

Android N では、エラーが発生しやすいプログラムによる従来の API(X509TrustManager など)ではなく、宣言型のネットワーク セキュリティ構成を使用することにより、コードを変更することなく、セキュアな(HTTPS、TLS)接続の動作をアプリで安全にカスタマイズできます。 + + +

+ +

以下の機能がサポートされます。

+
    +
  • カスタム トラスト アンカー: アプリがセキュアな接続でどの証明機関(CA)を信頼するかをカスタマイズできます。たとえば、特定の自己署名証明書や制限された一連の公的 CA を信頼できます。 + + +
  • +
  • デバッグのみのオーバーライド: アプリのデベロッパーは、インストール ベースに対する追加リスクなしに、アプリのセキュアな接続を安全にデバッグできます。 + + +
  • +
  • クリアテキスト トラフィックのオプトアウト: クリアテキスト トラフィックの意図しない使用からアプリを保護できます。 +
  • +
  • 証明書の固定: アプリのセキュアな接続で信頼するサーバーキーを制限できる高度な機能です。 +
  • +
+ +

詳細については、ネットワーク セキュリティ構成をご覧ください。 +

+ +

デフォルトで信頼される証明機関

+ +

デフォルトでは、Android N をターゲットにしたアプリは、システムが提供する証明書のみを信頼し、ユーザーが追加した証明機関(CA)を信頼しません。ユーザーが追加した CA を信頼する必要がある Android N 用アプリは、ネットワーク セキュリティ構成を使用して、ユーザー CA を信頼する方法を指定する必要があります。 + + + +

+ +

APK 署名スキーム v2

+ +

PackageManager クラスが APK 署名スキーム v2 を使用して、アプリを検証できるようになりました。APK 署名スキーム v2 は、APK ファイルに加えられた無許可の変更を検出することにより、検証速度の大幅な向上と整合性の保証強化を実現するファイル全体の署名スキームです。 + + +

+ +

下位互換性を確保するために、v2 署名スキームで署名する前に、v1 署名スキーム(JAR 署名スキーム)で APK に署名する必要があります。v2 署名スキームでは、v2 スキームで署名した後、追加の証明書で APK に署名すると、検証が失敗します。 + + +

+ +

APK 署名スキーム v2 のサポートは、Android N デベロッパー プレビューで間もなく使用できるようになります。 +

+ +

特定のディレクトリへのアクセス

+ +

Android N では、アプリで新しい API を使用して、SD カードなどのリムーバブル メディア上のディレクトリといった特定の外部ストレージ ディレクトリへのアクセスをリクエストできるようになりました。この新しい API は、アプリが Pictures ディレクトリなどの標準の外部ストレージ ディレクトリにアクセスする方法を大幅に簡略化します。写真アプリなどのアプリでは、READ_EXTERNAL_STORAGE の代わりに、この API ですべてのストレージ ディレクトリやストレージ アクセス フレームワークにアクセスできます。その結果、ユーザーはそのディレクトリに移動できます。 + + + + + + +

+ +

また、この新しい API は、ユーザーがアプリに外部ストレージへのアクセスを付与するステップを簡素化します。この新しい API を使用する場合、アプリがどのディレクトリへのアクセス許可を求めているかをわかりやすく説明するシンプルな UI が使用されます。 + + +

+ +

詳細については、特定のディレクトリへのアクセスに関するデベロッパー向けドキュメントをご覧ください。 + +

+ + + + + + diff --git a/docs/html-intl/intl/ja/preview/behavior-changes.jd b/docs/html-intl/intl/ja/preview/behavior-changes.jd new file mode 100644 index 000000000000..7e6a026f8def --- /dev/null +++ b/docs/html-intl/intl/ja/preview/behavior-changes.jd @@ -0,0 +1,480 @@ +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 では、デバイスのバッテリー寿命、RAM の使用状況、アプリのパフォーマンスを改善するために、システムの動作がいくつか変更されています。これらの変更点は、システム リソースの可用性やアプリへのシステム通知に影響を及ぼす可能性があります。これらの変更点を理解し、変更点に対してアプリを対応させる方法を検討する必要があります。 + + + + +

+ +

Doze

+ +

+ Android 6.0(API レベル 23)で Doze が導入されました。これは、ユーザーがデバイスを電源と接続せずに静止状態にし、画面をオフにすると、CPU とネットワークのアクティビティを保留してバッテリーの寿命を改善するものです。Android N では、Doze が改良されています。デバイスを電源と接続せずに画面をオフにすると、デバイスが静止していなくても(たとえば、ユーザーが携帯端末をポケットに入れて持ち歩いている場合)、CPU およびネットワーク制限のサブセットがアプリに適用されます。 + + + + + +

+ + + +

+ 図 1. Doze が第 1 レベルのシステム アクティビティ制限を適用して、バッテリーの寿命を改善 + +

+ +

+ デバイスがバッテリー電源で動作しているときに画面をしばらくオフにすると、デバイスは Doze モードになります。それによって制限の最初のサブセットが適用され、アプリのネットワーク アクセスが切断されてジョブと同期が保留されます。デバイスが Doze モードに入った後、しばらくの間動かさずに放置していると、残りの Doze 制限が {@link android.os.PowerManager.WakeLock}、 +{@link android.app.AlarmManager} アラーム、GPS、Wi-Fi スキャンに適用されます。適用される Doze 制限が一部であるか完全なものであるかには関係なく、デバイスは Doze モードから短時間抜け出し、メンテナンス ウィンドウと呼ばれる状態になります。このとき、アプリはネットワーク アクセスを許可され、保留されたジョブや同期を実行することができます。 + + + + + + + +

+ + + +

+ 図 2. デバイスがしばらくの間静止状態になると、Doze が第 2 レベルのシステム アクティビティ制限を適用する + +

+ +

+ 画面をオンにするか、デバイスを電源に接続すると、Doze モードは解除され、処理の制限は適用されなくなります。Doze と App Standby 用に最適化するで説明したように、今回追加された動作は、Android 6.0(API レベル 23)で導入された以前のバージョンの Doze にアプリを対応するための推奨事項とベストプラクティスには影響を及ぼしません。Google Cloud Messaging(GCM)を使用してメッセージを受送信することなどの推奨事項を引き続き順守して、追加の Doze 動作に対応するためにアップデートを計画する必要があります。 + + + + + + + + +

+ + +

Project Svelte: バックグラウンド処理の最適化

+ +

+ Android N では、メモリ使用量と消費電力を最適化するために、3 つの暗黙的なブロードキャストが削除されています。この変更が必要になるのは、暗黙的なブロードキャストが行われると、バックグラウンドでブロードキャストをリッスンするように登録されているアプリが頻繁に起動されるためです。このブロードキャストを削除するとデバイスのパフォーマンスとユーザー エクスペリエンスが大幅に向上します。 + + + + +

+ +

+ モバイル端末では、Wi-Fi とモバイルデータの切り替えなど、接続が頻繁に変化します。現在のアプリでは、暗黙的な {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} ブロードキャストのレシーバーをマニフェストに登録することにより、接続の変化を監視できるようになっています。多くのアプリがこのブロードキャストを受信する登録を行っているので、1 度ネットワークの切り替えが起こるだけですべてのアプリがアクティブになり、ブロードキャストが同時に処理されます。 + + + + + +

+ +

+ 同様に、暗黙的な {@link + android.hardware.Camera#ACTION_NEW_PICTURE} ブロードキャストおよび {@link + android.hardware.Camera#ACTION_NEW_VIDEO} ブロードキャストをカメラなどの他のアプリから受信するよう登録している場合、ユーザーがカメラアプリで写真を撮ると、登録されたアプリがアクティブになり、ブロードキャストの処理が行われます。 + + +

+ +

+ Android N では、こういった問題を緩和するために、以下の最適化手法が適用されます。 + +

+ +
    +
  • Android N をターゲットにしたアプリは、{@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} ブロードキャストを受信しません。これは、アプリにイベントの通知をリクエストするマニフェスト エントリがある場合も同様です。フォアグラウンドで実行されているアプリが {@link + android.content.BroadcastReceiver} で通知をリクエストした場合は、メインスレッドで {@code CONNECTIVITY_CHANGE} を引き続きリッスンできます。 + + + +
  • + +
  • アプリは、{@link + android.hardware.Camera#ACTION_NEW_PICTURE} ブロードキャストまたは {@link + android.hardware.Camera#ACTION_NEW_VIDEO} ブロードキャストを送受信できません。この最適化は、Android N をターゲットにしたアプリだけでなく、すべてのアプリに影響を及ぼします。 + +
  • +
+ +

+ Android の将来のリリースでは、追加の暗黙的なブロードキャストに加えて、バインドされていないバックグラウンド サービスが廃止される可能性があります。このため、マニフェストで宣言されている暗黙的なブロードキャスト用のレシーバーやバックグラウンド サービスとの依存関係は回避または削除する必要があります。 + + + +

+ +

+ Android フレームワークは、これらの暗黙的なブロードキャストやバックグラウンド サービスの必要性を軽減するいくつかのソリューションを提供しています。たとえば、{@link + android.app.job.JobScheduler} API は、従量制ではないネットワークへの接続など、特定の条件が満たされたときに、ネットワーク操作をスケジュールするための堅牢なメカニズムを提供します。また、{@link + android.app.job.JobScheduler} を使用して、コンテンツ プロバイダの変更に対応することもできます。 + + + +

+ +

+ この動作の変更や、アプリで必要となる対応の詳細については、バックグラウンド処理の最適化をご覧ください。 + + +

+ + +

パーミッションの変更

+ +

+ Android N には、ユーザー アカウント パーミッションや外部ストレージに書き込むための新しいパーミッションなど、アプリに影響を及ぼす可能性のあるパーミッションが変更されています。ここでは、今回のプレビューで変更されたパーミションの概要について説明します。 + + + +

+ +
    +
  • {@code GET_ACCOUNTS}(廃止予定) +

    + GET_ACCOUNTS パーミッションは廃止予定となりました。システムは、Android N をターゲットにしたアプリでこのパーミションを無視します。 + +

    +
  • + +
+ + + +

アクセシビリティの改善

+ +

+ Android N には、低視力のユーザーまたは視覚障害のあるユーザー向けのプラットフォームのユーザビリティを改善するための変更が追加されています。通常は、これによってアプリのコードを変更する必要はありませんが、この機能について理解し、アプリをテストして、ユーザー エクスペリエンスに与える潜在的な影響を評価する必要があります。 + + + + +

+ + +

画面のズーム

+ +

+ Android N では、ディスプレイ サイズを設定して、画面上のすべての要素を拡大または縮小することができるので、低視力のユーザーに対するデバイスのアクセシビリティが向上しています。ユーザーは、一般的な中くらいのサイズの携帯端末 Nexus 4 の幅である sw320dp の画面最小幅を超えて画面をズームできません。 + + + + +

+ +
+ +
+ +
+
+ +
+ +
+

+ 図 3. 右側の画面では、Android N システム イメージを実行しているデバイスのディスプレイ サイズを拡大している + +

+ + +

+ デバイスの画面密度が変更されると、以下の方法で実行中のアプリに通知されます。 + +

+ +
    +
  • アプリが API レベル 23 以前のデバイスをターゲットにしている場合は、すべてのバックグラウンド処理が自動的に強制終了します。つまり、ユーザーがそのようなアプリから移動して [Settings] 画面を開き、ディスプレイ サイズの設定を変更すると、メモリ不足の場合と同じように、アプリが強制終了します。アプリに何らかのフォアグラウンド処理がある場合は、実行時の変更の処理に記載されている構成変更の処理が通知されます。これは、デバイスの画面の向きが変わったときの処理と同様です。 + + + + + + + +
  • + +
  • アプリが Android N をターゲットにしている場合、実行時の変更の処理に記載されているように、すべての処理(フォアグラウンド処理およびバックグラウンド処理)に対して構成変更が通知されます。 + + + +
  • +
+ +

+ Android のベストプラクティスに従っているほとんどのアプリでは、この機能をサポートするための変更を加える必要はありませんが、以下の点は確認する必要があります。 + +

+ +
    +
  • 画面幅 sw320dp のデバイスでアプリをテストして、適切に機能することを確認します。 + +
  • + +
  • デバイスの構成が変更された場合、キャッシュ済みのビットマップやネットワークからロードされるリソースなど、画面密度に依存するキャッシュ情報をアップデートしてください。また、アプリが一時停止状態から再開された場合は、構成変更をチェックしてください。 + + + +

    + 注: 構成に依存したデータをキャッシュする場合は、そのデータ用の適切な画面サイズやピクセル密度など、関連するメタデータを含めることをお勧めします。このメタデータを保存しておくと、構成を変更した後、キャッシュ データを更新する必要があるかどうかを決定できます。 + + + + +

    +
  • + +
  • ピクセル単位は画面密度に対応しないため、ピクセル単位で寸法を指定することは避けてください。その代わり、密度非依存ピクセルdp)単位で寸法を指定します。 + + +
  • +
+ +

セットアップ ウィザードの [Vision Settings]

+ +

+ Android N には、オープニング画面に [Vision Settings] が追加されています。ユーザーは [Vision Settings] を使用して、新しいデバイスでズーム操作フォントサイズディスプレイ サイズTalkBack などのアクセシビリティ機能を設定できます。この変更により、さまざまな画面設定に関連するバグが顕在化する可能性があります。この機能が及ぼす影響を評価するには、これらの設定を有効にしてアプリをテストする必要があります。設定は、[Settings] > [Accessibility] にあります。 + + + + + + + +

+ +

プラットフォーム ライブラリにリンクした NDK アプリ

+ +

+ Android N では、非パブリック API のロードを防止するために、名前空間が変更されています。NDK を使用する場合、Android プラットフォームのパブリック API のみを使用する必要があります。Android の次の公式リリースで非パブリック API を使用すると、アプリがクラッシュする可能性があります。 + + + +

+ +

+ 非パブリック API を使用していることをデベロッパーに警告するため、Android N で実行されているアプリが非パブリック API を呼び出すと、logcat にエラーが出力されます。この状態を認識してもらえるよう、エラー メッセージはデバイスの画面にも表示されます。アプリのコードを確認して、非パブリック API を削除し、プレビュー デバイスまたはエミュレータを使用して、アプリを十分にテストしてください。 + + + + + +

+ +

+ アプリがプラットフォーム ライブラリに依存している場合は、NDK ドキュメントにある一般的な修正例を参照して、共通のプライベート API をそれと同等な機能を持つパブリック API に置き換えます。特に、プラットフォームに含まれていて NDK には含まれていないライブラリ(libpng など)をアプリで使用している場合、気付かないうちにプラットフォーム ライブラリにリンクしていることがあります。この場合、APK にリンク対象のすべての .so ファイルが含まれていることを確認します。 + + + + + +

+ +

+ 警告: サードパーティのライブラリの中には非パブリック API にリンクしているものもあります。アプリがこれらのライブラリを使用している場合、Android の次の公式リリースでアプリを実行すると、アプリがクラッシュする可能性があります。 + + +

+ +

+ NDK に含まれていないネイティブ ライブラリは Android のリリース版が変わると変更または削除される場合があるため、アプリでは、こういったライブラリへの依存やその使用を避けてください。OpenSSL から BoringSSL への移行は、そのような変更の一例です。また、NDK に含まれていないプラットフォーム ライブラリには互換性要件がないため、デバイスによって互換性レベルが異なる場合があります。古いバージョンで非 NDK ライブラリにアクセスする必要がある場合は、Android API レベルを判定してからロードしてください。 + + + + + + +

+ +

+ こうしたタイプの問題の診断を支援するために、Android N でアプリをビルドするときに発生する可能性のある Java および NDK のエラーの例を以下に示します。 + +

+ +

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 ...
+
+ + +

+ こうしたタイプのエラーが発生しているアプリの典型的な修正例を以下に示します。 +

+ +
    +
  • libandroid_runtime.so の getJavaVM と getJNIEnv を使用している場合は、標準の JNI 関数に置き換えることができます。 + +
    +AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
    +AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
    +JavaVM::AttachCurrentThread from <jni.h>.
    +
    +
  • + +
  • {@code libcutils.so} の {@code property_get} シンボルを使用している場合は、公開されている {@code __system_property_get} に置き換えることができます。これを行うには、次の include 文とともに {@code __system_property_get} を使用します。 + + +
    +#include <sys/system_properties.h>
    +
    +
  • + +
  • {@code libcrypto.so} の {@code SSL_ctrl} シンボルを使用している場合は、アプリ内のローカルなバージョンに置き換える必要があります。たとえば、{@code .so} ファイルを +{@code libcyrpto.a} に静的にリンクするか、BoringSSL や OpenSSL の動的ライブラリ {@code libcrypto.so} をアプリに含める必要があります。 + + +
  • +
+ +

Android for Work

+

+ Android N には、証明書のインストール、パスワードのリセット、セカンダリ ユーザーの管理、デバイス識別子へのアクセスなど、Android for Work をターゲットにしたアプリに対する変更が含まれています。Android for Work 環境向けのアプリを構築している場合、これらの変更点を確認し、変更に応じてアプリを修正する必要があります。 + + + + +

+ +
    +
  • デバイス ポリシー コントローラ(DPC)が代理証明書の設定を行う前に、代理証明書のインストーラーをインストールする必要があります。また、プロファイルと N SDK をターゲットにしたデバイスオーナー アプリが代理証明書のインストーラーを使用できるよう、DPC が DevicePolicyManager.setCertInstallerPackage() を呼び出す前にインストーラーをインストールする必要があります。インストールされていない場合、システムは IllegalArgumentException をスローします。 + + + + + + +
  • + +
  • デバイス管理者向けのパスワードのリセット制限がプロファイル オーナーに適用されます。デバイスの管理者は、DevicePolicyManager.resetPassword() を使用して、既に設定されているパスワードを削除または変更できなくなりました。デバイスの管理者は、デバイスにパスワード、PIN、またはパターンが設定されていない場合のみ、パスワードを設定できます。 + + + + +
  • + +
  • デバイスとプロファイルのオーナーは、制限が設定されている場合でもアカウントを管理することができます。デバイス オーナーとプロファイル オーナーは、DISALLOW_MODIFY_ACCOUNTS ユーザー制限が適用されている場合でもアカウント管理 API を呼び出すことができます。 + + +
  • + +
  • デバイス オーナーによるセカンダリ ユーザーの管理がさらに簡単になりました。デバイスがデバイス オーナー モードで実行されている場合は、DISALLOW_ADD_USER 制限が自動的に設定されます。これにより、管理されていないセカンダリ ユーザーが作成されることを防ぐことができます。また、CreateUser() メソッドと createAndInitial() メソッドは廃止され、新しい DevicePolicyManager.createAndManageUser() メソッドに置き換えられました。 + + + + + +
  • + +
  • デバイス オーナーは、デバイス識別子にアクセスできます。また、DevicePolicyManagewr.getWifiMacAddress() を使用して、デバイスの Wi-Fi MAC アドレスにもアクセスできます。デバイスで Wi-Fi が有効にされたことがない場合、このメソッドは {@code null} 値を返します。 + + + +
  • +
+ +

+ Android N の Android for Work の変更に関する詳細については、Android for Work のアップデートをご覧ください。 + +

+ +

その他の重要事項

+ +
    +
  • Android N 上で低い API レベルをターゲットにしたアプリが実行されている場合、ユーザーがディスプレイ サイズを変更すると、アプリのプロセスは強制終了されます。アプリは、このシナリオを適切に処理する必要があります。適切に処理しないと、ユーザーが [Recents] からアプリを復元したときに、アプリがクラッシュします。 + + + + +

    +アプリをテストして、この動作が発生しないようにしてください。DDMS でアプリを手動で強制終了させて同様のクラッシュを発生させることにより、アプリのテストを行なうことができます。 + + + +

    + +

    +N 以上をターゲットにしたアプリは、画面密度の変更時に自動的に強制終了しませんが、構成変更への対応が不十分なままである可能性があります。 + +

    +
  • + +
  • +Android N 上のアプリは構成変更を適切に処理し、次回の起動時にクラッシュしないようにする必要があります。フォントのサイズを変更([Setting] > [Display] > [Font size])した後に [Recents] からアプリを復元すると、アプリの動作を確認できます。 + + + + +
  • +
+ diff --git a/docs/html-intl/intl/ja/preview/download.jd b/docs/html-intl/intl/ja/preview/download.jd new file mode 100644 index 000000000000..9d9df379414b --- /dev/null +++ b/docs/html-intl/intl/ja/preview/download.jd @@ -0,0 +1,541 @@ +page.title=デバイス上でテストする +meta.tags="プレビュー", "nexus","システム イメージ" +page.tags="preview", "androidn" +page.image=images/cards/card-n-downloads_2x.png + +@jd:body + +
+ + + + +
+ + + +

+ 新しいプラットフォーム上でアプリを実行してテストするには、以下のいずれかの方法で Android N のランタイム環境をセットアップする必要があります。 + +

+ +
    +
  • Android N をサポート対象のハードウェア デバイスにインストールする。
  • +
  • Android N が動作する Android エミュレータをセットアップする。
  • +
+ +

+ 既存の APK とハードウェア デバイスまたはエミュレータがあれば、新しいプラットフォーム上でアプリの基本的な互換性テストを実施できます。基本的なテストのために開発環境全体をアップデートする必要はありません。 + + + +

+ +

+ アプリを Android N 向けに修正したり、Android N の API を使用したりする場合は、Android N 用にアップデートされた開発環境をセットアップする必要があります。詳細は Android N 向けの開発準備をするの説明をご覧ください。 + + + +

+ + +

ハードウェア デバイスをセットアップする

+ +

+ N Developer Preview は、携帯端末やタブレット、テレビなど、アプリのテストに使用するさまざまなハードウェア デバイスのシステム アップデートに対応しています。 + +

+ +

+ 対象機種をお持ちの場合は、以下のいずれかの方法で Developer Preview マイルストーン ビルドにアップデートできます。 + +

+ +
    +
  • Android ベータ版プログラム自動 OTA システム アップデートにデバイスを登録します。登録したデバイスは、N Developer Preview のマイルストーン ビルドごとに、定期的に無線(OTA)アップデートを受信できます。既存の環境から N Developer Preview のさまざまなリリースへシームレスに移行できるため、このベータ版プログラムに登録することをお勧めします。 + + + +
  • +
  • Developer Preview のシステム イメージをダウンロードして、デバイスに書き込みます。手動で書き込みをしたデバイスには、OTA アップデートが自動で配信されません。ただし、デバイスを Android ベータ版プログラムに登録すれば、OTA アップデートを取得できるようになります。 + +
  • +
+ +

自動 OTA アップデートを受信するためにデバイスを登録する

+ +

+ 対象機種(以下のダウンロードの表をご覧ください)をお持ちの場合は、Android ベータ版プログラムにデバイスを登録すると、Android のプレビュー版への OTA アップデートを受信できます。正式なシステム アップデートと同様に、OTA アップデートのダウンロードやデバイスの更新は自動で行われます。 + + + + +

+ +

+ デバイスの登録解除はいつでもできます。登録を解除すると、そのデバイスで利用可能な Android の最新の実稼働向けバージョン(Android 6.0 Marshmallow など)への OTA アップデートがデバイスに配信されます。アップデート時はオールリセットされ、デバイス上のユーザーデータは削除されます。デバイスの登録解除前には、重要なデータをバックアップしておいてください。 + + + + +

+ +

+ 詳細情報やデバイスの登録方法については、Android ベータ版プログラムのウェブサイトをご覧ください。 + +

+ +

注: 登録を解除するとデバイスはオールリセットされるので、重要なデータはあらかじめバックアップしておいてください。 + + +

+ +

手動でデバイスへの書き込みを行う

+ +

+ 最新の Developer Preview のシステム イメージはいつでもダウンロードして、手動でデバイスに書き込むことができます。テスト端末用のシステム イメージは、以下の表からダウンロード可能です。テスト環境を詳細に管理したり、自動テストなどで頻繁に再インストールが必要な場合は、このように手動でデバイスに書き込みをする方法が便利です。 + + + + +

+ +

+ デバイスにシステム イメージをインストールすると、端末からすべてのデータが削除されるため、あらかじめデータをバックアップしておいてください。 + +

+ +

+ デバイス上のデータをバックアップして、ご自身のデバイス用のシステム イメージを以下からダウンロードした後、developers.google.com/android の手順に従ってデバイスにイメージを書き込みます。 + + +

+ +

+ 手動でシステム イメージを書き込んだデバイスには、以降の Developer Preview マイルストーン ビルドへの OTA アップデートが自動配信されません。そのため Developer Preview マイルストーンごとに環境を最新にして、新しいシステムイメージを書き込む必要があります。 + + + +

+ +

+ 手動でデバイスに書き込みを行った後でも、Android ベータ版プログラムにデバイスを登録すれば OTA アップデートを受信できるようになります。次のプレビュー版への OTA アップデートを受信したい方は、いつでもデバイス登録が可能です。 + + + +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
デバイスダウンロード / チェックサム
Nexus 5X
"bullhead"
bullhead-npc56p-preview-6c877a3d.tgz
+ MD5:b5cf874021023b398f5b983b24913f5d
+ SHA-1:6c877a3d9fae7ec8a1678448e325b77b7a7b143a +
Nexus 6
"shamu"
shamu-npc56p-preview-54b13c67.tgz
+ MD5:af183638cf34e0eb944a1957d7696f60
+ SHA-1:54b13c6703d369cc79a8fd8728fe4103c6343973 +
Nexus 6P
"angler"
angler-npc56p-preview-85ffc1b1.tgz
+ MD5:bc4934ea7bd325753eee1606d3725a24
+ SHA-1:85ffc1b1be402b1b96f9ba10929e86bba6c6c588 +
Nexus 9
"volantis"
volantis-npc56p-preview-0e8ec8ef.tgz
+ MD5:c901334c6158351e945f188167ae56f4
+ SHA-1:0e8ec8ef98c7a8d4f58d15f90afc5176303efca4 +
Nexus 9G
"volantisg"
volantisg-npc56p-preview-1bafdbfb.tgz
+ MD5:7bb95bebc478d7257cccb4652899d1b4
+ SHA-1:1bafdbfb502e979a9fe4c257a379c4c7af8a3ae6 +
Nexus Player
"fugu"
fugu-npc56r-preview-7027d5b6.tgz
+ MD5:f5d3d8f75836ccfe4c70e8162e498be4
+ SHA-1:7027d5b662bceda4c80a91a0a14ef0e5a7ba795b +
Pixel C
"ryu"
ryu-npc56p-preview-335a86a4.tgz
+ MD5:4e21fb183bbbf467bee91598d587fd2e
+ SHA-1:335a86a435ee51f18464de343ad2e071c38f0e92 +
General Mobile 4G(AndroidOne)
"seed"
seed_l8150-npc56p-preview-82472ebc.tgz
+ MD5:983e083bc7cd0c4a2d39d6ebaa20202a
+ SHA-1:82472ebc9a6054a103f53cb400a1351913c95127 +
+ +

プレビュー版をデバイスからアンインストールする

+ +

+ 以下のいずれかの方法で、プレビュー版をデバイスからアンインストールできます。 +

+
    +
  • 工場出荷時仕様のシステム イメージを取得して、手動でデバイスに書き込みます。 + +
      +
    • Nexus 端末と Pixel C 端末については Nexus 端末のファクトリー イメージのページを参照してダウンロードしてください。 + +
    • +
    • その他の端末については、直接デバイス メーカーにお問い合わせください。Android ベータ版プログラムの対象機種については、デバイスをプログラムに登録した後、登録を解除することができます(詳細は以下をご覧ください)。 + + +
    • +
    +
  • +
  • Android ベータ版プログラムへのデバイス登録を解除します。Android ベータ版プログラムに登録中のデバイスは、その種類のよらず、簡単に登録を解除することができます。 + + +

    + 登録を解除すると、そのデバイスで利用可能な Android の最新の実稼働向けバージョン(Android 6.0 Marshmallow など)への OTA アップデートがデバイスに配信されます。アップデート時はオールリセットされ、デバイス上のユーザーデータは削除されます。デバイスの登録解除前には、重要なデータをバックアップしておいてください。 + + + + +

    +
  • +
+ +

注: プログラムの終了前に Developer Preview のシステム イメージをアンインストールすると、端末はオールリセットされ、すべてのユーザーデータが削除されます。 + + + +

+ + +

エミュレータをセットアップする

+ +

Android エミュレータで Android N Preview を実行するには、Android N Preview SDK をダウンロードして、エミュレータ用の仮想デバイスを準備する必要があります。 + +

+ +

まずは以下の手順で Android N Preview SDK をダウンロードします(すでに Android N 向けの開発準備でダウンロード済みの場合は、この手順は飛ばしてください)。 + + + +

    +
  1. Android Studio で設定ダイアログを開きます(Windows、Linux では [File] > [Settings]、Mac では [Android Studio] > [Preferences])。左側のパネルで [Appearance & Behavior] > [System Settings] > [Android SDK] を選択します。 + + + + + +
  2. [SDK Platforms] タブをクリックして、[Android N Preview] チェック ボックスを選択します。 +
  3. + +
  4. [SDK Tools] タブをクリックして [Android SDK Build Tools][Android SDK Platform-Tools][Android SDK Tools] のチェック ボックスを選択します。 + + + +
  5. + +
  6. [OK] をクリックして、インストールするパッケージの使用許諾に同意します。 + +
  7. +
+ +

これで Android SDK Built-Tools 24.0 0 rc1Platform-Tools 24.0.0 rc1SDK Tools 25.0.9 がインストールされます。SDK Tools を 25.0.9 にアップデートしないと、Android N の x86_64 システム イメージは動作しません。 + + +

+ + +

次に Android N のシステム イメージを使用して仮想デバイスを作成します。

+ +
    +
  1. [Tools] > [Android] > [AVD Manager] を選択して、AVD Manager を起動します。 +
  2. +
  3. [Create Virtual Device] をクリックします。
  4. +
  5. Nexus 5X、Nexus 6P、Nexus 9、Android TV などの端末を選択して、[Next] をクリックします。 +
  6. +
  7. N システム イメージ(x86 ABI)を選択して [Next] をクリックします(現時点で Android N Preview の Android エミュレータに対応しているのは x86 システム イメージだけです)。 + + + +
  8. 残りの AVD 設定を終えたら [Finish] をクリックします。 +
  9. +
+ +

これで Android N Preview AVD で Android エミュレータを起動できます。

+ +

+Android Emulator 2.0 Beta に対応した Android Studio 2.1 のプレビュー版をインストールすると、Android Studio 1.5 よりもパフォーマンスが格段に向上し、Android エミュレータをより快適にお使いいただけます。 + + +

+ +

注: Android Studio 2.0 Beta を使用している場合、N プレビュー版のシステム イメージで AVD を作成できないという既知の不具合があります。よって現時点では、Android Studio 2.1 のプレビュー版を使用して AVD を作成してください。 + + + +

+ +

仮想デバイスの作成については、仮想デバイスを管理するで詳細をご覧ください。 +

+ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html-intl/intl/ja/preview/features/background-optimization.jd b/docs/html-intl/intl/ja/preview/features/background-optimization.jd new file mode 100644 index 000000000000..278e54523839 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/features/background-optimization.jd @@ -0,0 +1,388 @@ +page.title=バックグラウンド処理の最適化 +page.metaDescription=暗黙的なブロードキャストに対する新しい制限。 +page.keywords="android N", "implicit broadcasts", "job scheduler" +@jd:body + + + +

+ バックグラウンド処理が多くのメモリとバッテリーを消費する場合があります。たとえば、多くのバックグラウンド処理が暗黙的なブロードキャストをリッスンするように登録されていますが、バックグラウンド処理が有用でない場合でも、暗黙的なブロードキャストによりこれらの処理が開始されることがあります。 + +バックグラウンド処理が端末のパフォーマンスとユーザー エクスペリエンスの両方に多大な影響を及ぼす可能性があります。 + +

+ +

+ N Developer Preview では、この問題を軽減するために、次の制限が適用されています。 + +

+ +
    +
  • プレビューをターゲットにしたアプリは、マニフェストで {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} ブロードキャストの受信登録をしていても、このブロードキャストを受信しません。 +フォアグラウンドで実行中のアプリは、{@link + android.content.Context#registerReceiver Context.registerReceiver()} で {@link android.content.BroadcastReceiver} を登録することにより、メインスレッドで {@code CONNECTIVITY_CHANGE} を引き続きリッスンできます。 + + +
  • + +
  • アプリは、{@link + android.hardware.Camera#ACTION_NEW_PICTURE} ブロードキャストまたは {@link + android.hardware.Camera#ACTION_NEW_VIDEO} ブロードキャストを送受信できません。この最適化は、プレビューをターゲットにしたアプリだけでなく、すべてのアプリに影響を及ぼします。 + +
  • +
+ +

+ Android フレームワークは、これらの暗黙的なブロードキャストの必要性を軽減するいくつかのソリューションを提供します。 +たとえば、{@link android.app.job.JobScheduler} と +{@code GcmNetworkManager} は、従量制ではないネットワークへの接続など、指定条件が満たされたときに、ネットワーク操作をスケジュールするための堅牢なメカニズムを提供します。 + + +また、コンテンツ プロバイダの変更に対応するために、{@link android.app.job.JobScheduler} を使用することもできます。{@link android.app.job.JobInfo} オブジェクトは、{@link android.app.job.JobScheduler} がジョブをスケジュールするために使用するパラメータをカプセル化します。 + + +ジョブの条件が満たされると、システムはこのジョブをアプリの {@link android.app.job.JobService} で実行します。 + +

+ +

+ このドキュメントでは、アプリをこれらの新しい制限に対応させるために、 +{@link android.app.job.JobScheduler} などの代替メソッドの使用法について説明します。 + +

+ +

+ CONNECTIVITY_ACTION に対する制限 +

+ +

+ N Developer Preview をターゲットにしたアプリは、マニフェストで {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} ブロードキャストの受信登録をしていても、このブロードキャストを受信しません。また、このブロードキャストに依存している処理は開始されません。 + +これにより、ネットワークの変更をリッスンするアプリ、または端末が従量制ではないネットワークに接続したときにネットワーク アクティビティをまとめて実行するアプリに問題が発生する可能性があります。 + +Android フレームワークは、この制限を回避するためのいくつかのソリューションを備えていますが、アプリで実行するタスクに応じて、適切なソリューションを選択してください。 + + +

+ +

+ 注: {@link android.content.Context#registerReceiver Context.registerReceiver()} で登録された {@link android.content.BroadcastReceiver} は、アプリがフォアグラウンドにあるときにこれらのブロードキャストを継続して受信します。 + + +

+ +

+ 従量制ではない接続でネットワーク ジョブをスケジュールする +

+ +

+ {@link android.app.job.JobInfo} オブジェクトをビルドするために {@link android.app.job.JobInfo.Builder JobInfo.Builder} を使用するときは、{@link + android.app.job.JobInfo.Builder#setRequiredNetworkType + setRequiredNetworkType()} メソッドを適用し、{@link android.app.job.JobInfo + JobInfo.NETWORK_TYPE_UNMETERED} をジョブ パラメータとして渡します。 +次のコードサンプルは、端末が従量制ではないネットワークに接続し、充電しているときに実行するサービスをスケジュールします。 + + +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+      (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo job = new JobInfo.Builder(
+    MY_BACKGROUND_JOB,
+    new ComponentName(context, MyJobService.class))
+      .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
+      .setRequiresCharging(true)
+      .build();
+  js.schedule(job);
+}
+
+ +

+ ジョブの条件が満たされたとき、アプリはコールバックを受け取り、指定された {@code JobService.class} で {@link android.app.job.JobService#onStartJob onStartJob()} メソッドを実行します。 + +{@link + android.app.job.JobScheduler} 実装の例については、JobScheduler サンプルアプリをご覧ください。 +

+ +

+ GMSCore サービスを使用し、Android 5.0(API レベル 21)以前をターゲットにしているアプリは、 +{@code GcmNetworkManager} を使用して {@code Task.NETWORK_STATE_UNMETERED} を指定できます。 + +

+ +

+ アプリを実行しているときにネットワーク接続を監視する +

+ +

+ フォアグラウンドで実行中のアプリは、{@link + android.content.BroadcastReceiver} を登録することにより、{@code + CONNECTIVITY_CHANGE} を引き続きリッスンできます。ただし、{@link + android.net.ConnectivityManager} API は、特定のネットワーク条件が満たされたときだけコールバックをリクエストするより堅牢なメソッドを提供します。 + +

+ +

+ {@link android.net.NetworkRequest} オブジェクトは、{@link android.net.NetworkCapabilities} に応じてネットワーク コールバックのパラメータを定義します。 +{@link + android.net.NetworkRequest.Builder NetworkRequest.Builder} クラスを使って {@link android.net.NetworkRequest} オブジェクトを作成します。次に、{@link + android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, + android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} は、{@link android.net.NetworkRequest} オブジェクトをシステムに渡します。 + +ネットワーク条件が満たされると、アプリはコールバックを受け取り、{@link + android.net.ConnectivityManager.NetworkCallback} クラスで定義された {@link android.net.ConnectivityManager.NetworkCallback#onAvailable + onAvailable()} メソッドを実行します。 + + +

+ +

+ アプリは終了するか、{@link android.net.ConnectivityManager#unregisterNetworkCallback + unregisterNetworkCallback()} を呼び出すまで、コールバックを受信し続けます。 + +

+ +

+ NEW_PICTURE と NEW_VIDEO に対する制限 +

+ +

+ N Developer Preview では、アプリは、{@link + android.hardware.Camera#ACTION_NEW_PICTURE} ブロードキャストまたは {@link + android.hardware.Camera#ACTION_NEW_VIDEO} ブロードキャストを送受信できません。この制限は、新しい画像やビデオを処理するためにいくつかのアプリを起動する必要があるときに、パフォーマンスとユーザー エクスペリエンスへの影響を軽減するのに役立ちます。 + +N Developer Preview では、{@link android.app.job.JobInfo} と {@link + android.app.job.JobParameters} を拡張することにより、代わりのソリューションを提供しています。 + +

+ +

+ 新しい JobInfo メソッド +

+ +

+ N Developer Preview では、コンテンツ URI の変更でジョブをトリガーするために、{@link android.app.job.JobInfo} API に次のメソッドが追加されています。 + +

+ +
+
+ {@code JobInfo.TriggerContentUri()} +
+ +
+ コンテンツ URI の変更でジョブをトリガーするために必要なパラメータをカプセル化します。 +
+ +
+ {@code JobInfo.Builder.addTriggerContentUri()} +
+ +
+ {@code TriggerContentUri} オブジェクトを {@link + android.app.job.JobInfo} に渡します。{@link android.database.ContentObserver} は、カプセル化されたコンテンツ URI を監視します。 +ジョブに関連する複数の {@code + TriggerContentUri} オブジェクトがある場合、システムは、1 つのコンテンツ URI のみの変更を通知する場合でも、コールバックを提供します。 + +
+ +
+ 指定した URI の子孫のいずれかが変更された場合、ジョブをトリガーするために、{@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} フラグを追加します。 +このフラグは、{@link + android.content.ContentResolver#registerContentObserver + registerContentObserver()} に渡される {@code notifyForDescendants} パラメータに相当します。 + +
+
+ +

+ 注: {@code TriggerContentUri()} は、{@link android.app.job.JobInfo.Builder#setPeriodic + setPeriodic()} または {@link android.app.job.JobInfo.Builder#setPersisted + setPersisted()} と組み合わせて使うことはできません。 +コンテンツの変更を継続的に監視するには、アプリの {@link + android.app.job.JobService} が最新のコールバックの処理を完了する前に、新しい +{@link android.app.job.JobInfo} をスケジュールします。 +

+ +

+ 次のサンプルコードは、システムが変更をコンテンツ URI {@code MEDIA_URI} に通知するときにトリガーされるジョブをスケジュールします。 + +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+          (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo.Builder builder = new JobInfo.Builder(
+          MY_BACKGROUND_JOB,
+          new ComponentName(context, MediaContentJob.class));
+  builder.addTriggerContentUri(
+          new JobInfo.TriggerContentUri(MEDIA_URI,
+          JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
+  js.schedule(builder.build());
+}
+
+

+ システムが特定のコンテンツ URI の変更を通知すると、アプリはコールバックを受け取り、{@link android.app.job.JobParameters} オブジェクトが {@code MediaContentJob.class} の {@link android.app.job.JobService#onStartJob onStartJob()} メソッドに渡されます。 + + + +

+ +

+ 新しい JobParameter メソッド +

+ +

+ また、N Developer Preview では、{@link android.app.job.JobParameters} が拡張され、ジョブをトリガーしたコンテンツ権限や URI についての有用な情報をアプリが受け取れるようになっています。 + + +

+ +
+
+ {@code Uri[] getTriggeredContentUris()} +
+ +
+ ジョブをトリガーした URI の配列を返します。この配列は、ジョブをトリガーした URI がない場合(たとえば、期限切れ、またはその他の理由でジョブがトリガーされた場合)、または変更された URI の数が 50 を超える場合は、{@code + null} になります。 + + +
+ +
+ {@code String[] getTriggeredContentAuthorities()} +
+ +
+ ジョブをトリガーしたコンテンツ権限の文字列配列を返します。 + 返された配列が {@code null} ではない場合、どの URI が変更されたかについて、詳細を取得するために {@code getTriggeredContentUris()} を使用します。 + +
+
+ +

+ 次のサンプルコードは、{@link + android.app.job.JobService#onStartJob JobService.onStartJob()} メソッドをオーバーライドし、ジョブを起動したコンテンツ権限と URI を記録します。 + +

+ +
+@Override
+public boolean onStartJob(JobParameters params) {
+  StringBuilder sb = new StringBuilder();
+  sb.append("Media content has changed:\n");
+  if (params.getTriggeredContentAuthorities() != null) {
+      sb.append("Authorities: ");
+      boolean first = true;
+      for (String auth :
+          params.getTriggeredContentAuthorities()) {
+          if (first) {
+              first = false;
+          } else {
+             sb.append(", ");
+          }
+           sb.append(auth);
+      }
+      if (params.getTriggeredContentUris() != null) {
+          for (Uri uri : params.getTriggeredContentUris()) {
+              sb.append("\n");
+              sb.append(uri);
+          }
+      }
+  } else {
+      sb.append("(No content)");
+  }
+  Log.i(TAG, sb.toString());
+  return true;
+}
+
+ +

+ アプリをさらに最適化する +

+ +

+ アプリをメモリ不足の端末またはメモリ不足の状況で実行するために最適化すると、パフォーマンスとユーザー エクスペリエンスが向上します。 +バックグラウンド サービスと静的に登録された暗黙的なブロードキャスト レシーバーへの依存関係を削除すると、そのような端末上のアプリの動作が向上します。 + +N Developer Preview では、これらの問題を削減するための措置が講じられていますが、これらのバックグラウンド処理をまったく使用せずに、アプリが実行されるように最適化することをお勧めします。 + + + +

+ +

+ N Developer Preview には、それらのバックグラウンド処理を無効にした状態でアプリの動作をテストするために使用できるいくつかの Android デバッグ ブリッジ(ADB)コマンドが追加されています。 + +

+ +
    +
  • 暗黙的なブロードキャストとバックグラウンド サービスが利用できない状態をシミュレートするには、次のコマンドを入力します。 + +
  • + +
  • +
    +{@code $ adb shell cmd appops set RUN_IN_BACKGROUND ignore}
    +
    +
  • + +
  • 暗黙的なブロードキャストとバックグラウンド サービスを再度有効にするには、次のコマンドを入力します。 + +
  • + +
  • +
    +{@code $ adb shell cmd appops set RUN_IN_BACKGROUND allow}
    +
    +
  • +
\ No newline at end of file diff --git a/docs/html-intl/intl/ja/preview/features/direct-boot.jd b/docs/html-intl/intl/ja/preview/features/direct-boot.jd new file mode 100644 index 000000000000..3b3bcb1898ed --- /dev/null +++ b/docs/html-intl/intl/ja/preview/features/direct-boot.jd @@ -0,0 +1,180 @@ +page.title=ダイレクト ブート +page.keywords=preview,sdk,direct boot +page.tags=androidn + +@jd:body + + + +

Android N は 電源を入れたときにユーザーが端末のロックを解除していない場合、セキュリティで保護された「ダイレクト ブート」モードで実行します。 + +この機能をサポートするため、システムで次の 2 つの保存先を使用できるようになります。

+ +
    +
  • 資格情報暗号化ストレージ。これはデフォルトの保存先で、ユーザーが端末のロックを解除した後にだけ使用できます。 +
  • +
  • 端末暗号化ストレージ。この保存先は、ダイレクト ブート モード中とユーザーが端末のロックを解除した後の両方で使用できます。 +
  • +
+ +

デフォルトで、ダイレクト ブート モード中はアプリは実行されません。ダイレクト ブート モード中にアプリでアクションを実行する必要がある場合、このモードで実行するアプリ コンポーネントを登録できます。 + +ダイレクト ブート モードでアプリの実行が必要になる一般的な使用例は次のとおりです。 +

+ +
    +
  • アラーム クロック アプリなど、通知がスケジュールされているアプリ。 +
  • +
  • SMS アプリなど、重要なユーザー通知を表示するアプリ。
  • +
  • Talkback など、アクセシビリティ サービスを提供するアプリ。
  • +
+ +

ダイレクト ブート モードで実行中にアプリがデータにアクセスする必要がある場合は、端末暗号化ストレージを使用します。 +端末暗号化ストレージにはキーで暗号化されたデータが保存され、端末がセキュア ブートに成功した場合にのみこのデータを使用できます。 + +

+ +

ユーザーの資格情報に関連付けたキーで暗号化しなければならない PIN やパスワードなどのデータには、資格情報暗号化ストレージを使用します。資格情報暗号化ストレージは、ユーザーが端末のロック解除に成功した後に使用可能になり、ユーザーが端末を再起動するまでアクセスできます。 + + +ユーザーが端末をロック解除した後にロック画面を有効にしても、資格情報暗号化ストレージはロックされません。 + +

+ +

ダイレクト ブート中に実行するためのアクセスを要求する

+ +

ダイレクト ブート モード中にアプリを実行したり、端末暗号化ストレージにアクセスしたりするには、アプリ コンポーネントの登録が必要です。 + +アプリをシステムに登録するには、コンポーネントが暗号化対応するように指定します。 +コンポーネントが暗号化対応するよう指定するには、マニフェスト内で +android:encryptionAware 属性を true に設定します。

+ +

暗号化対応コンポーネントを登録しておくと、端末を再起動したときにシステムから +LOCKED_BOOT_COMPLETED ブロードキャスト メッセージを受信できます。 +この時点で端末暗号化ストレージが使用できるようになり、ダイレクト ブート モード中にコンポーネントが実行しなければならないタスクを実行できます。たとえば、スケジュールしたアラームのトリガーなどが該当します。 + +

+ +

次のコード スニペットは、アプリのマニフェスト内で +{@link android.content.BroadcastReceiver} を暗号化対応として登録し、LOCKED_BOOT_COMPLETED のインテント フィルタを追加する方法の例を示しています。 +

+ +
+<receiever
+  android:encryptionAware="true" >
+  ...
+  <intent-filter>
+    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+  </intent-filter>
+</receiver>
+
+ +

ユーザーが端末のロックを解除すると、すべてのコンポーネントは端末暗号化ストレージと資格情報暗号化ストレージの両方にアクセスできます。 +

+ +

暗号化端末ストレージにアクセスする

+ +

暗号化端末ストレージにアクセスするには、 +Context.createDeviceEncryptedStorageContext() を呼び出して追加の +{@link android.content.Context} インスタンスを作成します。このコンテキストで実行されたストレージ API 呼び出しはすべて、端末暗号化ストレージにアクセスします。 +次の例では、端末暗号化ストレージにアクセスして既存のアプリのデータ ファイルを開きます。 + +

+ +
+Context directBootContext = Context.createDeviceEncryptedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+
+ +

端末暗号化ストレージは、ダイレクト ブート モード中にアクセスが必要な情報のみに使用してください。汎用的な暗号化された保存先として、端末暗号化ストレージを使用することはできません。ユーザーの個人情報や、ダイレクト ブート モード中に特に必要ではない暗号化されたデータには、資格情報暗号化ストレージを使用してください。 + + + +

+ +

ユーザーによる端末のロック解除の通知を受信する

+ +

再起動後にユーザーが端末のロックを解除すると、アプリは資格情報暗号化ストレージへのアクセスに切り替えて、ユーザーの資格情報に応じて通常のシステム サービスを使用します。 + +

+ +

再起動後、ユーザーが端末のロックを解除したときに通知を受信するには、実行中のコンポーネントから {@link android.content.BroadcastReceiver} を登録して、ACTION_USER_UNLOCKED メッセージをリッスンするようにします。 + +または、既存の {@link android.content.Intent#ACTION_BOOT_COMPLETED +ACTION_BOOT_COMPLETED} メッセージを受信することもできます。このメッセージは、端末が起動してユーザーが端末のロックを解除したことを示すようになりました。 + +

+ +

+UserManager.isUserUnlocked() を呼び出して、ユーザーが端末のロックを解除したかを直接問い合わせることもできます。

+ +

既存のデータを移行する

+ +

ユーザーが端末をアップデートしてダイレクト ブート モードを使用できるようになると、既存のデータを端末暗号化ストレージに移行しなければならない場合があります。 + +Context.migrateSharedPreferencesFrom() および +Context.migrateDatabaseFrom() を使用すると、設定およびデータベースのデータを資格情報暗号化ストレージと端末暗号化ストレージ間で移行できます。 +

+ +

どのデータを資格情報暗号化ストレージから端末暗号化ストレージに移行するかは、慎重に判断してください。 +パスワードや認証トークンなどのユーザーの個人情報は、端末暗号化ストレージに移行しないでください。 + +場合によっては、この 2 つの暗号化された保存先に、データセットを振り分けて管理する必要があります。 +

+ +

暗号化対応アプリをテストする

+ +

新しいダイレクト ブート モードを使用して、暗号化対応アプリをテストしてみましょう。ダイレクト ブートを有効にする方法は 2 つあります。 +

+ +

警告:ダイレクト ブートを有効にすると、端末上のすべてのユーザーデータが消去されます。 +

+ +

Android N がインストールされたサポート対象端末では、次のいずれかの方法を使用してダイレクト ブートを有効にします。 +

+ +
    +
  • 端末で、[Developer options] がまだ有効になっていない場合は、次の手順で有効にします。[Settings] > [About phone][Build number] を 7 回タップします。 + +[Developer options] 画面が表示されたら、[Settings] > [Developer options][Convert to file encryption] を選択します。 + +
  • +
  • 次の adb shell コマンドを使用して、ダイレクト ブート モードを有効にします。 +
    +$ adb reboot-bootloader
    +$ fastboot --wipe-and-use-fbe
    +
    +
  • +
+ +

テスト端末でモードの切り替えが必要な場合、エミュレーションされたダイレクト ブート モードも使用できます。 +データが失われるおそれがありますので、EMULATED モードは開発中にのみ使用してください。 +エミュレーションされたダイレクト ブート モードを有効にするには、端末でロック パターンを設定します。ロック パターンの設定時にセキュリティで保護されたスタートアップ画面について確認メッセージが表示された場合は、[No thanks] を選択します。次に、次の adb shell コマンドを使用します。 + + +

+ +
+$ adb shell sm set-emulate-fbe true
+
+ +

エミュレーションされたダイレクト ブート モードを無効にするには、次のコマンドを使用します。

+ +
+$ adb shell sm set-emulate-fbe false
+
+ +

これらのコマンドを使用すると、端末が再起動されます。

diff --git a/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd b/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd new file mode 100644 index 000000000000..791a67fe4c0f --- /dev/null +++ b/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd @@ -0,0 +1,158 @@ +page.title=ICU4J Android フレームワーク API + +@jd:body + +
+ +
+ +

+ ICU4J は幅広く使用されている、オープン ソースの Java ライブラリのセットで、Unicode のほか、ソフトウェア アプリケーションのグローバル化のサポートを提供しています。 +Android N では、アプリのデベロッパー向けの Android フレームワーク内で ICU4J API のサブセットを公開しており、{@code android.icu} パッケージ内で使用できます。 + +これらの API は、端末上のローカライズ データを使用します。 +そのため、ICU4J ライブラリを APK にコンパイルせず、フレームワーク内にあるライブラリを呼び出せばよいので、APK のフットプリントを削減できます + +(この場合、Android N より前のバージョンの Android を実行しているユーザーも、ICU4J ライブラリを含むバージョンのアプリをダウンロードできるようにするには、APK を複数のバージョン用意する必要があります)。 + + + +

+ +

+ ここではまず、これらのライブラリをサポートするために必要な最低限の Android API レベルについて基本的な情報を説明します。 +次に、Android 固有の ICU4J の実装に必要な情報を説明します。 +最後に、Android フレームワーク内で ICU4J API を使用する方法について説明します。 + +

+ +

ICU4J との関係

+ +

+ Android N では、com.ibm.icu ではなく +android.icu パッケージを介して ICU4J API のサブセットを公開しています。Android フレームワークでは、さまざまな理由により ICU4J API を公開しないという選択も考えられます。たとえば、Android N で廃止された API を公開しないため、または ICU チームからまだ安定版の発表がないため、などの理由があります。 + + + +ICU チームが今後 API を廃止した場合、Android でも廃止と見なすことになりますが、引き続きそれらの API を含める予定です。 + +

+ +

表 1. Android N で使用される ICU および CLDR のバージョン +

+ + + + + + + + + + + +
Android API レベルICU バージョンCLDR バージョン
Android N5628
+ +

いくつか注意事項があります。

+ +
    +
  • ICU4J Android フレームワーク API には、すべての ICU4J API が含まれているわけではありません。
  • +
  • NDK デベロッパーは、Android ICU4C がサポートされていない点にご注意ください。
  • +
  • Android フレームワーク内の API は、Android のリソースを使用したローカライズに対するサポートに代わるものではありません。 + +
  • +
+ +

com.ibm.icu から android.icu パッケージに移行する

+ +

+ アプリ内で既に ICU4J API を使用しており、 +android.icu API がその要件を満たしている場合、このフレームワーク API に移行するには、Java のインポートを com.ibm.icu から android.icu に変更します。 + +次に、APK から ICU4J ファイルのコピーを削除します。 + +

+ +

+ 注: ICU4J フレームワーク API では、名前空間に {@code com.ibm.icu} ではなく{@code android.icu} を使用します。 +これは、独自の {@code com.ibm.icu} ライブラリを含む APK で名前空間が競合しないようにするためです。 + +

+ +

+ その他の Android SDK API から android.icu API に移行する +

+ +

+ java および android パッケージには、ICU4J にあるクラスと同等のクラスが一部含まれています。 +しかし多くの場合、ICU4J では、より幅広い標準と言語のサポートを提供しています。 + +

+

次に、すぐに利用できる例をいくつか示します。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
クラス代替クラス
java.lang.Character android.icu.lang.UCharacter
java.text.BreakIterator android.icu.text.BreakIterator
java.text.DecimalFormat android.icu.text.DecimalFormat
java.util.Calendar +android.icu.util.Calendar
android.text.BidiFormatter + android.icu.text.Bidi +
android.text.format.DateFormat + android.icu.text.DateFormat +
android.text.format.DateUtils android.icu.text.DateFormat +android.icu.text.RelativeDateTimeFormatter +
+ +

ライセンス

+ +

+ ICU4J は ICU ライセンスでリリースされています。詳細については、ICU User Guide をご覧ください。 + +

diff --git a/docs/html-intl/intl/ja/preview/features/multi-window.jd b/docs/html-intl/intl/ja/preview/features/multi-window.jd new file mode 100644 index 000000000000..2d5417894022 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/features/multi-window.jd @@ -0,0 +1,582 @@ +page.title=マルチ ウィンドウのサポート +page.metaDescription=複数のアプリを同時に表示するための Android N の新しいサポート。 +page.keywords="multi-window", "android N", "split screen", "free-form" + +@jd:body + + + +

+ Android N には、複数のアプリを同時に表示するためのサポートが追加されています。 +ハンドヘルド端末で、分割画面モードにして、2 つのアプリを並べて実行したり、重ねて表示したりできます。 +TV デバイスで、アプリがピクチャ イン ピクチャ モードでビデオを再生しているときに、ユーザーは別のアプリを操作できます。 + + +

+ +

+ N Preview SDK でアプリをビルドする場合、アプリがマルチ ウィンドウ ディスプレイを処理をする方法を設定できます。 +たとえば、アクティビティの最小許容ディメンションを指定できます。 +また、アプリに対してマルチ ウィンドウ ディスプレイを無効にし、アプリを全画面モードのみで表示することもできます。 + + +

+ +

概要

+ +

+ Android N では、複数のアプリが画面を同時に共有できます。たとえば、ユーザーは画面を分割し、ウェブページを左側の画面に表示しながら、右側の画面でメールを作成することができます。 + +ユーザー エクスペリエンスは端末によって異なります。 + +

+ +
    +
  • Android N を実行しているハンドヘルド端末は、分割画面モードに対応しています。 +このモードでは、画面で 2 つのアプリが実行され、これらのアプリを並べて、または重ねて表示できます。 +ユーザーは、2 つのアプリを分離している分割線をドラッグして、1 つのアプリを拡大し、もう 1 つのアプリを縮小することができます。 + +
  • + +
  • Android N を実行している Nexus Player で、アプリをピクチャ イン ピクチャ モードにすると、アプリにコンテンツを表示したまま、ユーザーは他のアプリをブラウジングまたは操作することができます。 + + + +
  • + +
  • より大きい画面の端末のメーカーは、ユーザーが各アクティビティのサイズを自由に変更できるフリーフォーム モードを有効にすることもできます。 +メーカーがこの機能を有効にした場合、端末では、分割画面モードに加えて、フリーフォーム モードが利用できます。 + + +
  • +
+ + +

+ 図 1. 分割画面モードで並べて実行されている 2 つのアプリ。 +

+ +

+ ユーザーは、次の方法でマルチ ウィンドウ モードに切り替えることができます。 +

+ +
    +
  • ユーザーはオーバービュー画面を開いているときに、アクティビティのタイトルを長押ししてから、そのアクティビティを画面の強調表示された部分にドラッグすることにより、アクティビティをマルチ ウィンドウ モードにすることができます。 + + + +
  • + +
  • ユーザーがオーバービュー ボタンを長押しすると、現在のアクティビティがマルチ ウィンドウ モードになり、オーバービュー画面が開くので、ユーザーは、画面で共有する別のアクティビティを選択できるようになります。 + + +
  • +
+ +

+ ユーザーは、複数のアクティビティが画面を共有しているときに、データを 1 つのアクティビティから別のアクティビティにドラッグ アンド ドロップできます + +(以前は、単一のアクティビティ内でのみデータをドラッグ アンド ドロップできました)。 + +

+ +

マルチ ウィンドウ ライフサイクル

+ +

+ マルチ ウィンドウ モードは、アクティビティのライフサイクルを変更しません。 + +

+ +

+ マルチ ウィンドウ モードでは、ユーザーが直前に操作したアクティビティのみが任意の時点でアクティブになります。 +このアクティビティは、トップ レベルにあると見なされます。 + 他のすべてのアクティビティは、表示されていても一時停止状態になっています。 + ただし、一時停止状態ではあるが、表示されているこれらのアクティビティには、表示されていないアクティビティよりも高い優先度が付与されます。 +ユーザーが一時停止状態のアクティビティのいずれかを操作した場合、そのアクティビティが再開され、前のトップ レベルのアクティビティが一時停止します。 + + +

+ +

+ 注: マルチ ウィンドウ モードでは、アプリが一時停止状態になっても、そのアプリを表示したままにすることができます。 +アプリは、一時停止していても、アクティビティを続行する必用がある場合があります。 +たとえば、一時停止モードになっているが、表示されているビデオ再生アプリは、ビデオの表示を継続する必要があります。 +そのため、ビデオを再生するアクティビティが {@link android.app.Activity#onPause onPause()} ハンドラでビデオを一時停止しないようにすることをお勧めします。 + + + その代わり、これらのアクティビティは {@link android.app.Activity#onStop + onStop()} でビデオを一時停止し、{@link android.app.Activity#onStart + onStart()} でビデオの再生を再開する必要があります。 +

+ +

+ 実行時の変更の処理で指定したように、ユーザーがアプリをマルチ ウィンドウ モードにすると、アクティビティに構成の変更が通知されます。 + +基本的に、この構成の変更は、端末が縦表示から横表示に切り替えられたことをアプリに通知する場合と同じ影響(端末のディメンションが変更された場合を除いて)をアクティビティのライフサイクルに及ぼします。 + + +実行時の変更の処理で説明したように、アクティビティは構成の変更を処理することができます。または、システムによってアクティビティを破棄し、新しいディメンションでアクティビティを再作成することもできます。 + + + +

+ +

+ ユーザーがウィンドウのサイズを変更して、高さや幅を拡大した場合、ユーザー アクションに一致するようにアクティビティのサイズが変更され、必要に応じて、実行時の変更が発行されます。 + +アプリで新しく表示された領域を描画するまでに時間がかかる場合、{@link + android.R.attr#windowBackground windowBackground} 属性またはデフォルトの +windowBackgroundFallback システム属性によって指定された色でこれらの領域が一時的に塗りつぶされます。 + +

+ +

マルチ ウィンドウ モード向けアプリを構成する

+ +

+ アプリが Android N をターゲットにしている場合は、アプリのアクティビティがマルチ ウィンドウ ディスプレイをサポートする方法や、このサポートを行うかどうかを決めることができます。 +サイズとレイアウトを制御するための属性をマニフェストに設定できます。 + + ルート アクティビティ属性の設定は、タスクスタック内のすべてのアクティビティに適用されます。 + +

+ +

+ : Android N より前の SDK バージョンでマルチ オリエンテーション アプリをビルドして、そのアプリをマルチ ウィンドウ モードで使用する場合は、アプリのサイズが強制的に変更されます。 + +アプリに予想外の動作が発生する場合があることをユーザーに警告するダイアログ ボックスが表示されます。 +システムは、向きが固定されたアプリのサイズを変更しません。ユーザーがマルチ ウィンドウ モードで向きが固定されたアプリを開こうとすると、そのアプリが全画面で表示されます。 + + + +

+ +

android:resizeableActivity

+

+ マルチ ウィンドウ ディスプレイを有効または無効にするには、この属性をマニフェストの <activity> ノードまたは +<application> ノードに設定します。 + +

+ +
+android:resizeableActivity=["true" | "false"]
+
+ +

+ この属性が true に設定されている場合、アクティビティを分割画面モードまたはフリーフォーム モードで起動できます。 +この属性が false に設定されている場合、アクティビティはマルチ ウィンドウ モードをサポートしません。 +この値が false のとき、ユーザーがアクティビティをマルチ ウィンドウ モードで起動しようとすると、アクティビティが全画面で表示されます。 + + +

+ +

+ アプリが Android N をターゲットにしているが、この属性の値が指定されていない場合、属性の値がデフォルトの true になります。 + +

+ +

android:supportsPictureInPicture

+ +

+ この属性をマニフェストの <activity> ノードに設定すると、アクティビティがピクチャ イン ピクチャ ディスプレイをサポートするかどうかを示すことができます。 +android:resizeableActivity が false の場合、この属性は無視されます。 + +

+ +
+android:supportsPictureInPicture=["true" | "false"]
+
+ +

レイアウト属性

+ +

+ Android N では、<layout> マニフェスト要素により、マルチ ウィンドウ モードでのアクティビティの動作に影響を及ぼすいくつかの属性がサポートされています。 + + +

+ +
+
+ android:defaultWidth +
+ +
+ フリーフォーム モードで起動されたときのアクティビティのデフォルトの幅です。 +
+ +
+ android:defaultHeight +
+ +
+ フリーフォーム モードで起動されたときのアクティビティのデフォルトの高さです。 +
+ +
+ android:gravity +
+ +
+ フリーフォーム モードで起動されたときのアクティビティの初期配置です。適切な値については、 +{@link android.view.Gravity} のリファレンスをご覧ください。 +
+ +
+ android:minimalSize +
+ +
+ 分割画面モードおよびフリーフォーム モードでのアクティビティの最小の高さと幅です。 +ユーザーが分割画面モードの分割線を移動して、アクティビティを指定された最小ディメンションよりも小さくすると、アクティビティはユーザーがリクエストしたサイズにトリミングされます。 + + +
+
+ +

+ たとえば、次のコードは、アクティビティがフリーフォーム モードで表示されているときに、アクティビティのデフォルトのサイズと位置、およびその最小サイズを指定する方法を示しています。 + + +

+ +
+<activity android:name=".MyActivity">
+    <layout android:defaultHeight="500dp"
+          android:defaultWidth="600dp"
+          android:gravity="top|end"
+          android:minimalSize="450dp" />
+</activity>
+
+ +

マルチ ウィンドウ モードでアプリを実行する

+ +

+ Android N では、マルチ ウィンドウ モードで実行できるアプリをサポートするための新しい機能が導入されています。 + +

+ +

マルチ ウィンドウ モードで無効になる機能

+ +

+ 端末がマルチ ウィンドウ モードになっている場合、特定の機能は、端末の画面を他のアクティビティやアプリと共有する場合があるアクティビティに対して機能しないため、これらの機能は無効なるか、無視されます。 + +これらの機能には、次のものが含まれます。 + +

    +
  • システム UI の一部のカスタマイズ オプションは無効になります。たとえば、アプリが全画面モードで実行されていない場合、アプリのステータスバーを非表示にできません。 + + +
  • + +
  • システムは、android:screenOrientation 属性に加えられた変更を無視します。 +
  • +
+ +

マルチ ウィンドウの変更通知とクエリ

+ +

+ マルチ ウィンドウ ディスプレイをサポートするために、次の新しいメソッドが {@link android.app.Activity} クラスに追加されています。 +各メソッドの詳細については、N プレビュー SDK リファレンスをご覧ください。 + +

+ +
+
+ Activity.inMultiWindow() +
+ +
+ アクティビティがマルチ ウィンドウ モードで実行されているかどうかを判別するために呼び出します。 +
+ +
+ Activity.inPictureInPicture() +
+ +
+ アクティビティがピクチャ イン ピクチャ モードで実行されているかどうかを判別するために呼び出します。 + +

+ : ピクチャ イン ピクチャ モードは、マルチ ウィンドウ モードの特別な形態です。 +myActivity.inPictureInPicture() が true を返す場合は、myActivity.inMultiWindow() も true を返します。 + + +

+
+ +
+ Activity.onMultiWindowChanged() +
+ +
+ アクティビティがマルチ ウィンドウ モードになるか、マルチ ウィンドウ モードではなくなると、常にこのメソッドが呼び出されます。 +アクティビティがマルチ ウィンドウ モードになると、このメソッドに true 値が渡され、アクティビティがマルチ ウィンドウ モードではなくなると、このメソッドに false 値が渡されます。 + + +
+ +
+ Activity.onPictureInPictureChanged() +
+ +
+ アクティビティがピクチャ イン ピクチャ モードになるか、ピクチャ イン ピクチャ モードではなくなると、常にこのメソッドが呼び出されます。 +アクティビティがピクチャ イン ピクチャ モードになると、このメソッドに true 値が渡され、アクティビティがピクチャ イン ピクチャ モードではなくなると、このメソッドに false 値が渡されます。 + + +
+
+ +

+ また、これらの各メソッドの {@link android.app.Fragment} バージョンがあります。たとえば、Fragment.inMultiWindow() です。 + +

+ +

ピクチャ イン ピクチャ モードにする

+ +

+ アクティビティをピクチャ イン ピクチャ モードにするには、新しいメソッド +Activity.enterPictureInPicture() を呼び出します。端末がピクチャ イン ピクチャ モードをサポートしない場合、このメソッドの効果はありません。 +詳細については、ピクチャ イン ピクチャに関するドキュメントをご覧ください。 + +

+ +

マルチ ウィンドウ モードで新しいアクティビティを起動する

+ +

+ 新しいアクティビティを起動するときに、可能であれば、新しいアクティビティを現在のアクティビティの隣に表示する必用があるかどうかをシステムに示すことができます。 +そうするには、フラグ +Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT を使用します。 +このフラグを渡すと、次の動作がリクエストされます。 + +

+ +
    +
  • 端末が分割画面モードになっている場合、システムは、起動しているアクティビティの隣に新しいアクティビティを作成しようとするので、これらの 2 つのアクティビティが画面を共有します。 + +システムでは、この操作の実行が保証されるわけではありませんが、可能であれば、アクティビティが並べて表示されます。 + +
  • + +
  • 端末が分割画面モードではない場合、このフラグの効果はありません。 +
  • +
+ +

+ 端末がフリーフォーム モードになっている場合、新しいアクティビティを起動するときに、 +ActivityOptions.setLaunchBounds() を呼び出すことにより、新しいアクティビティのディメンションと画面上での位置を指定することができます。 +端末がマルチ ウィンドウ モードではない場合、このメソッドの効果はありません。 + +

+ +

+ : タスクスタック内でアクティビティを起動すると、画面上のアクティビティが起動したアクティビティに置き換えられ、すべてのマルチ ウィンドウ プロパティが継承されます。 + +マルチ ウィンドウ モードで新しいアクティビティを別個の画面として起動する場合は、新しいアクティビティを新しいタスクスタックで起動する必要があります。 + +

+ +

ドラッグ アンド ドロップのサポート

+ +

+ ユーザーは、2 つのアクティビティが画面を共有しているときに、データを 1 つのアクティビティから別のアクティビティにドラッグ アンド ドロップできます + +(以前は、単一のアクティビティ内でのみデータをドラッグ アンド ドロップできました)。 +そのため、アプリがドラッグ アンド ドロップをサポートしていない場合は、ドラッグ アンド ドロップ機能をアプリに追加する必要があります。 + +

+ +

+ N プレビュー SDK では、異なるアプリ間のドラッグ アンド ドロップをサポートするために、android.view パッケージが拡張されています。 +次のクラスとメソッドの詳細については、N プレビュー SDK リファレンスをご覧ください。 + + +

+ +
+
+ android.view.DropPermissions +
+ +
+ ドロップを受け取るアプリに付与されるパーミッションの指定を処理するトークン オブジェクトです。 + +
+ +
+ View.startDragAndDrop() +
+ +
+ {@link android.view.View#startDrag View.startDrag()} の新しいエイリアスです。異なるアクティビティ間のドラッグ アンド ドロップを有効にするには、新しいフラグ +View.DRAG_FLAG_GLOBAL を渡します。 +URI パーミッションを受け取る側のアクティビティに付与する必要がある場合、必要に応じて、新しいフラグ +View.DRAG_FLAG_GLOBAL_URI_READ または +View.DRAG_FLAG_GLOBAL_URI_WRITE を渡します。 + +
+ +
+ View.cancelDragAndDrop() +
+ +
+ 実行中のドラッグ操作をキャンセルします。ドラッグ操作を開始したアプリだけが呼び出せます。 + +
+ +
+ View.updateDragShadow() +
+ +
+ 実行中のドラッグ操作のドラッグ シャドウを置き換えます。ドラッグ操作を開始したアプリだけが呼び出せます。 + +
+ +
+ Activity.requestDropPermissions() +
+ +
+ {@link android.view.DragEvent} に含まれる {@link + android.content.ClipData} で渡されるコンテンツ URI のパーミッションをリクエストします。 +
+
+ +

アプリのマルチ ウィンドウ サポートをテストする

+ +

+ ユーザーが Android N を実行している端末をマルチ ウィンドウ モードにしてアプリの起動を試みる場合に備えて、Android N 向けにアプリをアップデートするかどうかに関係なく、アプリがマルチ ウィンドウ モードでどのように動作するかを確認する必要があります。 + + +

+ +

テスト端末の構成

+ +

+ Android N を端末にインストールすると、分割画面モードが自動的にサポートされます。 + +

+ +

アプリが N プレビュー SDK でビルドされていない場合

+ +

+ アプリが N プレビュー SDK でビルドされていないときに、ユーザーがマルチ ウィンドウ モードでそのアプリを使用しようとすると、アプリが向きの固定を宣言しない限り、アプリのサイズが強制的に変更されます。 + + +

+ +

+ アプリが向きの固定を宣言しない場合、Android N を実行している端末でアプリを起動し、アプリを分割画面モードにすることを試みる必要があります。 + +アプリのサイズが強制的に変更されたときに、ユーザー エクスペリエンスが許容範囲内にあることを確認してください。 + +

+ +

+ アプリが向きの固定を宣言する場合、アプリをマルチ ウィンドウ モードにすることを試みる必要があります。 +アプリをマルチ ウィンドウ モードにすることを試みたとき、アプリが全画面モードのままであることを確認してください。 + +

+ +

マルチ ウィンドウ モードをサポートする場合

+ +

+ アプリが N プレビュー SDK でビルドされていて、マルチ ウィンドウ モードが無効になっていない場合、分割画面モードとフリーフォーム モードの両方で次の動作を確認してください。 + + +

+ +
    +
  • アプリを全画面モードで起動してから、オーバービュー ボタンを長押しして、マルチ ウィンドウ モードに切り替えます。 +モードが適切に切り替わることを確認します。 +
  • + +
  • アプリをマルチ ウィンドウ モードで直接起動し、アプリが適切に起動することを確認します。 +オーバービュー ボタンを押すと、アプリをマルチ ウィンドウ モードで起動できます。次に、アプリのタイトルバーを長押しし、アプリを画面上の強調表示された領域のいずれかにドラッグします。 + + +
  • + +
  • 分割画面モードで分割線をドラッグして、アプリのサイズを変更します。 + アプリがクラッシュせずに、アプリのサイズが変更され、必要な UI 要素が表示されることを確認します。 + +
  • + +
  • アプリの最小ディメンションを指定している場合、アプリのサイズをそれらのディメンション以下にすることを試みてください。 +アプリのサイズを指定最小ディメンションよりも小さくできないことを確認してください。 + +
  • + +
  • すべてのテストを通じて、アプリのパフォーマンスが許容範囲内にあることを確認してください。たとえば、アプリのサイズを変更した後、UI の更新に大きな遅延がないことを確認してください。 + + +
  • +
+ +

チェックリストのテスト

+ +

+ アプリのパフォーマンスをマルチ ウィンドウ モードで確認するには、以下の操作を試みてください。 +特に記載のない限り、分割画面モードとマルチ ウィンドウ モードの両方でこれらの操作を試みる必要があります。 + +

+ +
    +
  • マルチ ウィンドウ モードを有効にしてから無効にします。 +
  • + +
  • 1 つのアプリから別のアプリに切り替えたとき、最初のアプリの動作が適切であり、表示されているが、アクティブになっていないことを確認します。 +たとえば、アプリがビデオを再生している場合、ユーザーが別のアプリを操作しているときに、アプリでビデオの再生が継続していることを確認します。 + + +
  • + +
  • 分割画面モードで分割線を移動して、アプリの拡大および縮小を試みてください。 +アプリを並べて表示しているときと重ねて表示しているときの両方でこれらの操作を試みてください。 +アプリがクラッシュせず、基本的な機能が表示され、サイズ変更の操作に時間がかかり過ぎないことを確認します。 + + +
  • + +
  • 続けざまにサイズ変更の操作を行います。アプリがクラッシュしたり、メモリリークが発生したりしないことを確認します。 +アプリのメモリリークをチェックする方法の詳細については、RAM の使用状況を調査するをご覧ください。 + + +
  • + +
  • さまざまなウィンドウ構成でアプリを通常の方法で使用し、アプリが適切に動作することを確認します。 +テキストが読み取り可能であり、UI 要素が操作に支障をきたすほど小さくないことを確認します。 + +
  • +
+ +

マルチ ウィンドウのサポートを無効にしている場合

+ +

+ +android:resizableActivity="false" を設定して、マルチ ウィンドウのサポートを無効にした場合は、Android N を実行している端末でアプリを起動し、アプリをフリーフォーム モードおよび分割画面モードにすることを試みる必要があります。 + +アプリをマルチ ウィンドウ モードにすることを試みたとき、アプリが全画面モードのままであることを確認してください。 + +

diff --git a/docs/html-intl/intl/ja/preview/features/multilingual-support.jd b/docs/html-intl/intl/ja/preview/features/multilingual-support.jd new file mode 100644 index 000000000000..b84ac60fa496 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/features/multilingual-support.jd @@ -0,0 +1,214 @@ +page.title=言語とロケール +@jd:body + + + +

Android N では、複数言語のユーザーのサポートが強化されており、設定で複数のロケールを選択できます。 +Android N ではこの機能を提供するために、サポート対象のロケール数を大幅に拡大し、システムがリソースを解決する方法を変更しました。 + +この新しいリソース解決方法は、より堅牢で、既存の APK との互換性を保つよう設計されていますが、予想外の動作には十分に注意してください。 + +たとえば、アプリで目的の言語がデフォルトに設定されているかをテストする必要があります。 +また、アプリで複数の言語をサポートする場合、そのサポートが意図したとおりに機能するかを確かめてください。 + +最後に、明示的にサポートを設計していない言語については、アプリで適切に処理する必要があります。 +

+ +

このドキュメントでは最初に、Android N より前のバージョンのリソース解決方針について説明します。次に、Android N の改善されたリソース解決方針について説明します。 + +最後に、増大したロケールを活用し、より多くの複数言語ユーザーをサポートする方法について説明します。 +

+ +

言語リソースの解決における課題

+ +

Android N より前のバージョンの Android では、アプリとシステムのロケールを一致させることができない場合がありました。 +たとえば、アプリのデフォルトの言語が米国英語で、{@code es_ES} リソース ファイルでスペイン語の文字列もローカライズされていたとします。 + +

+

Java コードが文字列を参照したとき、次のように文字列の言語を解決していました。 +

+
    +
  • 端末が {@code es_MX}(スペイン語 - メキシコ)に設定されていた場合、Android は {@code es_ES} リソース ファイルから文字列を読み込みます。 +
  • +
  • 端末が {@code en_AU} に設定されていた場合、Android は代わりに {@code +en_US} を読み込みます。ユーザーがアプリでまったくサポートされていないフランス語などを選択した場合にも、システムはデフォルトの {@code en_US} を読み込みます。 +
  • +
+ + +

これらの解決の問題は、完全一致が見つからなかった場合に、ロケールの国コードが無視されることが原因で起こります。 +次に例を示します。

+

+表 1. ロケールの完全一致がない場合のリソース解決 +

+ + + + + + + + + + + + + +
ユーザー設定アプリのリソースリソース解決
fr_CH +デフォルト(en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+fr_CH を試行 => 失敗
+fr を試行 => 失敗
+デフォルト(en)を使用 +
+ + +

この例では、システムはユーザーが英語を理解できるかどうかを認識せず、英語の文字列を表示します。 +この動作は現在、ごく一般的です。 +Android N では、このような状況が大幅に削減されるはずです。 +

+ +

リソース解決方針の改善

+

Android N は、より堅牢なリソース解決を導入しており、自動的に適切な代替言語を見つけます。 +ただし、解決を迅速化し保守性を向上させるには、最も一般的な親言語でリソースを保存する必要があります。 + + たとえば、これまで {@code es-US} ディレクトリにスペイン語のリソースを保存していた場合、{@code es-419} ディレクトリに移動します。ここには、ラテンアメリカのスペイン語が格納されます。 + + 同様に {@code en-GB} という名前のフォルダにリソースを保存している場合、そのフォルダの名前を {@code en-001}(国際英語)に変更します。en-GB 文字列の最も一般的な親言語は {@code en-001} であるためです。 + + + 次の例では、このような対応がリソース解決のパフォーマンスと信頼性を向上する根拠について説明します。 +

+ +

リソース解決の例

+ +

Android N では、表 1 で説明した例の解決方法が異なります。 +

+ +

+表 2. ロケールの完全一致が存在しない場合の改善された解決方針 +

+ + + + + + + + + + + + +
ユーザー設定アプリのリソースリソース解決
    +
  1. fr_CH
  2. +
+
+デフォルト(en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+fr_CH を試行 => 失敗
+fr を試行 => 失敗
+fr の子言語を試行 => fr_FR
+fr_FR を使用 +
+ + +

これで、ユーザーは英語ではなくフランス語のリソースを利用できます。この例は、フランス語の文字列を Android N の {@code fr_FR} ではなく {@code fr} に保存すべき理由も示しています。これが、最も近い親言語と一致させ、迅速に解決し、予測しやすくするための対策になります。 + + +

+ +

この改善された解決ロジックに加えて、Android では、選択できるユーザー言語を増やしました。 +もう一度上記の例で説明します。今回は、追加のユーザー言語としてイタリア語が指定され、アプリはフランス語をサポートしていません。 +

+ +

+表 3. アプリがユーザーの 2 番目に優先されるロケール設定のみと一致する場合のリソース解決 +

+ + + + + + + + + + + + + + +
ユーザー設定アプリのリソースリソース解決
    +
  1. fr_CH
  2. +
  3. it_CH
  4. +
+
+デフォルト(en)
+de_DE
+es_ES
+it_IT
+
+fr_CH を試行 => 失敗
+fr を試行 => 失敗
+fr の子を試行 => 失敗
+it_CH を試行 => 失敗
+it を試行 => 失敗
+it の子言語を試行 => it_IT
+it_IT を使用 +
+

アプリでフランス語をサポートしていなくても、ユーザーが理解できる言語が使用されます。 +

+ + +

追加のロケールをサポートするためのアプリ設計

+

LocaleList API

+ +

Android N では、新しい API {@code LocaleList.GetDefault()} が加わりました。これにより、アプリは直接、ユーザーが指定した言語のリストを問い合わせることができます。 +この API を使用すると、アプリの動作がさらに洗練され、コンテンツの表示がより最適化されます。 + +たとえば検索で、ユーザーの設定に基づいて複数の言語で結果を表示できます。 +ブラウザ アプリは、ユーザーが理解できる言語の翻訳ページを表示することがなくなり、キーボード アプリは、自動的に最適なレイアウトを有効にすることができます。 + +

+ +

フォーマッタ

+ +

Android 6.0(API レベル 23)までは、Android は多くの一般的な言語(en、es、ar、fr、ru)に対して 1 つか 2 つのロケールのみをサポートしていました。 + +各言語にはわずかなバリエーションしかなかったため、アプリはリソース ファイルでハードコーディングされた文字列として数字や日付を保存し、処理することができました。 + +しかし Android で幅広いロケールのセットがサポートされるようになったため、日付、時刻、通貨などの情報は、1 つのロケール内でも形式が大幅に異なる場合があります。 + + +形式をハードコーディングすると、エンドユーザーが混乱するおそれがあります。 +したがって、Android N で開発するときは、数字や日付の文字列をハードコーディングせず、必ずフォーマッタを使用してください。 +

+ +

その良い例がアラビア語です。アラビア語のロケールのサポートは {@code ar_EG} の 1 つだけでしたが、Android N では 27 に増えました。 +これらのロケールは、ほとんどのリソースを共有できますが、数字は ASCII 表記とネイティブ表記で好みが分かれています。 +たとえば、「4 桁の PIN を選択してください」など、数字の変数を含む文を作成する場合、以下のようにフォーマッタを使用します。 + +

+ +
 format(locale, "Choose a %d-digit PIN", 4)
diff --git a/docs/html-intl/intl/ja/preview/features/notification-updates.jd b/docs/html-intl/intl/ja/preview/features/notification-updates.jd new file mode 100644 index 000000000000..bbd8481f8eea --- /dev/null +++ b/docs/html-intl/intl/ja/preview/features/notification-updates.jd @@ -0,0 +1,328 @@ +page.title=通知 +page.tags=notifications +helpoutsWidget=true +page.image=/preview/images/notifications-card.png + +trainingnavtop=true + +@jd:body + +
+
+ + +

このドキュメントの内容

+
    +
  1. ダイレクト リプライ
  2. +
  3. バンドル通知
  4. +
  5. カスタムビュー
  6. +
+ +
+
+ +

Android N には、アプリが視認性の高いインタラクティブな通知をポストできるようにする新しい API がいくつか導入されています。 +

+ +

Android N では、ハンドセットでインライン リプライをサポートするために、既存の {@link android.support.v4.app.RemoteInput} 通知 API が拡張されています。 +これらの機能を使用すると、ユーザーは、アプリにアクセスすることなく、通知シェードからすばやく応答できます。 +

+ +

+ Android N では、類似した通知をバンドルして、単一の通知として表示することもできます。 +このバンドルを可能にするために、Android N では、既存の {@link + android.support.v4.app.NotificationCompat.Builder#setGroup + NotificationCompat.Builder.setGroup()} メソッドが使用されます。ユーザーは、各通知を展開して、通知シェードから個別に返信や消去などのアクションを各通知に対して行うことができます。 + + +

+ +

最後に、Android N には、アプリのカスタマイズした通知ビューでシステム デコレーションを活用できるようにする新しい API が追加されています。 +これらの API は、通知ビューで、標準のテンプレートを使った一貫した表示を共有できるようにします。 + +

+ +

このドキュメントでは、アプリでこれらの新しい通知機能を使用するときに考慮する必要のある主な変更点について説明します。 +

+ +

ダイレクト リプライ

+ +

Android N のダイレクト リプライ機能を使用すると、ユーザーは、テキスト メッセージにすばやく応答したり、通知インターフェース内でタスク リストを直接アップデートしたりできます。 + +ハンドヘルド デバイスでは、インライン リプライ アクションが、通知にアタッチされた追加ボタンとして表示されます。 +ユーザーがキーボード経由で返信する場合、通知アクション向けに指定したインテントにテキストによる応答がアタッチされ、そのインテントがハンドヘルド デバイス用アプリに送信されます。 + + + + + + +

+ 図 1.Android N に追加されたリプライ アクション ボタン。 + +

+ +

インライン リプライ アクションを追加する

+ +

ダイレクト リプライをサポートする通知アクションを作成する方法は次のとおりです。 +

+ +
    +
  1. 通知アクションに追加できる {@link android.support.v4.app.RemoteInput.Builder} のインスタンスを作成します。 + +このクラスのコンストラクタは、システムがテキスト入力のキーとして使用する文字列を受け取ります。 +その後、ハンドヘルド デバイス用アプリはそのキーを使用して、入力テキストを取得します。 + + +
    +// Key for the string that's delivered in the action's intent
    +private static final String KEY_TEXT_REPLY = "key_text_reply";
    +String replyLabel = getResources().getString(R.string.reply_label);
    +RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
    +        .setLabel(replyLabel)
    +        .build();
    +
    +
  2. +
  3. addRemoteInput() を使用して、{@link android.support.v4.app.RemoteInput} オブジェクトをアクションにアタッチします。 + + +
    +// Create the reply action and add the remote input
    +Notification.Action action =
    +        new Notification.Action.Builder(R.drawable.ic_reply_icon,
    +                getString(R.string.label), replyPendingIntent)
    +                .addRemoteInput(remoteInput)
    +                .build();
    +
    +
  4. + +
  5. アクションを通知に適用し、通知を発行します。 + +
    +// Build the notification and add the action
    +Notification notification =
    +        new Notification.Builder(mContext)
    +                .setSmallIcon(R.drawable.ic_message)
    +                .setContentTitle(getString(R.string.title))
    +                .setContentText(getString(R.string.content))
    +                .addAction(action))
    +                .build();
    +
    +// Issue the notification
    +NotificationManager notificationManager =
    +        NotificationManager.from(mContext);
    +notificationManager.notify(notificationId, notification);
    +
    +
    +
  6. + +
+ + +

ユーザーが通知アクションをトリガーすると、ユーザーは応答を入力するよう求められます。 +

+ + +

+ 図 2.ユーザーは通知シェードでテキスト メッセージを入力できます。 +

+ +

インライン リプライからユーザー入力を取得する

+ +

リプライ アクションのインテントで宣言したアクティビティで、通知インターフェースからのユーザー入力を取得する方法は次のとおりです。 +

+
    +
  1. 通知アクションのインテントを入力パラメータとして渡すことにより、{@link android.support.v4.app.RemoteInput#getResultsFromIntent + getResultsFromIntent()} を呼び出します。 +このメソッドは、テキストによる応答が含まれた {@link android.os.Bundle} を返します。 + +
  2. + +
    +Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
    +
    + +
  3. result キー({@link + android.support.v4.app.RemoteInput.Builder} コンストラクタに提供されている)を使用して、バンドルへのクエリを実行します。 +
  4. +
+ +

次のコード スニペットは、メソッドがバンドルから入力テキストを取得する方法を示しています。 +

+ +
+// Obtain the intent that started this activity by calling
+// Activity.getIntent() and pass it into this method to
+// get the associated string.
+
+private CharSequence getMessageText(Intent intent) {
+    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+    if (remoteInput != null) {
+            return remoteInput.getCharSequence(KEY_TEXT_REPLY);
+            }
+    return null;
+ }
+
+ +

アプリはロジックを適用して、取得したテキストに対して実行するアクションを決定できます。インタラクティブなアプリ(チャットなど)の場合、ユーザーが適切に応答できるように通知自体により多くのコンテキスト(たとえば、ユーザー自身のメッセージを含めた、複数行のチャット履歴)を提供します。ユーザーが {@link android.support.v4.app.RemoteInput} を介して応答する場合は、{@code setRemoteInputHistory()} メソッドを使って、返信履歴にテキスト メッセージを含めます。 + + + + + + +

+ +

バンドル通知

+ +

Android N は、通知のキューを表す新しい方法である + バンドル通知をデベロッパーに提供します。この機能は、Android Wear の通知スタック機能に似ています。 + +たとえば、受信したメッセージの通知をアプリで作成する場合、複数のメッセージが受信されると、通知が単一のグループにバンドルされます。 + +既存の {@link android.support.v4.app.NotificationCompat.Builder#setGroup +Builder.setGroup()} メソッドを使用して、同様の通知をバンドルできます。 +

+ +

+ 通知グループでは、通知グループを構成する通知が階層化されます。 + この階層の最上位には、そのグループの概要情報を表示する親通知があります。 +ユーザーは通知グループを順次展開できます。ユーザが階層を深くたどると、より多くの情報が表示されます。 + +ユーザーがバンドルを展開すると、すべての子通知の詳細情報が表示されます。ユーザーがいずれかの通知を展開すると、その内容がすべて表示されます。 + + +

+ + +

+ 図 3.ユーザーは通知グループを順次展開できます。 + +

+ +

通知をグループに追加する方法については、各通知をグループに追加するをご覧ください。 + +

+ + +

バンドル通知のベストプラクティス

+

このセクションでは、前のバージョンの Android プラットフォームで利用可能な {@link android.app.Notification.InboxStyle InboxStyle} 通知の代わりに、通知グループを使用する必要がある状況についてのガイドラインを提供します。 + + +

+ +

バンドル通知を使用するとき

+ +

ユースケースで次のすべての条件が満たされた場合にのみ通知グループを使用する必要があります。 +

+ +
    +
  • 子通知が完全な通知であり、グループの概要なしに、子通知を個別に表示できる。 +
  • +
  • 子通知を個別に表示するメリットがある。次に例を示します。 + +
  • +
      +
    • 子通知がアクション可能であり、各子通知に固有のアクションがある。
    • +
    • ユーザーが読みたい多くの情報が子通知にある。
    • +
    +
+ +

通知グループの適切なユースケースの例には、着信メッセージのリストを表示するメッセージング アプリや受信したメールのリストを表示するメールアプリなどが含まれます。 + +

+ +

+単一の通知が望ましいユースケースの例には、1 人のユーザーからの個別メッセージや、1 行のテキスト アイテムのリスト表示が含まれます。 + +このリスト表示を行うには、 +{@link android.app.Notification.InboxStyle InboxStyle} または {@link android.app.Notification.BigTextStyle BigTextStyle} を使用します。 + + +

+ +

バンドル通知を表示する

+ +

+ アプリは、グループに単一の子通知が含まれている場合でも、グループの概要を常にポストする必要があります。 +グループに単一の通知のみが含まれている場合、システムによって、概要の表示が非表示になり、子通知が直接表示されます。 +これにより、ユーザーがグループの子通知をスワイプして消すときに一貫した使用感が出ます。 + + +

+ +

+ 注: このバージョンの Android N では、単一の子通知が含まれる通知グループの概要を非表示にできません。 +この機能は、将来のバージョンの Android N に追加されます。 + +

+ +

通知をピークする

+ +

通常、子通知はグループとして表示されますが、子通知をヘッドアップ通知として一時的に表示するように設定できます。 + + +この機能は、特に最新の子通知とその関連するアクションへの即時アクセスを可能にするので便利です。 + +

+ + +

下位互換性

+ +

+ Android 5.0(API レベル 21)以降では、Android Wear 端末をサポートするために、通知グループとリモート入力が {@link + android.app.Notification} API の一部になっています。 +これらの API を使用して通知を既に作成している場合は、アプリの動作が上記のガイドラインに適合していることの確認と、{@code + setRemoteInputHistory()} の実装検討のみを行ってください。 + + +

+ +

+ 下位互換性をサポートするために、サポート ライブラリの {@link android.support.v4.app.NotificationCompat} クラスで同じ API が利用できるようになっているため、前の Android バージョンで機能する通知を作成できます。 + + +携帯端末とタブレットでは、概要通知のみがユーザーに表示されるため、アプリは、受信トレイスタイルやグループの全情報を表す同等の通知を引き続きサポートする必要があります。 + +Android Wear 端末では、古いプラットフォーム レベル上にもすべての子通知が表示されるため、API レベルに関係なく、子通知を作成する必要があります。 + + + +

+ +

カスタムビュー

+

Android N 以降では通知ビューをカスタマイズでき、通知ヘッダー、アクション、展開レイアウトなどのシステム デコレーションを引き続き取得できます。 + +

+ +

この機能を有効にするために、Android N には、カスタムビューにスタイルを適用する次の API が追加されています。 +

+ +
+
+{@code DecoratedCustomViewStyle()}
+
メディア通知以外の通知にスタイルを適用します。 +
+
+{@code DecoratedMediaCustomViewStyle()}
+
メディア通知にスタイルを適用します。
+
+ +

この新しい API を使用するには、{@code setStyle()} メソッドを呼び出し、目的のカスタムビュー スタイルに渡します。 +

+ +

次のコード スニペットは、{@code DecoratedCustomViewStyle()} メソッドでカスタム通知オブジェクトを作成する方法を示しています。 +

+ +
+Notification noti = new Notification.Builder()
+           .setSmallIcon(R.drawable.ic_stat_player)
+           .setLargeIcon(albumArtBitmap))
+           .setCustomContentView(contentView);
+           .setStyle(new Notification.DecoratedCustomViewStyle())
+           .build();
+
+
diff --git a/docs/html-intl/intl/ja/preview/features/picture-in-picture.jd b/docs/html-intl/intl/ja/preview/features/picture-in-picture.jd new file mode 100644 index 000000000000..a7f2a9225618 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/features/picture-in-picture.jd @@ -0,0 +1,186 @@ +page.title=ピクチャ イン ピクチャ +page.keywords=preview,sdk,PIP,Picture-in-picture +page.tags=androidn + +@jd:body + + + +

Android N では、Android TV ユーザーは、アプリを操作するときに画面の隅に固定されたウィンドウでビデオを視聴できるようになりました。 + +ピクチャ イン ピクチャ(PIP)モードを使用すると、アプリはバックグランドで別のアクティビティを続けながら、固定されたウィンドウでビデオ アクティビティを実行できるようになります。 + +PIP ウィンドウでは、アプリの使用中にマルチタスクを実行できます。これにより、ユーザーの作業効率が向上します。 +

+ +

アプリで、PIP モードをトリガーするタイミングを決めることができます。次に、PIP モードの開始時点の例を示します。 +

+ +
    +
  • ユーザーが別のコンテンツを閲覧するためにビデオから別のコンテンツに切り替えると、アプリはビデオを PIP モードに切り替えることができます。 +
  • +
  • コンテンツのエピソード終了の画面が表示されている間、アプリはビデオを PIP モードに切り替えることができます。 +メイン画面には、シリーズの次のエピソードに関するプロモーションや概要の情報が表示されます。 +
  • +
  • アプリで、ユーザーがビデオを視聴している間に、追加のコンテンツのキューを作成する方法を提供できます。 +メイン画面でコンテンツの選択アクティビティを表示している間に、ビデオは PIP モードで再生を続行できます。 +
  • +
+ +

PIP ウィンドウは 240 x 135 dp で、画面の 4 つのコーナーのうちいずれかの一番上のレイヤに表示されます。表示する場所はシステムによって選択されます。 +ユーザーは PIP メニューを表示して、PIP ウィンドウを全画面表示に切り替えたり、リモコンの [Home] ボタンを押して PIP ウィンドウを閉じたりすることができます。 + +別のビデオがメイン画面で再生を開始すると、PIP ウィンドウは自動的に閉じます。 + +最近使ったアプリから PIP ウィンドウを閉じることもできます。

+ + +

図 1. ユーザーがメイン画面でコンテンツを閲覧中に画面の隅に表示されるピクチャ イン ピクチャのビデオ + +

+ +

PIP では、Android N で使用可能なマルチウィンドウ API を活用し、固定されたビデオ オーバーレイ ウィンドウを表示します。 +PIP をアプリに追加するには、PIP をサポートするアクティビティを登録し、必要に応じてアクティビティを PIP モードに切り替えて、UI 要素を非表示にして、アクティビティが PIP モードを開始してもビデオの再生が続行されるようにします。 + + +

+ +

アクティビティがピクチャ イン ピクチャをサポートしていることを宣言する

+ +

デフォルトでは、システムはアプリの PIP を自動的にサポートしません。アプリで PIP をサポートする場合、マニフェストで +android:supportsPictureInPicture および +android:resizeableActivitytrue に設定して、ビデオ アクティビティを登録します。 + +また、アクティビティがレイアウトの設定変更を処理するように指定して、PIP モードの遷移中にレイアウト変更が発生しても、アクティビティが再開しないようにします。 + +

+ +
+<activity android:name="VideoActivity"
+    android:resizeableActivity="true"
+    android:supportsPictureInPicture="true"
+    android:configChanges=
+        "screenSize|smallestScreenSize|screenLayout|orientation"
+    ...
+
+ +

アクティビティを登録する際は、PIP モードでは、アクティビティが TV 画面の小さなオーバーレイ ウィンドウに表示される点に注意してください。 +ビデオの再生アクティビティは、最小限の UI にすることで最高のユーザー エクスペリエンスを提供できます。 +小さな UI 要素を含むアクティビティでは、PIP モードに切り替えたときに優れたユーザー エクスペリエンスを提供できない可能性があります。PIP ウィンドウでは、その UI 要素の詳細が見えづらくなるためです。 + + +

+ +

アクティビティをピクチャ イン ピクチャに切り替える

+ +アクティビティを PIP モードに切り替える必要があるときは、 +Activity.enterPictureInPicture() を呼び出します。次の例では、ユーザーがメディア コントロール バーにある専用の PIP ボタンを選択したときに、PIP モードに切り替わります。 + +

+ +
+@Override
+public void onActionClicked(Action action) {
+    if (action.getId() == R.id.lb_control_picture_in_picture) {
+        getActivity().enterPictureInPicture();
+        return;
+    }
+    ...
+
+ +

メディア コントロール バーに PIP ボタンを追加すると、ユーザーがビデオの再生を操作中に、簡単に PIP モードに切り替えることができます。 +

+ + +

図 1. メディア コントロール バー上の [Picture-in-picture] ボタン +

+ +

Android N には、新しい +PlaybackControlsRow.PictureInPictureAction クラスが含まれています。このクラスは、コントロール バーの PIP アクションと PIP アイコンの使用方法を定義します。 +

+ +

ピクチャ イン ピクチャの実行中に UI を処理する

+ +

アクティビティが PIP モードを開始したら、ビデオの再生のみを表示する必要があります。 +アクティビティが PIP を開始する前に UI 要素を削除して、再び全画面表示に戻ったら、削除した要素を復元します。Activity.onPictureInPictureChanged() または +Fragment.onPictureInPictureChanged() をオーバーライドして、必要に応じて UI 要素を有効または無効にします。次に例を示します。 + + +

+ +
+@Override
+public void onPictureInPictureChanged(boolean inPictureInPicture) {
+    if (inPictureInPicture) {
+        // Hide the controls in picture-in-picture mode.
+        ...
+    } else {
+        // Restore the playback UI based on the playback status.
+        ...
+    }
+}
+
+ +

ピクチャ イン ピクチャの実行中にビデオの再生を続行する +

+ +

アクティビティを PIP に切り替えると、システムはそのアクティビティを一時停止状態と見なして、アクティビティの onPause() メソッドを呼び出します。 +PIP モードによってアクティビティが一時停止になっても、ビデオの再生は一時停止せず、再生を続ける必要があります。 + +アクティビティの +onPause() メソッドで PIP を確認し、適切に再生を処理してください。次に例を示します。 +

+ +
+@Override
+public void onPause() {
+    // If called due to PIP, do not pause playback
+    if (inPictureInPicture()) {
+        // Continue playback
+        ...
+    }
+    // If paused but not in PIP, pause playback if necessary
+    ...
+}
+
+ +

アクティビティが PIP モードを終了して全画面モードに戻ると、システムはアクティビティを再開して onResume() メソッドを呼び出します。 +

+ +

ベスト プラクティス

+ +

PIP は、ビデオを全画面表示で再生するアクティビティに使用します。アクティビティを PIP モードに切り替えるときは、ビデオ コンテンツ以外は何も表示しないでください。アクティビティが PIP モードを開始したタイミングを検出し、ピクチャ イン ピクチャの実行中に UI を処理するで説明したように、UI 要素を非表示にします。 + + +

+ +

PIP ウィンドウは画面の隅にフローティング ウィンドウとして表示されるため、メイン画面のどの場所にも重要な情報を表示しないでください。PIP ウィンドウによって隠れる可能性があります。 + +

+ +

アクティビティが PIP モードになると、デフォルトで、入力フォーカスは失われます。PIP モードで動作中に入力イベントを受け付けるには、 +MediaSession.setMediaButtonReceiver() を使用します。 +

diff --git a/docs/html-intl/intl/ja/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/ja/preview/features/scoped-folder-access.jd new file mode 100644 index 000000000000..6bfae2d69dad --- /dev/null +++ b/docs/html-intl/intl/ja/preview/features/scoped-folder-access.jd @@ -0,0 +1,124 @@ +page.title=特定のディレクトリへのアクセス +page.keywords=preview,sdk,scoped directory access +page.tags=androidn + +@jd:body + + + +

写真アプリなどは通常、外部ストレージの特定のディレクトリ(Pictures ディレクトリなど)のみにアクセスする必要があります。 +外部ストレージへのアクセスに関する従来のアプローチでは、このようなアプリに目的のディレクトリへのアクセスを容易に提供できる設計にはなっていませんでした。 + +次に例を示します。

+ +
    +
  • マニフェストで {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} または {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} を要求すると、外部ストレージ上のすべての公開ディレクトリにアクセスできますが、この場合、アプリが不要な場所にもアクセスできます。 + + +
  • +
  • ストレージ アクセス フレームワークを使用すると、通常、ユーザーはシステム UI を使用してディレクトリを選択できますが、アプリが常に同じ外部ディレクトリにアクセスする場合、この選択は不要です。Android N では、一般的な外部ストレージ ディレクトリにアクセスできる、新しいシンプルな API を提供します。 + + + +
  • +
+ +

+

+ +

外部ストレージのディレクトリへのアクセス

+ +

StorageManager クラスを使用して、適切な +StorageVolume インスタンスを取得します。次に、そのインスタンスの +StorageVolume.createAccessIntent() メソッドを呼び出して、インテントを作成します。このインテントを使用して、外部ストレージのディレクトリにアクセスします。 +リムーバブル メディア ボリュームなど、使用できるすべてのボリュームのリストを取得するには、 +StorageManager.getVolumesList() を使用します。 +

+ +

次のコード スニペットは、プライマリ共有ストレージの +Pictures ディレクトリを開く方法の例を示しています。

+ +
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

システムは外部ディレクトリへのアクセスの付与を試行し、必要に応じてシンプルな UI で、ユーザーにアクセスを確認します。 +

+ + +

図 1. Pictures ディレクトリへのアクセスを要求するアプリケーション +

+ +

ユーザーがアクセスを付与すると、 +Activity.RESULT_OK の結果コードと、URI を含むインテント データを指定して、 +onActivityResult() のオーバーライドを呼び出します。提供された URI を使用して、ディレクトリの情報にアクセスします。これは、ストレージ アクセス フレームワークで返された URI を使用する場合と同様です。 + + + +

+ +

ユーザーがアクセスを付与しなかった場合は、 +Activity.RESULT_CANCELED の結果コードと、null のインテント データを指定して、 +onActivityResult() のオーバーライドを呼び出します。

+ +

注: 特定の外部ディレクトリへのアクセスを取得すると、そのディレクトリ内のサブディレクトリへのアクセスも取得します。 +

+ +

リムーバブル メディアのディレクトリへのアクセス

+ +

特定のディレクトリへのアクセスを使用してリムーバブル メディア上のディレクトリにアクセスするには、まず {@link android.os.Environment#MEDIA_MOUNTED} 通知をリッスンする {@link android.content.BroadcastReceiver} を追加します。次に例を示します。 + +

+ +
+<receiver
+    android:name=".MediaMountedReceiver"
+    android:enabled="true"
+    android:exported="true" >
+    <intent-filter>
+        <action android:name="android.intent.action.MEDIA_MOUNTED" />
+        <data android:scheme="file" />
+    </intent-filter>
+</receiver>
+
+ +

ユーザーが SD カードなどのリムーバブル メディアをマウントすると、システムは +{@link android.os.Environment#MEDIA_MOUNTED} 通知を送信します。この通知は、インテント データ内の StorageVolume オブジェクトを提供します。このオブジェクトを使用して、リムーバブル メディア上のディレクトリにアクセスできます。 + +次の例では、リムーバブル メディア上の Pictures ディレクトリにアクセスします。 +

+ +
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+    mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

ベスト プラクティス

+ +

外部ディレクトリのアクセス URI はできる限り保持してください。そうすれば、ユーザーに何度もアクセス要求をする必要がなくなります。 +ユーザーがアクセスを付与したら、ディレクトリのアクセス URI を指定して +getContentResolver().takePersistableUriPermssion() を呼び出します。 +システムが URI を保持し、以降のアクセス要求では RESULT_OK を返して、ユーザーに確認の UI を表示しません。 + +

+ +

ユーザーが外部ディレクトリへのアクセスを拒否した直後に、またアクセスを要求しないようにしてください。 +何度もアクセスを要求すると、ユーザー エクスペリエンスが低下します。 +

diff --git a/docs/html-intl/intl/ja/preview/features/security-config.jd b/docs/html-intl/intl/ja/preview/features/security-config.jd new file mode 100644 index 000000000000..6facba61ebf8 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/features/security-config.jd @@ -0,0 +1,744 @@ +page.title=ネットワーク セキュリティ構成 +page.keywords=preview,security,network + +@jd:body + + + + +

+ Android N には、ネットワーク セキュリティ構成機能が含まれています。これにより、アプリのコードを修正しなくても、安全な宣言型構成ファイルで、アプリのネットワーク セキュリティの設定をカスタマイズできます。 + +これらの設定は、特定のドメインおよび特定のアプリに対して構成できます。 +主な機能は次のとおりです。 + +

+ +
    +
  • + カスタム トラスト アンカー:アプリのセキュアな接続にどの証明機関(CA)を信頼するかをカスタマイズできます。 +たとえば、特定の自己署名証明書や制限された一連の公的 CA を信頼できます。 + + +
  • + +
  • + デバッグ限定のオーバーライド:インストール ベースに対する追加リスクなしに、アプリのセキュアな接続を安全にデバッグできます。クリアテキスト トラフィックのオプトアウト: + +
  • + +
  • +クリアテキスト トラフィックの意図しない使用からアプリを保護できます。 + +
  • + +
  • + 証明書のピン留め:アプリのセキュアな接続を特定の証明書に制限します。 + +
  • +
+ + +

セキュリティ構成ファイルの追加

+ +

+ ネットワーク セキュリティ構成機能は、XML ファイルを使用します。このファイルで、アプリの設定を指定できます。 +アプリのマニフェストに、このファイルを指すエントリを含める必要があります。 +次のコードはマニフェストからの抜粋で、このエントリの作成方法を示しています。 + +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+...
+<app ...>
+    <meta-data android:name="android.security.net.config"
+               android:resource="@xml/network_security_config" />
+    ...
+</app>
+
+ +

信頼できる CA のカスタマイズ

+ +

+ アプリで、プラットフォームのデフォルトの設定ではなく、カスタマイズした一連の CA を信頼することが必要な場合があります。 +主な理由は次のとおりです。 +

+ +
    +
  • カスタムの証明機関(自己署名、社内の CA で発行など)を使用してホストに接続する。 + +
  • + +
  • プレインストールされたすべての CA ではなく、信頼する一部の CA のみに制限する。 + +
  • + +
  • システムに含まれていない追加の CA を信頼する。 +
  • +
+ +

+ デフォルトで、すべてのアプリのセキュアな接続(TLS、HTTPS など)は、システムにプレインストールされた CA を信頼し、API レベル 23(Android M)以下をターゲットにしたアプリは、ユーザーが追加した CA も信頼します。 + +アプリは {@code base-config}(アプリ全体のカスタマイズ)または {@code domain-config} (ドメイン単位のカスタマイズ)を使用して、独自の接続をカスタマイズすることもできます。 + + + +

+ + +

信頼できる CA の構成

+ +

+ 自己署名 SSL 証明書を使用するホストか、または信頼できる非パブリック CA(社内の CA など)によって SSL 証明書が発行されているホストに接続するケースで説明します。 + + +

+ +

+ res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ PEM または DER 形式で、自己署名または非パブリック CA 証明書を +{@code res/raw/my_ca} に追加します。 +

+ + +

信頼できる CA の制限

+ +

+ システムによって信頼されているすべての CA をアプリで信頼したくない場合は、信頼する CA を制限できます。 +これにより、他の CA が発行した偽造証明書からアプリを保護できます。 + +

+ +

+ 信頼できる CA を制限するための設定は、特定のドメインでカスタムの CA を信頼する設定と似ています。ただし、リソースで複数の CA を指定できる点が異なります。 + +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">secure.example.com</domain>
+        <domain includeSubdomains="true">cdn.example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/trusted_roots"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ PEM または DER 形式で、信頼できる CA を {@code res/raw/trusted_roots} に追加します。 + PEM 形式を使用する場合、そのファイルには PEM データのみを含めるようにして、余分なテキストを含めないでください。 +1 つだけでなく複数の +<certificates> 要素を指定できます。 + +

+ + +

+ 信頼できる CA の追加 +

+ +

+ システムで信頼されていない CA を、アプリが追加で信頼しなければならない場合があります。これは、システムに CA がまだ組み込まれていなかったり、CA が Android システムに組み込まれるための要件を満たしていないことが原因です。 + +CA を追加するには、アプリの構成で複数の証明書ソースを指定します。 + + +

+

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="@raw/extracas"/>
+            <certificates src="system"/>
+        </trust-anchors>
+    </base-config>
+</network-security-config>
+
+

+ + +

デバッグ用の CA の構成

+ +

+ HTTPS で接続するアプリをデバッグするときは、運用サーバーの SSL 証明書がインストールされていないローカルの開発サーバーへの接続が必要になります。 + +アプリのコードを変更せずにこの接続をサポートするには + + {@code debug-overrides} を使用して、android:debuggable が {@code true} の場合にのみ信頼されるデバッグ限定の CA を指定できます。 + +通常、IDE およびビルド ツールによって、非リリース ビルドには自動的にこのフラグが設定されます。 + +

+ +

+ この方法は、通常の条件付きコードよりも安全です。セキュリティ対策として、アプリ ストアでは debuggable とマークされたアプリは拒否されるからです。 + + +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="@raw/debug_cas"/>
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+

+ + +

クリアテキスト トラフィックのオプトアウト

+ +

+ アプリケーションで、セキュアな接続のみを使用して接続する場合、それらの接続先に対して(HTTPS ではなく暗号化されていない HTTP プロトコルを使用する)クリアテキストのサポートを除外できます。 + +このオプションにより、バックエンド サーバーなど外部ソースが提供する URL の変更によって、アプリで思わぬパフォーマンスの低下が発生するのを防ぐことができます。 + + + 詳細については、{@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted + NetworkSecurityPolicy.isCleartextTrafficPermitted()} をご覧ください。 +

+ +

+ たとえば、アプリで {@code + secure.example.com} へのすべての接続には常に HTTPS を使用して、機密性の高いトラフィックを有害なネットワークから保護することが必要な場合があります。 + +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config usesCleartextTraffic="false">
+        <domain includeSubdomains="true">secure.example.com</domain>
+    </domain-config>
+</network-security-config>
+
+

+ + +

証明書のピン留め

+ +

+ 通常、アプリはプレインストールされたすべての CA を信頼します。これらの CA が偽造証明書を発行すると、アプリは MiTM 攻撃のリスクにさらされます。 + +アプリによっては、信頼する CA を制限するか証明書をピン留めすることで、受け入れる証明書を制限できます。 + +

+ +

+ 証明書をピン留めするには、公開鍵のハッシュによって証明書のセットを指定します(X.509 証明書の SubjectPublicKeyInfo)。 +証明書チェーンが有効になるのは、証明書チェーンに 1 つ以上のピン留めされた公開鍵が含まれている場合のみです。 + + +

+ +

+ 証明書のピン留めを使用するときは、必ずバックアップの鍵を含めてください。そうすれば、新しい鍵に切り替えたり、CA を変更したりする必要が生じた場合に(CA の証明書またはその CA の中間証明書にピン留めしていても)、アプリの接続が影響を受けることはありません。 + + +そうしないと、接続を復元するためにアプリにアップデートをプッシュしなければならなくなります。 + +

+ +

+ また、ピン留めの有効期限を設定することもできます。その有効期限を過ぎると、ピン留めが無効になります。 +これにより、アップデートされていないアプリの接続の問題を防ぐことができます。 +ただし、ピン留めに有効期限を設定すると、ピン留めを回避できるようになります。 + +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <pin-set expiration="2018-01-01">
+            <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+            <!-- backup pin -->
+            <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+    </domain-config>
+</network-security-config>
+
+

+ + +

構成の継承の動作

+ +

+ 固有の構成で設定されていない値は、継承されます。この動作により、より複雑な構成が可能になるうえ、構成ファイルの読みやすさを維持できます。 + +

+ +

+ 固有のエントリに値が設定されていない場合、その次に汎用的なエントリの値が使用されます。 +{@code domain-config} で設定されていない値は、ネストされている場合は親の {@code domain-config} から、ネストされていない場合は {@code + base-config} から取得されます。 +{@code base-config} で設定されていない値には、プラットフォームのデフォルト値を使用します。 + +

+ +

+ たとえば、{@code + example.com} のサブドメインに対するすべての接続で、CA のカスタム セットを使用する必要があるケースを考えてみましょう。また、これらのドメインに対するクリアテキストのトラフィックは、{@code + secure.example.com} に接続する場合を除いて許可します。 +{@code example.com} の構成で {@code + secure.example.com} の構成をネストすることで、 +{@code trust-anchors} の重複を回避できます。 +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+        <domain-config cleartextTrafficPermitted="false">
+            <domain includeSubdomains="true">secure.example.com</domain>
+        </domain-config>
+    </domain-config>
+</network-security-config>
+
+

+ + +

構成ファイルの形式

+ +

+ ネットワーク セキュリティ構成機能では、XML ファイル形式を使用します。 + ファイルの全体的な構造については、次のコード サンプルをご覧ください。 +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </base-config>
+
+    <domain-config>
+        <domain>android.com</domain>
+        ...
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+        <pin-set>
+            <pin digest="...">...</pin>
+            ...
+        </pin-set>
+    </domain-config>
+    ...
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+ +

+ 次のセクションでは、このファイル形式の構文とその他の詳細について説明します。 + +

+ +

+ <network-security-config> +

+ +
+
+ 含めることのできる要素: +
+ +
+ 0 または 1 つの <base-config>
+ 任意の数の <domain-config>
+ 0 または 1 つの <debug-overrides> +
+
+ +

+ <base-config> +

+ +
+
+ 構文: +
+
+ +
+<base-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</base-config>
+
+
+
+ 含めることのできる要素: +
+ +
+ <trust-anchors> +
+ +
+ 説明: +
+ +
+ domain-config に含まれていない接続先に対するすべての接続に使用される、デフォルトの構成。 + + +

+ 設定されていない値はすべて、プラットフォームのデフォルト値を使用します。API レベル 24 以上をターゲットにしたアプリのデフォルトの構成は次のとおりです。 + +

+ +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+    </trust-anchors>
+</base-config>
+
+API レベル 23 以下をターゲットにしたアプリのデフォルトの構成は次のとおりです。 +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+        <certificates src="user" />
+    </trust-anchors>
+</base-config>
+
+ +
+
+ +

<domain-config>

+
+
構文:
+
+
<domain-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</domain-config>
+
+ +
含めることのできる要素:
+ +
+1 つ以上の <domain> +
0 または 1 つの <trust-anchors> +
0 または 1 つの <pin-set> +
任意の数のネストされた <domain-config>
+ +
説明
+
固有の接続先への接続に使用される構成です。{@code domain} 要素の定義に従います。 + +

複数の {@code domain-config} 要素で接続先を指定している場合は、最も具体的な(長い)マッチング ドメイン ルールを持つ構成が採用されます。 +

+
+ + +

<domain>

+ +
+
+ 構文: +
+ +
+
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+
+
+ +
+ 属性: +
+ +
+
+
+ {@code includeSubdomains} +
+ +
+ {@code "true"} の場合、このドメイン ルールはドメインおよびすべてのサブドメイン(サブドメインのサブドメインも含む)に一致します。そうでない場合、このルールは完全一致のみに適用されます。 + + +
+
+
+ +
+ 説明: +
+
+ +

<debug-overrides>

+ +
+
+ 構文: +
+ +
+
+<debug-overrides>
+    ...
+</debug-overrides>
+
+
+ +
+ 含めることのできる要素: +
+ +
+ 0 または 1 つの <trust-anchors> +
+ +
+ 説明: +
+ +
+ オーバーライドは、android:debuggable が {@code "true"} の場合に適用されます。これは通常、IDE およびビルド ツールで生成された非リリース ビルドに使用します。 + +{@code + debug-overrides} で指定されたトラスト アンカーは、その他すべての構成に追加されます。サーバーの証明書チェーンでデバッグ限定のトラスト アンカーのいずれかを使用するときは、証明書のピン留めは実行されません。 + +android:debuggable が {@code "false"} の場合、このセクションは完全に無視されます。 + +
+
+ +

<trust-anchors>

+
+
+ 構文: +
+ +
+
+<trust-anchors>
+...
+</trust-anchors>
+
+
+ +
+ 含めることのできる要素: +
+ +
+ 任意の数の <certificates> +
+ +
+ 説明: +
+ +
+ セキュアな接続に使用するトラスト アンカーのセット。 +
+
+ + +

<certificates>

+
+
構文:
+
<certificates src=["system" | "user" | "raw resource"]
+              overridePins=["true" | "false"] />
+
+
説明:
+
{@code trust-anchors} 要素の X.509 証明書のセットです。
+ +
属性:
+
+
{@code src}
+
+CA 証明書のソースには、次のいずれかを指定します。 +
    +
  • X.509 証明書を含むファイルを指す未加工のリソース ID。 + 証明書は、DER または PEM 形式でエンコードする必要があります。PEM 証明書の場合、ファイルには PEM 以外の余分なデータ(コメントなど)を含めないでください。 + + +
  • + +
  • {@code "system"}: プレインストールされたシステムの CA 証明書 +
  • + +
  • {@code "user"}: ユーザーが追加した CA 証明書 +
  • +
+
+ +
{@code overridePins}
+
+

+ ソースから取得した CA が証明書のピン留めを回避するかどうかを指定します。{@code + "true"} の場合、証明書チェーンはこのソースから取得したいずれかの CA を使用して作成され、ピン留めは実行されません。 +この設定は、CA をデバッグしたり、アプリのセキュアなトラフィックでユーザーの MiTM の許可をサポートするために役立ちます。 + +

+ +

+ デフォルトは {@code "false"} です。ただし、{@code debug-overrides} 要素で指定された場合のデフォルトは {@code "true"} です。 + +

+
+
+
+ + +

<pin-set>

+ +
+
+ 構文: +
+ +
+
+<pin-set expiration="date">
+...
+</pin-set>
+
+
+ +
+ 含めることのできる要素: +
+ +
+ 任意の数の <pin> +
+ +
+ 説明: +
+ +
+ 公開鍵のピンのセットです。セキュアな接続を信頼するには、信頼チェーン内の公開鍵一式のうちどれかが、ピンのセットに含まれている必要があります。 +ピンの形式については、 +<pin> をご覧ください。 +
+ +
+ 属性: +
+ +
+
+
+ {@code expiration} +
+ +
+ {@code yyyy-MM-dd} 形式のピン留めの有効期限、つまりピン留めを無効にする日付です。 +この属性が設定されていない場合、ピン留めの有効期限はありません。 + +

+ 有効期限を設定しておくと、ユーザーがアプリのアップデートを無効にしているなどの原因で、ピンのセットのアップデートを取得していないアプリで、アプリの接続上の問題を回避できます。 + + +

+
+
+
+
+ +

<pin>

+
+
+ 構文: +
+ +
+
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+    SubjectPublicKeyInfo (SPKI)</pin>
+
+
+ +
+ 属性: +
+ +
+
+
+ {@code digest} +
+ +
+ ピンの生成にはダイジェスト アルゴリズムが使用されます。現在サポートされているのは +{@code "SHA-256"} のみです。 +
+
+
+
diff --git a/docs/html-intl/intl/ja/preview/features/tv-recording-api.jd b/docs/html-intl/intl/ja/preview/features/tv-recording-api.jd new file mode 100644 index 000000000000..a2129355c2a4 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/features/tv-recording-api.jd @@ -0,0 +1,120 @@ +page.title=TV の録画 +page.keywords=preview,sdk,tv,recording +page.tags=androidn + +@jd:body + + + +

TV の入力サービスを使用すると、ユーザーは time-shifting API を介してチャンネルの再生を一時停止および再開できます。 +Android N では、録画したセッションを複数保存できるようにして、タイムシフティング機能を拡張しています。 +

+ +

ユーザーはあらかじめ録画をスケジュールできます。また、プログラムを視聴しながら録画を開始することもできます。 +システムが録画を保存すると、システムの TV アプリで録画を視聴、管理、再生できます。 +

+ +

TV 入力サービスで録画機能を提供する場合は、アプリが録画をサポートしていることをシステムに示し、プログラムの録画機能を実装し、録画中に発生したエラーを処理および通知し、録画したセッションを管理する必要があります。 + + +

+ +

録画のサポートを示す

+ +

TV 入力サービスで録画をサポートしていることをシステムに示すには、次の手順を実行します。 +

+ +
    +
  1. TvInputService.onCreate() メソッドで、TvInputInfo.Builder クラスを使用して新しい +TvInputInfo オブジェクトを作成します。 +
  2. +
  3. 新しい TvInputInfo オブジェクトを作成するときは、 +setCanRecord(true) を呼び出してから、build() を呼び出して、サービスが録画をサポートしていることを示します。 +
  4. +
  5. +TvInputService.updateTvInputInfo() を呼び出してシステムに TvInputInfo オブジェクトを登録します。
  6. +
+ +

セッションを録画する

+ +

TV 入力サービスで録画機能のサポートを登録した後、システムがアプリの録画機能の実装にアクセスする必要があるときに、 +TvInputService.onCreateRecordingSession() を呼び出します。 + +独自の +TvInputService.RecordingSession サブクラスを実装し、onCreateRecordingSession() コールバックが発生したときに返します。 + +このサブクラスは、正しいチャンネル データへの切り替え、要求されたデータの録画、録画のステータスおよびエラーのシステムへの通知を処理します。 + +

+ +

システムが RecordingSession.onTune() を呼び出すと、チャンネル URI を渡して、URI で指定されたチャンネルに合わせます。 +notifyTuned() を呼び出して、アプリが目的のチャンネルに合わせたことをシステムに通知します。または、アプリが適切なチャンネルに合わせることができなかった場合は、 +notifyError() を呼び出します。 + +

+ +

次に、システムは RecordingSession.onStartRecording() コールバックを呼び出します。 +アプリは直ちに録画を開始する必要があります。システムはこのコールバックを呼び出すときに、これから録画するプログラムに関する情報を含む URI を提供します。 + +録画が完了したら、このデータを RecordedPrograms データ テーブルにコピーする必要があります。 +

+ +

最後に、システムが RecordingSession.onStopRecording() を呼び出します。この時点で、アプリは録画を直ちに停止する必要があります。 +また、RecordedPrograms テーブルのエントリも作成する必要があります。 +このエントリは、 +RecordedPrograms.COLUMN_RECORDING_DATA_URI 列に録画したセッション データの URI を設定し、システムが最初に +onStartRecording() を呼び出したときに提供したプログラム情報がすべて含まれている必要があります。 + +

+ +

RecordedPrograms テーブルへのアクセス方法の詳細については、録画したセッションを管理するをご覧ください。 +

+ +

録画のエラーを処理する

+ +

録画中にエラーが発生し、録画したデータのレンダリングができない場合は、RecordingSession.notifyError() を呼び出してシステムに通知します。同様に、録画セッションの作成後に notifyError() を呼び出して、アプリがセッションを録画できないことをシステムに通知することもできます。 + + +

+ +

録画中にエラーが発生したにもかかわらず、一部の録画を再生できるようにしてユーザーに提供したい場合は、 +RecordingSession.notifyRecordingStopped() を呼び出すと、システムで部分的なセッションを使用できるようになります。 + +

+ +

録画したセッションを管理する

+ +

システムは、すべての録画可能チャンネル アプリで録画したすべてのセッションの情報を、TvContract.RecordedPrograms +コンテンツ プロバイダ テーブルに保持します。 +この情報は、 +RecordedPrograms.Uri コンテンツ URI を使用してアクセスできます。コンテンツ プロバイダ API を使用して、このテーブルのエントリの読み取り、追加、削除が可能です。 +

+ +

コンテンツ プロバイダのデータの操作方法については、コンテンツ プロバイダの基本をご覧ください。 + +

+ +

ベスト プラクティス

+ +

TV 端末のストレージには上限があるため、録画したセッションを保存するためにストレージを割り当てるときは、十分に検討してください。 +録画したセッションを保存する容量が不足している場合は、 +RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) を使用します。 +

+ +

ユーザーが録画を開始すると、できるだけ速やかにデータの録画を開始する必要があります。 +録画を円滑に開始するには、システムが +onCreateRecordingSession() コールバックを呼び出したときにストレージ容量のアクセスや割り当てなど、時間のかかるタスクをあからじめ完了しておきます。 +そうすれば、onStartRecording() コールバックが発生したときに直ちに録画を開始できます。 + +

diff --git a/docs/html-intl/intl/ja/preview/index.jd b/docs/html-intl/intl/ja/preview/index.jd new file mode 100644 index 000000000000..d077f30ce366 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/index.jd @@ -0,0 +1,120 @@ +page.title=Android N Developer Preview +page.tags="preview","developer" +meta.tags="プレビュー", "android" +fullpage=true +forcelocalnav=true +header.hide=1 +footer.hide=1 +@jd:body + + + +
+
+
+ +
+

Android N Developer Preview

+

+ Android N が正式リリースされる前に、Nexus などのデバイスで事前にアプリの動作をご確認いただけます。Android N の新しいシステム動作をサポートして、電力やメモリの使用量を削減しましょう。マルチ ウィンドウ UIダイレクト リプライ通知などの機能も利用して、アプリを拡張してみてください。 + + + + +

+ + + + スタートガイド + +
+
+ +
+
+
+
+
+
+
+ + + + + +
+

リソース

+
+ Android N 向けにアプリを開発する上で役立つ必須情報をご提供します。 +
+ +
+ +
+
+ diff --git a/docs/html-intl/intl/ja/preview/j8-jack.jd b/docs/html-intl/intl/ja/preview/j8-jack.jd new file mode 100644 index 000000000000..1723e46e2740 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/j8-jack.jd @@ -0,0 +1,183 @@ +page.title=Java 8 の機能 +page.keywords="android N", "Java 8", "Jack" +@jd:body + + + +

Android N 向けのアプリを開発する際は、Java 8 の機能をご利用いただけます。このページでは Android N Preview でサポートしている Java 8 の新機能や、それらを利用するためのプロジェクトの正しい設定方法、想定される既知の問題についてご紹介します。 + + + + +

+ +

これらの機能を使うには、Android Studio 2.1(プレビュー版)と Android N Preview SDK をダウンロードしてセットアップし、Jack ツールチェーンと最新の Gradle 用の Android Plugin を準備する必要があります。Android N Preview SDK をお持ちでない方は、Android N 向けの開発準備の説明をご覧ください。 + + +

+ + + +

+ 注: Android N プラットフォーム向けのアプリを開発する際は、必ずしも Java 8 の新機能を使う必要はありません。Java 8 の機能を使用せずにコーディングしたい場合は、プロジェクトのソースコードを保持して、ターゲットの互換性の指定を Java 7 にしておくこともできます。ただし、Android N プラットフォームでビルドする時は、必ず JDK 8 を使用してコンパイルしてください。 + + + + +

+ +

+ Java 8 のサポート機能と API +

+ +

+ Android ではまだ Java 8 の全機能はサポートしておりません。現時点で Android N のプレビュー版向けにアプリを開発する際にご利用いただける機能は、以下のとおりです。 + + +

+ + + + +

+ さらに以下の Java 8 機能の API もご利用いただけます。 +

+ +
    +
  • リフレクションおよび言語関連の API +
  • + +
  • +
      +
    • {@code java.lang.FunctionalInterface} +
    • + +
    • {@code java.lang.annotation.Repeatable} +
    • + +
    • {@code java.lang.reflect.Method.isDefault()} +
    • + +
    • 以下のような反復アノテーション関連のリフレクション API + {@code AnnotatedElement.getAnnotationsByType(Class)} +
    • +
    +
  • +
  • ユーティリティ API +
  • + +
  • +
      +
    • {@code java.util.function} +
    • +
    +
  • +
+ +

+ 注: Android N の実装は匿名クラスのラムダ式に基づいているため下方互換性があり、前の Andoird バージョンで実行することができます。前のバージョンでラムダ式をテストする際は、必ず {@code + build.gradle} ファイルの {@code compileSdkVersion} と {@code + targetSdkVersion} の値を 23 以下に設定してください。 + + + +

+ +

+ Java 8 の機能と Jack ツールチェーンの有効化 +

+ +

+ Java 8 の新機能を使うには、新しい Jack ツールチェーンも必要です。この新しい Android ツールチェーンは、Java のソースコードを Android で判別可能な dex バイトコードにコンパイルします。さらにこのツールには独自の {@code .jack} ライブラリ フォーマットがあり、再パッケージ化、縮小、難読化、Multidex など、ほとんどのツールチェーン機能に対応しています。 + + + + + +

+ +

以下は、Android の DEX ファイルのビルドに使用する 2 つのツールチェーンの比較です。

+
    +
  • 従来の javac ツールチェーン
    + javac ({@code .java} --> {@code .class}) --> dx ({@code + .class} --> {@code .dex}) +
  • + +
  • 新しい Jack ツールチェーン
    + Jack ({@code .java} --> {@code .jack} --> {@code .dex}) +
  • +
+ +

+ Gradle の設定 +

+ +

+ プロジェクトで Java 8 の機能と Jack を使うには、モジュール固有の {@code build.gradle} ファイルに以下の内容を記載します。 + +

+ +
+android {
+  ...
+  defaultConfig {
+    ...
+    jackOptions {
+      enabled true
+    }
+  }
+  compileOptions {
+    sourceCompatibility JavaVersion.VERSION_1_8
+    targetCompatibility JavaVersion.VERSION_1_8
+  }
+}
+
+ +

+ 既知の問題 +

+ +

+ Android Studio 2.0(ベータ版)で導入された Instant Run は、現段階では Jack と併用できません。そのため新しいツールチェーンの使用中は、Instant Run が無効になります。 + +

+ +

Jack はアプリのコンパイル中に中間クラスファイルを生成しないため、中間ファイルに依存する以下のようなツールは現在 Jack と併用できません。 + +

+ +
    +
  • クラスファイルに作用する Lint Detector +
  • + +
  • アプリのクラスファイルを必要とするツールやライブラリ(JaCoCo や Mockito など) +
  • +
+ +

その他の不具合がありましたら、バグの報告をお願いします。

\ No newline at end of file diff --git a/docs/html-intl/intl/ja/preview/overview.jd b/docs/html-intl/intl/ja/preview/overview.jd new file mode 100644 index 000000000000..29340f88296f --- /dev/null +++ b/docs/html-intl/intl/ja/preview/overview.jd @@ -0,0 +1,440 @@ +page.title=プログラムの概要 +page.metaDescription= 次期 Android バージョン用のアプリを準備しましょう。 +page.image=images/cards/card-n-overview_2x.png +meta.tags="プレビュー", "デベロッパー", "android" +page.tags="preview", "developer", "android" + +@jd:body + + +

+ Android N Developer Preview には、Android の次期バージョンに備えてアプリをテストし、最適化するための機能がすべて備わっています。N Developer Preview 用のツールをダウンロードするだけで、今すぐ無料でご利用いただけます。 + + + +

+ + + + + + + +
+
+
+
+
+ ハードウェアとエミュレータのイメージ +
+ +

+ さまざまなデバイスやエミュレータでアプリを動かしてテストできます。 + +

+
+ +
+
+ 最新のプラットフォームのコード +
+ +

+ プレビュー期間は毎月アップデートされるので、最新のプラットフォームで変更された箇所のテストを実施できます。 +

+
+ +
+
+ デベロッパー不具合の優先 +
+ +

+ 最初の数週間でデベロッパーから報告された問題に優先的に対応するので、テストの実施とフィードバックはお早めにお願いします。 + +

+
+ +
+ +
+ + +
+
+ 新しい動作や機能 +
+ +

+ 新しいプラットフォーム動作への対応や、新機能を利用した開発を早い段階で開始できます。 +

+
+ +
+
+ OTA 配信によるアップデート +
+ +

+ Android ベータ版プログラムによる無線でのシームレスなアップデートに対応しているため、イメージを書き込む必要がありません。 + +

+
+ +
+
+ フィードバックとサポート +
+ +

+ Issue Tracker で問題を報告し、フィードバックを送ってください。N デベロッパー コミュニティでは、他のデベロッパーと情報交換をすることができます。 + + + +

+
+
+
+
+ + + +

スケジュールとアップデート

+ + +

+ N Developer Preview の対象期間は、2016 年 3 月 9 日から AOSP と OEM 向けの Android N の正式リリース(2016 年 の第 3 四半期を予定)までの間です。 + +

+ +

+ 主要な開発マイルストーンでアップデートをリリースしますので、開発やテスト用の環境としてご利用ください。リリース間隔は基本的には各月(4 週から 6 週に 1 回)の予定です。マイルストーンについては、以下をご覧ください。 + + +

+ +
    +
  • Preview 1(初回リリース、アルファ版)
  • +
  • Preview 2(追加アップデート、ベータ版)
  • +
  • Preview 3(追加アップデート、ベータ版)
  • +
  • Preview 4(最終版の API と正式な SDK、Google Play への公開)
  • +
  • Preview 5(最終テスト用の最終版とほぼ同じシステム イメージ)
  • +
  • AOSP とエコシステムへの最終リリース
  • +
+ +

+ 各アップデートには、SDK ツールとプレビュー版のシステム イメージ、エミュレータ、参考資料、API の差分情報が含まれます。 + +

+ +

+ 最初の 3 つのプレビュー マイルストーンでは、初期段階のテストや開発用の環境を提供します。それを利用して既存のアプリにおける互換性の問題を特定し、新規プラットフォームへの移行や主な作業計画を立ててください。この期間は各種機能や API、ファイル互換性の問題など、あらゆるフィードバックを受け付けている貴重な期間です。ぜひ Issue Tracker を使用して、皆様のご意見をお聞かせください。いただいたフィードバックをもとに、一部の API を改善してアップデートで提供する予定です。 + + + + + + +

+ +

+ Preview 4 と 5 には、開発に使用する Android N の最終版の API と SDK、システム動作や機能のテストに使用する最終版とほぼ同じシステム イメージが含まれます。この時点で Android N の標準 API レベルが確定しますので、以後は既存アプリの最終的な互換性テストを開始し、Android N の API や機能を使った新しいコードを改善できるようになります。 + + + + +

+ +

+ さらに Preview 4 以降では、正式な API レベルの Android N を搭載しているデバイスにアプリを公開できるようになります(Android ベータ版プログラムにオプトインしたユーザーのデバイスなどが対象)。なお、アプリは Google Play のアルファ版やベータ版のチャネルで先に配信できるので、ストア全体に公開する前に、Android ベータ版のユーザーに事前にアプリをテストしてもらうことが可能です。 + + + + + +

+ +

+ Android N でテストや開発を行う場合、プレビューのアップデートがリリースされるたびに開発環境を最新の状態に更新することを強くお勧めします。その際はテスト用のデバイスを Android ベータ版プログラムに登録して、マイルストーンごとに無線(OTA)でアップデートを取得するようにしておくと便利です。もしくはプレビュー イメージを手動でダウンロードして書き込むこともできます。 + + + + + +

+ +

+ プレビュー アップデートをご利用いただけるようになった際は Android デベロッパー ブログ、本サイト、Android N デベロッパー コミュニティでお知らせします。 + + +

+ + +

N Developer Preview の概要

+ +

+ N Developer Preview は、既存のアプリをさまざまな画面サイズ、ネットワーク テクノロジー、CPU や GPU チップセット、ハードウェア アーキテクチャでテストするために必要なものをすべて備えています。 + + +

+ +

SDK ツール

+ +

各コンポーネントは Android Studio の SDK Manager を使ってダウンロードできます。

+ +
    +
  • N Developer Preview の SDK とツール +
  • N Developer Preview のエミュレータ システム イメージ(32 ビット版と 64 ビット版) +
  • N Developer Preview の Android TV 版エミュレータ システム イメージ(32 ビット版) +
  • N Developer Preview サポート ライブラリ(新規アプリのテンプレート用) +
+ +

+ 上記のツールは、必要に応じて各マイルストーンでアップデートします。 +

+ +

ハードウェアのシステム イメージ

+ +

+ N Developer Preview に含まれる Nexus などのハードウェアのシステム イメージを使用すると、実機でテストや開発ができます。ハードウェア イメージの一覧は、デバイス イメージのページでご確認ください。 + + +

+ +

+ これらのデバイス用のシステム イメージは、各マイルストーンでアップデートします。アップデートされたシステム イメージは、何度でもダウンロードしてテスト用のデバイスに手動で書き込むことができます。自動化されたテスト環境では、繰り返しデバイスに再書き込みをする必要があるので、この方法は特に便利です。 + + + + +

+ +

注: 昨年のプレビュー版とは違い、手動で書き込みをしたデバイスは OTA アップデートを取得できなくなります。そのため、今年はデバイスを Android ベータ版プログラムに登録して、OTA を取得するようにしてください。 詳細は次のセクションに記載しています。 + + + +

+ +

Android ベータ版プログラムによる OTA アップデート

+ +

+ Android N は、新たに無線(OTA)アップデート プログラムに対応しています。このプログラムに登録しているデバイスには、Android N の最新プレビュー版へのアップデートが直接自動配信されます。登録は無料で、Google アカウントに登録済みの対象機種を所有していれば誰でもご利用いただけます。 + + + +

+ +

+ このプログラムに登録するには、まず Android ベータ版プログラムのサイトに移動します。このページには、Android ベータ版プログラムに登録可能なアカウントに登録済みデバイスの一覧が表示されます。 + + + +

+ +
    +
  1. Android N のアップデートを取得するデバイスを選択します。 +
  2. [Enroll] をクリックして利用規約を読み、合意したら [OK] をクリックします。 +
+ +

+ 登録が完了すると、すぐにデバイスにアップデートが配信されます。ほとんどの場合、Android N に移行する際にデータのオールリセットは不要ですが、デバイスの登録前には大事なデータをバックアップしておくことをお勧めします。 + + + +

+ +

+ デバイスにアップデートが配信されたら、できるだけ早めにダウンロードしてインストールするようにしてください。そうすることで常に最新のシステム UI や 動作、API、さまざまな機能の変更点を把握できます。 + + +

+ +

+ Developer Preview の終了時には、登録デバイスに Android N の正式リリース版へのアップデートが配信されます。 + +

+ +

+ デバイスはいつでも Android ベータ版プログラムへの登録を解除できます。登録を解除する前には、デバイス上のデータを必ずバックアップしておいてください。 + + +

+ +

注: 登録を解除すると、デバイスはファクトリー リセットされ、Android 6.0 Marshmallow の最新バージョンになります(デバイスを登録する前のバージョンに戻るとは限りません)。確実にクリーン インストールを行うため、連絡先やメッセージ、写真などのデバイス上のデータは削除されます。 + + + + + + +

+ +

ドキュメントとサンプル コード

+ +

+ Developer Preview サイトにあるドキュメントで、Android N の詳細をご確認いただけます。 + +

+ +
    +
  • Android N 向けの開発準備では、はじめの手順をステップごとに説明しています。 + +
  • +
  • 動作の変更点 には、集中的にテストを実施すべき箇所が記載されています。 +
  • +
  • 新規 API に関するドキュメントには、API 概要、ダウンロード可能な API リファレンスなどが含まれています。また、マルチ ウィンドウのサポート、バンドル通知、マルチロケールのサポートなどの主要機能についての詳細なデベロッパー ガイドも含まれています。 + + + +
  • サンプル コードでは、パーミッションや他の新機能の使用方法を確認できます。 + +
  • 現行バージョンの N Developer Preview のリリース ノートでは、変更履歴や差分レポートなどを確認できます。 + + +
+ +

ダウンロード可能な API リファレンス

+ +

+ 初期のプレビュー アップデートでは、Android N プラットフォーム用の API リファレンスの最新版を個別の zip ファイルとしてダウンロードできます。このリファレンスには差分レポートも含まれているので、API 23 や以前のアップデートからの API の変更点をご確認いただけます。 + + + + +

+ +

+ Android N の API が最終決定して正式な API レベルが割り当てられた時点で、API リファレンスを https://developer.android.com で公開します。 + +

+ +

+ サポート リソース +

+ +

+ N Developer Preview のテスト中や開発中は、以下の方法で不具合の報告やフィードバックの送信を行ってください。 + +

+ +
    +
  • 主なフィードバック手段は、N Developer Preview Issure Tracker です。これを使うと、バグやパフォーマンスの問題、一般的なフィードバックを報告できます。さらに既知の問題や、その回避方法もご確認いただけます。報告いただいた問題は常に最新の情報に更新されるので、重要度が判定されたり、問題が Android エンジニア チームに引き継がれたことを確認できます。 + + + + +
  • +
  • Android N デベロッパー コミュニティは、Android N に携わっているデベロッパー同士がつながる Google+ のコミュニティです。Android N について意見交換をしたり、疑問点を解消したりする場としてご活用ください。Google はこのコミュニティを管理し、必要に応じて回答やアドバイスをします。 + + + +
  • +
+ +

ターゲット、プレビュー API、公開

+ +

+ N Developer Preview では開発専用のシステムと、標準 API レベルを持たない Android ライブラリを提供します。アプリのテストで互換動作を除外する場合(強く推奨します)、アプリの targetSdkVersion“N” に設定することで Android N の プレビュー版を対象にすることができます。 + + + + + +

+ +

+ Android N Developer Preview では、プレビュー API を提供しています。この API は、2016 年の第 3 四半期に予定している最終版 SDK のリリースまで正式版ではありません。そのため、プログラム開始後の数週間は特に軽微な API 変更が発生することが予想されます。変更点の概要については、Android N Developer Preview がアップデートされるたびにお知らせします。 + + + + + +

+ +

+ 注: プレビュー API は変更される可能性がありますが、システムの基幹にかかわる機能には変更はありませんので、すぐにテストしていただけます。 + + +

+ +

+ Google Play では N Developer Preview を対象としたアプリの配信を禁止しています。Android N の最終版 SDK がリリースされてからは、正式な Android N の API レベルを対象にして、アルファ版またはベータ版のリリース チャンネルでアプリを Google Play に公開できます。それまでは、Android N を対象とするアプリをテスターに配信する場合は、電子メールで送付するか、自身のサイトから直接ダウンロードしてもらうようにしてください。 + + + + + +

+ +

+ AOSP と OEM 向けの Android N のフルリリースは 2016 年度の第 3 四半期を予定しています。その後は、Android N 向けのアプリを Google Play の公式リリース チャンネルで配信いただけます。 + + +

+ + +

開始するには

+ +

+ 以下の手順で Android N を使用したアプリのテストを開始できます。 +

+ +
    +
  1. API 概要動作の変更点を参照して、新機能や自身のアプリへの影響をご確認ください。特に新しい通知機能とマルチ ウィンドウ機能について把握しておくことをお勧めします。 + + + +
  2. +
  3. Preview SDK のセットアップ手順に従い、ご利用の環境をセットアップしてテスト用デバイスの設定をします。 +
  4. +
  5. 書き込み手順に従い、最新の Android N のシステム イメージを 自身のデバイスに書き込みます。 +
  6. +
  7. API リファレンスAndroid N のサンプルを参考に API の新機能について理解を深め、それらを自身のアプリに利用する方法をご検討ください。 + + +
  8. Android N デベロッパー コミュニティに参加すると、最新のニュースを入手でき、新しいプラットフォームを利用している開発者同士で交流ができます。 + +
  9. +
+ +

+ Android N Developer Preview プログラムへの参加をお待ちしています。 +

diff --git a/docs/html-intl/intl/ja/preview/samples.jd b/docs/html-intl/intl/ja/preview/samples.jd new file mode 100644 index 000000000000..30c391e81ce8 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/samples.jd @@ -0,0 +1,85 @@ +page.title=サンプル +page.tags="preview", "samples", "android" +page.image=images/cards/card-n-samples_2x.png +@jd:body + +

+ 以下は Android N のサンプルコードです。サンプルを Android Studio でダウンロードするには、[File] > [Import Samples] メニュー オプションを選択します。 + + +

+ +

+ 注: 以下のダウンロード可能なプロジェクトは、Gradle と Android Studio でご利用いただくために提供しています。 + +

+ + +

マルチ ウィンドウ Playground

+ +

+ このサンプルでは、自身のアプリでマルチ ウィンドウのユーザー インターフェースを使用する方法をご確認いただけます。 + +

+

+ GitHub でサンプルを入手 + +

+ +
+

アクティブ通知

+ +

+ NotificationCompat を用いて通知を送信するシンプルなサービスをご確認いただる既存のサンプルです。ユーザからの未読メッセージは、それぞれ別の通知として送信されます。 + + +

+

+ このサンプルは、Android N 向けの新たな通知機能を利用できるようにアップデートされています。 + +

+

+ GitHub でサンプルを入手 + +

+ +
+

メッセージ サービス

+ +

+ 1 つのアプリで表示している通知の件数を NotificationManager で取得する方法をご確認いただける既存のサンプルです。 + + +

+

+ このサンプルは、Android N 向けの新たな通知機能を利用できるようにアップデートされています。 + +

+

+ GitHub でサンプルを入手 + +

+ +
+

ダイレクト ブート

+ +

+ このサンプルでは、デバイスの暗号化ストレージ内のデータにアクセスしたり、データを保存したりする方法をご確認いただけます。この機能はデバイスが起動している間は常に有効です。 + +

+

+ GitHub でサンプルを入手 + +

+ +
+

特定のディレクトリへのアクセス

+ +

+ このサンプルでは、より少ないパーミッションで、特定のディレクトリに対するデータの読み出しや書き込みを行う方法をご確認いただけます。 + +

+

+ GitHub でサンプルを入手 + +

\ No newline at end of file diff --git a/docs/html-intl/intl/ja/preview/setup-sdk.jd b/docs/html-intl/intl/ja/preview/setup-sdk.jd new file mode 100644 index 000000000000..8f3cd062b771 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/setup-sdk.jd @@ -0,0 +1,226 @@ +page.title=プレビューのセットアップ +meta.keywords="プレビュー"、"android" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-sdk_2x.png + +@jd:body + + + + +

このページで説明しているように、Android N Preview 向けのアプリを開発するには、デベロッパー環境をアップデートする必要があります。 +

+ +

Android N システム イメージでアプリの互換性を簡単にテストするには、Android N デバイスでのテストに関するガイドに従ってください。 +

+ + + + +

Android Studio 2.1(プレビュー)を入手する

+ +

Android N プラットフォームには、Jack と呼ばれる新しいコンパイラーが必要な Java 8 機能のサポートが追加されています。現在、最新バージョンの Jack は、Android Studio 2.1 のみでサポートされています。したがって、Java 8 機能を使用する場合は、Android Studio 2.1 を使用してアプリをビルドする必要があります。Java 8 機能を使用しない場合は Jack コンパイラーを使用する必要はありません。ただし、以下に説明するように、Android N プラットフォームを対象にコンパイルを行うには、JDK 8 にアップデートする必要があります。 + + + + + + +

+ + + +

現在、Android Studio 2.1 は、先行リリース チャンネルでプレビューとして入手できます。Android Studio を既に入手していて、先行チャンネル版にアップデートしない場合は、Android Studio 2.1 を個別のインストールとしてダウンロードして、Android N での開発に使用することにより、Android Studio のプライマリ環境に影響を及ぼさないようにすることができます。 + + + + +

+ +

Android Studio 2.1 を個別のインストールとしてダウンロードするには、次のステップを実行します(既存のインストールを Android Studio 2.1 にアップデートする場合は、ステップ 4 に進んでください)。 + +

+ +
    +
  1. Android Studio の既存のインストールの名前を編集し、バージョン番号を末尾に追加します。このようにすると、新しいバージョンをインストールしたときに、新しいバージョンが既存のバージョンを上書きしません。 + +
  2. +
  3. 先行チャンネルのダウンロード ページから、お使いのオペレーティング システムに対応した ZIP ファイルをダウンロードします。 + +
  4. +
  5. パッケージを解凍し、アプリケーションを配置するシステム上の適切な場所に Android Studio 2.1 の内容を移動してから起動します。 +
  6. +
  7. 設定ダイアログを開きます(Windows、Linux では [File] > [Settings]、Mac では [Android Studio] > [Preferences])。左側のパネルで、[Appearance & Behavior] > [System Settings] > [Updates] を選択します。 + + + + +
  8. +
  9. [Updates] パネルで、[Automatically check updates for] チェック ボックスを選択し、ドロップダウン リストから [Canary Channel] を選択します。 + + +
  10. +
+ +

次のステップのために、この設定ウィンドウを開いたままにします。

+ + +

N Preview SDK を入手する

+ +

Android N API を使用して開発を開始するには、次のステップに従って、Android Studio に Android N Preview SDK をインストールする必要があります。 +

+ +
    +
  1. 開いたままにしている [Updates] パネル(上記のステップ 4)で、[Automatically check updates for Android SDK] チェック ボックスを選択し、ドロップダウン リストから [Preview Channel] を選択します。 + + + +
  2. +
  3. [Check Now] をクリックします。
  4. + +
  5. 左側のパネルで、[Appearance & Behavior] > [System Settings] > [Android SDK] を選択します。 + + +
  6. [SDK Platforms] タブをクリックして、[Android N Preview] チェック ボックスを選択します。 +
  7. + +
  8. [SDK Tools] タブをクリックして [Android SDK Build Tools][Android SDK Platform-Tools][Android SDK Tools] のチェック ボックスを選択します。 + + + +
  9. + +
  10. [OK] をクリックして、インストールするパッケージの使用許諾に同意します。 + +
  11. +
+ +

N Preview のリファレンス ドキュメントを入手する

+ +

+ Android N API に関する詳細は、N Preview のリファレンス ドキュメントに記載されています。このドキュメントは、次の表からダウンロードできます。このパッケージには、簡略化されたオフライン バージョンの Android デベロッパー ウェブサイト、Android N API のアップデートされた API リファレンス、API の比較レポートが含まれています。 + + + + +

+ + + + + + + + + + +
ドキュメントチェックサム
+ n-preview-1-docs.zip + MD5: 4ab33ccbe698f46f125cc5b807cf9c2f
+ SHA-1: 6a3880b3ccd19614daae5a4d0698ea6ae11c20a5 +
+ + + +

Java 8 JDK および JRE を入手する

+ +

Android N プラットフォームを対象にしたアプリをコンパイルするには、Java 8 Developer Kit(JDK 8)を使用する必要があります。また、Android Studio 2.1 でいくつかのツールを使用するには、Java 8 Runtime Environment(JRE 8)をインストールする必要があります。したがって、JDK 8 と JRE 8 の最新バージョンを持っていない場合は、すぐに JDK 8 と JRE 8 をダウンロードしてください。 + + + +

+ +

その後、次のステップに従って Android Studio で JDK のバージョンを設定します。

+ +
    +
  1. Android Studio で Android プロジェクトを開いてから、[File] > [Project Structure] を選択して、[Project Structure] ダイアログを開きます(または、[File] > [Other Settings] > [Default Project Structure] を選択すると、すべてのプロジェクトのデフォルトを設定できます)。 + + + + +
  2. +
  3. ダイアログの左側のパネルで、[SDK Location] をクリックします。 +
  4. +
  5. [JDK Location] フィールドに Java 8 JDK の場所を入力し(ファイルを参照するには、右側のボタンをクリックします)、[OK] をクリックします。 + + +
  6. +
+ + + + +

プロジェクトをアップデートまたは作成する

+ +

+ Android N API を使用するには、プロジェクトが適切に構成されている必要があります。 +

+ +

Java 8 機能の使用を計画している場合は、Java 8 機能を読んで、サポートされる Java 8 機能に関する情報と、プロジェクトで Jack コンパイラーを構成する方法を確認してください。 + + +

+ + +

既存のプロジェクトをアップデートする

+ +

モジュールの build.gradle ファイルを開き、次のように値をアップデートします。 + + +

+ +
+android {
+  compileSdkVersion 'android-N'
+  buildToolsVersion '24.0.0-rc1'
+  ...
+
+  defaultConfig {
+     minSdkVersion 'N'
+     targetSdkVersion 'N'
+     ...
+  }
+  ...
+}
+ + +

新しいプロジェクトを作成する

+ + +

Android N Preview SDK を使って、開発のために新しいプロジェクトを作成するには、次のステップを実行します。

+ +
    +
  1. [File] > [New Project] をクリックし、対象とする Android 端末のページに到達するまでのステップを実行します。 + +
  2. +
  3. このページで、[Phone and Tablet] オプションを選択します。
  4. +
  5. [Phone and Tablet] オプションの下にある [Minimum SDK] オプション リストで、[N: Android API 23, N Preview (Preview)] を選択します。 + +
  6. +
+ + +

次のステップ

+ + + diff --git a/docs/html-intl/intl/ko/preview/api-overview.jd b/docs/html-intl/intl/ko/preview/api-overview.jd new file mode 100644 index 000000000000..0e1a385740b9 --- /dev/null +++ b/docs/html-intl/intl/ko/preview/api-overview.jd @@ -0,0 +1,676 @@ +page.title=개발자용 Android N +meta.tags="프리뷰", "androidn" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-apis_2x.png +@jd:body + + + + + + + + +

Android N은 아직 한창 개발 중이지만, N Developer Preview를 +통해 지금 Android N을 일부 체험해 볼 수 있습니다. 아래 섹션에서는 +개발자를 위한 몇 가지 새로운 기능을 중점적으로 다룹니다.

+ +

+ 플랫폼 변경사항이 앱에 영향을 미칠 수도 있는 부분에 +대해 알아보려면 동작 변경사항을 살펴보고, +주요 기능에 대해 자세히 알아보려면 개발자 가이드를 참조하고, 새로운 API에 대한 자세한 +내용은 API 참조를 다운로드하세요. +

+ +

다중 창 지원

+ + +

Android N에서 저희는 요청이 많은 새로운 멀티태스킹 +기능인 다중 창 지원을 플랫폼에 도입하고 있습니다.

+ +

이제 사용자가 화면에서 두 개의 앱을 동시에 열 수 있습니다.

+
    +
  • Android N이 실행되는 +전화와 태블릿에서 사용자가 화면 분할 모드에서 두 개의 앱을 +나란히 또는 상하로 실행할 수 있습니다. 또한 앱 사이의 디바이더를 끌어서 앱의 크기를 +조정할 수 있습니다.
  • + +
  • Android TV 기기에서, 앱이 화면 속 화면 +모드로 배치될 수 있으므로, 사용자가 검색을 수행하거나 다른 +앱과 상호작용하는 중에도 앱이 계속해서 콘텐츠를 표시할 수 있습니다. 자세한 내용은 아래를 참조하세요.
  • +
+ +
+ +

+ 그림 1. 화면 분할 모드에서 실행되는 앱. +

+
+ +

특히 태블릿이나 다른 대형 화면 기기에서 다중 창 +지원을 통해 새로운 방식으로 사용자를 참여시킬 수 있습니다. 또한 +앱에서 끌어서 놓기 기능을 활성화하여 사용자가 편리하게 앱에 콘텐츠를 끌어다 놓거나 앱에서 콘텐츠를 끌어와서 놓을 수 있으므로, +사용자 경험이 크게 개선됩니다.

+ +

다중 창 지원을 앱에 추가하고 다중 창이 표시되는 방식을 +구성하는 것은 매우 간단합니다. 예를 들어, 자신의 액티비티에 대해 +최소 허용 크기를 지정할 수 있으며 이 경우 사용자는 이 크기보다 +작은 액티비티의 크기를 조정할 수 없습니다. 또한 앱에 +대해 다중 창 표시를 비활성화할 수도 있으며 이 경우 시스템은 앱을 전체 화면 모드에서만 표시합니다.

+ +

+ 자세한 내용은 다중 창 지원 +개발자 문서를 참조하세요. +

+ +

알림 향상

+ +

Android N에서 저희는 알림을 더 쉽고 빠르게 사용할 수 +있도록 재설계했습니다. 몇 가지 변경사항은 다음과 같습니다.

+ +
    +
  • + 템플릿 업데이트: 영웅 이미지와 아바타를 새롭게 +강조하기 위해 알림 템플릿을 업데이트하는 +중입니다. 개발자가 최소한의 코드 조정만으로 새로운 템플릿을 활용할 수가 있습니다. +
  • + +
  • + 묶음 알림: 시스템이 메시지를 서로 +그룹화하고(예: 메시지 주제별로 그룹화) 이 그룹을 표시할 수 있습니다. +사용자는 그룹에 대해 닫기 또는 아카이브 등의 작업을 적절히 수행할 수 +있습니다. Android Wear용 알림을 구현한 적이 있다면 이미 이 모델에 친숙할 +것입니다. +
  • + +
  • + 직접 회신: 실시간 통신 앱의 경우, Android 시스템은 +인라인 회신을 지원하므로, 사용자가 알림 인터페이스 +내에서 신속하게 SMS 또는 문자 메시지에 응답할 수 있습니다. +
  • + +
  • + 사용자 지정 뷰: 두 개의 새로운 API를 통해 사용자 +지정 뷰를 알림에 사용할 때 시스템 장식(예: 알림 헤더 및 작업)을 +활용할 수 있습니다. +
  • +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +

+ 그림 2. 묶음 알림 및 직접 회신. +

+ +

새로운 기능을 구현하는 방법에 대해 알아보려면, +알림 +가이드를 참조하세요.

+ + + +

프로필 가이드 방식의 JIT/AOT 컴파일

+ +

Android N에서 코드 프로파일링을 포함한 +JIT(Just in Time) 컴파일러를 ART에 추가했으며, 실행 시에 Android 앱의 +성능이 계속해서 향상됩니다. JIT 컴파일러는 ART의 현재 +AOT(Ahead of Time) 컴파일러를 보완하고 런타임 성능을 개선하며, +저장 공간을 절약하고, 앱 업데이트 및 시스템 업데이트 속도를 빠르게 해줍니다.

+ +

프로필 가이드 방식의 컴파일을 통해 ART는 실제 사용량과 기기의 +조건에 따라 각 앱의 AOT/JIT 컴파일을 관리할 수 있습니다. 예를 들어, +ART는 최적의 성능을 위해 각 앱의 핫 메서드에 대한 프로필을 +유지관리하고 이들 메서드를 프리컴파일하고 +캐싱할 수 있습니다. 이 경우 앱의 다른 부분들은 실제로 사용될 때까지 컴파일하지 않고 남겨둡니다.

+ +

프로필 가이드 방식의 +컴파일은 앱의 주요 부분들에서 성능을 개선할 +뿐만 아니라 관련 바이너리를 비롯한 앱 전체의 RAM 공간을 줄이는 데 도움이 됩니다. 이 기능은 저용량 메모리 기기에 특히 중요합니다.

+ +

ART는 기기 배터리에 미치는 영향이 최소화되는 방식으로 +프로필 가이드 방식의 컴파일을 관리합니다. ART는 기기가 유휴 상태이고 +충전 중일 때만 프리컴파일을 수행하며, 해당 작업을 미리 수행하여 시간과 배터리를 절약합니다.

+ +

앱 설치를 위한 빠른 경로

+ +

ART의 JIT 컴파일러가 가진 가장 눈에 띄는 이점 중 하나는 +앱 설치 및 시스템 업데이트 속도가 빠르다는 것입니다. +Android 6.0에서 최적화하고 설치하는 데 몇 분이 걸리는 대용량 앱조차도 +이제는 몇 초만에 설치가 가능합니다. 또한 최적화 단계가 없기 때문에 시스템 업데이트도 더 빠릅니다.

+ +

이동 중에 Doze...

+ +

Android 6.0에서는 기기가 테이블 위나 서랍 안에 +있는 등 유휴 상태일 때 앱이 CPU와 네트워크를 사용하는 작업을 지연시키는 방식으로 배터리를 +절약하는 시스템 모드인 Doze를 도입했습니다.

+ +

이제 Android N에서 Doze는 한걸음 더 나아가서 이동 중에도 +배터리를 절약합니다. 화면이 일정 시간 동안 꺼져있고 기기의 플러그가 +뽑혀있으면 Doze는 친숙한 일부 CPU 및 네트워크 제한을 앱에 적용합니다. +즉, 사용자가 기기를 주머니에 휴대하고 다닐 때도 배터리를 +절약할 수 있습니다.

+ + + +

+ 그림 3. 이제 Doze는 기기가 정지 상태가 아니더라도 +배터리 수명을 개선할 수 있도록 제한을 적용합니다. +

+ + +

기기의 배터리가 켜져 있는 동안 화면이 꺼지면 잠시 후에 +Doze는 네트워크 액세스를 제한하고 작업과 동기화를 지연시킵니다. +잠시 동안의 유지관리 기간 중에 +애플리케이션의 네트워크 액세스가 허용되고 지연된 작업/동기화가 실행됩니다. +화면을 켜거나 기기의 플러그를 꽂으면 기기가 Doze 상태에서 벗어납니다.

+ +

기기가 다시 일정 시간 동안 배터리가 켜져 있고 화면이 꺼진 + 정지 상태가 되면, Doze는 {@link +android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} 알람 및 +GPS/Wi-Fi 스캔에 대해 전체 CPU 및 네트워크 제한을 적용합니다.

+ +

앱을 Doze에 맞게 적용하는 최선의 방법은 기기가 움직이든 +움직이지 않든 간에 동일합니다. 따라서 Doze를 효율적으로 처리하도록 +앱을 이미 업데이트했다면 모든 준비가 완료된 것입니다. 아직 +업데이트하지 않았다면 지금 앱을 Doze에 맞게 적용해 보세요.

+ +

Project Svelte: 백그라운드 최적화

+ +

Project Svelte는 에코시스템의 전체 Android 기기 범위에서 시스템 및 앱에 +의해 사용되는 RAM 크기를 최소화하기 위한 지속적인 노력입니다. Android N에서 Project +Svelte는 앱이 백그라운드에서 실행되는 방식을 최적화하는 데 초점을 맞추고 있습니다.

+ +

백그라운드 처리는 대부분의 앱에서 필수적인 부분입니다. +백그라운드 처리가 올바로 수행된다면 신속하고, 빠르고, 상황에 맞는 멋진 사용자 경험을 제공하겠지만, 백그라운드 +처리가 올바로 수행되지 않는다면 불필요하게 RAM과 배터리를 소모하고 +다른 앱의 시스템 성능에 영향을 미칠 것입니다.

+ +

Android 5.0 이후로, 사용자가 선호하는 백그라운드 작업 +수행 방식은 {@link android.app.job.JobScheduler}이었습니다. 메모리, +전원 및 연결 조건에 따라 시스템을 최적화하면서도 앱으로 +작업을 예약할 수 있습니다. JobScheduler는 제어 기능과 간편성을 함께 +제공하므로, 저희는 모든 앱에서 이를 사용하기를 원합니다.

+ +

+ 또 한가지의 좋은 옵션은 +GCMNetworkManager입니다. 이는 Google Play +서비스의 일부분이며, 기존 Android 버전에서 호환성이 +있는 유사한 작업 예약 기능을 제공합니다. +

+ +

저희는 더 많은 사용 사례를 충족시키기 위해 JobScheduler 및 +GCMNetworkManager를 계속해서 +확장하고 있습니다. 예를 들어, 이제 Android N에서는 콘텐츠 제공자의 변화에 따라 +백그라운드 작업을 예약할 수 있습니다. 이와 동시에 저희는 +특히 저용량 메모리 기기에서 시스템 성능을 저하시킬 +수 있는 일부 오래된 패턴들을 없애기 시작했습니다.

+ +

Android N에서 저희는 자주 사용되는 세 가지 암시적 브로드캐스트인 +{@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link + android.hardware.Camera#ACTION_NEW_PICTURE} 및 {@link + android.hardware.Camera#ACTION_NEW_VIDEO}를 +제거하는 중입니다. 왜냐하면 이들은 여러 앱의 백그라운드 프로세스를 동시에 깨울 수 있으며 메모리와 배터리를 소모할 수 있기 +때문입니다. 자신의 앱이 이러한 브로드캐스트를 수신한다면, N Developer Preview를 +활용하여 JobScheduler 및 관련 API로 마이그레이션하세요.

+ +

+ 자세한 내용은 백그라운드 +최적화 문서를 참조하세요. +

+ + +

Data Saver

+ +
+ + +

+ 그림 4. 설정에서의 Data Saver. +

+
+ +

모바일 기기의 수명에 있어서, 셀룰러 데이터 플랜의 비용은 +일반적으로 기기 자체의 비용보다 더 많습니다. +많은 사용자들에게 셀룰러 데이터는 아껴야 하는 값비싼 리소스입니다.

+ +

Android N에서는 새로운 시스템 서비스인 Data Saver +모드를 소개합니다. 이 모드는 로밍 시나 결제 주기가 끝날 무렵, +또는 소액 선불 데이터 팩 사용 시에 앱이 소모하는 셀룰러 +데이터 사용량을 줄여줍니다. Data Saver를 통해 사용자는 앱이 +셀룰러 데이터를 사용하는 방식을 제어할 수 있으며, Data Saver가 켜져 있으면 개발자가 더 효율적인 서비스를 제공할 수 있습니다.

+ +

사용자가 Settings에서 Data Saver를 활성화하고 +해당 기기가 데이터 통신 네트워크에 있는 경우, 시스템은 백그라운드 +데이터 사용을 차단하고, 가능하면 스트리밍의 +비트 속도를 제한하거나, 화질을 줄이거나, 낙관적 사전캐싱을 +지연시키는 등의 방식으로 포그라운드에서 +데이터를 더 적게 사용하도록 앱에게 신호를 보냅니다 . Data Saver가 켜진 경우에도 백그라운드 데이터 통신 연결을 허용하려면, 사용자가 특정 앱을 허용 목록에 추가할 수 있습니다.

+ +

Android N은 {@link android.net.ConnectivityManager}를 확장하여 사용자의 +Data Saver 기본 설정을 검색하고 기본 +설정 변경을 모니터링하는 방법을 앱에게 제공합니다. +모든 앱은 사용자가 Data Saver를 활성화했는지 여부를 확인해야 하며 +포그라운드 및 백그라운드 데이터 사용을 제한하도록 노력해야 합니다.

+ + +

빠른 설정 타일 API

+ + +
+ + +

+ 그림 5. 알림 창의 빠른 설정 타일. +

+ + +

빠른 설정은 알림 창에서 키 설정 및 작업을 직접 노출시키기 +위해 널리 사용되는 간단한 방법입니다. 더욱 유용하고 편리한 설정을 +위해 저희는 Android N에서 빠른 설정의 범위를 더욱 확장했습니다.

+ +

저희는 빠른 설정 타일에 필요한 공간을 더 추가했으며, +사용자가 페이지가 지정된 디스플레이 영역에서 왼쪽 또는 오른쪽으로 스와이프하여 +이들 타일에 액세스할 수 있습니다. 또한 빠른 설정 타일이 +어떻게 나타나는지와 어디에 표시되는지를 사용자가 제어할 수 있으며 사용자가 드래그 앤 드롭만으로 타일을 추가하거나 이동할 수 있습니다.

+ +

또한 Android N은 개발자를 위해 새로운 API도 추가했습니다. +이를 통해 자신만의 빠른 설정 타일을 정의할 수 있으며, 사용자가 앱에서 키 컨트롤 및 작업에 쉽게 액세스할 수 있습니다.

+ +

+ 빠른 설정 타일은 긴급하게 필요하거나 자주 사용되는 컨트롤 또는 +작업을 위해 예약되어 있으며, 앱을 시작하기 위한 바로가기로 +사용되어서는 안됩니다. +

+ +

+ 타일을 정의한 후에는 사용자에게 표시할 수 있으며, 사용자가 +드래그 앤 드롭만으로 이 타일을 빠른 설정에 추가할 수 있습니다. +

+ +

+ 앱 타일 만들기에 대한 자세한 내용은, +다운로드 가능한 API 참조에서 android.service.quicksettings.Tile을 참조하세요. +

+ + + +

번호 차단

+ +

이제 Android N에서는 플랫폼에서 번호 차단을 지원하며, +서비스 제공자가 차단된 번호 목록을 유지관리할 수 있도록 프레임워크 +API를 제공합니다. 기본 SMS 앱, 기본 전화 앱 및 제공자 앱은 +차단된 번호 목록에 쓰기와 읽기가 가능합니다. 이 목록은 다른 앱에서는 액세스할 수 없습니다.

+ +

Android는 번호 차단을 플랫폼의 표준 기능으로 만들어 +광범위한 기기에서 번호를 차단하기 위한 일관된 방식을 앱에 +제공합니다. 앱에서 활용할 수 있는 기타 이점은 다음과 같습니다.

+ +
    +
  • 통화에서 차단된 번호가 문자에서도 차단됩니다. +
  • 차단된 번호는 재설정 시에도 백업 및 복원 기능을 통해 +기기에서 유지될 수 있습니다. +
  • 여러 앱이 동일한 차단된 번호 목록을 사용할 수 있습니다. +
+ +

또한 Android를 통한 통신사 앱 통합은 통신사들이 기기의 +차단된 번호 목록을 읽고 서비스측 차단을 수행할 수 있음을 의미하며, +이를 통해 사용자들은 원치 않는 통화와 문자가 +특정 매체(예: VOIP 엔드포인트 또는 착신 전화)를 통해 자신들에게 도달하는 것을 차단할 수 있습니다.

+ +

+ 자세한 내용은 +다운로드 가능한 API +참조에서 android.provider.BlockedNumberContract를 참조하세요. +

+ +

통화 스크리닝

+ +

+ Android N에서는 기본 전화 앱이 수신 통화를 스크리닝하도록 +허용합니다. 이를 위해 전화 앱에는 새로운 CallScreeningService가 구현되며 이를 통해 전화 앱은 +수신 통화의 {@link android.telecom.Call.Details Call.Details}에 따라 +다음과 같은 다양한 작업을 수행할 수 있습니다. +

+ +
    +
  • 수신 통화 거절 +
  • 통화를 통화 기록에 허용하지 않음 +
  • 통화 알림을 사용자에게 표시하지 않음 +
+ +

+ 자세한 내용은 +다운로드 가능한 API +참조에서 android.telecom.CallScreeningService를 참조하세요. +

+ + +

다중 로케일 지원, 더 많은 언어

+ + +

두 가지 언어로 된 사용 사례를 지원하기 위해 이제 +Android N에서는 사용자가 설정에서 다중 로케일을 선택할 수 +있습니다. 앱은 새로운 API를 사용하여 사용자의 로케일을 가져온 +다음, 검색 결과를 여러 언어로 표시하거나 사용자가 이미 알고있는 +언어로는 웹페이지를 번역하지 않는 등 다중 로케일 사용자를 위한 더욱 정교한 사용자 경험을 +제공합니다.

+ +

다중 로케일 지원과 함께 Android N에서는 또한 사용자가 +사용 가능한 언어의 범위를 더욱 넓혔습니다. +영어, 스페인어, 프랑스어, 아랍어 등 자주 사용되는 언어에 대해 각각 25가지 +이상의 변형을 제공하며, 또한 100가지 이상의 새로운 언어에 대해 부분적인 지원도 추가했습니다.

+ +

앱은 사용자가 설정한 로케일 목록을 가져오기 위해 +LocaleList.GetDefault()를 호출할 수 있습니다. 더 많은 +수의 로케일을 지원하기 위해 Android N에서는 리소스 확인 방식이 바뀌고 있습니다. 새로운 리소스 확인 로직에서 앱이 예상대로 작동하는지 테스트하고 확인하세요.

+ +

새로운 리소스 확인 동작과 따라야 하는 모범 사례에 대해 +알아보려면, 다국어 지원을 참조하세요.

+ +

Android의 ICU4J API

+ +

+ 이제 Android N에서는 android.icu 패키지 아래 Android 프레임워크에 있는 ICU4J API의 +일부를 제공합니다. 마이그레이션이 +용이하며, 대개는 com.java.icu 네임스페이스를 +android.icu로 변경하는 것이 간단합니다. 앱에서 ICU4J 번들을 +이미 사용 중인 경우, Android 프레임워크에서 제공되는 android.icu +API로 전환하면 APK 크기를 상당히 절약할 수 있습니다. +

+ +

+ Android ICU4J API에 대해 자세히 알아보려면, ICU4J 지원을 참조하세요. +

+ + + +

OpenGL™ ES 3.2 API

+ +

Android N에서는 OpenGL ES 3.2용 프레임워크 인터페이스와 플랫폼 지원을 추가했습니다.

+ +
    +
  • EXT_texture_sRGB_decode를 제외한 Android 확장 프로그램 팩(AEP)의 모든 확장 프로그램. +
  • HDR 및 지연 셰이딩을 위한 부동 소수점 프레임 버퍼. +
  • 일괄처리 및 스트리밍 성능을 향상시키는 BaseVertex 그리기 호출. +
  • WebGL 오버헤드를 줄여주는 강력한 버퍼 액세스 제어. +
+ +

Android N의 OpenGL ES 3.2용 프레임워크 API에는 +GLES32 클래스가 제공됩니다. OpenGL ES 3.2를 사용 중인 +경우, 반드시 <uses-feature> 태그와 android:glEsVersion +특성을 사용하여 요구사항을 매니페스트 파일에 선언하세요.

+ +

런타임에 기기의 지원 OpenGL ES 버전을 확인하는 +방법을 비롯하여 OpenGL ES 사용에 대한 자세한 내용은, OpenGL ES API 가이드를 참조하세요.

+ + +

Android TV 녹화

+ +

Android N에서는 새로운 녹화 API를 통해 Android TV 입력 +서비스로부터 콘텐츠를 녹화하고 재생하는 기능을 +추가했습니다. 기존의 타임 시프트 API를 기반으로 구축된 TV 입력 +서비스는 녹화 가능한 채널 데이터 및 녹화된 세션의 저장 방식을 제어할 수 있으며, 녹화된 콘텐츠와의 사용자 상호작용을 관리할 수 있습니다.

+ +

자세한 내용은 Android TV Recording API를 참조하세요.

+ + +

Android for Work

+ +

Android for Work에서는 Android N이 실행되는 기기를 +위해 여러 가지 새로운 기능과 API를 추가했습니다. 몇 가지 특징이 +아래에 나와 있으며, Android N과 관련된 Android for Work 업데이트의 전체 목록에 대해서는 Android for Work 변경사항을 참조하세요.

+ +

작업 프로필 보안 과제

+ +

+ 프로필 소유자는 작업 프로필에서 실행 중인 앱에 대해 +별도의 보안 과제를 지정할 수 있습니다. 작업 과제는 사용자가 작업 +앱을 열려고 시도할 때 나타납니다. 보안 과제를 성공적으로 완료하면 +작업 프로필의 잠금이 해제되고 필요한 경우 암호가 풀립니다. +프로필 소유자의 경우, ACTION_SET_NEW_PASSWORD는 +작업 과제를 설정하라는 메시지를 사용자에게 표시하고, ACTION_SET_NEW_PARENT_PROFILE_PASSWORD는 기기 +잠금을 설정하라는 메시지를 사용자에게 표시합니다. +

+ +

+ 프로필 소유자는 setPasswordQuality(), setPasswordMinimumLength() 및 관련 메서드를 사용하여 +작업 과제에 대해 별개의 암호 정책을 설정할 수 있습니다. 프로필 +소유자는 또한 새로운 getParentProfileInstance()에 의해 +반환되는 DevicePolicyManager 인스턴스를 사용하여 기기 +잠금을 설정할 수도 있습니다. 뿐만 아니라, 프로필 소유자는 +새로운 setOrganizationColor()setOrganizationName() +메서드를 사용하여 +작업 과제에 대해 자격 증명 화면을 +사용자 지정할 수 있습니다. +

+

작업 끄기

+ +

작업 프로필이 있는 기기에서, 사용자가 작업 모드를 +전환할 수 있습니다. 작업 모드가 꺼진 경우, 관리되는 사용자가 +일시적으로 종료되며 이 경우 작업 프로필 앱, 백그라운드 +동기화 및 알림이 비활성화됩니다. 여기에는 프로필 소유자 애플리케이션이 +포함됩니다. 작업 모드가 꺼진 경우, 작업 앱을 시작할 수 없음을 사용자에게 알려주는 상태 아이콘이 표시됩니다. +시작 관리자는 작업 앱과 위젯에 액세스할 수 없음을 나타냅니다.

+ +

항상 켜진 VPN

+ +

기기 소유자와 프로필 소유자는 지정된 VPN을 통해 작업 앱이 +항상 연결되도록 보장할 수 있습니다. 시스템은 기기가 부팅된 +후에 자동으로 VPN을 시작합니다.

+ +

+ 새로운 DevicePolicyManager 메서드는 + setAlwaysOnVpnPackage() 및 + getAlwaysOnVpnPackage()입니다. +

+ +

VPN 서비스는 앱 상호작용 없이 시스템에 의해 직접 바인드될 +수 있으므로, VPN 클라이언트는 '항상 켜진 VPN'에 대해 +새로운 진입점을 처리해야 합니다. 이전과 마찬가지로, 인텐트 필터 +일치 작업 android.net.VpnService에 의해 서비스가 시스템에 나타납니다.

+ +

+ 사용자는 또한 Settings>More>Vpn을 사용하여 기본 사용자에서 + VPNService 메서드를 +구현하는 '항상 켜진 VPN' 클라이언트를 수동으로 설정할 수도 있습니다. +

+ +

접근성 향상

+ +

이제 Android N에서는 새로운 기기 설치 시 Welcome 화면에서 +바로 Vision Settings를 제공합니다. 이렇게 하면 사용자가 자신의 +기기에서 휠씬 더 쉽게 확대 제스처, 글꼴 크기, +디스플레이 크기 및 TalkBack 등과 같은 접근성 기능을 검색하고 구성할 수 있습니다.

+ +

이렇게 눈에 띄는 위치에 접근성 기능을 배치하면, 사용자가 이 +기능을 활성화하여 앱을 사용할 가능성이 더욱 커집니다. 먼저 이들 +설정을 활성화하고 앱을 테스트하도록 하세요. Settings > +Accessibility에서 설정을 활성화할 수 있습니다.

+ +

Android N에서도 마찬가지로, 이제 운동 장애가 있는 사용자가 +접근성 서비스를 통해 스크린을 터치할 수 있습니다. 새로운 API는 얼굴 추적, 시각 추적, +지점 스캐닝 등의 기능으로 서비스를 구축하여 이러한 사용자의 +요구를 충족시킬 수 있습니다.

+ +

자세한 내용은 + 다운로드 가능한 API 참조에서 android.accessibilityservice.GestureDescription을 참조하세요.

+ + +

직접 부팅

+ +

직접 부팅은 기기 시동 시간을 개선해주며, 예상치 못한 재부팅 +후에도 등록된 앱이 제한된 기능을 유지하도록 해줍니다. 예를 들어, +사용자가 취침하는 동안에 암호화된 기기가 재부팅되는 경우, +이제는 등록되어 있는 알람, 메시지 및 수신 통화로 사용자에게 알려줄 +수 있습니다. 즉, 재시작 직후에도 접근성 서비스를 바로 +사용할 수 있습니다.

+ +

직접 부팅은 Android N의 파일 기반 암호화를 활용하여 시스템 +및 앱 데이터에 대해 정밀한 암호화 정책을 활성화합니다. 이 시스템은 +선택된 시스템 데이터와 명시적으로 등록된 앱 +데이터에 대해 기기 암호화 스토어를 사용합니다. 기본적으로, 다른 모든 +시스템 데이터, 사용자 데이터, 앱 및 앱 데이터에는 자격 증명 암호화 스토어가 사용됩니다.

+ +

부팅 시에 시스템은 제한된 모드에서 시작되며, 기기 암호화 +데이터에만 액세스가 가능하고 앱 또는 데이터에는 액세스하지 +못합니다. 이 모드에서 구성 요소를 실행하려는 경우, +매니페스트에 플래그를 설정하여 구성 요소를 등록할 수 있습니다. +재시작 후에는 시스템이 LOCKED_BOOT_COMPLETED 인텐트를 + 브로드캐스트하여 등록된 구성 요소를 활성화합니다. 잠금을 해제하기 전에, 시스템은 등록된 기기 암호화 +앱 데이터가 있는지를 확인합니다. 사용자가 잠금 화면 자격 증명을 확인하여 +암호화를 풀기 전까지는 다른 모든 데이터를 사용할 수 없습니다.

+ +자세한 내용은 직접 부팅을 참조하세요.

+

+ + +

Key Attestation

+ +

하드웨어 기반 키스토어는 Android 기기에서 암호화 키를 +만들고 저장하고 사용하기 위한 훨씬 더 안전한 방법입니다. 이 +키스토어는 Linux 커널, 잠재적 Android 취약점, 루팅된 기기의 +공격으로부터 키를 보호해 줍니다.

+ +

하드웨어 기반 키스토어를 더욱 쉽고 안전하게 사용하도록 +Android N에서는 Key Attestation을 도입합니다. Key Attestation을 사용하여 앱 +및 기기는 RSA 또는 EC 키 쌍이 하드웨어 기반인지 여부를 결정할 수 +있으며, 키 쌍의 속성에는 어떤 것이 있으며 어떠한 제약 조건이 사용 +및 유효성에 적용되는지 결정할 수 있습니다.

+ +

앱 및 기기 서비스는 X.509 증명 인증서를 통해 키 쌍에 대한 +정보를 요청할 수 있으며 이 인증서는 유효한 증명 키로 서명되어야 +합니다. 증명 키는 공장에서 기기의 하드웨어 기반 +키스토어에 주입되는 ECDSA 서명 키입니다. 따라서 올바른 증명서 키로 +서명된 증명 인증서는 키스토어에 있는 키 쌍의 +세부정보와 함께 하드웨어 기반 키스토어가 존재함을 +확인해 줍니다.

+ +

안전한 공식 Android 공장 이미지가 기기에 사용 중인지 +확인하기 위해, Key Attestation은 +기기 부팅 로더가 다음의 정보를 TEE(Trusted Execution Environment)에 +제공하도록 요구합니다.

+ +
    +
  • 기기에 설치된 OS 버전 및 패치 수준
  • +
  • 확인된 부팅 공개 키 및 잠금 상태
  • +
+ +

하드웨어 기반 키스토어 기능에 대한 자세한 +내용은 하드웨어 기반 키스토어 가이드를 참조하세요.

+ +

Key Attestation 이외에도 Android N에서는 또한 지문 등록 +시에 취소되지 않는 지문 바인드 키를 소개합니다.

+ +

네트워크 보안 구성

+ +

Android N에서 앱은 오류가 발생하기 쉬운 기존의 프로그래밍 방식 +API(예: X509TrustManager)를 사용하는 대신 선언적 +네트워크 보안 구성을 사용하여 보안(HTTPS, TLS) 연결의 동작을 코드 +수정 없이 안전하게 사용자 지정할 수 있습니다.

+ +

지원되는 기능:

+
    +
  • 트러스트 앵커 사용자 지정. 보안 연결을 위해 어떤 +인증 기관(CA)이 신뢰받는지를 애플리케이션이 사용자 지정할 수 +있습니다(예: 자가 서명된 특정 인증서나 제한된 공개 CA 세트 신뢰). +
  • +
  • 디버그 전용 재정의. 설치된 베이스에 위험을 더하지 +않고도, 애플리케이션 개발자가 애플리케이션의 보안 연결을 안전하게 +디버그할 수 있습니다. +
  • +
  • 일반 텍스트 트래픽 옵트아웃. 일반 텍스트 트래픽을 실수로 사용하지 +않도록 애플리케이션이 스스로를 보호합니다.
  • +
  • 인증서 고정. 보안 연결을 위해 어떤 서버 키가 +신뢰받는지를 애플리케이션이 제한할 수 있는 고급 기능.
  • +
+ +

자세한 내용은 네트워크 보안 구성을 +참조하세요.

+ +

신뢰받는 기본 인증 기관

+ +

기본적으로, Android N을 대상으로 하는 앱은 시스템이 +제공한 인증서만을 신뢰하며 사용자가 추가한 인증 기관(CA)은 +더 이상 신뢰하지 않습니다. Android N을 대상으로 하는 앱이 사용자가 +추가한 CA를 신뢰하려는 경우에는 네트워크 보안 구성을 사용하여 어떤 +사용자 CA를 신뢰할지 지정해야 합니다.

+ +

APK 서명 구성표 v2

+ +

이제 PackageManager 클래스는 APK 서명 구성표 v2를 +사용하는 앱 검사를 지원합니다. APK 서명 구성표 v2는 전체 파일의 +서명 구성표이며, APK 파일의 불법적인 변경을 감지하여 +검사 속도를 상당히 개선하고 무결성을 보장해 줍니다.

+ +

이전 버전과의 호환성을 유지하기 위해, APK는 v2 서명 +구성표로 서명되기 전에 v1 서명 구성표(JAR 서명 구성표)로 +서명되어야 합니다. v2 서명 구성표의 경우, v2 구성표로 서명한 후에 추가적인 +인증서로 APK를 서명하는 경우 검사가 실패합니다.

+ +

APK 서명 구성표 v2 지원은 나중에 N Developer Preview에서 +사용할 수 있습니다.

+ +

범위가 지정된 디렉터리 액세스

+ +

Android N에서 앱은 새로운 API를 사용하여 특정한 +외부 저장소 디렉터리(SD 카드와 같은 이동식 미디어에 있는 디렉터리 포함)에 +대한 액세스를 요청할 수 있습니다. 새로운 API는 애플리케이션이 +표준 외부 저장소 디렉터리(예: Pictures 디렉터리)에 +액세스하는 방식을 훨씬 단순화합니다. +사진 앱과 같은 앱은 모든 저장소 디렉터리에 대해 액세스 권한을 부여하는 READ_EXTERNAL_STORAGE를 사용하거나 사용자가 +디렉터리를 탐색하도록 하는 SAF(Storage Access Framework)를 +사용하는 대신 이들 API를 사용할 수 있습니다.

+ +

또한 새로운 API는 사용자가 앱에 외부 저장소 액세스 권한을 +부여하는 단계를 단순화합니다. 새로운 API를 사용하는 경우,시스템이 +어떤 디렉터리에 대한 액세스 권한을 애플리케이션이 +요청하는지를 명확하게 설명하기 위해 단순 권한 UI를 사용합니다.

+ +

자세한 내용은 +범위가 지정된 +디렉터리 액세스 개발자 문서를 참조하세요.

+ + + + + + diff --git a/docs/html-intl/intl/ko/preview/behavior-changes.jd b/docs/html-intl/intl/ko/preview/behavior-changes.jd new file mode 100644 index 000000000000..56dca324392b --- /dev/null +++ b/docs/html-intl/intl/ko/preview/behavior-changes.jd @@ -0,0 +1,480 @@ +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에는 기기의 배터리 수명, RAM 사용량 및 앱 성능을 +개선하기 위한 시스템 동작 변경이 포함됩니다. 이러한 변경은 시스템 리소스의 +가용성과 앱에 대한 시스템 알림에 영향을 미칠 수 있습니다. +이러한 변경을 검토하고 이 변경에 맞게 앱을 조정하는 방법을 +평가해야 합니다. +

+ +

Doze

+ +

+ Android 6.0(API 레벨 23)에서 소개된 Doze 기능은 사용자가 기기의 +플러그를 뽑고 정지 상태에서 화면이 꺼져있을 때 CPU 및 +네트워크 액티비티를 지연시켜서 배터리 수명을 개선해 줍니다. +Android N에서는 기기의 플러그를 뽑고 화면이 꺼져있는 동안 +CPU 및 네트워크 제한의 일부를 적용하여 Doze의 기능을 더욱 +향상시켜 주지만 반드시 정지 상태일 필요는 없습니다(예: 핸드셋을 사용자의 주머니에 넣고 다니는 경우). +

+ + + +

+ 그림 1. Doze가 첫 번째 레벨의 시스템 액티비티 제한을 +적용하여 배터리 수명을 개선하는 방법에 대한 그림. +

+ +

+ 기기가 배터리 전원에 연결되고 일정 시간 동안 화면이 꺼져있는 경우, +기기가 Doze로 진입하고 첫 번째 하위 세트의 제한을 적용합니다. 기기는 앱 +네트워크 액세스를 차단하고, 작업 및 동기화를 +지연시킵니다. 기기가 Doze로 진입한 후 일정 시간 동안 정지 상태에 +있으면, 시스템은 Doze 제한의 나머지를 {@link android.os.PowerManager.WakeLock}, +{@link android.app.AlarmManager} 알람, GPS 및 Wi-Fi 스캔에 적용합니다. +일부 Doze 제한이 적용되든 모든 Doze 제한이 적용되든 간에 +시스템은 잠시 동안의 유지관리 기간 중에 기기를 깨우며, 이 기간 중에 +애플리케이션의 네트워크 액세스가 허용되고 지연된 작업/동기화가 실행됩니다. +

+ + + +

+ 그림 2. 기기가 일정 시간 동안 정지 상태에 있은 후에 +Doze가 두 번째 레벨의 시스템 액티비티 제한을 적용하는 방법에 대한 그림. +

+ +

+ 참고로, 화면을 활성화하거나 기기의 플러그를 꽂으면 Doze 모드가 +종료되고 이러한 처리 제한이 제거됩니다. Doze 및 앱 대기 +모드 최적화에서 설명한 대로, Android 6.0(API 레벨 23)에서 소개된 +이전 버전의 Doze에 앱을 적용시킬 때는, 이러한 추가적인 동작이 +권장사항과 모범 +사례에 영향을 미치지 않습니다. +하지만 여전히 해당 권장사항을 따라야 합니다. 예를 들어, GCM(Google Cloud Messaging)을 사용하여 메시지를 +송수신하고, 추가적인 Doze 동작을 수용하기 위한 업데이트 계획을 +시작해야 합니다. +

+ + +

Project Svelte: 백그라운드 최적화

+ +

+ 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 N을 대상으로 하는 앱은 해당 이벤트의 알림을 요청하는 매니페스트 항목이 있더라도 {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} 브로드캐스트를 수신하지 않습니다. 포그라운드에서 실행되는 앱은 {@link + android.content.BroadcastReceiver}로 +알림을 요청하면 +여전히 메인 스레드에서 {@code CONNECTIVITY_CHANGE}를 +수신할 수 있습니다. +
  • + +
  • 앱은 {@link + android.hardware.Camera#ACTION_NEW_PICTURE} 또는 {@link + android.hardware.Camera#ACTION_NEW_VIDEO} +브로드캐스트를 송수신할 수 없습니다. 이 최적화는 Android N을 대상으로 하는 앱 뿐만 아니라 모든 앱에 영향을 미칩니다. +
  • +
+ +

+ 차기 Android 릴리스에서는 바인딩이 해제된 백그라운드 서비스 +뿐만 아니라 추가적인 암시적 브로드캐스트가 사용 중단될 수도 있습니다. +이러한 이유로, 백그라운드 서비스에 대한 종속성 뿐만 +아니라 암시적 브로드캐스트의 매니페스트-선언 수신기에 대한 종속성을 피하거나 제거해야 합니다. +

+ +

+ Android 프레임워크는 암시적 브로드캐스트 또는 백그라운드 +서비스의 필요성을 줄이기 위한 여러 가지 해결책을 제공합니다. 예를 들어, {@link + android.app.job.JobScheduler} API는 지정된 조건(예: 비 데이터 통신 네트워크에 연결)이 충족될 경우 네트워크 운영을 예약할 수 있는 강력한 메커니즘을 제공합니다. 심지어는 {@link + android.app.job.JobScheduler}를 +사용하여 콘텐츠 제공자의 +변경에 대응할 수도 있습니다. +

+ +

+ 이러한 동작 변경과 앱을 적용하는 방법에 대한 자세한 내용은 +백그라운드 최적화를 +참조하세요. +

+ + +

권한 변경

+ +

+ Android N에는 사용자 계정 권한 및 외부 저장소에 쓰기 위한 새 권한을 비롯하여 +앱에 영향을 미칠 수도 있는 권한 변경이 포함되어 있습니다. +다음은 프리뷰에서 변경된 권한의 +간추린 내용입니다. +

+ +
    +
  • {@code GET_ACCOUNTS} (사용 중단) +

    + GET_ACCOUNTS 권한은 이제 사용 중단되었습니다. 시스템은 Android +N을 대상으로 하는 앱에서 이 권한을 무시합니다. +

    +
  • + +
+ + + +

접근성 향상

+ +

+ Android N에는 시력이 안좋거나 손상된 사용자를 위해 플랫폼의 +가용성을 개선하려는 변경이 포함됩니다. 이러한 변경은 일반적으로 +앱의 코드 변경을 요구하지는 않지만, 사용자 경험에 +미치는 잠재적인 영향을 평가하기 위해 이러한 기능을 검토하고 +앱으로 테스트해야 합니다. +

+ + +

화면 확대/축소

+ +

+ Android N에서는 사용자가 Display size를 설정할 수 +있습니다. 이 설정은 화면의 모든 요소를 확대하거나 축소하므로, 시력이 +안좋은 사용자의 기기 접근성이 향상됩니다. 최소 화면 너비가 sw320dp를 초과하는 화면은 사용자가 확대/축소할 +수 없으며, 이는 일반적인 중간 사이즈 전화기인 Nexus 4의 +너비입니다. +

+ +
+ +
+ +
+
+ +
+ +
+

+ 그림 3. 오른쪽 화면은 Android N 시스템 이미지가 +실행 중인 기기의 Display size를 늘릴 때의 효과를 보여줍니다. +

+ + +

+ 기기 밀도가 변경되면, 시스템은 다음과 같은 방식으로 실행 중인 +앱에게 알립니다. +

+ +
    +
  • 앱이 API 레벨 23 이하를 대상으로 하는 경우, 시스템은 모든 +백그라운드 프로세스를 자동으로 종료합니다. 즉, 사용자가 이러한 +앱으로부터 전환하여 Settings 화면을 +열고 Display size 설정을 변경하면, 시스템은 저용량 메모리 +상황에서와 동일한 방식으로 앱을 종료합니다. 앱에 포그라운드 프로세스가 +있는 경우, 런타임 변경 처리에 설명된 대로, 시스템은 +마치 기기의 방향이 변경된 +것처럼 구성 변경을 해당 프로세스에게 알립니다. +
  • + +
  • 앱이 Android N을 대상으로 하는 경우, +런타임 변경 처리에 설명된 +대로 모든 프로세스(포그라운드 및 백그라운드)에게 +구성 변경을 알립니다. +
  • +
+ +

+ 앱이 Android 모범 사례를 따르기만 한다면, 대부분의 앱은 이 기능을 +지원하기 위해 어떠한 변경도 할 필요가 없습니다. 확인할 사항: +

+ +
    +
  • 화면 너비가 sw320dp인 기기에서 앱을 테스트하고 적절하게 작동하는지 +확인합니다. +
  • + +
  • 기기 구성이 변경되는 경우, 모든 밀도 종속형 캐시된 +정보(예: 캐시된 비트맵 또는 네트워크에서 로드된 리소스)를 업데이트합니다. +앱이 일시 정지 상태에서 다시 시작하는 경우 구성 +변경을 확인합니다. +

    + 참고: 구성 종속형 데이터를 캐시하는 경우, +해당 데이터의 적절한 화면 크기 또는 픽셀 밀도와 같은 관련 메타데이터를 +포함시키는 것이 좋습니다. 이 메타데이터를 저장해 놓으면, +구성이 변경된 후에 캐시된 데이터의 새로 고침 여부를 +결정할 수 있습니다. +

    +
  • + +
  • 픽셀 단위로 치수를 지정하지 마세요. 이 단위는 화면 밀도에 따라 +변하지 않습니다. 그 대신, 밀도 독립형 픽셀 (dp) 단위로 +치수를 지정하세요. +
  • +
+ +

설정 마법사에서의 비전 설정

+ +

+ Android N에는 Welcome 화면에 Vision Settings가 포함되어 있으며, 여기서 사용자가 새 기기에 다음과 같은 접근성 설정을 구성할 수 있습니다: +Magnification gesture, Font size, +Display size +및 TalkBack. 이 변경은 다른 화면 설정에서 발생하는 버그의 가시성을 높여줍니다. 이 기능이 +미치는 영향을 평가하려면, 이 +설정을 활성화하여 앱을 테스트해야 합니다. 이 설정은 Settings > +Accessibility 아래에 +있습니다. +

+ +

플랫폼 라이브러리에 연결되는 NDK 앱

+ +

+ 비공개 API가 로드되는 것을 막기 위해 Android N에는 네임스페이스 +변경이 포함되어 있습니다. NDK를 사용하는 경우에는, Android 플랫폼에서 +공개 API를 사용해야만 합니다. 차기 Android 공식 릴리스에서 비공개 API를 사용하면 앱 작동이 중단될 수 +있습니다. +

+ +

+ 비공개 API의 사용을 경고하기 위해, Android N 기기에서 실행 +중인 앱은 어떤 앱이 비공개 API를 호출하면 logcat 출력에 오류를 생성합니다. +또한 이러한 상황을 인식할 수 있도록 +이 오류가 메시지로 기기 화면에 표시됩니다. 그러면 앱 코드를 검토하여 +비공개 플랫폼 API의 사용을 제거해야 하며 프리뷰 기기 또는 +에뮬레이터를 사용하여 앱을 철저히 테스트해야 합니다. +

+ +

+ 앱이 플랫폼 라이브러리에 종속된 경우, 개인 API를 동등한 +공개 API로 교체하기 위한 일반적인 수정사항은 NDK 문서를 참조하세요. +또한 자신도 모르는 사이에 플랫폼 라이브러리에 +연결되어 있을 수가 있습니다(특히 앱이 사용하는 라이브러리가 플랫폼의 +일부(예: libpng)이지만 NDK의 일부는 아닌 경우). 이 경우에는 +연결에 필요한 모든 .so 파일이 APK에 포함되어 있는지 확인하세요. +

+ +

+ 주의: 일부 타사 라이브러리는 비공개 API에 +연결될 수도 있습니다. 앱이 이러한 라이브러리를 사용하는 경우 차기 Android + 공식 릴리스에서 실행할 때 앱 작동이 중단될 수 있습니다. +

+ +

+ 앱은 NDK에 포함되지 않은 고유 라이브러리를 사용하거나 +이에 종속되어서는 안 됩니다. 왜냐하면 이 라이브러리는 특정 +Android 릴리스에서 다른 릴리스로 변경되거나 제거될 수 있기 때문입니다. +OpenSSL에서 BoringSSL로의 전환은 이러한 변경의 한 예입니다. 또한 NDK에 포함되지 않은 플랫폼 라이브러리에는 호환성 요구사항이 없기 +때문에 다른 장치에서 호환성 레벨이 다를 수도 있습니다. +구형 기기에 있는 비-NDK 라이브러리에 액세스해야 하는 경우, +Android API 레벨에 따라 로드하세요. +

+ +

+ 이러한 유형의 문제를 진단하는 데 도움을 주기 위해, 여기서는 +Android N으로 앱을 작성할 때 발생할 수 있는 Java 및 NDK 오류의 몇 가지 예를 보여줍니다. +

+ +

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 ...
+
+ + +

+ 다음은 이러한 유형의 오류가 발생한 앱의 몇 가지 일반적인 수정사항입니다. +

+ +
    +
  • libandroid_runtime.so에서 getJavaVM 및 getJNIEnv 사용은 표준 +JNI 함수로 교체될 수 있습니다. +
    +AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
    +AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
    +JavaVM::AttachCurrentThread from <jni.h>.
    +
    +
  • + +
  • {@code libcutils.so}에서 {@code property_get} 기호 사용은 공개 대체 +{@code __system_property_get}으로 교체될 수 있습니다. +이렇게 하려면, include와 함께 {@code __system_property_get}을 사용합니다. +
    +#include <sys/system_properties.h>
    +
    +
  • + +
  • {@code libcrypto.so}에서 {@code SSL_ctrl} 기호 사용은 앱 로컬 +버전으로 교체되어야 합니다. 예를 들어, {@code .so} 파일에서 +{@code libcyrpto.a}를 정적으로 링크하거나 BoringSSL 또는 OpenSSL에서 +{@code libcrypto.so}를 동적으로 앱에 포함시켜야 합니다. +
  • +
+ +

Android for Work

+

+ Android N에는 Android for Work를 대상으로 하는 앱에 대한 변경이 +포함됩니다. 이러한 변경으로는 인증서 설치, 암호 재설정, +보조 사용자 관리, 기기 식별자 액세스 등에 대한 +변경이 있습니다. Android for Work 환경용 앱을 작성하는 경우에는 이러한 +변경을 검토하고 그에 따라 앱을 수정해야 합니다. +

+ +
    +
  • DPC가 인증서를 설정하기 전에, 위임된 인증서 설치 관리자를 먼저 +설치하셔야 합니다. N SDK를 대상으로 하는 프로필 소유자 +앱 및 기기 소유자 앱의 경우, 기기 정책 컨트롤러(DPC)가 DevicePolicyManager.setCertInstallerPackage()를 호출하기 +전에, 위임된 인증서 설치 관리자를 설치해야 합니다. 아직 설치 관리자가 +설치되지 +않은 경우, 시스템이 IllegalArgumentException을 +발생시킵니다. +
  • + +
  • 이제 기기 관리자의 암호 재설정 제한이 프로필 소유자에게도 +적용됩니다. 기기 관리자는 이미 설정된 암호를 변경하거나 암호를 +지우기 위해 DevicePolicyManager.resetPassword()를 더 이상 사용할 +수 없습니다. 기기 관리자가 여전히 암호를 설정할 수 있지만 +기기에 암호, PIN 또는 패턴이 없는 경우에만 암호를 설정할 수 있습니다. +
  • + +
  • 제한이 설정되어 있더라도 기기 소유자와 프로필 소유자는 +계정을 관리할 수 있습니다. DISALLOW_MODIFY_ACCOUNTS 사용자 +제한이 있더라도 기기 소유자와 프로필 소유자가 계정 관리 API를 호출할 수 있습니다. +
  • + +
  • 기기 소유자는 보다 쉽게 보조 사용자를 관리할 수 있습니다. +기기가 기기 소유자 모드에서 실행 중인 경우 DISALLOW_ADD_USER +제한이 자동으로 설정됩니다. 이렇게 하면 사용자는 +비관리 보조 사용자를 생성할 수가 없습니다. 또한 CreateUser() +및 createAndInitial() 메서드가 사용 중단되었으며, +새로운 DevicePolicyManager.createAndManageUser() 메서드로 대체되었습니다. +
  • + +
  • 기기 소유자는 기기 식별자에 액세스할 수 있습니다. 기기 +소유자는 DevicePolicyManagewr.getWifiMacAddress()를 사용하여 기기의 +Wi-Fi MAC 주소에 액세스할 수 있습니다. +기기에서 Wi-Fi가 활성화되지 않은 경우 이 메서드는 {@code null} 값을 반환합니다. +
  • +
+ +

+ Android N에서 Android for Work의 변경에 대한 자세한 내용은, +Android for Work 업데이트를 참조하세요. +

+ +

기타 중요한 사항

+ +
    +
  • 앱이 Android N에서 실행 중일 때 API 레벨이 낮고 사용자가 디스플레이 +크기를 변경한 경우, 해당 앱 프로세스가 종료됩니다. 앱은 이 +시나리오를 매끄럽게 처리할 수 있어야 합니다. 그렇지 않으면 +사용자가 Recents에서 앱을 복원할 때 앱 작동이 중단됩니다. + +

    +이러한 동작이 발생하지 않도록 앱을 테스트해야 합니다. +DDMS를 통해 수동으로 앱을 종료할 때 +동일한 작동 중단을 유발시키는 방식으로 테스트할 +수 있습니다. +

    + +

    +N 이상을 대상으로 하는 앱은 밀도 변경 시에 자동으로 종료되지 않지만 +구성 변경에는 제대로 응답하지 못할 수도 있습니다. +

    +
  • + +
  • +Android N에서 앱은 구성 변경을 매끄럽게 처리할 수 있어야 하며, +이후의 시작 시에도 작동이 중단되어서는 안 됩니다. 글꼴 크기(Setting > +Display > +Font size)를 변경하여 앱 동작을 검사한 다음, Recents에서 +앱을 복원할 수 있습니다. +
  • +
+ diff --git a/docs/html-intl/intl/ko/preview/download.jd b/docs/html-intl/intl/ko/preview/download.jd new file mode 100644 index 000000000000..cfd0497f5639 --- /dev/null +++ b/docs/html-intl/intl/ko/preview/download.jd @@ -0,0 +1,541 @@ +page.title=기기에서 테스트 +meta.tags="프리뷰", "nexus","시스템 이미지" +page.tags="preview", "androidn" +page.image=images/cards/card-n-downloads_2x.png + +@jd:body + +
+ + + + +
+ + + +

+ 새로운 플랫폼에서 앱을 테스트하려면 Android N +런타임 환경을 설정해야 합니다. 다음 두 가지 방법 중 하나를 사용할 수 있습니다. +

+ +
    +
  • 지원되는 하드웨어 기기에서 Android N 설치
  • +
  • Android N을 실행하는 Android 에뮬레이터 설정
  • +
+ +

+ 새로운 플래폼에서 앱의 기본적 호환성을 테스트할 환경을 원할 경우 +현재 APK와 하드웨어 기기 또는 +에뮬레이터만 있으면 됩니다. 기본 테스트를 위해 전체 개발 환경을 +업데이트할 필요가 없습니다. +

+ +

+ Android N을 대상으로 하도록 앱을 수정하거나 새로운 Android N API를 사용하고 싶다면, +Android N을 지원하도록 +업데이트된 개발 환경을 설정해야 합니다. 자세한 내용은 Android N용 개발 +설정을 참조하세요. +

+ + +

하드웨어 기기 설정

+ +

+ N Developer Preview는 전화에서 태블릿, TV에 이르기까지 앱을 테스트하는 데 사용할 수 있는 +다양한 하드웨어 기기의 시스템 업데이트를 제공합니다. +

+ +

+ 지원되는 기기에 액세스할 수 있다면 다음 방법 중 하나를 사용하여 Developer Preview 마일스톤 빌드로 +업데이트할 수 있습니다. +

+ +
    +
  • +Android 베타 프로그램을 통해 자동 OTA 시스템 업데이트에 기기를 등록합니다. 기기를 등록하면 N Developer Preview에서 +모든 마일스톤 빌드에 대해 정기적으로 OTA 업데이트를 받을 수 있습니다. +현재 환경을 다양한 N Developer Preview 릴리스로 매끄럽게 전환할 수 있으므로 +이 방법을 권장합니다.
  • +
  • Developer Preview 시스템 이미지를 다운로드하고 기기를 플래시합니다. +수동으로 플래시하는 기기에는 OTA 업데이트가 자동으로 제공되지 않지만 +Android 베타 프로그램에 기기를 등록하면 OTA 업데이트를 받을 수 있습니다.
  • +
+ +

자동 OTA 업데이트에 기기 등록

+ +

+ 지원되는 기기에 액세스할 수 있다면(아래 다운로드 표 +참조), +Android 베타 프로그램에 등록해서 Android 프리뷰 버전에 대해 OTA 업데이트를 받을 수 있습니다. 이 업데이트는 +자동으로 다운로드되고 공식 시스템 업데이트처럼 +기기를 업데이트합니다. +

+ +

+ 기기는 언제든 등록을 해제할 수 있습니다. 기기는 +해당 기기에 제공되는 가장 최신 Android 프로덕션 버전으로 OTA 업데이트를 받게 됩니다 +(예: Android 6.0 Marshmallow). 업데이트 시 기기가 완전히 초기화되므로 +기기의 사용자 데이터는 삭제됩니다. 기기 등록을 해제하기 전에 +중요한 데이터는 백업하세요. +

+ +

+ 자세한 정보를 확인하고 기기를 등록하려면 +Android 베타 프로그램 웹사이트를 참조하세요. +

+ +

참고: +등록을 해제하면 기기가 완전히 초기화됩니다. 중요한 데이터를 +먼저 백업하세요. +

+ +

기기 수동 플래시

+ +

+ 언제든 최신 Developer Preview 시스템 이미지를 다운로드하고 +기기에 수동으로 플래시할 수 있습니다. 아래 표를 참조하여 기기 테스트용 시스템 이미지를 +다운로드하세요. 기기 수동 플래시는 +테스트 환경을 정확히 제어해야 하거나 자동 테스트 등을 위해 자주 플래시해야 할 경우 +유용합니다. +

+ +

+ 기기에 시스템 이미지를 설치하면 기기에서 모든 데이터가 +삭제되므로 데이터를 먼저 백업하는 것이 좋습니다. +

+ +

+ 기기 데이터를 백업하고 기기에 맞는 아래의 시스템 이미지를 다운로드한 뒤, +developers.google.com/android +의 지침에 따라 기기에 이미지를 플래시합니다. +

+ +

+ 수동으로 플래시한 시스템 이미지는 최신 Developer Preview 마일스톤 빌드에 대한 +OTA 업데이트를 자동으로 수신하지 않습니다. +각 Developer Preview 마일스톤에서 환경을 최신으로 유지하고 새 시스템 이미지를 +플래시하세요. +

+ +

+ 기기를 수동으로 플래시한 후 OTA 업데이트를 받으려면 +Android +베타 프로그램에 기기를 등록하기만 하면 됩니다. 언제든 기기를 등록하고 다음 Preview +업데이트를 무선으로 받을 수 있습니다. +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
기기다운로드/체크섬
Nexus 5X
"bullhead"
bullhead-npc56p-preview-6c877a3d.tgz
+ MD5: b5cf874021023b398f5b983b24913f5d
+ SHA-1: 6c877a3d9fae7ec8a1678448e325b77b7a7b143a +
Nexus 6
"shamu"
shamu-npc56p-preview-54b13c67.tgz
+ MD5: af183638cf34e0eb944a1957d7696f60
+ SHA-1: 54b13c6703d369cc79a8fd8728fe4103c6343973 +
Nexus 6P
"angler"
angler-npc56p-preview-85ffc1b1.tgz
+ MD5: bc4934ea7bd325753eee1606d3725a24
+ SHA-1: 85ffc1b1be402b1b96f9ba10929e86bba6c6c588 +
Nexus 9
"volantis"
volantis-npc56p-preview-0e8ec8ef.tgz
+ MD5: c901334c6158351e945f188167ae56f4
+ SHA-1: 0e8ec8ef98c7a8d4f58d15f90afc5176303efca4 +
Nexus 9G
"volantisg"
volantisg-npc56p-preview-1bafdbfb.tgz
+ MD5: 7bb95bebc478d7257cccb4652899d1b4
+ SHA-1: 1bafdbfb502e979a9fe4c257a379c4c7af8a3ae6 +
Nexus Player
"fugu"
fugu-npc56r-preview-7027d5b6.tgz
+ MD5: f5d3d8f75836ccfe4c70e8162e498be4
+ SHA-1: 7027d5b662bceda4c80a91a0a14ef0e5a7ba795b +
Pixel C
"ryu"
ryu-npc56p-preview-335a86a4.tgz
+ MD5: 4e21fb183bbbf467bee91598d587fd2e
+ SHA-1: 335a86a435ee51f18464de343ad2e071c38f0e92 +
General Mobile 4G (Android One)
"seed"
seed_l8150-npc56p-preview-82472ebc.tgz
+ MD5: 983e083bc7cd0c4a2d39d6ebaa20202a
+ SHA-1: 82472ebc9a6054a103f53cb400a1351913c95127 +
+ +

기기에서 Preview 제거

+ +

+ 기기에서 Preview를 제거하려면 +다음 중 한 가지 방법을 사용할 수 있습니다.

+
    +
  • 공장 사양 시스템 이미지를 획득한 다음 기기에 수동으로 +플래시합니다. +
      +
    • Nexus 기기와 Pixel C 기기의 경우, +Nexus 기기용 +공장 이미지 페이지에서 다운로드하세요.
    • +
    • 다른 기기의 경우, 기기 제조업체에 직접 +문의하세요. 또는, Android 베타 프로그램에서 지원되는 +기기라면 +프로그램에 기기를 등록한 다음 등록을 해제할 수 있습니다(아래 참조).
    • +
    +
  • +
  • Android 베타 프로그램에서 기기 등록을 해제합니다. +기기가 Android 베타 +프로그램에 등록되었다면 기기와 관계없이 프로그램에서 등록을 해제하기만 하면 됩니다. +

    + 기기는해당 기기에 제공되는 가장 최신 Android 프로덕션 버전으로 +OTA 업데이트를 받게 됩니다(예: Android 6.0 Marshmallow). +업데이트 시 기기가 완전히 초기화되므로 기기의 사용자 데이터는 삭제됩니다 + 기기 등록을 해제하기 +전에 중요한 데이터는 백업하세요. +

    +
  • +
+ +

참고: +프로그램이 끝나기 전에 Developer Preview 시스템 이미지를 삭제하려면 +기기를 완전히 초기화하고 기기에서 모든 사용자 데이터를 +삭제해야 합니다. +

+ + +

에뮬레이터 설정

+ +

Android 에뮬레이터를 사용하여 Android N Preview를 실행하려면 +Android N Preview SDK를 다운로드하고 에뮬레이터용 가상 기기를 +생성해야 합니다.

+ +

먼저 다음과 같이 Android N Preview SDK를 다운로드합니다( +Android N용 개발 설정 + 시 이미 다운로드했다면 이 부분은 건너뛸 수 있습니다). + +

    +
  1. Android Studio에서 Settings 대화 상자를 엽니다 +(Windows/Linux에서 File > Settings, Mac에서는 +Android Studio > Preferences). 왼쪽 창에서 +Appearance & Behavior > +System Settings > Android SDK를 선택합니다. + +
  2. SDK Platforms 탭을 클릭한 다음, +Android N Preview 확인란을 선택합니다.
  3. + +
  4. SDK Tools 탭을 클릭한 다음, +Android SDK Build Tools, Android SDK +Platform-Tools, Android SDK Tools 확인란을 +선택합니다. +
  5. + +
  6. OK를 클릭하고 설치할 패키지의 +사용권 계약에 동의합니다. +
  7. +
+ +

이제 Android SDK Built-Tools 24.0 0 rc1, +Platform-Tools 24.0.0 rc1SDK Tools +25.0.9를 다운로드했습니다. SDK 도구를 25.0.9로 업데이트하지 않으면 +Android N에서 x86_64 시스템 이미지를 실행할 수 없습니다.

+ + +

Android N 시스템 이미지로 가상 기기 생성:

+ +
    +
  1. Tools > Android > +AVD Manager를 선택하여 AVD Manager를 엽니다.
  2. +
  3. Create Virtual Device를 클릭합니다.
  4. +
  5. Nexus 5X, Nexus 6P, Nexus 9, Android TV 등의 기기를 선택하고 +Next를 클릭합니다.
  6. +
  7. N 시스템 이미지( +x86 ABI)를 선택하고 Next를 클릭합니다. +(현재 x86 시스템 이미지만 Android N Preview용 Android 에뮬레이터에서 +지원됩니다.) +
  8. 나머지 AVD 구성을 완료하고 +Finish를 클릭합니다.
  9. +
+ +

이제 Android N Preview AVD로 Android 에뮬레이터를 시작할 수 있습니다.

+ +

+Android 에뮬레이터에서 최상의 경험을 얻으려면 +Android Studio 2.1 Preview를 설치하세요. Android Studio 1.5의 에뮬레이터에 비해 더욱 빠른 성능을 제공하는 Android Emulator 2.0 Beta가 +지원됩니다. +

+ +

참고: +현재 Android Studio 2.0 Beta를 사용하는 경우 +N Preview 시스템 이미지로 AVD를 생성할 수 없는 문제가 보고되었습니다. +따라서 지금은 Android Studio 2.1 Preview를 사용하여 AVD를 생성해야 합니다. +

+ +

가상 기기 생성에 대한 자세한 내용은 가상 기기 관리를 참조하세요. +

+ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html-intl/intl/ko/preview/features/background-optimization.jd b/docs/html-intl/intl/ko/preview/features/background-optimization.jd new file mode 100644 index 000000000000..817d216f0fef --- /dev/null +++ b/docs/html-intl/intl/ko/preview/features/background-optimization.jd @@ -0,0 +1,388 @@ +page.title=백그라운드 최적화 +page.metaDescription=암시적 브로드캐스트에 대한 새로운 제한. +page.keywords="android N", "implicit broadcasts", "job scheduler" +@jd:body + + + +

+ 백그라운드 프로세스는 메모리와 배터리를 많이 소모할 수 있습니다. 예를 들어, 암시적 브로드캐스트는 +이 브로드캐스트를 수신하도록 등록된 많은 백그라운드 프로세스를 시작할 수 있지만 +해당 프로세스가 많은 작업을 수행하지 못할 경우가 있습니다. 이로 인해 기기 성능과 +사용자 경험에 상당한 영향을 미칠 수 있습니다. +

+ +

+ 이 문제를 완화하기 위해, N Developer Preview +는 다음과 같은 제한을 적용합니다. +

+ +
    +
  • 브로드캐스트를 수신하도록 매니페스트에 등록되어 있더라도, Preview를 대상으로 하는 앱은 {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} +브로드캐스트를 수신하지 않습니다. 포그라운드에서 실행되는 앱은 {@link + android.content.Context#registerReceiver Context.registerReceiver()}로 {@link android.content.BroadcastReceiver}를 +등록하여 여전히 메인 스레드에서 {@code CONNECTIVITY_CHANGE}를 수신할 +수 있습니다. +
  • + +
  • 앱은 {@link + android.hardware.Camera#ACTION_NEW_PICTURE} 또는 {@link + android.hardware.Camera#ACTION_NEW_VIDEO} 브로드캐스트를 송수신할 수 없습니다. 이 최적화는 Preview를 대상으로 +하는 앱 뿐만 아니라 모든 앱에 영향을 미칩니다. +
  • +
+ +

+ Android 프레임워크는 이러한 암시적 브로드캐스트의 +필요성을 줄이기 위한 여러 가지 해결책을 제공합니다. 예를 들어, {@link android.app.job.JobScheduler} +및 + {@code GcmNetworkManager}는 지정된 +조건(예: 비 데이터 통신 네트워크에 연결)이 충족될 경우 네트워크 작업을 +예약할 수 있는 강력한 메커니즘을 제공합니다. 이제 {@link android.app.job.JobScheduler}를 +사용하여 콘텐츠 제공자의 변경에 대응할 수도 있습니다. {@link android.app.job.JobInfo} +객체는 {@link android.app.job.JobScheduler}가 +작업 예약에 사용하는 매개변수를 캡슐화합니다. 작업 조건이 충족되면 시스템은 +이 작업을 앱의 {@link android.app.job.JobService}에서 실행합니다. +

+ +

+ 이 문서에서는 대체 메서드(예: {@link android.app.job.JobScheduler})를 +사용하여 이러한 새로운 제한에 맞게 앱을 적용하는 방법에 대해 +배워보겠습니다. +

+ +

+ CONNECTIVITY_ACTION에 대한 제한 +

+ +

+ 브로드캐스트를 수신하도록 매니페스트에 등록되어 +있더라도, N Developer Preview를 대상으로 하는 앱은 {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} 브로드캐스트를 수신하지 않으며, 이 브로드캐스트에 종속되는 프로세스는 +시작되지 않습니다. 이 경우 네트워크 변경을 수신하려는 앱이나, +기기가 비 데이터 통신 네트워크에 연결될 때 대량 네트워크 액티비티를 +수행하려는 앱에서 문제가 발생할 수 있습니다. 이 제한을 해결하기 위한 여러 가지 +해결책이 Android 프레임워크에 이미 있지만, 올바른 해결책을 선택하는 것은 +앱의 용도에 따라 다릅니다. +

+ +

+ 참고: {@link android.content.Context#registerReceiver Context.registerReceiver()}로 +등록된 {@link android.content.BroadcastReceiver}는 앱이 +포그라운드에 있는 동안 계속해서 이 브로드캐스트를 수신합니다. +

+ +

+ 비 데이터 통신 연결에서 네트워크 작업 예약 +

+ +

+ {@link android.app.job.JobInfo.Builder JobInfo.Builder} 클래스를 +사용하여 {@link android.app.job.JobInfo} 객체를 빌드하는 경우, {@link + android.app.job.JobInfo.Builder#setRequiredNetworkType + setRequiredNetworkType()} 메서드를 적용하고 {@link android.app.job.JobInfo + JobInfo.NETWORK_TYPE_UNMETERED}를 작업 매개변수로 전달합니다. 다음의 코드 샘플에서는 기기가 비 데이터 통신 +네트워크에 연결되어 충전 중일 때 실행할 서비스를 +예약합니다. +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+      (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo job = new JobInfo.Builder(
+    MY_BACKGROUND_JOB,
+    new ComponentName(context, MyJobService.class))
+      .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
+      .setRequiresCharging(true)
+      .build();
+  js.schedule(job);
+}
+
+ +

+ 작업의 조건이 충족되면, 앱은 +{@link android.app.job.JobService#onStartJob onStartJob()} 메서드를 지정된 {@code JobService.class}에서 실행하기 위한 콜백을 +수신합니다. {@link + android.app.job.JobScheduler} 구현의 더 많은 예를 보려면, JobScheduler 샘플 앱을 참조하세요. +

+ +

+ GMSCore 서비스를 사용하고 Android 5.0(API 레벨 21) 이하를 대상으로 하는 앱은 +{@code GcmNetworkManager}를 사용하고 {@code Task.NETWORK_STATE_UNMETERED}를 +지정할 수 있습니다. +

+ +

+ 앱이 실행되는 중에 네트워크 연결 모니터링 +

+ +

+ 포그라운드에서 실행되는 앱은 여전히 등록된 {@link + android.content.BroadcastReceiver}로 {@code + CONNECTIVITY_CHANGE}를 수신할 수 있습니다. 그러나, {@link + android.net.ConnectivityManager} API는 지정된 네트워크 조건이 충족될 경우에만 콜백을 요청하는 +더욱 강력한 메서드를 제공합니다. +

+ +

+ {@link android.net.NetworkRequest} 객체는 {@link android.net.NetworkCapabilities}의 +관점에서 네트워크 콜백의 매개변수를 정의합니다. {@link + android.net.NetworkRequest.Builder NetworkRequest.Builder} 클래스로 {@link android.net.NetworkRequest} 객체를 +생성합니다. 이어서 {@link + android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, + android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} +이 {@link android.net.NetworkRequest} 객체를 시스템에 전달합니다. 네트워크 조건이 충족되면, 앱은 {@link + android.net.ConnectivityManager.NetworkCallback} 클래스에 정의된 {@link android.net.ConnectivityManager.NetworkCallback#onAvailable + onAvailable()} 메서드를 +실행하기 위한 콜백을 +수신합니다. +

+ +

+ 앱이 종료되거나 앱이 {@link android.net.ConnectivityManager#unregisterNetworkCallback + unregisterNetworkCallback()}을 호출할 때까지 계속해서 +콜백을 수신합니다. +

+ +

+ NEW_PICTURE 및 NEW_VIDEO에 대한 제한 +

+ +

+ N Developer Preview에서 앱은 {@link + android.hardware.Camera#ACTION_NEW_PICTURE} 또는 {@link + android.hardware.Camera#ACTION_NEW_VIDEO} 브로드캐스트를 송수신할 수 없습니다. 이 제한은 새로운 이미지나 +동영상을 처리하기 위해 여러 앱을 깨워야 하는 경우, 성능 및 사용자 경험에 +미치는 영향을 줄여줍니다. N Developer Preview는 +{@link android.app.job.JobInfo} 및 {@link + android.app.job.JobParameters}를 확장하여 대체 해결책을 제공합니다. +

+ +

+ 새로운 JobInfo 메서드 +

+ +

+ 콘텐츠 URI 변경에 대한 작업을 트리거하기 위해, N Developer Preview +는 다음과 같은 메서드로 {@link android.app.job.JobInfo} API를 확장합니다. +

+ +
+
+ {@code JobInfo.TriggerContentUri()} +
+ +
+ 콘텐츠 URI 변경에 대한 작업을 트리거하는 데 필요한 매개변수를 캡슐화합니다. +
+ +
+ {@code JobInfo.Builder.addTriggerContentUri()} +
+ +
+ {@code TriggerContentUri} 객체를 {@link + android.app.job.JobInfo}에 전달합니다. {@link android.database.ContentObserver}는 +캡슐화된 콘텐츠 URI를 모니터링합니다. 하나의 작업과 연관된 여러 {@code + TriggerContentUri} 객체가 있는 경우, 콘텐츠 URI 중 하나에서만 변경이 보고되더라도 시스템이 +콜백을 제공합니다. +
+ +
+ 지정된 URI의 하위 항목이 하나라도 변경되면, {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} 플래그를 +추가하여 작업을 트리거합니다. 이 플래그는 +{@link + android.content.ContentResolver#registerContentObserver + registerContentObserver()}로 전달된 {@code notifyForDescendants} 매개변수에 해당합니다. +
+
+ +

+ 참고: {@code TriggerContentUri()}는 {@link android.app.job.JobInfo.Builder#setPeriodic + setPeriodic()} 또는 {@link android.app.job.JobInfo.Builder#setPersisted + setPersisted()}와 +조합으로 사용될 수 없습니다. 콘텐츠 변경을 계속해서 모니터링하려면, 앱의 {@link + android.app.job.JobService}가 가장 최근 콜백의 처리를 완료하기 전에 새로운 +{@link android.app.job.JobInfo}를 예약하세요. +

+ +

+ 다음 샘플 코드에서는 콘텐츠 URI, {@code MEDIA_URI}의 +변경을 시스템이 보고할 때 트리거할 작업을 예약합니다. +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+          (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo.Builder builder = new JobInfo.Builder(
+          MY_BACKGROUND_JOB,
+          new ComponentName(context, MediaContentJob.class));
+  builder.addTriggerContentUri(
+          new JobInfo.TriggerContentUri(MEDIA_URI,
+          JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
+  js.schedule(builder.build());
+}
+
+

+ 지정된 콘텐츠 URI에서의 변경을 시스템이 보고할 때, +앱이 콜백을 수신하고 {@link android.app.job.JobParameters} 객체가 +{@code MediaContentJob.class}의 {@link android.app.job.JobService#onStartJob onStartJob()}메서드에 +전달됩니다. +

+ +

+ 새로운 JobParameter 메서드 +

+ +

+ N Developer Preview에서는 또한 어떤 콘텐츠 기관과 +URI가 작업을 트리거했는지에 대한 유용한 정보를 앱이 +수신할 수 있도록 {@link android.app.job.JobParameters}를 확장합니다. +

+ +
+
+ {@code Uri[] getTriggeredContentUris()} +
+ +
+ 작업을 트리거한 URI의 배열을 반환합니다. 작업을 트리거한 +URI가 없거나(예: 시한 또는 기타 이유로 인해 작업이 트리거된 경우) 또는 +변경된 URI의 수가 50보다 크면 {@code + null}이 됩니다. +
+ +
+ {@code String[] getTriggeredContentAuthorities()} +
+ +
+ 작업을 트리거한 콘텐츠 기관의 문자열 배열을 반환합니다. + 반환된 배열이 {@code null}이 아닌 경우, {@code getTriggeredContentUris()}를 +사용하여 변경된 URI의 세부정보를 검색합니다. +
+
+ +

+ 다음 샘플 코드에서는 {@link + android.app.job.JobService#onStartJob JobService.onStartJob()} 메서드를 재정의하고 +, 작업을 트리거한 콘텐츠 기관과 URI를 기록합니다. +

+ +
+@Override
+public boolean onStartJob(JobParameters params) {
+  StringBuilder sb = new StringBuilder();
+  sb.append("Media content has changed:\n");
+  if (params.getTriggeredContentAuthorities() != null) {
+      sb.append("Authorities: ");
+      boolean first = true;
+      for (String auth :
+          params.getTriggeredContentAuthorities()) {
+          if (first) {
+              first = false;
+          } else {
+             sb.append(", ");
+          }
+           sb.append(auth);
+      }
+      if (params.getTriggeredContentUris() != null) {
+          for (Uri uri : params.getTriggeredContentUris()) {
+              sb.append("\n");
+              sb.append(uri);
+          }
+      }
+  } else {
+      sb.append("(No content)");
+  }
+  Log.i(TAG, sb.toString());
+  return true;
+}
+
+ +

+ 추가적인 앱 최적화 +

+ +

+ 저용량 메모리 기기나 저용량 메모리 조건에서 +앱이 실행되도록 최적화하면 성능과 사용자 경험을 개선할 수 있습니다. 백그라운드 서비스에 대한 종속성과 정적으로 등록된 +암시적 브로드캐스트 수신기에 대한 종속성을 제거하면 기기에서 앱을 +더욱 빨리 실행할 수 있습니다. N Developer Preview는 이러한 문제 중 일부를 줄이기 위한 +조치를 취하고 있지만, 백그라운드 +프로세스를 전혀 사용하지 않고 앱이 실행되도록 +최적화하는 것이 좋습니다. +

+ +

+ N Developer Preview에서는 백그라운드 프로세스를 +비활성화하고 앱 동작을 테스트하는 데 사용할 수 있는 몇 가지 추가적인 ADB(Android Debug Bridge) 명령을 소개합니다. +

+ +
    +
  • 암시적 브로드캐스트와 백그라운드 서비스를 사용할 +수 없는 조건을 시뮬레이션하려면, 다음 명령을 입력합니다. +
  • + +
  • +
    +{@code $ adb shell cmd appops set RUN_IN_BACKGROUND ignore}
    +
    +
  • + +
  • 암시적 브로드캐스트와 백그라운드 서비스를 다시 활성화하려면, +다음 명령을 입력합니다. +
  • + +
  • +
    +{@code $ adb shell cmd appops set RUN_IN_BACKGROUND allow}
    +
    +
  • +
\ No newline at end of file diff --git a/docs/html-intl/intl/ko/preview/features/direct-boot.jd b/docs/html-intl/intl/ko/preview/features/direct-boot.jd new file mode 100644 index 000000000000..6ffb387da36b --- /dev/null +++ b/docs/html-intl/intl/ko/preview/features/direct-boot.jd @@ -0,0 +1,180 @@ +page.title=직접 부팅 +page.keywords=preview,sdk,direct boot +page.tags=androidn + +@jd:body + + + +

Android N은 기기에 전원이 들어와 있지만사용자가 잠금을 해제하지 않았을 때안전한 +직접 부팅 + 모드에서 실행됩니다. 이를 지원하기 위해 시스템에서 두 가지 데이터 저장소 위치를 제공합니다.

+ +
    +
  • 자격증명 암호화 저장소:기본 저장소 위치이며, 사용자가 기기의 잠금을 해제한 후에만 +사용할 수 있습니다.
  • +
  • 기기 암호화 저장소:직접 부팅 모드와 사용자가 기기의 잠금을 해제한 후에 +모두 사용할 수 있는 저장소 위치입니다.
  • +
+ +

기본적으로 직접 부팅 모드 시 앱이 실행되지 않습니다. +직접 부팅 모드에서 조치가 필요한 경우, +이 모드에서 실행되어야 하는 앱 구성 요소를 등록할 수 있습니다. 직접 부팅 모드 시 실행되어야 하는 앱의 +몇 가지 공통 사용 사례:

+ +
    +
  • 알람 시계 앱과 같이 예약된 알림이 있는 +앱.
  • +
  • SMS 앱처럼 중요한 사용자 알림을 제공하는 앱.
  • +
  • Talkback처럼 접근성 서비스를 제공하는 앱.
  • +
+ +

앱이 직접 부팅 모드에서 실행되는 동안 데이터에 액세스해야 하는 경우 +기기 암호화 저장소를 사용합니다. 기기 암호화 저장소에는 +기기가 성공적으로 확인된 부팅을 수행한 후에만 +사용할 수 있는 키로 암호화된 데이터가 포함됩니다.

+ +

PIN이나 암호와 같이 사용자 자격증명과 연관된 키로 암호화해야 하는 데이터는 +자격증명 암호화 저장소를 사용합니다. +자격증명 암호화 저장소는 사용자가 기기의 잠금을 해제한 뒤부터 +기기를 다시 시작할 때까지 사용할 수 있습니다. 사용자가 +기기의 잠금을 해제한 뒤 잠금 화면을 활성화해도 +자격증명 암호화 저장소가 잠기지 않습니다.

+ +

직접 부팅 시 실행하기 위한 액세스 요청

+ +

앱은 직접 부팅 모드에서 실행되거나 +기기 암호화 저장소에 액세스하기 전까지 +시스템에 구성 요소를 등록해야 합니다. 앱은 구성 요소를 +암호화 인식으로 표시하여 시스템에 등록합니다. 구성 요소를 암호화 인식으로 표시하려면 매니페스트에서 +android:encryptionAware 특성을 true로 설정합니다.

+ +

암호화 인식 구성 요소로 등록하면 기기가 다시 시작되었을 때 시스템에서 +LOCKED_BOOT_COMPLETED 브로드캐스트 메시지를 +수신할 수 있습니다. 이 시점에서 기기 암호화 저장소를 +사용할 수 있고, 여러분의 구성 요소는 +예약된 알람 트리거 등과 같이 직접 부팅 모드에서 실행해야 하는 작업을 실행할 수 있습니다.

+ +

다음 코드 조각은 +{@link android.content.BroadcastReceiver}를 암호화 인식으로 등록하고 앱 매니페스트에 +LOCKED_BOOT_COMPLETED의 인텐트 필터를 추가하는 예시입니다.

+ +
+<receiever
+  android:encryptionAware="true" >
+  ...
+  <intent-filter>
+    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+  </intent-filter>
+</receiver>
+
+ +

사용자가 기기의 잠금을 해제하면 모든 구성 요소가 +기기 암호화 저장소와 자격증명 암호화 저장소에 액세스할 수 있습니다.

+ +

기기 암호화 저장소 액세스

+ +

기기 암호화 저장소에 액세스하려면 +Context.createDeviceEncryptedStorageContext()를 호출하여 두 번째 +{@link android.content.Context} 인스턴스를 생성합니다. 이 컨텍스트를 사용하여 호출한 모든 저장소 API는 +기기 암호화 저장소에 액세스합니다. 다음은 +기기 암호화 저장소에 액세스하고 기존 +앱 데이터 파일을 여는 예시입니다.

+ +
+Context directBootContext = Context.createDeviceEncryptedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+
+ +

직접 부팅 모드에서 액세스해야 하는 정보에만 +기기 암호화 저장소를 사용합니다. +기기 암호화 저장소를 범용 암호화 저장소로 사용하지 마십시오. +개인적인 사용자 정보 또는 직접 부팅 모드에서 필요하지 않은 암호화 데이터는 +자격증명 암호화 저장소를 사용합니다.

+ +

사용자 잠금 해제 알림 수신

+ +

사용자가 재시작 후 기기의 잠금을 해제하면 +앱이 자격증명 암호화 저장소 액세스로 전환하고, +사용자 자격증명을 따르는 일반 시스템 서비스를 사용할 수 있습니다.

+ +

사용자가 재부팅 후 기기의 잠금을 해제할 때 알림을 받으려면 +실행 중인 구성 요소에서 {@link android.content.BroadcastReceiver}를 등록하고 +ACTION_USER_UNLOCKED 메시지를 수신합니다. 또는, +기존 {@link android.content.Intent#ACTION_BOOT_COMPLETED +ACTION_BOOT_COMPLETED} 메시지를 수신할 수 있습니다. 이 메시지는 기기가 부팅되었으며 사용자가 기기의 잠금을 +해제했음을 나타냅니다.

+ +

사용자가 +UserManager.isUserUnlocked()를 호출하여 기기 잠금을 해제했는지 직접 쿼리할 수 있습니다.

+ +

기존 데이터 마이그레이션

+ +

사용자가 기기를 직접 부팅 모드를 사용하도록 업데이트하면 +기존 데이터를 기기 암호화 저장소로 마이그레이션해야 할 수도 있습니다. +Context.migrateSharedPreferencesFrom()와 +Context.migrateDatabaseFrom()를 사용하여 자격증명 암호화 저장소와 기기 암호화 저장소 간에 +기본 설정과 데이터베이스 데이터를 마이그레이션합니다.

+ +

자격증명 +암호화 저장소에서 기기 암호화 저장소로 마이그레이션할 데이터는 신중히 결정하세요. 암호나 인증 토큰 등의 +개인 사용자 정보는 기기 암호화 저장소로 +마이그레이션해서는 안됩니다. 일부 시나리오에서 +두 가지 암호화 저장소에 있는 별도의 데이터 세트를 관리해야 할 수 있습니다.

+ +

암호화 인식 앱 테스트

+ +

새로운 직접 부팅 모드로 암호화 인식 앱을 테스트하세요. 직접 부팅을 +활성화하는 방법은 두 가지가 있습니다.

+ +

주의: 직접 부팅을 활성화하면 +기기에서 모든 사용자 데이터가 삭제됩니다.

+ +

Android N이 설치된 지원 기기에서 +직접 부팅을 활성화하는 방법:

+ +
    +
  • Developer options가 활성화되어 있지 않으면 기기에서 +Settings > About phone으로 이동하여 Build number를 +7번 탭하여 활성화합니다. 개발자 옵션 화면이 나오면 +Settings > Developer options로 이동해서 +Convert to file encryption을 선택합니다.
  • +
  • 다음 adb shell 명령을 사용하여 직접 부팅 모드를 활성화합니다. +
    +$ adb reboot-bootloader
    +$ fastboot --wipe-and-use-fbe
    +
    +
  • +
+ +

테스트 기기에서 모드를 전환해야 할 경우 +에뮬레이션된 직접 부팅 모드도 사용할 수 있습니다. 에뮬레이션된 모드는 개발 시에만 사용해야 하며 +데이터가 손실될 수 있습니다. 에뮬레이션된 직접 부팅 모드를 활성화하려면 +기기에서 잠금 패턴을 설정합니다. 잠금 패턴을 설정할 때 안전 모드 화면으로 시작할지 묻는 메시지가 나오면 "No thanks"를 +선택한 뒤 다음 +adb shell 명령을 사용합니다.

+ +
+$ adb shell sm set-emulate-fbe true
+
+ +

에뮬레이션된 직접 부팅 모드를 끄려면 다음 명령을 사용합니다.

+ +
+$ adb shell sm set-emulate-fbe false
+
+ +

이 명령을 사용하면 기기가 재부팅됩니다.

diff --git a/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd b/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd new file mode 100644 index 000000000000..77f1feb9bf54 --- /dev/null +++ b/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd @@ -0,0 +1,158 @@ +page.title=ICU4J Android 프레임워크 API + +@jd:body + + + +

+ ICU4J는 오픈 소스이며 널리 사용되는 Java 라이브러리 세트로, 소프트웨어 애플리케이션에 유니코드와 +세계화 지원을 제공합니다. Android N은 +Android 프레임워크에서 앱 개발자가 +{@code android.icu} 패키지에서 사용할 수 있는 ICU4J API의 하위 세트를 노출합니다. 이 API는 +기기의 현지화 데이터를 사용합니다. 따라서 ICU4J 라이브러리를 APK로 컴파일하지 않고 +프레임워크에서 호출하여APK +풋프린트를 줄일 수 있습니다. (이 경우, Android N 이하 버전의 Android를 +실행하는 사용자가 ICU4J 라이브러리를 포함한 앱 버전을 다운로드할 수 있도록 +여러 버전의 +APK를 제공해야 할 수도 있습니다.) +

+ +

+ 이 문서에서는 먼저 이 라이브러리 지원에 필요한 최소 +Android API 레벨과 관련된 몇 가지 기본 정보를 제공합니다. 그 후, +각 Android에서 ICU4J를 구현하는 데 무엇이 필요한지 설명합니다. 마지막으로, +Android 프레임워크에서 ICU4J API를 사용하는 방법을 설명합니다. +

+ +

ICU4J와의 관계

+ +

+ Android N은 +com.ibm.icu가 아니라 android.icu 패키지를 통해 ICU4J API의 하위 세트를 노출합니다. +Android 프레임워크는 여러 가지 이유로 +ICU4J API를 노출하지 않을 수 있습니다. 예컨대 Android N은 +일부 사용 중단된 API나 ICU팀에서 안정적이라고 선언하지 않은 API를 +노출하지 않습니다. ICU팀이 이후 API의 사용을 중단하면, Android도 +이를 사용 중단됨으로 표시하지만 계속 포함합니다. +

+ +

표 1. +Android N에서 사용된 ICU 및 CLDR 버전.

+ + + + + + + + + + + +
Android API 레벨ICU 버전CLDR 버전
Android N5628
+ +

중요한 참고 사항:

+ +
    +
  • ICU4J Android 프레임워크 API에는 모든 ICU4J API가 포함되지 않습니다.
  • +
  • NDK 개발자는 Android ICU4C가 지원되지 않는다는 것을 알아야 합니다.
  • +
  • Android 프레임워크의 API는 Android의 +리소스로 +현지화 지원을 대체하지 못합니다.
  • +
+ +

com.ibm.icu에서 android.icu 패키지로 마이그레이션

+ +

+ 앱에서 이미 ICU4J API를 사용하고 있고 +android.icu API가 요구사항을 충족한다면 +프레임워크 API로 마이그레이션할 때 Java 가져오기를 +com.ibm.icu에서 android.icu로 변경해야 합니다. 그러면 APK에서 +ICU4J 파일 사본을 삭제할 수 있습니다. +

+ +

+ 참고: ICU4J 프레임워크 API는 {@code com.ibm.icu} 대신 {@code android.icu} +네임스페이스를 사용합니다. 이는 자체 {@code com.ibm.icu} 라이브러리가 포함된 APK에서 +네임스페이스 충돌을 피하기 위해서입니다. +

+ +

+ 다른 Android SDK API에서 android.icu API로 마이그레이션 +

+ +

+ javaandroid 패키지의 일부 클래스는 +ICU4J의 클래스와 같습니다. 그러나 ICU4J는 종종 더욱 폭넓은 +표준과 언어를 지원합니다. +

+

시작하기 위한 몇 가지 예시:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
클래스대체
java.lang.Character android.icu.lang.UCharacter
java.text.BreakIterator android.icu.text.BreakIterator
java.text.DecimalFormat android.icu.text.DecimalFormat
java.util.Calendar +android.icu.util.Calendar
android.text.BidiFormatter + android.icu.text.Bidi +
android.text.format.DateFormat + android.icu.text.DateFormat +
android.text.format.DateUtils android.icu.text.DateFormat +android.icu.text.RelativeDateTimeFormatter +
+ +

라이선스

+ +

+ ICU4J는 ICU 라이선스에 따라 배포됩니다. 자세한 내용은 ICU + 사용자 가이드를 참조하세요. +

diff --git a/docs/html-intl/intl/ko/preview/features/multi-window.jd b/docs/html-intl/intl/ko/preview/features/multi-window.jd new file mode 100644 index 000000000000..78abcd1338b0 --- /dev/null +++ b/docs/html-intl/intl/ko/preview/features/multi-window.jd @@ -0,0 +1,582 @@ +page.title=다중 창 지원 +page.metaDescription=Android N에서 한 번에 둘 이상의 앱을 표시하도록 지원. +page.keywords="multi-window", "android N", "split screen", "free-form" + +@jd:body + + + +

+ Android N에서는 동시에 둘 이상의 앱을 표시하도록 +지원합니다. 핸드헬드 기기에서 두 개의 앱을 화면 분할 모드에서 +나란히 또는 상하로 실행할 수 있습니다. TV 기기에서 앱이 +PIP 모드를 사용하는 경우 사용자가 다른 앱과 상호작용하는 +동안에 계속 동영상을 재생할 수 있습니다. +

+ +

+ N Preview SDK로 앱을 빌드하는 경우, 앱이 다중 창 +표시를 처리하는 방식을 구성할 수 있습니다. 예를 들어, 액티비티의 +최소 허용 치수를 지정할 수 있습니다. 또한 앱에 +대해 다중 창 표시를 비활성화할 수도 있으며, 이 경우 시스템은 앱을 전체 화면 모드에서만 +표시합니다. +

+ +

개요

+ +

+ Android N에서는 여러 앱이 동시에 화면을 공유할 수 있습니다. 예를 들어, 사용자가 화면을 분할하여 왼쪽에서는 웹페이지를 +보면서 오른쪽에서는 이메일을 작성할 +수 있습니다. 사용자 경험은 기기에 따라 +달라집니다. +

+ +
    +
  • Android N에서 실행되는 핸드헬드 기기는 화면 분할 +모드를 제공합니다. 이 모드에서 시스템은 화면을 두 개의 앱으로 채우고, 이 +앱을 나란히 또는 상하로 표시합니다. 사용자가 두 앱을 구분하는 분할선을 끌어서 한 앱을 다른 앱보다 +더 크게 만들 수 있습니다. +
  • + +
  • Android N을 실행하는 Nexus Player에서, 앱이 +PIP 모드로 배치될 수 있으므로, 사용자가 검색을 +수행하거나 다른 앱과 상호작용하는 중에도 앱이 계속해서 콘텐츠를 +표시할 수 있습니다. +
  • + +
  • 더 큰 기기를 제조하는 업체는 자유형식 +모드를 선택할 수 있으며, 이 경우 사용자가 각 액티비티의 크기를 자유롭게 조정할 수 있습니다. 제조업체가 이 기능을 활성화하면, 기기는 화면 분할 모드 뿐만 +아니라 자유형식 모드를 +제공합니다. +
  • +
+ + +

+ 그림 1. 화면 분할 모드에서 나란히 실행 중인 두 앱. +

+ +

+ 사용자가 다음과 같이 다중 창 모드로 전환할 수 있습니다. +

+ +
    +
  • 사용자가 Overview +화면을 열고 액티비티 제목을 길게 누르면, +이 액티비티를 화면의 강조 표시된 부분으로 끌어서 +다중 창 모드에 둘 수 있습니다. +
  • + +
  • 사용자가 Overview 버튼을 길게 누르면, 기기가 현재 액티비티를 +다중 창 모드에 두고 Overview 화면을 열며, 이 화면에서 사용자는 화면을 +공유하기 위한 또 다른 액티비티를 선택할 수 있습니다. +
  • +
+ +

+ 사용자는 여러 액티비티가 화면을 공유하는 동안 한 액티비티에서 +또 다른 액티비티로 데이터를 끌어서 놓을 +수 있습니다. (이전에는, 사용자가 단일 액티비티 내에서만 +데이터를 끌어서 놓을 수 있었습니다.) +

+ +

다중 창 수명 주기

+ +

+ 다중 창 모드는 액티비티 +수명 주기를 변경하지 않습니다. +

+ +

+ 다중 창 모드에서는, 사용자가 가장 최근에 상호작용했던 액티비티만 +지정된 시간에 활성화됩니다. 이 액티비티는 최상위로 간주됩니다. + 다른 모든 액티비티는 표시되어 있더라도 일시 정지된 상태입니다. + 그러나 시스템은 이러한 일시 정지되었지만 표시된 액티비티에게 표시되지 +않은 액티비티보다 더 높은 우선 순위를 부여합니다. 사용자가 일시 정지된 액티비티 중 하나와 상호작용하면, 해당 +액티비티가 재개되고 이전의 최상위 액티비티가 일시 +정지됩니다. +

+ +

+ 참고: 다중 창 모드에서는 앱이 일시 정지된 상태에서도 여전히 +사용자에게 표시될 수 있습니다. 앱이 일시 정지된 동안에도 액티비티를 +계속해야 하는 경우도 있습니다. 예를 들어, 일시 정지 모드이지만 표시된 +동영상 재생 앱은 계속해서 동영상을 보여줘야 합니다. 이러한 이유로, 동영상을 +재생하는 액티비티는 {@link android.app.Activity#onPause onPause()} 핸들러에서 +동영상을 일시 정지하지 않는 것이 좋습니다. + 그 대신, {@link android.app.Activity#onStop + onStop()}에서 동영상을 일시 정지하고, {@link android.app.Activity#onStart + onStart()}에서 재생을 재개해야 합니다. +

+ +

+ 사용자가 앱을 다중 창 모드에 놓으면, +시스템은 런타임 변경 처리에 지정된 대로, 구성 변경을 액티비티에게 +알려줍니다. 기본적으로, 이 변경의 액티비티-수명 주기 관계는 기기의 모드가 +세로 모드에서 가로 모드로 전환되었음을 +시스템이 앱에 알려줄 때와 동일합니다(단순 스왑 대신 +기기 치수가 변경되는 경우는 제외). 런타임 변경 처리에서 설명한 +대로, 액티비티 스스로 구성 변경을 처리하거나, 시스템이 액티비티를 소멸시키고 +새 치수로 다시 액티비티를 생성하도록 할 수 +있습니다. +

+ +

+ 사용자가 창의 크기를 조정하여 한쪽 치수를 더 크게 만드는 +경우, 시스템은 사용자 작업에 맞게 액티비티의 크기를 조정하고 필요한 +경우 런타임 변경을 수행합니다. 앱이 새로 노출되는 영역에 그릴 때 지연이 발생하는 경우, 시스템은 {@link + android.R.attr#windowBackground windowBackground} 특성 또는 기본 +windowBackgroundFallback 스타일 특성에 의해 +지정된 색으로 이 영역을 임시로 채웁니다. +

+ +

앱을 다중 창 모드로 구성

+ +

+ 앱이 Android N을 대상으로 하는 경우, 앱의 액티비티가 다중 +창 표시를 지원하는지 여부와 지원 방법을 구성할 수 있습니다. 매니페스트에서 특성을 설정하여 크기와 레이아웃을 제어할 +수 있습니다. + 루트 액티비티의 특성 설정은 작업 스택 내의 모든 +액티비티에 적용됩니다. +

+ +

+ 참고: Android N보다 더 낮은 버전의 SDK로 다중 방향 앱을 작성하는 경우 +사용자가 앱을 다중 창 모드에서 사용하면, 시스템이 +이 앱의 크기를 강제로 조정합니다. 앱이 예상치 못하게 동작할 수 있음을 사용자에게 경고하는 +대화 상자가 표시됩니다. 시스템은 고정 +방향 앱의 크기는 조정하지 않습니다. 사용자가 +다중 창 모드 하에서 고정 방향 앱을 열려고 시도하면, +앱이 전체 화면을 차지합니다. +

+ +

android:resizeableActivity

+

+ 매니페스트의 <activity> 또는 +<application> 노드에서 이 특성을 설정하여 다중 창 +표시를 활성화하거나 비활성화합니다. +

+ +
+android:resizeableActivity=["true" | "false"]
+
+ +

+ 이 특성을 true로 설정하면, 액티비티를 분할 화면 모드와 자유형식 +모드로 시작할 수 있습니다. 이 특성을 false로 설정하면, 액티비티가 다중 창 모드를 지원하지 +않습니다. 이 값이 false이고 사용자가 +다중 창 모드에서 액티비티를 시작하려고 시도하면, 액티비티가 전체 화면을 +차지합니다. +

+ +

+ 앱이 Android N을 대상으로 하지만 이 특성에 값을 지정하지 +않은 경우, 이 특성의 기본값은 true가 됩니다. +

+ +

android:supportsPictureInPicture

+ +

+ 이 특성을 매니페스트의 <activity> 노드에 설정하여 +액티비티가 PIP 표시를 지원하는지 여부를 나타냅니다. android:resizeableActivity가 false인 경우 이 특성이 +무시됩니다. +

+ +
+android:supportsPictureInPicture=["true" | "false"]
+
+ +

레이아웃 특성

+ +

+ Android N에서 <layout> 매니페스트 요소는 +다중 창 모드에서 액티비티가 동작하는 방식에 영향을 미치는 +여러 특성을 지원합니다. +

+ +
+
+ android:defaultWidth +
+ +
+ 자유형식 모드에서 시작될 때 액티비티의 기본 너비. +
+ +
+ android:defaultHeight +
+ +
+ 자유형식 모드에서 시작될 때 액티비티의 기본 높이. +
+ +
+ android:gravity +
+ +
+ 자유형식 모드에서 시작될 때 액티비티의 초기 배치. 적합한 값은 +{@link android.view.Gravity} 참조를 참조하세요. +
+ +
+ android:minimalSize +
+ +
+ 화면 분할 +및 자유형식 모드에서 액티비티의 최소 높이 및 최소 너비. 사용자가 화면 분할 모드에서 디바이더를 이동하여 액티비티를 +지정된 최소값보다 더 작게 만드는 경우, 시스템은 +이 액티비티를 사용자가 요청한 크기로 자릅니다. +
+
+ +

+ 예를 들어, 다음 코드는 액티비티가 자유형식 모드로 표시될 +때 이 액티비티의 기본 크기와 위치 및 최소 크기를 +지정하는 방법을 보여줍니다. +

+ +
+<activity android:name=".MyActivity">
+    <layout android:defaultHeight="500dp"
+          android:defaultWidth="600dp"
+          android:gravity="top|end"
+          android:minimalSize="450dp" />
+</activity>
+
+ +

앱을 다중 창 모드에서 실행

+ +

+ Android N에서는 다중 창 모드에서 실행 가능한 앱을 지원하는 새로운 +기능을 제공합니다. +

+ +

다중 창 모드에서 비활성화되는 기능

+ +

+ 기기가 다중 창 모드에 있는 경우 일부 기능이 비활성화되거나 +무시되는데, 그 이유는 이들 기능은 기기 화면을 다른 액티비티 +또는 앱과 공유하는 액티비티에는 적합하지 않기 때문입니다. 이러한 기능에는 다음이 포함됩니다. + +

    +
  • 일부 시스템 UI +사용자 지정 옵션이 비활성화됩니다. 예를 들어, 앱이 전체 화면 모드에서 실행되지 +않을 경우에는 상태 표시줄을 숨길 수 없습니다. +
  • + +
  • 시스템이 android:screenOrientation 특성의 변경을 무시합니다. +
  • +
+ +

다중 창 변경 알림 및 쿼리

+ +

+ 다중 창 표시를 지원하기 위해 다음과 같은 새 메서드가 {@link android.app.Activity} +클래스에 추가되었습니다. 각 메서드에 대한 자세한 내용은, +N Preview SDK 참조를 참조하세요. +

+ +
+
+ Activity.inMultiWindow() +
+ +
+ 액티비티가 다중 창 모드에 있는지를 알아내려면 호출합니다. +
+ +
+ Activity.inPictureInPicture() +
+ +
+ 액티비티가 PIP 모드에 있는지를 알아내려면 호출합니다. + +

+ 참고: PIP 모드는 다중 창 모드의 특별한 +케이스입니다. myActivity.inPictureInPicture()가 +true를 반환하면, myActivity.inMultiWindow()도 또한 +true를 반환합니다. +

+
+ +
+ Activity.onMultiWindowChanged() +
+ +
+ 시스템은 액티비티가 다중 창 모드로 들어가거나 +이 모드에서 나올 때마다 이 메서드를 호출합니다. 시스템은 액티비티가 다중 창 모드로 +들어갈 때는 true 값을 메서드에 전달하고, 액티비티가 다중 창 모드에서 +나올 때는 false를 전달합니다. +
+ +
+ Activity.onPictureInPictureChanged() +
+ +
+ 시스템은 액티비티가 PIP 모드로 들어가거나 +이 모드에서 나올 때마다 이 메서드를 호출합니다. 시스템은 액티비티가 PIP 모드로 들어갈 때는 +true 값을 메서드에 전달하고, 액티비티가 PIP에서 나올 때는 +false를 전달합니다. +
+
+ +

+ 또한 이들 각 메서드의 {@link android.app.Fragment} 버전이 +있습니다(예: Fragment.inMultiWindow()). +

+ +

PIP 모드로 들어가기

+ +

+ 액티비티를 PIP 모드에 두려면, 새로운 메서드인 +Activity.enterPictureInPicture()를 호출합니다. 기기가 PIP 모드를 지원하지 않으면 이 메서드는 +영향이 없습니다. 자세한 내용은 +PIP 문서를 참조하세요. +

+ +

다중 창 모드에서 새 액티비티 시작

+ +

+ 새 액티비티를 시작하는 경우, 가능하면 이 새 액티비티가 현재 +액티비티에 인접하여 표시되어야 함을 시스템에게 알려줄 수 있습니다. 이를 위해 +, 플래그 +Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT를 사용합니다. 이 플래그를 전달하면 +다음과 같은 동작이 요청됩니다. +

+ +
    +
  • 기기가 화면 분할 모드에 있는 경우, +시스템은 시작한 액티비티 옆에 새 액티비티를 만들려고 시도하므로, 두 액티비티가 +화면을 공유합니다. 시스템이 이 작업을 수행할 수 있다고 +보장되지는 않지만, 가능하면 액티비티를 인접하게 만듭니다. +
  • + +
  • 기기가 화면 분할 모드에 있으면, 이 플래그가 영향을 미치지 않습니다. +
  • +
+ +

+ 기기가 자유형식 모드에 있고 새 액티비티를 시작 중인 경우, +ActivityOptions.setLaunchBounds()를 호출하여 이 새 액티비티의 치수와 화면 위치를 +지정할 수 있습니다. 기기가 다중 창 모드에 있지 않으면, 이 메서드가 영향을 +미치지 않습니다. +

+ +

+ 참고: 작업 스택 내에서 액티비티를 시작하는 경우, +이 액티비티는 화면상의 액티비티를 대체하여, 모든 다중 창 속성을 +상속합니다. 새 액티비티를 다중 창 모드에서 별도 창으로 시작하려면, +새 작업 스택에서 액티비티를 시작해야 합니다. +

+ +

끌어서 놓기 지원

+ +

+ 사용자는 두 +액티비티가 화면을 공유하는 동안 한 액티비티에서 다른 액티비티로 데이터를 끌어서 놓을 +수 있습니다. (이전에는, 사용자가 단일 액티비티 내에서만 데이터를 끌어서 +놓을 수 있었습니다.) 이러한 이유로, 앱이 현재 지원하지 않는 경우에는 끌어서 놓기 +기능을 앱에 추가하는 것이 좋습니다. +

+ +

+ N Preview SDK는 앱 간의 끌어서 놓기를 지원하기 위해 android.view +패키지를 확장합니다. 다음과 같은 클래스와 메서드에 대한 자세한 +내용은, N Preview +SDK 참조를 참조하세요. +

+ +
+
+ android.view.DropPermissions +
+ +
+ 놓기를 수신하는 앱에 부여되는 권한을 지정하기 +위한 토큰 객체. +
+ +
+ View.startDragAndDrop() +
+ +
+ {@link android.view.View#startDrag View.startDrag()}의 새 별칭. 액티비티 간의 끌어서 놓기를 활성화하려면, 새 플래그 +View.DRAG_FLAG_GLOBAL을 +전달합니다. 수신자 액티비티에게 URI 권한을 +부여해야 하는 경우, 새 플래그 +View.DRAG_FLAG_GLOBAL_URI_READ 또는 +View.DRAG_FLAG_GLOBAL_URI_WRITE를 적절하게 전달합니다. +
+ +
+ View.cancelDragAndDrop() +
+ +
+ 현재 진행 중인 끌기 작업을 취소합니다. 끌기 작업을 발생시킨 +앱에 의해서만 호출될 수 있습니다. +
+ +
+ View.updateDragShadow() +
+ +
+ 현재 진행 중인 끌기 작업의 끌기 그림자를 대체합니다. 끌기 작업을 발생시킨 +앱에 의해서만 호출될 수 있습니다. +
+ +
+ Activity.requestDropPermissions() +
+ +
+ {@link android.view.DragEvent}에 포함된 {@link +android.content.ClipData}로 전달되는 콘텐츠 URI의 권한을 요청합니다. +
+
+ +

앱의 다중 창 지원 테스트

+ +

+ 앱을 Android N용으로 업데이트하든 안하든 간에, +Android N이 실행 중인 기기에서 사용자가 앱을 다중 창 모드로 +시작하려고 시도하는 경우, 앱이 다중 창 모드에서 어떻게 작동하는지 확인해야 합니다. +

+ +

테스트 기기 구성

+ +

+ 기기에 Android N을 설치하면, 화면 분할 모드가 +자동으로 지원됩니다. +

+ +

앱이 N Preview SDK로 작성되지 않은 경우

+ +

+ 앱을 N Preview SDK로 작성하지 않았는데 사용자가 +앱을 다중 창 모드에서 사용하려고 시도하는 경우, 이 앱이 고정 방향을 선언하지 +않으면 시스템이 앱의 크기를 강제로 조정합니다. +

+ +

+ 앱이 고정 방향을 선언하지 않은 경우, Android N이 +실행 중인 기기에서 앱을 시작해야 하며, 앱을 화면 분할 모드에 +두도록 시도해야 합니다. 앱의 크기를 강제로 조정하는 경우 사용자 경험이 +적절한지 확인하세요. +

+ +

+ 앱이 고정 방향을 선언하는 경우, 앱을 다중 창 모드에 +두도록 시도해야 합니다. 이 때 앱이 전체 화면 모드에 남아있는지 +확인하세요. +

+ +

다중 창 모드를 지원하는 경우

+ +

+ N Preview SDK로 앱을 작성했는데 다중 창 지원을 비활성화하지 +않은 경우, 화면 분할 및 자유형식 모드에서 다음과 +같은 동작을 확인하세요. +

+ +
    +
  • 앱을 전체 화면 모드에서 시작한 다음, Overview 버튼을 길게 눌러서 +다중 창 모드로 전환합니다. 앱이 적절히 전환되는지 확인합니다. +
  • + +
  • 앱을 다중 창 모드에서 직접 시작하고, 이 앱이 적절히 +시작되는지 확인합니다. 다중 창 모드에서 앱을 시작하려면, Overview 버튼을 +누르고 앱의 제목 표시줄을 길게 누른 다음 화면의 강조 표시된 영역 중 +하나로 제목 표시줄을 끌어서 놓습니다. +
  • + +
  • 분할선을 끌어서 화면 분할 모드에서 앱의 크기를 조정합니다. + 작동 중단 없이 앱 크기가 조정되는지 확인하고, 필요한 +UI 요소가 표시되는지 확인합니다. +
  • + +
  • 앱에 최소 치수를 지정한 경우, 이 치수 아래로 앱 크기를 +조정해 봅니다. 지정된 최소값보다 더 작게 앱 크기를 조정할 수 +없는지 확인합니다. +
  • + +
  • 모든 테스트를 통해 앱의 성능이 적절한지 확인합니다. 예를 들어, +앱 크기를 조정한 후에, 업데이트하기에 지연이 +너무 길지 않은지 확인합니다. +
  • +
+ +

테스트 검사 목록

+ +

+ 다중 창 모드에서 앱의 성능을 확인하려면, 다음 +작업을 시도해 보세요. 별다른 설명이 없는 한, 화면 분할 및 다중 창 모드 +에서 모두 이들 작업을 시도해야 합니다. +

+ +
    +
  • 다중 창 모드에 들어갔다 나갑니다. +
  • + +
  • 자신의 앱에서 다른 앱으로 전환하고, 앱이 표시는 되지만 +활성화되지 않은 동안에 적절히 동작하는지 확인합니다. 예를 들어, 앱이 동영상을 재생 중인 경우, 사용자가 +다른 앱과 상호작용하는 동안에 이 동영상이 계속 재생되는지 +확인합니다. +
  • + +
  • 화면 분할 모드에서, 분할선을 이동하여 앱을 더 크거나 +작게 만들어 봅니다. 앱을 나란히 또는 상하로 놓은 구성에서 이러한 +작업을 시도해 봅니다. 앱의 작동이 중단되지 않는지, 필수 기능이 +표시되는지, 그리고 크기 조정 작업이 너무 오래 걸리지 않는지 +확인합니다. +
  • + +
  • 빠르게 연속해서 여러 가지 크기 조정 작업을 수행합니다. 앱의 작동이 중단되거나 메모리가 누수되지 +않는지 확인합니다. 앱의 메모리 사용량을 확인하는 +방법에 대해서는 RAM 사용량 +검사를 참조하세요. +
  • + +
  • 여러 가지 다른 창 구성에서 앱을 정상적으로 +사용하고, 이 앱이 제대로 작동하는지 확인합니다. 텍스트를 읽을 수 있는지 확인하고, 해당 +UI 요소가 상호작용하기에 너무 작지 않은지 확인합니다. +
  • +
+ +

다중 창 지원을 비활성화한 경우

+ +

+ android:resizableActivity="false"를 설정하여 +다중 창 지원을 비활성화한 경우, Android N을 실행 중인 기기에서 +앱을 시작해야 하며, 앱을 자유형식 및 화면 +분할 모드로 둬야 합니다. 이 때 앱이 전체 화면 모드에 남아있는지 +확인하세요. +

diff --git a/docs/html-intl/intl/ko/preview/features/multilingual-support.jd b/docs/html-intl/intl/ko/preview/features/multilingual-support.jd new file mode 100644 index 000000000000..eb8e8a7e97ed --- /dev/null +++ b/docs/html-intl/intl/ko/preview/features/multilingual-support.jd @@ -0,0 +1,214 @@ +page.title=언어 및 로케일 +@jd:body + + + +

Android N은 다국어 사용자를 위한 지원을 개선해서 +설정에서 여러 로케일을 선택할 수 있습니다. Android N은 +지원되는 로케일 수를 대폭 확대하고 +시스템이 리소스를 결정하는 방식을 변경하여 이 기능을 제공합니다. 새로 도입된 리소스 결정 방법은 +더욱 안정적이고 기존 APK와 호환되도록 설계되어 있지만 +예상치 못한 동작이 없는지 신중히 살펴봐야 합니다. 예를 들어, +앱이 예상 언어로 기본 설정되어 있는지 테스트해야 합니다. 또한, +앱이 여러 언어를 지원한다면 +원하는 대로 작동하는지 확인해야 합니다. 마지막으로 +앱이 지원하도록 명시하지 않은 언어를 무리 없이 처리하는지 확인해야 합니다.

+ +

이 문서에서는 +Android N 이전의 리소스 결정 전략을 설명한 뒤에, Android N의 개선된 +리소스 결정 전략을 설명합니다. 마지막으로 +더 많은 다국어 사용자를 지원하기 위해 확장된 로케일을 활용하는 방법을 설명합니다.

+ +

언어 리소스 결정에서의 과제

+ +

Android N 이전의 Android는 +앱과 시스템 로케일을 매칭하지 못하는 경우도 있었습니다. 예를 들어, 앱의 기본 언어가 +미국 영어지만 {@code es_ES} + 리소스 파일에 스페인어 문자열도 현지화되어 있습니다.

+

Java 코드가 문자열을 참조할 때 다음과 같이 문자열 언어를 +결정합니다.

+
    +
  • 기기가 {@code es_MX}(멕시코 스페인어)로 설정되어 있으면 Android는 +{@code es_ES} 리소스 파일에서 문자열을 로드합니다.
  • +
  • 기기가 {@code en_AU}로 설정되어 있으면 Android는 {@code +en_US}로 돌아갑니다. 또한, 사용자가 앱에서 전혀 지원하지 않는 언어(예: 프랑스어)를 선택하면 시스템이 기본값을 {@code en_US}로 +설정합니다.
  • +
+ + +

시스템이 정확한 일치를 찾지 못하면 +로케일의 국가 코드를 삭제하기 때문에 이러한 결정 문제가 발생합니다. 예:

+

+표 1. 정확한 로케일 일치가 없는 경우 리소스 결정. +

+ + + + + + + + + + + + + +
사용자 설정앱 리소스리소스 결정
fr_CH +기본값(en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+fr_CH 시도 => 실패
+fr 시도 => 실패
+기본값(en) 사용 +
+ + +

이 예시에서 시스템은 +사용자가 영어를 이해할 수 있는지 여부와 관계없이 영어 문자열을 표시합니다. 현재 이러한 동작이 상당히 +일반적입니다. Android N은 이런 +결과가 나타나는 빈도를 상당히 낮추었습니다.

+ +

리소스 결정 전략 개선

+

Android N은 더욱 안정적인 리소스 결정을 사용하고 +자동으로 더욱 알맞은 대안책을 찾습니다. 그러나 결정 속도를 높이고 +관리성을 개선하려면 가장 일반적인 상위 방언에 리소스를 저장해야 합니다. + 예를 들어, 전에 {@code es-US} 디렉터리에 +스페인어 리소스를 저장했다면 남미 스페인어가 있는 {@code es-419} 디렉터리로 이동합니다. + 마찬가지로 {@code en-GB}란 폴더에 리소스 문자열이 있다면 +폴더 이름을 {@code en-001}(국제 영어)로 변경합니다. +en-GB 문자열의 가장 일반적인 상위 리소스는 {@code en-001}이기 때문입니다. + 다음은 이러한 방법이 +성능과 리소스 결정의 신뢰성을 개선하는 이유를 설명하는 예시입니다.

+ +

리소스 결정 예시

+ +

Android N의 경우, 표 1의 사례는 +다르게 결정됩니다.

+ +

+표 2. 정확한 로케일 일치가 없을 경우 +개선된 결정 전략.

+ + + + + + + + + + + + +
사용자 설정앱 리소스리소스 결정
    +
  1. fr_CH
  2. +
+
+기본값(en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+fr_CH 시도 => 실패
+fr 시도 => 실패
+Fr의 하위 리소스 시도 => fr_FR
+fr_FR 사용 +
+ + +

이제 사용자는 영어 대신 프랑스어 리소스를 보게 됩니다. 이 예시는 +Android N에서 프랑스어 문자열을 {@code fr_FR} +이 아니라 {@code fr}에 저장해야 하는 이유를 알 수 있습니다. 이러한 동작을 통해 가장 가까운 상위 방언과 일치시켜서 +더욱 빠르고 예측 가능하게 결정합니다.

+ +

Android는 이러한 결정 논리를 개선했을 뿐만 아니라 +선택 가능한 언어를 더 많이 제공합니다. 위의 예시에 이탈리아어가 추가 사용자 언어로 지정되었지만 +앱에서 프랑스어를 지정하지 않는 경우를 적용해 보겠습니다.

+ +

+표 3. 앱이 사용자의 두 번째 선호 로케일 설정에만 일치할 때 +리소스 결정.

+ + + + + + + + + + + + + + +
사용자 설정앱 리소스리소스 결정
    +
  1. fr_CH
  2. +
  3. it_CH
  4. +
+
+기본값(en)
+de_DE
+es_ES
+it_IT
+
+fr_CH 시도 => 실패
+fr 시도 => 실패
+fr의 하위 리소스 시도 => 실패
+it_CH 시도 => 실패
+it 시도 => 실패
+it의 하위 리소스 시도 => it_IT
+it_IT 사용 +
+

앱이 프랑스어를 지원하지 않지만 +사용자는 여전히 자신이 이해하는 언어를 볼 수 있습니다.

+ + +

추가 로케일 지원을 위한 앱 설계

+

LocaleList API

+ +

Android N에서는 앱이 사용자가 지정한 언어 목록을 직접 쿼리할 수 있는 새로운 API {@code LocaleList.GetDefault()} +가 추가되었습니다. 이 API는 +앱 동작을 더욱 정교하게 해주고 +콘텐츠 표시 최적화를 개선합니다. 예를 들어, 검색 시 +사용자 설정에 따라 여러 언어로 결과를 표시할 수 있습니다. 브라우저 앱은 +사용자가 이미 알고 있는 언어로 +번역 페이지를 제공하지 않고, 키보드 앱은 모든 적절한 레이아웃을 자동 활성화할 수 있습니다.

+ +

포맷터

+ +

Android 6.0(API 레벨 23)까지 Android는 많은 공통 언어(en, es, ar, fr, ru)에 대해 +1~2개의 로케일만 +지원했습니다. 각 언어의 변종은 몇 개뿐이기 때문에 +리소스 파일에 하드코딩된 문자열로 몇 개의 숫자와 날짜를 저장하는 것만으로 +충분했습니다. 그러나 Android에서 지원되는 로케일 세트가 확장되면서 +단일 로케일 내에서조차 +날짜, 시간, 통화 및 유사 정보에 +큰 차이가 생길 수 있게 되었습니다. 형식 하드코딩은 +최종 사용자에게 혼란을 줄 수 있습니다. 그러므로 Android N을 개발할 때는 +숫자와 날짜 문자열을 하드코딩하는 대신 포맷터를 사용하도록 하세요.

+ +

가장 좋은 예시로는 아랍어가 있습니다. Android N에서 아랍어 지원이 +{@code ar_EG} 1개에서 27개 아랍어 로케일로 확장되었습니다. 이러한 로케일은 대부분의 리소스를 공유할 수 있지만 +어떤 로케일은 ASCII 숫자를 선호하고 어떤 로케일은 네이티브 숫자를 선호합니다. 예를 들어, +"4자리 핀 선택"과 같은 숫자 변수가 포함된 문장을 생성하려면 +아래와 같이 포맷터를 사용합니다.

+ +
 format(locale, "Choose a %d-digit PIN", 4)
diff --git a/docs/html-intl/intl/ko/preview/features/notification-updates.jd b/docs/html-intl/intl/ko/preview/features/notification-updates.jd new file mode 100644 index 000000000000..16f4dade34d8 --- /dev/null +++ b/docs/html-intl/intl/ko/preview/features/notification-updates.jd @@ -0,0 +1,328 @@ +page.title=알림 +page.tags=notifications +helpoutsWidget=true +page.image=/preview/images/notifications-card.png + +trainingnavtop=true + +@jd:body + +
+
+ + +

이 문서의 내용

+
    +
  1. 직접 회신
  2. +
  3. 묶음 알림
  4. +
  5. 사용자 지정 뷰
  6. +
+ +
+
+ +

Android N에서는 앱이 가시성과 상호작용이 뛰어난 알림을 +게시할 수 있도록 여러 새로운 API를 소개합니다.

+ +

Android N에서는 핸드셋에서 인라인 회신을 지원하기 위해 기존의 {@link android.support.v4.app.RemoteInput} +알림 API를 확장합니다. 이 기능을 사용하면 앱을 방문하지 않고도 알림 창에서 +신속하게 응답할 수 있습니다.

+ +

+ Android N에서는 또한 비슷한 알림을 묶어서 단일 알림으로 +표시할 수도 있습니다. 이것이 가능하도록, Android N에서는 기존의 {@link + android.support.v4.app.NotificationCompat.Builder#setGroup + NotificationCompat.Builder.setGroup()} 메서드를 사용합니다. 사용자가 각 알림을 확장할 수 있으며, 각 알림에 대해 회신 및 +닫기와 같은 동작을 알림 창에서 개별적으로 수행할 +수 있습니다. +

+ +

마지막으로, Android N에서는 또한 앱의 사용자 지정된 알림 +뷰에서 시스템 장식을 활용할 수 있는 새 API를 추가합니다. 이들 API는 표준 템플릿을 통해 알림 뷰가 +일관된 프레젠테이션을 공유하도록 보장해 +줍니다.

+ +

이 문서에서는 새 알림 기능을 앱에서 사용할 때 고려해야 +하는 몇 가지 주요 변경 사항을 중점적으로 다룹니다.

+ +

직접 회신

+ +

Android N에 있는 직접 회신 기능을 사용하여, 사용자가 문자 +메시지에 신속하게 응답하거나 알림 인터페이스 내에서 직접 +작업 목록을 업데이트할 수 있습니다. 핸드헬드에서 인라인 회신 동작은 알림에 연결된 추가적인 +버튼으로 나타납니다. 사용자가 키보드를 통해 회신하면, +시스템은 여러분이 알림 동작에 지정했던 +인텐트에 텍스트 응답을 첨부하고 이 인텐트를 +핸드헬드 앱으로 보냅니다. + + + +

+ 그림 1. Android N이 회신 +동작 버튼을 추가합니다. +

+ +

인라인 회신 동작 추가

+ +

직접 회신을 지원하는 알림 동작을 만들려면: +

+ +
    +
  1. 알림 동작에 추가할 수 있는 {@link android.support.v4.app.RemoteInput.Builder}의 +인스턴스를 +만듭니다. 이 클래스의 생성자는 시스템이 문자 입력의 키로 +사용하는 문자열을 수락합니다. 나중에 핸드헬드 앱은 이 키를 사용하여 입력 텍스트를 +검색합니다. + +
    +// Key for the string that's delivered in the action's intent
    +private static final String KEY_TEXT_REPLY = "key_text_reply";
    +String replyLabel = getResources().getString(R.string.reply_label);
    +RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
    +        .setLabel(replyLabel)
    +        .build();
    +
    +
  2. +
  3. addRemoteInput()을 사용하여 {@link android.support.v4.app.RemoteInput} +객체를 동작에 첨부합니다. + +
    +// Create the reply action and add the remote input
    +Notification.Action action =
    +        new Notification.Action.Builder(R.drawable.ic_reply_icon,
    +                getString(R.string.label), replyPendingIntent)
    +                .addRemoteInput(remoteInput)
    +                .build();
    +
    +
  4. + +
  5. 동작을 알림에 적용하고 알림을 발생합니다. + +
    +// Build the notification and add the action
    +Notification notification =
    +        new Notification.Builder(mContext)
    +                .setSmallIcon(R.drawable.ic_message)
    +                .setContentTitle(getString(R.string.title))
    +                .setContentText(getString(R.string.content))
    +                .addAction(action))
    +                .build();
    +
    +// Issue the notification
    +NotificationManager notificationManager =
    +        NotificationManager.from(mContext);
    +notificationManager.notify(notificationId, notification);
    +
    +
    +
  6. + +
+ + +

시스템이 사용자에게 알림 동작이 트리거될 때 응답을 입력하라는 +메시지를 표시합니다.

+ + +

+ 그림 2. 사용자가 알림 창에서 텍스트를 입력합니다. +

+ +

인라인 회신에서 사용자 입력 검색

+ +

회신 동작의 인텐트에 선언한 액티비티에 대해 알림 +인터페이스로부터 사용자 입력을 수신하려면:

+
    +
  1. 알림 동작의 인텐트를 입력 매개변수로서 전달하여 {@link android.support.v4.app.RemoteInput#getResultsFromIntent + getResultsFromIntent()}를 +호출합니다. 이 메서드는 텍스트 응답이 포함된 {@link android.os.Bundle}을 +반환합니다. +
  2. + +
    +Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
    +
    + +
  3. ({@link + android.support.v4.app.RemoteInput.Builder} 생성자에 제공된) 결과 키를 사용하여 번들을 쿼리합니다. +
  4. +
+ +

다음 코드 조각에서는 메서드가 번들로부터 입력 텍스트를 +검색하는 방법을 보여줍니다.

+ +
+// Obtain the intent that started this activity by calling
+// Activity.getIntent() and pass it into this method to
+// get the associated string.
+
+private CharSequence getMessageText(Intent intent) {
+    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+    if (remoteInput != null) {
+            return remoteInput.getCharSequence(KEY_TEXT_REPLY);
+            }
+    return null;
+ }
+
+ +

검색된 텍스트에 어떤 동작을 취할지를 결정하기 위해 +앱이 로직을 적용할 수 있습니다. +채팅과 같은 대화형 앱은 알림 자체에서 더 많은 컨텍스트를 +제공하므로(예: 사용자 자신의 메시지를 포함한 여러 줄의 채팅 기록) +사용자가 적절하게 응답할 수 있습니다. +사용자가 {@link android.support.v4.app.RemoteInput}을 통해 응답하는 경우, {@code setRemoteInputHistory()} +메서드로 텍스트를 회신 기록에 +포함시킵니다.

+ +

묶음 알림

+ +

Android N에서는 일련의 알림을 표시하기 위한 새로운 방식을 +개발자에게 제공합니다. 묶음 알림. 이것은 +Android Wear의 알림 +스택 기능과 유사합니다. 예를 들어, 수신된 메시지에 대해 앱이 알림을 생성하는 경우, +둘 이상의 메시지가 수신되면 그 알림을 하나의 +단일 그룹으로 묶습니다. 기존의 +{@link android.support.v4.app.NotificationCompat.Builder#setGroup +Builder.setGroup()} 메서드를 사용하여 유사한 알림을 묶을 수 있습니다.

+ +

+ 알림 그룹은 이 그룹을 구성하는 알림을 계층 구조로 만듭니다 . + 계층 구조의 맨 위는 그룹의 요약 정보가 표시되는 상위 +알림입니다. 사용자는 알림 그룹을 점진적으로 확장할 수 있으며, 시스템은 +사용자가 더 깊이 파고들수록 더 많은 정보를 +표시합니다. 사용자가 번들을 확장하면 시스템은 모든 하위 알림에 대해 +더 많은 정보를 표시하며, 사용자가 이들 알림 중 하나를 확장하면 +시스템은 알림의 전체 콘텐츠를 표시합니다. +

+ + +

+ 그림 3. 사용자는 알림 그룹을 점진적으로 확장할 수 +있습니다. +

+ +

알림을 그룹에 추가하는 방법을 알아보려면, +각 +알림을 그룹에 추가를 참조하세요.

+ + +

묶음 알림의 모범 사례

+

이 섹션에서는 이전 버전의 Android 플랫폼에서 +사용되었던 {@link android.app.Notification.InboxStyle InboxStyle} 알림 대신에 +알림 그룹을 사용할 때의 지침을 +제공합니다.

+ +

묶음 알림을 사용하는 경우

+ +

자신의 사용 사례에서 다음의 모든 조건이 충족되는 경우에만 +알림 그룹을 사용해야 합니다.

+ +
    +
  • 하위 알림은 완전한 알림이며 그룹 요약이 필요 없이 +개별적으로 표시될 수 있습니다.
  • +
  • 다음은 하위 알림을 개별적으로 표시할 때의 이점입니다. 예: + +
  • +
      +
    • 알림이 실행 가능하며, 각 하위 알림에 맞는 동작이 있습니다.
    • +
    • 사용자가 읽고 싶어하는 하위 알림에 더 많은 정보가 있습니다.
    • +
    +
+ +

알림 그룹의 사용 사례에 대한 좋은 예로는, 수신 메시지의 +목록을 표시하는 메시징 앱이나 수신된 이메일의 목록을 표시하는 +이메일 앱이 있습니다.

+ +

+단일 알림이 바람직한 사례의 예로는, 한 사람이 보낸 +개별 메시지나 1줄 텍스트 항목의 목록 표시가 +있습니다. 이를 수행하기 위해 +({@link android.app.Notification.InboxStyle InboxStyle} 또는 +{@link android.app.Notification.BigTextStyle BigTextStyle})을 사용할 +수 있습니다. +

+ +

묶음 알림 표시

+ +

+ 그룹에 하나의 하위 항목만 포함되어 있더라도 앱은 +항상 그룹 요약을 게시해야 합니다. 하나의 알림만 포함된 경우에는 시스템이 요약을 +억제하고 하위 알림을 직접 표시합니다. 이렇게 하면 사용자가 그룹의 +하위 항목을 스와이프할 때 시스템이 일관된 경험을 제공할 수 +있습니다. +

+ +

+ 참고: 이 버전의 Android N에서는 아직 단일 하위 +항목이 포함된 알림 그룹에 대해 요약을 억제하지 않습니다. 이 +기능은 이후 버전의 Android N에 추가될 것입니다. +

+ +

피킹 알림

+ +

시스템은 +일반적으로 하위 알림을 그룹으로 표시하지만, +이 알림이 일시적으로 헤드업 알림으로 +나타나도록 설정할 수 있습니다. 이 기능을 사용하면 가장 최근의 하위 항목과 이에 +관련된 동작에 즉시 액세스할 수 있으므로 특히 유용합니다. +

+ + +

이전 버전과의 호환성

+ +

+ Android 5.0 (API 레벨 21) 이후로, 알림 그룹과 +원격 입력은 Android Wear 기기를 지원하기 위한 {@link + android.app.Notification} API의 일부였습니다. 이미 이들 API로 알림을 작성한 경우 수행할 조치는, +앱 동작이 위에 설명된 지침과 일치하는지 확인하고 {@code + setRemoteInputHistory()} 구현을 +고려하는 것입니다. +

+ +

+ 이전 버전과의 호환성을 지원하기 위해, +지원 라이브러리의 {@link android.support.v4.app.NotificationCompat} 클래스로 동일한 +API를 사용할 수 있으며, 이전 Android 버전에서 작동하는 알림을 작성할 +수 있습니다. 핸드헬드와 태블릿에서는 요약 알림만 사용자에게 보이므로, +앱은 해당 그룹의 전체 정보 콘텐츠에 대해 받은편지함 +스타일이나 이와 동등한 알림 표시를 계속 가져야 합니다. Android +Wear 기기에서는 구형 플랫폼 레벨에서도 +사용자가 모든 하위 알림을 볼 수 있으므로, API 레벨에 상관없이 하위 알림을 +작성해야 합니다. +

+ +

사용자 지정 뷰

+

Android N부터는 알림 뷰를 사용자 지정할 수 있으며 +알림 헤더, 동작 및 확장 가능한 레이아웃과 같은 시스템 장식을 계속 +획득할 수 있습니다.

+ +

이 기능을 활성화하기 위해, Android N에서는 다음과 +같은 API를 추가하여 사용자 지정 뷰의 스타일을 지정합니다.

+ +
+
+{@code DecoratedCustomViewStyle()}
+
미디어 알림 이외의 스타일 +알림.
+
+{@code DecoratedMediaCustomViewStyle()}
+
스타일 미디어 알림.
+
+ +

이 새로운 API를 사용하려면, {@code setStyle()} 메서드를 호출하여, +원하는 사용자 지정 뷰 스타일에 전달합니다.

+ +

이 코드 조각은 +{@code DecoratedCustomViewStyle()} 메서드로 사용자 지정 알림 객체를 구성하는 방법을 보여줍니다.

+ +
+Notification noti = new Notification.Builder()
+           .setSmallIcon(R.drawable.ic_stat_player)
+           .setLargeIcon(albumArtBitmap))
+           .setCustomContentView(contentView);
+           .setStyle(new Notification.DecoratedCustomViewStyle())
+           .build();
+
+
diff --git a/docs/html-intl/intl/ko/preview/features/picture-in-picture.jd b/docs/html-intl/intl/ko/preview/features/picture-in-picture.jd new file mode 100644 index 000000000000..74472b5a545e --- /dev/null +++ b/docs/html-intl/intl/ko/preview/features/picture-in-picture.jd @@ -0,0 +1,186 @@ +page.title=PIP +page.keywords=preview,sdk,PIP,Picture-in-picture +page.tags=androidn + +@jd:body + + + +

Android N에서 Android TV 사용자는 +앱 안에서 탐색할 때 화면 모서리의 고정 창에서 +동영상을 볼 수 있습니다. PIP(Picture-in-picture) 모드를 사용하면 +앱의 백그라운드에서 다른 액티비티를 계속하면서 +고정 창에서 동영상 액티비티를 실행할 수 있습니다. PIP 창에서 사용자는 앱을 사용하는 동안 멀티태스킹이 가능하므로 +생산성이 향상됩니다.

+ +

앱이 PIP 모드를 실행할 시기를 결정할 수 있습니다. PIP 모드로 진입하는 시기와 관련된 몇 가지 +예시:

+ +
    +
  • 사용자가 동영상에서 다른 콘텐츠를 탐색하러 이동할 때 앱이 +동영상을 PIP 모드로 이동할 수 있습니다.
  • +
  • 사용자가 콘텐츠 에피소드의 끝부분을 볼 때 앱이 +동영상을 PIP 모드로 전환할 수 있습니다. 메인 화면은 시리즈 다음 에피소드의 +홍보 또는 요약 정보를 표시합니다.
  • +
  • 사용자가 동영상을 보는 동안 앱이 +추가 콘텐츠를 대기열에 올릴 수 있는 방법을 제공할 수 있습니다. 메인 화면에 콘텐츠 선택 액티비티가 표시되는 동안 +동영상이 PIP 모드에서 계속 재생됩니다.
  • +
+ +

PIP 창은 240x135dp이고 +화면 모서리 4개 중 하나에서 가장 위쪽 레이어에 표시되며, 시스템이 선택합니다. 사용자는 +리모컨의 Home 버튼을 눌러 +PIP 창을 전체 화면으로 전환하거나 PIP를 닫는 PIP 메뉴를 불러올 수 있습니다. 다른 동영상이 +메인 화면에서 재생되기 시작하면 PIP 창이 +자동으로 닫힙니다. 사용자가 Recents를 통해서 PIP 창을 닫을 수도 있습니다.

+ + +

그림 1. 사용자가 메인 화면에서 콘텐츠를 탐색하는 동안 +화면 모서리에 표시되는 PIP 동영상. +

+ +

PIP는 Android N에서 사용할 수 있는 다중 창 API를 사용하여 +고정된 동영상 오버레이 창을 제공합니다. 앱에 PIP를 추가하려면 +PIP를 지원하는 액티비티를 등록하고 필요한 경우 액티비티를 PIP 모드로 전환해야 합니다. 또한 +액티비티가 PIP 모드에 있을 때 UI 요소가 숨겨지고 동영상 재생이 +계속되는지 확인해야 합니다.

+ +

액티비티의 PIP 지원 선언

+ +

기본적으로 시스템은 앱에 대해 PIP를 자동으로 지원하지 않습니다. +앱에서 PIP를 지원하려면 +android:supportsPictureInPicture와 +android:resizeableActivitytrue로 설정하여 매니페스트에서 동영상 액티비티를 +등록합니다. 또한, +PIP 모드 전환 시 레이아웃 변경이 일어날 때 액티비티가 다시 시작되지 않도록 +액티비티가 레이아웃 구성 변화를 처리하게 지정합니다.

+ +
+<activity android:name="VideoActivity"
+    android:resizeableActivity="true"
+    android:supportsPictureInPicture="true"
+    android:configChanges=
+        "screenSize|smallestScreenSize|screenLayout|orientation"
+    ...
+
+ +

액티비티를 등록할 때는 PIP 모드에서 +액티비티가 TV 화면의 작은 오버레이 창에 표시된다는 것을 기억하세요. 최소 UI를 포함한 +동영상 재생 액티비티가 가장 좋은 사용자 경험을 제공합니다. 작은 UI 요소를 포함한 +액티비티는 PIP 모드로 전환할 때 +사용자가 PIP 창의 UI 요소를 상세히 볼 수 없으므로 +좋은 사용자 경험을 제공하지 못할 수 있습니다.

+ +

액티비티를 PIP로 전환

+ +액티비티를 PIP 모드로 전환해야 하는 경우 +Activity.enterPictureInPicture()를 호출합니다. 다음은 사용자가 미디어 컨트롤 막대에서 전용 PIP 버튼을 선택했을 때 +PIP 모드로 전환하는 예시입니다. +

+ +
+@Override
+public void onActionClicked(Action action) {
+    if (action.getId() == R.id.lb_control_picture_in_picture) {
+        getActivity().enterPictureInPicture();
+        return;
+    }
+    ...
+
+ +

미디어 제어 막대에 PIP 버튼을 추가하면 +사용자가 동영상 재생을 제어하면서 PIP 모드로 쉽게 전환할 수 있습니다.

+ + +

그림 1. 미디어 컨트롤 막대의 PIP +버튼.

+ +

Android N에는 컨트롤 막대 PIP 동작을 정의하고 PIP 아이콘을 사용하는 새로운 +PlaybackControlsRow.PictureInPictureAction 클래스가 포함되어 있습니다. +

+ +

PIP에서 UI 처리

+ +

액티비티가 PIP 모드로 들어가면 +동영상 재생만 표시됩니다. 액티비티가 PIP 모드로 들어가기 전에 UI 요소를 제거하고 +액티비티가 다시 전체 화면이 되었을 때 이 요소를 복원합니다. +필요에 따라 Activity.onPictureInPictureChanged() 또는 +Fragment.onPictureInPictureChanged()을 재정의하고 +UI 요소를 활성화/비활성화합니다. 예:

+ +
+@Override
+public void onPictureInPictureChanged(boolean inPictureInPicture) {
+    if (inPictureInPicture) {
+        // Hide the controls in picture-in-picture mode.
+        ...
+    } else {
+        // Restore the playback UI based on the playback status.
+        ...
+    }
+}
+
+ +

+PIP에서 동영상 재생 지속

+ +

액티비티가 PIP 모드로 전환되면 시스템은 +액티비티가 일시 정지된 상태에 있다고 간주하고 액티비티의 onPause() 메서드를 호출합니다. 동영상 +재생은 일시 정지되어서는 안되며 PIP 모드로 인해 액티비티가 일시 정지되었다면 +계속 재생되어야 합니다. 액티비티의 +onPause() 메서드에서 PIP를 확인하고 적절히 재생을 처리합니다. 예: +

+ +
+@Override
+public void onPause() {
+    // If called due to PIP, do not pause playback
+    if (inPictureInPicture()) {
+        // Continue playback
+        ...
+    }
+    // If paused but not in PIP, pause playback if necessary
+    ...
+}
+
+ +

액티비티가 PIP 모드에서 전체 화면 모드로 전환되면, +시스템이 액티비티를 재시작하고 onResume() 메서드를 호출합니다.

+ +

모범 사례

+ +

PIP는 전체 화면 동영상을 재생하는 액티비티용입니다. 액티비티를 +PIP 모드로 전환할 때는 동영상 콘텐츠만 표시하세요. +PIP에서 UI 처리에서 설명한 바와 같이 액티비티가 PIP 모드로 들어갈 때 +추적하고 UI 요소를 숨깁니다.

+ +

PIP 창이 화면 모서리에 떠 있는 창으로 표시되므로 +PIP 창으로 가려질 수 있는 영역에는 메인 화면에서 +중요한 정보를 표시하지 말아야 합니다.

+ +

액티비티가 PIP 모드일 때는 기본적으로 입력 포커스를 받지 않습니다. PIP 모드에서 +입력 이벤트를 수신하려면 +MediaSession.setMediaButtonReceiver()를 사용합니다.

diff --git a/docs/html-intl/intl/ko/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/ko/preview/features/scoped-folder-access.jd new file mode 100644 index 000000000000..8eaf4c934a32 --- /dev/null +++ b/docs/html-intl/intl/ko/preview/features/scoped-folder-access.jd @@ -0,0 +1,124 @@ +page.title=범위가 지정된 디렉터리 액세스 +page.keywords=preview,sdk,scoped directory access +page.tags=androidn + +@jd:body + + + +

일반적으로 사진 앱과 같은 앱은 +Pictures 디렉터리 등 외부 저장소의 특정 디렉터리에만 액세스하면 됩니다. 기존 외부 저장소 액세스 방식은 +이런 유형의 앱에 대상화된 디렉터리 액세스를 쉽게 +제공하지 못합니다. 예:

+ +
    +
  • 매니페스트에서 {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} +또는 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE}를 요청하면 +외부 저장소의 모든 공개 디렉터리에 액세스할 수 있습니다. +이는 앱에 필요한 것보다 과도한 액세스를 제공할 수 있습니다.
  • +
  • 일반적으로, +저장소 +액세스 프레임워크를 사용하면 시스템 UI를 통해 사용자가 디렉터리를 +선택할 수 있습니다. 앱이 항상 동일한 외부 디렉터리에 액세스한다면 +필요 없는 동작입니다.
  • +
+ +

Android N은 일반 외부 저장소 디렉터리에 액세스하기 위한 +단순화된 새로운 API를 제공합니다.

+ +

외부 저장소 디렉터리 액세스

+ +

StorageManager 클래스를 사용하여 적절한 +StorageVolume 인스턴스를 가져옵니다. 그 후, 해당 인스턴스의 +StorageVolume.createAccessIntent() 메서드를 호출하여 인텐트를 생성합니다. +이 인텐트로 외부 저장소 디렉터리에 액세스합니다. 이동식 미디어 볼륨을 포함한 +모든 이용 가능한 볼륨 목록을 가져오려면 +StorageManager.getVolumesList()를 사용합니다.

+ +

다음 코드 조각은 기본 공유 저장소의 +Pictures 디렉터리를 여는 방법에 대한 예시입니다.

+ +
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

시스템이 외부 디렉터리에 액세스 권한을 부여하고자 시도하고, +필요에 따라 단순화된 UI를 사용하는 사용자의 액세스를 확인합니다.

+ + +

그림 1. Pictures 디렉터리에 +액세스를 요청하는 애플리케이션.

+ +

사용자가 액세스 권한을 부여하면, 시스템이 +Activity.RESULT_OK의 결과 코드가 포함된 +onActivityResult() 재정의와 URI가 포함된 인텐트 데이터를 호출합니다. 제공된 +URI를 사용하여 디렉터리 정보에 액세스합니다. +저장소 +액세스 프레임워크가 +반환한 URI를 사용하는 것과 유사합니다.

+ +

사용자가 액세스 권한을 부여하지 않으면 시스템이 +Activity.RESULT_CANCELED의 결과 코드가 포함된 +onActivityResult() 재정의와 null 인텐트 데이터를 호출합니다.

+ +

참고: 특정 외부 디렉터리에 대한 액세스 권한을 얻으면 +해당 디렉터리의 하위 디렉터리에 대한 액세스 권한도 얻게 됩니다.

+ +

이동식 미디어의 디렉터리 액세스

+ +

범위가 지정된 디렉터리 액세스를 사용하여 이동식 미디어의 디렉터리에 액세스하려면 +먼저 다음과 같은 +{@link android.os.Environment#MEDIA_MOUNTED} 알림을 수신하는 {@link android.content.BroadcastReceiver}를 추가합니다.

+ +
+<receiver
+    android:name=".MediaMountedReceiver"
+    android:enabled="true"
+    android:exported="true" >
+    <intent-filter>
+        <action android:name="android.intent.action.MEDIA_MOUNTED" />
+        <data android:scheme="file" />
+    </intent-filter>
+</receiver>
+
+ +

사용자가 SD 카드 등의 이동식 미디어를 장착하면 시스템이 +{@link android.os.Environment#MEDIA_MOUNTED} 알림을 보냅니다. 이 알림은 +이동식 미디어 디렉터리에 액세스하는 데 사용할 수 있는 인텐트 데이터의 StorageVolume 객체를 +제공합니다. 다음은 +이동식 미디어의 Pictures 디렉터리에 액세스하는 예시입니다.

+ +
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+    mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

모범 사례

+ +

가능하면, 사용자에게 액세스 권한을 반복적으로 요청하지 않도록 외부 디렉터리 액세스 URI를 +변경하지 마세요. 사용자가 액세스 권한을 부여하면 디렉터리 액세스 URI로 +getContentResolver().takePersistableUriPermssion()를 +호출합니다. 시스템이 URI를 유지하고 이후 액세스 요청에서는 +RESULT_OK를 반환하고 사용자에게 확인 UI를 +표시하지 않습니다.

+ +

사용자가 외부 디렉터리 액세스를 거부하면 +다시 즉시 액세스를 요청하지 마세요. 액세스를 반복적으로 요청하는 것은 +나쁜 사용자 경험을 제공하게 됩니다.

diff --git a/docs/html-intl/intl/ko/preview/features/security-config.jd b/docs/html-intl/intl/ko/preview/features/security-config.jd new file mode 100644 index 000000000000..505df814d261 --- /dev/null +++ b/docs/html-intl/intl/ko/preview/features/security-config.jd @@ -0,0 +1,744 @@ +page.title=네트워크 보안 구성 +page.keywords=preview,security,network + +@jd:body + + + + +

+ Android N에는 앱 코드를 수정하지 않고 앱이 안전한 선언 +구성 파일에서 네트워크 보안 설정을 사용자 지정할 수 있는 +네트워크 보안 구성 기능이 포함되어 있습니다. 이 설정은 +특정 도메인과 특정 앱에 대해 구성할 수 있습니다. 이 기능의 +핵심 기능: +

+ +
    +
  • + 사용자 지정 신뢰 앵커: 앱의 보안 연결에 대해 신뢰할 수 있는 인증 기관(CA)을 +사용자 지정합니다. 예를 들어, +특정한 자체 서명 인증서를 신뢰하거나 +앱이 신뢰하는 공개 CA 세트를 제한합니다. +
  • + +
  • + 디버그 전용 재정의: 설치된 기반에 위험을 더하지 않고도, 앱의 보안 연결을 안전하게 +디버그할 수 있습니다. +
  • + +
  • + 일반 텍스트 트래픽 옵트아웃: 일반 텍스트 트래픽을 실수로 사용하지 +않도록 앱을 보호합니다. +
  • + +
  • + 인증서 고정: 앱의 안전한 연결을 특정 인증서로 +제한합니다. +
  • +
+ + +

보안 구성 파일 추가

+ +

+ 네트워크 보안 구성 기능은 XML 파일을 사용해서 +앱의 설정을 지정합니다. 앱 매니페스트에 이 파일을 가리키는 항목을 +포함해야 합니다. 매니페스트에서 발췌한 다음 코드는 +이 항목을 생성하는 방법을 보여줍니다. +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+...
+<app ...>
+    <meta-data android:name="android.security.net.config"
+               android:resource="@xml/network_security_config" />
+    ...
+</app>
+
+ +

신뢰할 수 있는 CA 사용자 지정

+ +

+ 앱에서 플랫폼 기본값 대신 사용자 지정 CA 세트를 +신뢰하고자 할 수 있습니다. 가장 일반적인 이유는 다음과 같습니다. +

+ +
    +
  • 사용자 지정 인증 기관(자체 서명한 인증서, +국제 기업 CA에서 발급한 인증서 등)을 포함한 호스트에 연결. +
  • + +
  • 모든 사전 설치된 CA 대신 신뢰할 수 있는 CA로만 +CA 세트를 제한. +
  • + +
  • 시스템에 포함되지 않은 추가 CA 신뢰. +
  • +
+ +

+ 기본적으로 모든 앱으로부터 안전한(예: TLS, HTTPS) 연결은 사전 설치된 시스템 CA를 신뢰하고, +API 레벨 23(Android M) +이하를 대상으로 하는 앱도 사용자가 추가한 CA 스토어를 기본적으로 신뢰합니다. 앱은 +{@code base-config}(앱 +전체 사용자 지정) 또는 {@code domain-config}(도메인별 +사용자 지정)를 사용하여 연결을 사용자 지정할 수 있습니다. +

+ + +

사용자 지정 CA 구성

+ +

+ 자체 서명된 +인증서를 사용하는 호스트나 신뢰할 수 있는 비공개 CA(예: 사내 CA)에서 발급한 SSL 인증서를 사용하는 호스트에 +연결할 경우를 가정합시다. +

+ +

+ res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ 자체 서명된 인증서 또는 비공개 CA 인증서를 PEM 또는 DER 형식으로 +{@code res/raw/my_ca}에 추가합니다. +

+ + +

신뢰할 수 있는 CA 세트 제한

+ +

+ 앱에서 시스템이 신뢰하는 CA 중 일부를 신뢰하지 않으려면, 대신 +신뢰할 CA 세트를 줄여서 지정할 수 있습니다. 이 방법은 +다른 CA에서 발급된 허위 인증서로부터 앱을 보호해줍니다. +

+ +

+ 신뢰할 수 있는 CA 세트를 제한하는 구성은 특정 도메인에서 사용자 지정 CA를 신뢰하는 것과 비슷하지만 +여러 CA가 리소스에서 제공된다는 점이 다릅니다. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">secure.example.com</domain>
+        <domain includeSubdomains="true">cdn.example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/trusted_roots"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ 신뢰할 수 있는 CA를 PEM 또는 DER 형식으로 {@code res/raw/trusted_roots}에 추가합니다. + PEM 형식을 사용할 경우 파일에 PEM 데이터 포함되고 +다른 추가 텍스트가 포함되어서는 안 됩니다. 또한 한 개가 아니라 여러 개의 +<certificates> +요소를 제공할 수 있습니다. +

+ + +

+ 추가 CA 신뢰 +

+ +

+ 앱에서 시스템이 신뢰하지 않는 CA를 신뢰하고자 한다면, +이는 시스템에 해당 CA가 아직 포함되지 않았거나 CA가 Android 시스템에 포함되기 위한 +요구사항을 충족하지 못했기 때문일 수 있습니다. +구성에 대해 여러 개의 인증서 소스를 지정하면 +신뢰할 수 있는 CA를 추가할 수 있습니다. +

+

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="@raw/extracas"/>
+            <certificates src="system"/>
+        </trust-anchors>
+    </base-config>
+</network-security-config>
+
+

+ + +

디버그용 CA 구성

+ +

+ HTTPS로 연결되는 앱을 디버그할 때 +프로덕션 서버에 대해 SSL 인증서가 없는 로컬 개발 서버에 +연결하고자 할 수도 있습니다. 앱 코드를 수정하지 않고 +이 기능을 지원하려면 +{@code debug-overrides}를 사용하여android:debuggable +이 {@code true}일 때만 신뢰할 수 있는 디버그 전용 CA를 +지정할 수 있습니다. 일반적으로 IDE와 빌드 도구는 비 릴리스 빌드에 대해 +이 플래그를 자동으로 설정합니다. +

+ +

+ 보안 예방 조치로 앱 스토어에서 +디버그 가능으로 표시된 앱은 허용하지 않기 때문에 +일반적인 조건 코드보다 안전합니다. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="@raw/debug_cas"/>
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+

+ + +

일반 텍스트 트래픽 옵트아웃

+ +

+ 보안 연결만 사용하여 대상에 연결하는 애플리케이션은 해당 +대상에 대해 일반 텍스트를 지원하는 기능(HTTPS 대신 암호화되지 않은 HTTP +사용)을 옵트아웃할 수 있습니다. 이 옵션은 +백엔드 서버 등의 외부 소스가 제공하는 URL의 변경 사항으로 인해 +앱에서 우연히 회귀가 일어나지 않도록 예방합니다. + 자세한 내용은 {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted + NetworkSecurityPolicy.isCleartextTrafficPermitted()}를 참조하세요. +

+ +

+ 예를 들어, 앱에서 적대적 네트워크로부터 민감한 트래픽을 보호하기 위해 {@code + secure.example.com}에 대한 연결은 항상 HTTPS를 통해서만 수행되도록 +할 수 있습니다. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config usesCleartextTraffic="false">
+        <domain includeSubdomains="true">secure.example.com</domain>
+    </domain-config>
+</network-security-config>
+
+

+ + +

인증서 고정

+ +

+ 일반적으로 앱은 모든 사전 설치된 CA를 신뢰합니다. 이러한 CA에서 +허위 인증서를 발급한다면 앱이 MiTM +공격에 노출될 위험이 있습니다. 일부 앱은 신뢰하는 CA 세트를 제한하거나 +인증서를 고정하는 방식으로 허용하는 인증서 세트를 제한합니다. +

+ +

+ 인증서 고정은 +공개 키 해시(X.509인증서의 SubjectPublicKeyInfo)로 인증서 세트를 제공하는 방식으로 수행됩니다. 그러면 인증서 체인에 +하나 이상의 고정된 공개 키가 있어야만 +인증서 체인이 유효합니다. +

+ +

+ 인증서 고정을 사용할 때는 언제나 백업 키를 포함해야 +새로운 키로 강제 전환하거나 CA를 변경할 경우( +CA 인증서 또는 해당 CA의 중간 CA에 고정할 경우) +앱 연결이 영향을 받지 않습니다. 그렇지 않으면 +연결을 복구하기 위해 앱에 업데이트를 내보내야 합니다. +

+ +

+ 또한, 고정을 수행하지 않게 되면 핀 만료 시간을 +설정할 수 있습니다. 이는 업데이트되지 않은 앱에서 +연결 문제를 예방해 줍니다. 그러나 핀에 만료 시간을 설정하면 +고정 우회가 가능할 수도 있습니다. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <pin-set expiration="2018-01-01">
+            <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+            <!-- backup pin -->
+            <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+    </domain-config>
+</network-security-config>
+
+

+ + +

구성 상속 동작

+ +

+ 특정 구성에서 설정되지 않은 값을 상속합니다. 이 동작은 구성 파일을 읽을 수 있게 유지하면서도 +더욱 복잡한 구성이 가능합니다. +

+ +

+ 특정 항목에 값이 설정되지 않았다면 +그 다음으로 일반적인 항목의 값이 사용됩니다. {@code domain-config}에서 설정되지 않은 값은 +중첩될 경우 상위 {@code domain-config}에서 가져오고 그렇지 않을 경우 {@code + base-config}에서 가져옵니다. {@code base-config}에서 설정되지 않은 값은 +플랫폼 기본 값을 사용합니다. +

+ +

+ 예를 들어, {@code + example.com}의 하위 도메인에 대한 모든 연결은 사용자 지정 CA 세트를 사용해야 합니다. 또한, 이러한 도메인에 대한 일반 텍스트 트래픽은 +{@code + secure.example.com}에 연결할 때를 제외하고 허용됩니다. {@code example.com} 구성 내부에 {@code + secure.example.com} 구성을 중첩하면 +{@code trust-anchors}를 복제하지 않아도 됩니다. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+        <domain-config cleartextTrafficPermitted="false">
+            <domain includeSubdomains="true">secure.example.com</domain>
+        </domain-config>
+    </domain-config>
+</network-security-config>
+
+

+ + +

구성 파일 형식

+ +

+ 네트워크 보안 구성 기능은 XML 파일 형식을 사용합니다. + 파일의 전반적 구조는 다음 코드 샘플에 나타나 있습니다. +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </base-config>
+
+    <domain-config>
+        <domain>android.com</domain>
+        ...
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+        <pin-set>
+            <pin digest="...">...</pin>
+            ...
+        </pin-set>
+    </domain-config>
+    ...
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+ +

+ 다음 섹션에서는 이 파일 형식의 구문과 +기타 세부 정보를 설명합니다. +

+ +

+ <network-security-config> +

+ +
+
+ 다음을 포함할 수 있습니다. +
+ +
+ <base-config> 0 또는 1개
+ <domain-config> 임의의 개수
+ <debug-overrides> 0 또는 1개 +
+
+ +

+ <base-config> +

+ +
+
+ 구문: +
+
+ +
+<base-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</base-config>
+
+
+
+ 다음을 포함할 수 있습니다. +
+ +
+ <trust-anchors> +
+ +
+ 설명: +
+ +
+ 대상이 +domain-config에 포함되지 않는 모든 연결에서 사용하는 기본 구성. + +

+ 설정되지 않은 값은 플랫폼 기본값을 사용합니다. API 레벨 24 이상을 대상으로 하는 +앱의 기본 구성: +

+ +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+    </trust-anchors>
+</base-config>
+
+API 레벨 23 이하를 대상으로 하는 앱의 기본 구성: +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+        <certificates src="user" />
+    </trust-anchors>
+</base-config>
+
+ +
+
+ +

<domain-config>

+
+
구문:
+
+
<domain-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</domain-config>
+
+ +
다음을 포함할 수 있습니다.
+ +
+<domain> 1개 이상 +
<trust-anchors> 0 또는 1개 +
<pin-set> 0 또는 1개 +
중첩된 <domain-config> 임의의 개수
+ +
설명
+
{@code domain} 요소에서 정의한 특정 대상에 대한 연결에 사용되는 구성. + +

여러 {@code domain-config} 요소에서 대상을 포함하는 경우 가장 구체적인(긴) +일치 도메인이 포함된 구성이 사용됩니다.

+
+ + +

<domain>

+ +
+
+ 구문: +
+ +
+
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+
+
+ +
+ 특성: +
+ +
+
+
+ {@code includeSubdomains} +
+ +
+ {@code "true"}인 경우 이 도메인 규칙이 도메인 및 모든 하위 도메인(하위 도메인의 하위 도메인 포함)과 +일치합니다. 그렇지 않을 경우 이 규칙은 +정확한 일치에만 적용됩니다. +
+
+
+ +
+ 설명: +
+
+ +

<debug-overrides>

+ +
+
+ 구문: +
+ +
+
+<debug-overrides>
+    ...
+</debug-overrides>
+
+
+ +
+ 다음을 포함할 수 있습니다. +
+ +
+ <trust-anchors> 0 또는 1개 +
+ +
+ 설명: +
+ +
+ android:debuggable +가 {@code "true"}일 때 재정의를 적용합니다. 일반적으로 +IDE와 빌드 도구에서 생성한 비 릴리스 빌드에 해당합니다. {@code + debug-overrides}에서 지정된 신뢰 앵커를 모든 다른 구성에 추가하고, +서버의 인증서 체인이 이러한 +디버그 전용 신뢰 앵커 중 하나를 사용하면 고정을 수행하지 않습니다. android:debuggable +이 {@code "false"}이면 이 섹션은 완전히 무시합니다. +
+
+ +

<trust-anchors>

+
+
+ 구문: +
+ +
+
+<trust-anchors>
+...
+</trust-anchors>
+
+
+ +
+ 다음을 포함할 수 있습니다. +
+ +
+ <certificates> 임의의 개수 +
+ +
+ 설명: +
+ +
+ 보안 연결에 대한 신뢰 앵커 세트. +
+
+ + +

<certificates>

+
+
구문:
+
<certificates src=["system" | "user" | "raw resource"]
+              overridePins=["true" | "false"] />
+
+
설명:
+
{@code trust-anchors} 요소에 대한 X.509 인증서 세트.
+ +
특성:
+
+
{@code src}
+
+CA 인증서 소스는 다음 중 하나가 될 수 있습니다. +
    +
  • X.509 인증서를 포함한 파일을 가리키는 원시 리소스 ID. + 인증서는 DER 또는 PEM 형식으로 암호화해야 합니다. PEM 인증서의 경우, +파일에는 코멘트와 같은 PEM이 아닌 추가 데이터가 +포함되어서는 안 됩니다. +
  • + +
  • 사전 설치된 시스템 CA 인증서의 {@code "system"} +
  • + +
  • 사용자가 추가한 CA 인증서의 {@code "user"} +
  • +
+
+ +
{@code overridePins}
+
+

+ 이 소스의 CA가 인증서 고정을 우회할지 지정합니다. {@code + "true"}이고 인증서 체인이 이 소스의 CA 중 하나를 통해 묶일 경우 +고정을 수행하지 않습니다. 디버그 CA 또는 +사용자가 앱의 보안 트래픽을 MiTM하도록 지원할 때 유용합니다. +

+ +

+ {@code debug-overrides} +요소에서 지정되지 않은 경우 기본값은 {@code "false"}입니다. 지정된 경우 기본값은 {@code "true"}입니다. +

+
+
+
+ + +

<pin-set>

+ +
+
+ 구문: +
+ +
+
+<pin-set expiration="date">
+...
+</pin-set>
+
+
+ +
+ 다음을 포함할 수 있습니다. +
+ +
+ <pin> 임의의 개수 +
+ +
+ 설명: +
+ +
+ 공개 키 핀 세트. 신뢰할 수 있는 보안 연결은 +신뢰 체인의 공개 키 중 하나가 핀 세트에 포함되어야 합니다. 핀 형식은 +<pin>를 참조하세요. +
+ +
+ 특성: +
+ +
+
+
+ {@code expiration} +
+ +
+ 핀 만료 당일과 그 이후의 {@code yyyy-MM-dd} 형식 날짜로, +핀이 비활성화됩니다. 이 특성이 설정되지 않으면 +핀이 만료되지 않습니다. +

+ 만료는 사용자가 앱 업데이트를 비활성화하는 등과 같이 +핀 세트가 업데이트되지 않는 앱에서 +연결 문제를 예방하는 데 유용합니다. +

+
+
+
+
+ +

<pin>

+
+
+ 구문: +
+ +
+
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+    SubjectPublicKeyInfo (SPKI)</pin>
+
+
+ +
+ 특성: +
+ +
+
+
+ {@code digest} +
+ +
+ 핀을 생성하는 데 사용된 다이제스트 알고리즘. 현재 +{@code "SHA-256"}만 지원됩니다. +
+
+
+
diff --git a/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd b/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd new file mode 100644 index 000000000000..73bba1f2bd7f --- /dev/null +++ b/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd @@ -0,0 +1,120 @@ +page.title=TV 녹화 +page.keywords=preview,sdk,tv,recording +page.tags=androidn + +@jd:body + + + +

TV 입력 서비스를 이용하면 +타임 시프팅 API를 통해 채널 재생을 일시 정지했다가 다시 시작할 수 있습니다. Android N에서는 사용자가 여러 개의 녹화된 세션을 저장할 수 있도록 함으로써 +타임 시프팅을 확장합니다.

+ +

사용자는 미리 녹화를 예약하거나 프로그램을 보면서 녹화를 +시작할 수 있습니다. 시스템이 녹화물을 저장하면 사용자는 시스템 TV 앱을 사용하여 +녹화물을 탐색, 관리, 재생할 수 있습니다.

+ +

TV 입력 서비스에 녹화 기능을 제공하고 싶다면 +앱이 녹화를 지원한다는 것을 시스템에 나타내고 +프로그램을 녹화하는 기능을 구현하고, 녹화 중 발생하는 오류를 처리 및 전달하고, +녹화된 세션을 관리해야 합니다.

+ +

녹화 지원 나타내기

+ +

TV 입력 서비스가 녹화를 지원한다는 것을 시스템에 알리려면 +다음 절차를 따르세요.

+ +
    +
  1. TvInputService.onCreate() 메서드에서 TvInputInfo.Builder +클래스를 사용하여 +TvInputInfo 객체를 생성합니다.
  2. +
  3. 새로운 TvInputInfo 객체를 생성할 때 build() 를 호출하기 전에 +setCanRecord(true)를 호출하여 +서비스가 녹화를 지원한다는 것을 나타냅니다.
  4. +
  5. +TvInputService.updateTvInputInfo()를 호출하여 시스템에 TvInputInfo 객체를 등록합니다.
  6. +
+ +

세션 녹화

+ +

TV 입력 서비스가 녹화 기능을 지원하도록 등록한 후, +시스템은 앱의 녹화 구현에 액세스해야 할 때 +TvInputService.onCreateRecordingSession()을 호출합니다. + 자체적인 +TvInputService.RecordingSession 서브클래스를 구현하고 +onCreateRecordingSession() 콜백이 +실행되면 이를 반환합니다. 이 서브클래스는 정확한 채널 데이터로 전환하고, +요청된 데이터를 녹화하고, 녹화 상태와 오류를 시스템에 +전송하는 역할을 담당합니다.

+ +

시스템이 RecordingSession.onTune()을 호출하면 +채널 URI에 전달되고, URI가 지정하는 채널에 맞춰 조정됩니다. +notifyTuned()를 호출해서 앱이 원하는 채널에 맞춰졌음을 시스템에 알리거나 +앱이 적절한 채널에 맞출 수 없으면 +notifyError()를 호출합니다.

+ +

이어서 시스템이 RecordingSession.onStartRecording() +콜백을 호출합니다. 앱이 즉시 녹화를 시작해야 합니다. 시스템이 이 콜백을 호출하면, +녹화될 프로그램에 관한 정보가 포함된 URI를 제공할 수 있습니다. + 녹화가 완료되면 이 +데이터를 RecordedPrograms 데이터 테이블에 복사해야 합니다.

+ +

마지막으로 시스템이 RecordingSession.onStopRecording()을 호출합니다. +이 시점에서 앱이 즉시 녹화를 중단해야 합니다. 또한, +RecordedPrograms 테이블에서 항목을 생성해야 합니다. 이 항목에는 +RecordedPrograms.COLUMN_RECORDING_DATA_URI 열의 녹화된 세션 데이터 URI, +최초 +onStartRecording() 호출에서 시스템이 제공한 프로그램 정보가 포함됩니다. +

+ +

RecordedPrograms 테이블에 액세스하는 자세한 방법은 +녹화된 세션 관리를 참조하세요.

+ +

녹화 오류 처리

+ +

녹화 중에 오류가 발생해서 녹화된 데이터 렌더링을 사용할 수 없을 경우, +RecordingSession.notifyError()를 호출하여 시스템에 알립니다. +마찬가지로 녹화 세션이 생성된 이후 notifyError()를 호출하여 +앱이 더 이상 세션을 녹화하지 못한다는 것을 시스템에 알릴 수 있습니다.

+ +

녹화 중에 오류가 발생했지만 +사용자에게 재생 가능한 부분 녹화물을 제공하고 싶다면 +RecordingSession.notifyRecordingStopped()를 호출하여 시스템이 +부분 세션을 사용할 수 있게 합니다.

+ +

녹화된 세션 관리

+ +

시스템은 TvContract.RecordedPrograms +콘텐츠 제공자 테이블에 모든 녹화 가능한 채널 앱에서 녹화된 +모든 세션에 관한 정보를 보관합니다. 이 정보는 +RecordedPrograms.Uri 콘텐츠 URI를 통해 액세스할 수 있습니다. 콘텐츠 제공자 API를 사용하여 +이 테이블의 항목을 읽고, 추가하고, 삭제합니다.

+ +

콘텐츠 제공자 데이터에 관한 자세한 정보는 + +콘텐츠 제공자 기본 정보를 참조하세요.

+ +

모범 사례

+ +

TV 기기는 저장소가 제한될 수 있으므로 +녹화된 세션을 저장할 저장소를 할당할 때는 신중히 판단하세요. 녹화된 세션을 저장할 공간이 부족할 때는 +RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)를 사용하세요. +

+ +

사용자가 녹화를 시작하면 최대한 빨리 데이터 녹화를 +시작해야 합니다. 이를 용이하게 하려면 +시스템이 +onCreateRecordingSession() 콜백을 호출할 때 저장소 액세스 및 할당 등과 같이 선행 시간이 많이 걸리는 작업을 완료합니다. 이렇게 하면 +onStartRecording() 콜백이 +실행될 때 즉시 녹화를 시작할 수 있습니다.

diff --git a/docs/html-intl/intl/ko/preview/index.jd b/docs/html-intl/intl/ko/preview/index.jd new file mode 100644 index 000000000000..eaecb5bc7ffd --- /dev/null +++ b/docs/html-intl/intl/ko/preview/index.jd @@ -0,0 +1,120 @@ +page.title=Android N Developer Preview +page.tags="preview","developer" +meta.tags="프리뷰", "android" +fullpage=true +forcelocalnav=true +header.hide=1 +footer.hide=1 +@jd:body + + + +
+
+
+ +
+

Android N Developer Preview

+

+ Android N을 맞이할 준비를 하세요! + Nexus와 다른 기기에서 앱을 테스트하세요. 새로운 시스템 + 동작을 지원하여 전력과 메모리를 절약하세요. + 다중 창 UI, + 직접 회신 알림 등으로 앱을 확장하세요. +

+ + + + 시작하기 + +
+
+ +
+
+
+
+
+
+
+ + + + + +
+

리소스

+
+ 앱을 Android N에서 사용할 수 있도록 준비하는 데 유용한 중요 정보입니다. +
+ +
+ +
+
+ diff --git a/docs/html-intl/intl/ko/preview/j8-jack.jd b/docs/html-intl/intl/ko/preview/j8-jack.jd new file mode 100644 index 000000000000..67738b81709f --- /dev/null +++ b/docs/html-intl/intl/ko/preview/j8-jack.jd @@ -0,0 +1,183 @@ +page.title=Java 8 언어 기능 +page.keywords="android N", "Java 8", "Jack" +@jd:body + + + +

Android N은 Java 8 언어 기능을 지원합니다. +Java 8 언어 기능은 Android N을 대상으로 하는 앱을 개발할 때 사용할 수 있습니다. +이 페이지에서는 Android N Preview에서 지원되는 새로운 언어 기능과, +프로젝트를 적절히 설정하여 언어 기능을 사용하는 방법, +발생할 수도 있는 알려진 문제를 설명합니다. +

+ +

이 기능을 사용하려면 Android +Studio 2.1(프리뷰)와 Android N Preview SDK를 다운로드하고 설정해야 합니다. 여기에는 필수 +Jack 툴체인과 업데이트된 Gradle용 Android 플러그인이 포함됩니다. 아직 +Android N Preview SDK를 설치하지 않았다면 Android N용 개발 설정을 참조하세요.

+ + + +

+ 참고: 새로운 Java 8 언어 기능은 +Android N 플랫폼을 대상으로 하는 앱 개발에 필요한 요구 사항은 아닙니다. +Java 8 언어 기능으로 코드를 작성하고 싶지 않다면, +프로젝트의 소스와 대상 호환성 값을 Java 7로 설정할 수 있지만 +Android N 플랫폼용으로 구축하려면 JDK 8로 컴파일해야 합니다. +

+ +

+ 지원되는 Java 8 언어 기능 및 API +

+ +

+ Android는 현재 모든 Java 8 언어 기능을 지원하지 않습니다. 그러나 현재 다음 기능은 +Android N Preview를 대상으로 하는 +앱을 개발할 때 이용할 수 있습니다. +

+ + + + +

+ 또한, 다음 Java 8 언어 기능 API를 사용할 수 있습니다. +

+ +
    +
  • Reflection 및 언어 관련 API: +
  • + +
  • +
      +
    • {@code java.lang.FunctionalInterface} +
    • + +
    • {@code java.lang.annotation.Repeatable} +
    • + +
    • {@code java.lang.reflect.Method.isDefault()} +
    • + +
    • 반복 가능한 주석과 관련된 Reflection API + 예: {@code AnnotatedElement.getAnnotationsByType(Class)} +
    • +
    +
  • +
  • Utility API: +
  • + +
  • +
      +
    • {@code java.util.function} +
    • +
    +
  • +
+ +

+ 참고: Android N은 익명 클래스에 대한 람다 식의 구현을 +기반으로 합니다. 이 방식을 사용하면 +이전 버전과 호환되고 이전 버전의 Android에서 실행할 수 있습니다. +이전 버전에서 람다 식을 테스트하려면 {@code + build.gradle} 파일에서 {@code compileSdkVersion}과 {@code + targetSdkVersion}을 23 이하로 설정하십시오. +

+ +

+ Java 8 기능 및 Jack 툴체인 활성화 +

+ +

+ 새로운 Java 8 언어 기능을 사용하려면 +새로운 Jack 툴체인을 사용해야 합니다. 이 새로운 +Android 툴체인은 Java 언어 소스를 Android에서 읽을 수 있는 Dex +바이트코드로 컴파일하고, 자체 {@code .jack} 라이브러리 형식이 있으며, 단일 도구로는 가장 많은 툴체인 +기능(리패키징, 축소, 난독화, 멀티덱스)을 +제공합니다. +

+ +

다음은 Android DEX 파일을 빌드하는 데 사용하는 2개의 툴체인을 비교한 것입니다.

+
    +
  • 레거시 javac 툴체인:
    + javac ({@code .java} --> {@code .class}) --> dx ({@code + .class} --> {@code .dex}) +
  • + +
  • 새로운 Jack 툴체인:
    + Jack ({@code .java} --> {@code .jack} --> {@code .dex}) +
  • +
+ +

+ Gradle 구성 +

+ +

+ 프로젝트에서 Java 8 언어 기능과 Jack을 활성화하려면 +모듈별 {@code build.gradle} 파일에 다음을 입력합니다. +

+ +
+android {
+  ...
+  defaultConfig {
+    ...
+    jackOptions {
+      enabled true
+    }
+  }
+  compileOptions {
+    sourceCompatibility JavaVersion.VERSION_1_8
+    targetCompatibility JavaVersion.VERSION_1_8
+  }
+}
+
+ +

+ 알려진 문제 +

+ +

+ Android Studio 2.0(베타)에 도입된 Instant Run은 +현재 Jack과 호환되며 새로운 툴체인을 사용하는 동안 비활성화됩니다. +

+ +

Jack이 앱을 컴파일할 때 중간 클래스 파일을 생성하지 않으므로 +이런 파일에 의존하는 도구는 현재 Jack과 호환되지 않습니다. 이러한 도구의 예시는 +다음과 같습니다.

+ +
    +
  • 클래스 파일에 적용되는 Lint 탐지기 +
  • + +
  • 앱의 클래스 파일이 필요한 도구와 라이브러리(예: JaCoCo + 및 Mockito)
  • +
+ +

Jack을 사용하는 동안 다른 문제를 발견하면 버그를 보고해주세요.

\ No newline at end of file diff --git a/docs/html-intl/intl/ko/preview/overview.jd b/docs/html-intl/intl/ko/preview/overview.jd new file mode 100644 index 000000000000..a7ee3d3078e2 --- /dev/null +++ b/docs/html-intl/intl/ko/preview/overview.jd @@ -0,0 +1,440 @@ +page.title=프로그램 개요 +page.metaDescription=앱에서 차기 버전의 Android를 사용할 수 있도록 준비하세요. +page.image=images/cards/card-n-overview_2x.png +meta.tags="프리뷰", "developer", "android" +page.tags="preview", "developer", "android" + +@jd:body + + +

+ Android N Developer Preview에 오신 것을 환영합니다. 이 프로그램은 +차기 버전의 Android에 대해 앱을 테스트하고 최적화하는 데 필요한 +모든 것을 제공합니다. 이 프로그램은 무료이고, +N Developer Preview 도구를 다운로드하면 바로 시작할 수 있습니다. +

+ + + + + + + +
+
+
+
+
+ 하드웨어 및 에뮬레이터 이미지 +
+ +

+ 다양한 기기 또는 에뮬레이터에서 앱을 실행하고 테스트하세요. + +

+
+ +
+
+ 최신 플랫폼 코드 +
+ +

+ Preview 동안 월별 업데이트를 제공할 예정이며 따라서 여러분은 항상 최신 플랫폼 변경에 대해 테스트할 수 있습니다. +

+
+ +
+
+ 개발자 문제의 우선순위 +
+ +

+ Google에서는 처음 몇 주 동안 개발자가 보고한 문제에 우선 순위를 부여할 예정이므로, +가능한 빨리 테스트하고 피드백을 보내 주세요. +

+
+ +
+ +
+ + +
+
+ 새로운 동작 및 기능 +
+ +

+ 새로운 플랫폼 동작을 지원하고 새로운 기능으로 개발하려면 작업을 일찍 시작하세요. +

+
+ +
+
+ 업데이트를 OTA로 전달 +
+ +

+ Android 베타 프로그램을 통해 모든 지원되는 기기에서 매끄럽게 무선으로 업데이트합니다 +. 플래시가 필요없습니다. +

+
+ +
+
+ 피드백 및 지원 +
+ +

+ +Issue Tracker를 사용하여 문제를 보고하고 피드백을 보내 주세요. +N 개발자 커뮤니티에서 +다른 개발자와 연락하세요. +

+
+
+
+
+ + + +

일정 및 업데이트

+ + +

+ N Developer Preview는 2016년 3월 9일부터 2016년 3분기로 예정된 +AOSP 및 OEM에 Android N 최종 공개 릴리스까지 진행됩니다. +

+ +

+ 중요 개발 마일스톤에서 여러분의 개발과 테스트 환경에 대한 +업데이트를 제공합니다. 일반적으로는 매월(4~6주 +간격) 업데이트를 제공할 예정입니다. 마일스톤은 다음과 같습니다. +

+ +
    +
  • Preview 1(최초 릴리스, 알파)
  • +
  • Preview 2(증분 업데이트, 베타)
  • +
  • Preview 3(증분 업데이트, 베타)
  • +
  • Preview 4(최종 API 및 공식 SDK, Play 게시)
  • +
  • Preview 5(최종 테스트를 위한 거의 최종 시스템 이미지)
  • +
  • AOSP 및 에코시스템에 최종 릴리스
  • +
+ +

+ 각 업데이트에는 SDK 도구, 프리뷰 시스템, 이미지, 에뮬레이터, 참조 문서, +API 차이 등이 포함됩니다. +

+ +

+ 첫 3단계 프리뷰 마일스톤은 현재 앱의 호환성 문제를 파악하고 +새 플랫폼에 필요한 마이그레이션이나 주요 작업을 +계획하는 데 도움이 되는조기 테스트 및 개발 환경을 제공합니다. +이는 기능과 API, 파일 호환성 문제에 대한 피드백을 제공하는 +우선순위 기간입니다. +—이러한 모든 경우에 Issue +Tracker를 사용하세요. 업데이트 과정에서 일부 API가 변경될 수 있습니다. +

+ +

+ 프리뷰 4 및 5에서 개발에 사용할 최종 + N API 및 SDK와 최종 버전에 가까운 시스템 이미지에 대한 액세스를 제공하고, +시스템 동작과 기능을 테스트할 수 있습니다. 이번에 Android N은 표준 API +레벨을 제공합니다. 레거시 앱의 최종 호환성 테스트를 시작하고 +N API 또는 기능을 사용하는 새 코드를 개선할 수 있습니다. +

+ +

+ 또한 프리뷰 4에서 시작하면 Android 베타 프로그램에 옵트인된 소비자 기기와 같이 +공식 API 레벨에서 Android N을 실행하는 기기에 앱을 +게시할 수 있습니다. +Google Play 알파 및 베타 채널에 먼저 게시할 수 있으므로, +Play 스토어에 광범위하게 배포하기 전에 Android 베타 소비자를 통해 앱을 테스트할 수 있습니다. + +

+ +

+ Android N에서 테스트 및 개발하는 동안 프리뷰 업데이트가 릴리스되면 +개발 환경을 최신으로 유지하는 것이 좋습니다. +이 과정을 손쉽게 진행하려면 테스트 기기를 +Android 베타 프로그램에 등록하고 각 마일스톤에서 OTA 업데이트를 +받을 수 있습니다. 또는 업데이트된 프리뷰 이미지를 직접 다운로드하고 +플래시할 수 있습니다. +

+ +

+ 프리뷰 업데이트가 제공될 때마다 Android 개발자 블로그, +해당 사이트 및 Android +N 개발자 커뮤니티를 통해서 알려드릴 것입니다. +

+ + +

N Developer Preview에 포함된 내용

+ +

+ N Developer Preview에는 +기존 앱을 다양한 화면 크기, 네트워크 기술, CPU/GPU 칩셋 +및 하드웨어 아키텍처에서 테스트하는 데 필요한 모든 것이 포함되어 있습니다. +

+ +

SDK 도구

+ +

이러한 구성 요소는 Android Studio에서 SDK Manager를 통해 다운로드할 수 있습니다.

+ +
    +
  • N Developer Preview SDK 및 도구 +
  • N Developer Preview 에뮬레이터 시스템 이미지(32비트 및 64비트) +
  • N Developer Preview Android TV용 에뮬레이터 시스템 이미지(32비트) +
  • N Developer Preview 지원 라이브러리(새로운 앱 템플릿용) +
+ +

+ 필요에 따라 각 마일스톤에서 이러한 개발 도구를 업데이트할 것입니다. +

+ +

하드웨어 시스템 이미지

+ +

+ N Developer Preview에는 Nexus와 물리적 기기를 테스트하고 개발할 때 사용할 수 있는 다른 하드웨어 시스템 이미지가 포함되어 있습니다. +하드웨어 이미지의 전체 목록을 보려면 기기 이미지 페이지를 +참조하세요. +

+ +

+ 각 마일스톤에서 업데이트된 시스템 이미지를 제공합니다. +업데이트된 시스템 이미지를 다운로드 및 플래시하고 필요한 만큼 자주 +직접 기기를 테스트할 수 있습니다. 이 방법은 +기기를 여러 번 다시 플래시해야 하는 자동화된 테스트 환경에 +특히 유용합니다. +

+ +

참고: +수동으로 플래시된 기기는 지난 해 프리뷰와 달리 OTA 업데이트를 받지 못합니다 +. 올해에는 Android 베타 프로그램에 기기를 등록해야 OTA 업데이트를 받을 수 있습니다. +—자세한 내용은 다음 섹션을 참조하세요. +

+ +

Android 베타 프로그램을 통한 OTA 업데이트

+ +

+ Android N에서는 프로그램에 등록한 기기에 Android N의 최신 프리뷰 업데이트를 자동으로 전송하는 +OTA(Over-the-Air) 업데이트 프로그램이 새로 도입되었습니다. +이 프로그램은 무료이고 Google 계정에 등록된 지원 기기를 가지고 있는 사람이라면 +누구나 사용할 수 있습니다. +

+ +

+ 프로그램에 등록하려면 Android +Beta 프로그램 사이트를 방문하세요. +계정에 등록된 기기 중 Android 베타에 등록할 수 있는 기기를 +모두 확인할 수 있습니다. +

+ +
    +
  1. Android N 업데이트를 받을 기기를 선택합니다. +
  2. Enroll을 클릭하고 사용 약관을 읽고 동의한 후, OK를 클릭합니다. +
+ +

+ 등록을 마치면 곧 기기에서 업데이트를 수신합니다. 대부분의 경우, +Android N으로 이동하기 위해 데이터를 완전히 초기화할 필요는 없지만, +잃고 싶지 않은 데이터가 있다면 기기를 등록하기 전에 백업하는 것이 +좋습니다. +

+ +

+ 업데이트가 기기에 전송되면, +가급적 빨리 다운로드하고 설치하는 것이 좋습니다. 시스템 UI, 동작, API 및 기능의 최신 변경 사항에 맞춰 +기기를 최신으로 유지할 수 있습니다. +

+ +

+ Developer Preview가 마무리될 때, 등록된 기기는 +공식 Android N 릴리스 업데이트를 받게 됩니다. +

+ +

+ Android 베타 사이트에서 언제든 Android 베타 프로그램에서 기기 등록을 해제할 수 있습니다. +등록을 해제하기 전에 기기에서 데이터를 +백업하세요. +

+ +

참고: + 등록을 해제하면 Android 6.0 Marshmallow +최신 버전으로 기기가 공장 초기화됩니다 +(기기 등록 전에 설치했던 버전이 +아닐 수도 있습니다). 클린 설치를 위해서 +연락처, 메시지, 사진 등의 데이터가 +기기에서 삭제됩니다. +

+ +

문서 및 샘플 코드

+ +

+ Developer Preview 사이트에서 다음과 같은 문서 리소스를 이용할 수 있으며, +Android N에 대해 익히는 데 유용합니다. +

+ +
    +
  • +Android N용 개발 설정에는 +시작하는 데 필요한 단계별 지침이 포함되어 있습니다.
  • +
  • 동작 +변경에서는 테스트해야 할 주요 영역을 알려줍니다.
  • +
  • 새 API 관련 문서 중에 API 개요, 다운로드 가능한 +API +참조 및 +다중 창 지원, 묶음 알림, 다중 로케일 지원 등과 같은 주요 기능에 대한 상세한 개발자 가이드도 포함되어 있습니다. +
  • 샘플 코드는 +권한과 기타 새로운 기능을 지원하는 방법을 보여줍니다. +
  • 릴리스 노트를 +보면 N Developer Preview의 현재 버전에 대한 변경 사항과 차이점 보고서 등 관련 정보를 +확인할 수 있습니다. +
+ +

다운로드 가능한 API 참조

+ +

+ 초기 프리뷰 업데이트 동안 +최신 Android N 플랫폼용 +API 참조를 별도의 zip 아카이브로 다운로드할 수 있습니다. 참조 +다운로드에는 +API 23 및 이전 업데이트에서 API 변경 사항을 확인하는 데 유용한 차이점 보고서도 포함되어 있습니다. +

+ +

+ Android N API가 최종 버전이 되고 공식 API 레벨이 할당되면, +https://developer.android.com에서 온라인으로 API 참조를 제공할 것입니다. +

+ +

+ 지원 리소스 +

+ +

+ N Developer Preview에서 테스트하고 개발하면서 다음 채널을 활용하여 +문제를 보고하고 피드백을 제공해 주세요. +

+ +
    +
  • N Developer Preview Issue +Tracker기본 피드백 채널입니다. Issue Tracker를 통해 버그, 성능 문제, +전반적 피드백을 보고할 수 있습니다. 또한, +알려진 문제를 확인하고 +해결 방법을 찾을 수 있습니다. 여러분의 문제는 분류되어 Android 엔지니어링 팀에게 검토하도록 보내는 과정을 통해 +지속적으로 업데이트될 것입니다.
  • +
  • Android N 개발자 커뮤니티는 +일종의 Google+ 커뮤니티로, +여기에서 여러분은 Android N으로 작업하는 다른 개발자들과 소통할 수 있습니다. 서로의 의견이나 아이디어를 나누고 Android N 관련 질문에 대한 대답을 찾을 수도 있습니다. +저희는 커뮤니티를 진행하고 필요에 따라 답변과 지침을 +제공할 것입니다.
  • +
+ +

대상 지정, 프리뷰 API 및 게시

+ +

+ N Developer Preview는 표준 API 레벨이 없는 개발 전용 시스템과 Android +라이브러리를 제공합니다. +앱을 테스트하기 위해 호환성 동작에서 옵트아웃하고자 하는 경우(강력히 +권장함), 앱의 targetSdkVersion +를 “N”으로 설정하여 N Developer 프리뷰 버전을 +대상으로 지정하면 됩니다. +

+ +

+ Android N Developer Preview에서는 프리뷰 API +를 제공합니다. —이 API는 최종 SDK가 출시될 때까지 +공식적인 버전으로 인정되지 않습니다. 최종 SDK 릴리스는 현재 2016년 3분기로 예정되어 있습니다. 즉, 시간이 지나면서 특히 프로그램을 시작한 초기 몇 주 동안에는 +사소한 API 변경이 있을 수 있습니다. +Android N Developer Preview를 업데이트할 때마다 +변경 사항을 요약하여 제공할 것입니다. +

+ +

+ 참고: 프리뷰 API는 변경될 수 있지만, 기본 시스템 +동작은 안정적이며 지금 바로 테스트 가능한 상태입니다. + +

+ +

+ Google Play는 N Developer +Preview를 대상으로 하는 앱의 게시를 금지합니다. Android N 최종 SDK를 사용할 수 있게 되면 +공식 Android N API 레벨을 대상으로 지정하고 알파 및 베타 릴리스 채널을 통해 Google +Play에 게시할 수 있습니다. 그때까지는 +Android N을 대상으로 하는 앱을 테스터들에게 배포하고자 하는 경우, 이메일이나 본인의 사이트에서 직접 +다운로드를 통해 하시면 됩니다. +

+ +

+ AOSP와 OEM에 대한 Android N 전체 릴리스는 2016년 3분기로 예정되어 있습니다. +이때 Google Play에서 공개 릴리스 채널에 Android N을 대상으로 하는 앱을 +게시할 수 있을 것입니다. +

+ + +

시작 방법

+ +

+ Android N으로 앱 테스트를 시작하려면: +

+ +
    +
  1. API 개요와 +동작 변경을 검토하고 +새로운 사항과 이것이 본인의 앱에 미치는 영향에 대해 파악해야 합니다. 특히, +새로운 알림 기능과 +다중 창 지원에 대해 알아보세요.
  2. +
  3. Preview SDK 설정 +및 테스트 기기 구성 지침에 따라 환경을 설정하세요.
  4. +
  5. 플래시 +지침에 따라 자신의 기기용 최신 Android N Developer Preview 시스템 이미지를 플래시하세요.
  6. +
  7. API 참조와 +Android N 샘플을 검토하면 새로운 API 기능과 앱에서 +그러한 기능을 사용하는 방법에 대해 좀 더 자세히 파악할 수 있습니다. +
  8. Android N 개발자 +커뮤니티에 가입하여 최신 소식을 알아보고, 새 플랫폼으로 작업하는 +다른 개발자들과 이야기를 나눠보세요.
  9. +
+ +

+ Android N Developer Preview 프로그램에 참가해 주셔서 대단히 감사합니다! +

diff --git a/docs/html-intl/intl/ko/preview/samples.jd b/docs/html-intl/intl/ko/preview/samples.jd new file mode 100644 index 000000000000..634133b28127 --- /dev/null +++ b/docs/html-intl/intl/ko/preview/samples.jd @@ -0,0 +1,85 @@ +page.title=샘플 +page.tags="preview", "samples", "android" +page.image=images/cards/card-n-samples_2x.png +@jd:body + +

+ Android N용으로 다음 코드 샘플이 제공됩니다. Android Studio에서 샘플을 +다운로드하려면 File > Import + Samples 메뉴 옵션을 선택합니다. +

+ +

+ 참고: 이러한 다운로드 가능한 프로젝트는 Gradle 및 Android Studio와 함께 사용하도록 +고안되었습니다. +

+ + +

다중 창 플레이그라운드

+ +

+ 이 샘플은 앱으로 다중 창 사용자 인터페이스를 활용하는 +방법을 보여줍니다. +

+

+ +GitHub에서 가져오기 +

+ +
+

활성 알림

+ +

+ NotificationCompat를 사용하여 +알림을 발송하는 간단한 서비스를 보여주는 기존 샘플입니다. 각각의 읽지 않은 사용자 대화는 +고유한 알림으로 발송됩니다. +

+

+ 이 샘플은 Android N에서 사용할 수 있는 새로운 알림 기능을 +활용하도록 업데이트되었습니다. +

+

+ +GitHub에서 가져오기 +

+ +
+

메시징 서비스

+ +

+ NotificationManager를 +사용하여 현재 애플리케이션이 표시할 알림 개수를 지시하는 +방법을 보여주는 기존 샘플입니다. +

+

+ 이 샘플은 Android N에서 사용할 수 있는 새로운 알림 기능을 +활용하도록 업데이트되었습니다. +

+

+ +GitHub에서 가져오기 +

+ +
+

직접 부팅

+ +

+ 이 샘플은 기기 암호화된 저장소에 데이터를 저장하고 액세스하는 방법을 보여줍니다. +이 저장소는 기기가 부팅된 동안 항상 사용할 수 있습니다. +

+

+ +GitHub에서 가져오기 +

+ +
+

범위가 지정된 디렉터리 액세스

+ +

+ 이 샘플은 적은 권한을 요구하면서도 +특정 디렉터리에서 데이터를 읽고 쓰는 방법을 보여줍니다. +

+

+ +GitHub에서 가져오기 +

\ No newline at end of file diff --git a/docs/html-intl/intl/ko/preview/setup-sdk.jd b/docs/html-intl/intl/ko/preview/setup-sdk.jd new file mode 100644 index 000000000000..91c68a64ebd8 --- /dev/null +++ b/docs/html-intl/intl/ko/preview/setup-sdk.jd @@ -0,0 +1,226 @@ +page.title=Preview 설정 +meta.keywords="프리뷰", "android" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-sdk_2x.png + +@jd:body + + + + +

Android N Preview용 앱을 개발하려면, 이 페이지의 설명에 따라 +개발자 환경을 약간 업데이트해야 합니다.

+ +

Android N 시스템 이미지에서 앱의 호환성을 간단히 +테스트하려면, 가이드에 따라 Android N 기기에서 테스트를 수행하세요.

+ + + + +

Android Studio 2.1 가져오기(프리뷰)

+ +

Android N 플랫폼에서는 Java 8 언어 기능을 지원하며 +여기에는 Jack이라는 새로운 컴파일러가 필요합니다. 현재는 +Android Studio 2.1에서만 최신 버전의 Jack이 지원됩니다. 따라서 Java 8 언어 기능을 +사용하려면, Android Studio 2.1을 사용하여 앱을 빌드해야 합니다. 그렇지 않은 경우, +Jack 컴파일러를 사용할 필요가 없지만 Android N 플랫폼에 +대해 컴파일하려면 아래의 설명에 따라 JDK 8로 +업데이트해야 합니다. +

+ + + +

현재 Android Studio 2.1은 Canary 릴리스 채널에서 프리뷰로 +제공됩니다. +Android Studio가 이미 있고 Canary Channel로 업데이트하지 않으려면, +Android Studio 2.1을 별도의 설치로 다운로드한 후, Android N을 +사용한 개발에 이것을 사용할 수 있습니다. +이 경우 기본 Android Studio 환경은 영향을 받지 않습니다.

+ +

Android Studio 2.1을 별도의 설치로 다운로드하려면 다음 +단계를 따르세요(또는 기존 설치의 업데이트로 Android Studio 2.1을 +받으려면 4단계로 건너뛰세요).

+ +
    +
  1. 기존 Android Studio 설치의 이름을 수정하고 버전 번호를 붙입니다. +이런 방식으로 새 버전을 설치하면 +기존 버전을 덮어쓰지 않습니다.
  2. +
  3. Canary Channel +다운로드 페이지에서 자신의 운영 체제에 맞는 ZIP 파일을 다운로드합니다. +
  4. +
  5. 패키지의 압축을 풀고 Android Studio 2.1의 콘텐츠를 + 시스템상의 적절한 애플리케이션 위치로 이동한 다음 실행합니다.
  6. +
  7. Settings 대화 상자를 +엽니다(Windows/Linux에서 File > Settings 또는 +Mac에서 Android Studio > Preferences). 왼쪽 패널에서 Appearance & Behavior > System Settings > +Updates를 +선택합니다. +
  8. +
  9. Updates 패널에서 Automatically +check updates for 확인란을 선택하고 +드롭다운 목록에서 Canary Channel을 선택합니다. +
  10. +
+ +

다음 단계를 위해 이 설정 창을 열어둡니다.

+ + +

N Preview SDK 가져오기

+ +

Android N API를 사용한 개발을 시작하려면, +다음과 같이 Android N Preview SDK를 Android Studio에 설치해야 합니다.

+ +
    +
  1. Updates 패널이 여전히 표시된 상태에서(위의 4단계), Automatically +check updates for Android SDK 확인란을 선택하고 +드롭다운 목록에서 Preview Channel을 +선택합니다. +
  2. +
  3. Check Now를 클릭합니다.
  4. + +
  5. 왼쪽 패널에서 Appearance & Behavior > + System Settings > Android SDK를 선택합니다. + +
  6. SDK Platforms 탭을 클릭한 다음, +Android N Preview 확인란을 선택합니다.
  7. + +
  8. SDK Tools 탭을 클릭한 다음, +Android SDK Build Tools, Android SDK +Platform-Tools, Android SDK Tools 확인란을 +선택합니다. +
  9. + +
  10. OK를 클릭한 다음, 설치해야 하는 패키지의 +사용권 계약에 동의합니다. +
  11. +
+ +

N Preview 참조 문서 가져오기

+ +

+ Android N API에 대한 자세한 내용은 N Preview +참조 문서에서 볼 수 있으며, 이 문서는 다음 표에서 다운로드할 수 있습니다. +이 패키지에는 요약된 오프라인 버전의 Android 개발자 +웹사이트가 있고 Android N API용의 업데이트된 +API 참조와 API 차이점 보고서가 포함되어 있습니다. +

+ + + + + + + + + + +
문서체크섬
+ n-preview-1-docs.zip + MD5: 4ab33ccbe698f46f125cc5b807cf9c2f
+ SHA-1: 6a3880b3ccd19614daae5a4d0698ea6ae11c20a5 +
+ + + +

Java 8 JDK 및 JRE 가져오기

+ +

Android N 플랫폼에 대해 앱을 컴파일하려면 +Java 8 개발자 키트(JDK 8)를 사용해야 하며, Android +Studio 2.1의 일부 도구를 사용하려면 Java 8 런타임 환경(JRE 8)을 설치해야 +합니다. 따라서 각각 최신 버전이 없는 경우, 지금 JDK 8 및 JRE 8를 +다운로드하세요.

+ +

그런 다음 Android Studio에서 다음과 같이 JDK 버전을 설정합니다.

+ +
    +
  1. Android Studio에서 Android 프로젝트를 열고 File > +Project Structure를 선택하여 +Project Structure 대화 상자를 엽니다. (또는, File > Other Settings > +Default Project Structure를 선택하여 모든 프로젝트에 대해 +기본값을 설정할 수 있습니다.) +
  2. +
  3. 대화 상자의 왼쪽 패널에서 SDK Location을 클릭합니다. +
  4. +
  5. JDK Location 필드에, +Java 8 JDK의 위치를 입력한 다음(오른쪽의 버튼을 클릭하여 +파일 탐색), OK를 클릭합니다. +
  6. +
+ + + + +

프로젝트 업데이트 또는 생성

+ +

+ Android N API를 사용하려면, 프로젝트를 적절하게 구성해야 합니다. +

+ +

Java 8 언어 기능을 사용할 계획인 경우에는, +Java 8 언어 기능에서 지원되는 Java 8 기능과 +Jack 컴파일러로 프로젝트를 구성하는 방법에 대해서도 +읽어봐야 합니다.

+ + +

기존 프로젝트 업데이트

+ +

자신의 모듈에 대한 +build.gradle파일을 열고 다음과 같이 값을 +업데이트합니다. +

+ +
+android {
+  compileSdkVersion 'android-N'
+  buildToolsVersion '24.0.0-rc1'
+  ...
+
+  defaultConfig {
+     minSdkVersion 'N'
+     targetSdkVersion 'N'
+     ...
+  }
+  ...
+}
+ + +

새 프로젝트 생성

+ + +

Android N Preview SDK를 사용한 개발에서 새 프로젝트를 만들려면:

+ +
    +
  1. File > New Project를 클릭하고 +Target Android Devices 페이지가 나올 때까지 단계를 따릅니다. +
  2. +
  3. 이 페이지에서 Phone and Tablet 옵션을 선택합니다.
  4. +
  5. Phone and Tablet 옵션 아래의 Minimum +SDK 옵션 목록에서 +N: Android API 23, N Preview (Preview)를 선택합니다.
  6. +
+ + +

다음 단계

+ + + diff --git a/docs/html-intl/intl/pt-br/preview/api-overview.jd b/docs/html-intl/intl/pt-br/preview/api-overview.jd new file mode 100644 index 000000000000..87fa5939b162 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/api-overview.jd @@ -0,0 +1,676 @@ +page.title=Android N for Developers +meta.tags="preview", "androidn" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-apis_2x.png +@jd:body + + + + + + + + +

O Android N ainda está em desenvolvimento ativo. Mas agora é possível experimentá-lo +como parte do N Developer Preview. As sessões a seguir destacam alguns +novos recursos para desenvolvedores.

+ +

+ Não deixe de conferir as Mudanças de comportamento para saber mais sobre as + áreas onde as alterações de plataforma podem afetar os aplicativos, examine os + guias para desenvolvedores para saber mais sobre os principais recursos e faça o download da Referência da API para obter detalhes sobre as + novas APIs. +

+ +

Suporte a várias janelas

+ + +

No Android N, introduzimos um recurso de multitarefa novo e muito solicitado +na plataforma — o suporte a várias janelas.

+ +

Agora os usuários podem abrir dois aplicativos na tela ao mesmo tempo.

+
    +
  • Em celulares e tablets +executando o Android N, os usuários agora podem executar dois aplicativos lado a lado ou +um acima do outro em modo de tela dividida. Os usuários podem redimensionar os aplicativos arrastando +o divisor entre eles.
  • + +
  • Em dispositivos Android TV, os aplicativos podem assumir o modo imagem em +imagem, o que permite que continuem a exibir conteúdo enquanto o usuário navega ou +interage com outros aplicativos. Veja abaixo para obter mais informações.
  • +
+ +
+ +

+ Figura 1. Aplicativos executando em modo de tela dividida. +

+
+ +

O suporte a várias janelas oferece novas formas de envolver os usuários, +particularmente em tablets e outros dispositivos com telas maiores. Você pode até ativar o recurso de arrastar e soltar +no aplicativo para permitir que os usuários arrastem conteúdo de ou para o aplicativo — uma ótima +maneira de aprimorar a experiência do usuário.

+ +

É simples adicionar suporte a várias janelas ao aplicativo e configurar a forma com ele +processa a exibição em várias janelas. Por exemplo, você pode especificar as dimensões +mínimas permitidas para a atividade, evitando que os usuários a redimensionem para tamanhos +menores. Também é possível desativar a exibição em várias janelas no aplicativo, o que + garante que o sistema mostrará o aplicativo exclusivamente em modo de tela cheia.

+ +

+ Para obter mais informações, consulte a documentação para desenvolvedores de +Suporte a várias janelas. +

+ +

Aprimoramentos de notificações

+ +

Reformulamos as notificações no Android N para facilitar e agilizar o seu +uso. Algumas modificações são:

+ +
    +
  • + Atualizações de modelos: estamos atualizando os modelos de notificação para + colocar mais ênfase na imagem do herói e do avatar. Os desenvolvedores poderão + aproveitar os novos modelos com ajustes mínimos no código. +
  • + +
  • + Notificações empacotadas: o sistema pode agrupar mensagens + por tópico de mensagem, por exemplo, e exibir o grupo. Um usuário pode + executar ações, como Dismiss ou Archive, nessa exibição de grupo. Se você + já implementou notificações para Android Wear, está familiarizado com + esse modelo. +
  • + +
  • + Resposta direta: para aplicativos de comunicação em tempo real, o + sistema Android oferece suporte a respostas em linha para que os usuários possam responder rapidamente a + mensagens SMS ou de texto diretamente dentro da interface de notificação. +
  • + +
  • + Visualizações personalizadas: duas APIs novas permitem utilizar decorações + do sistema, como cabeçalhos e ações de notificação, durante o uso de visualizações + personalizadas em notificações. +
  • +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +

+ Figura 2. Notificações empacotadas e resposta direta. +

+ +

Para saber como implementar os novos recursos, consulte o +guia + Notificações.

+ + + +

Compilação JIT/AOT orientada a perfil

+ +

No Android N, adicionamos um compilador Just in Time (JIT) com perfis de código para +ART, o que permite aprimorar constantemente o desempenho de aplicativos Android durante a +execução. O compilador JIT complementa o compilador atual Ahead of Time (AOT) do ART +e ajuda a aprimorar o desempenho em tempo de execução, economizar espaço de armazenamento e acelerar +atualizações de aplicativos e de sistema.

+ +

A compilação orientada a perfil permite que o ART gerencie a compilação AOT/JIT de cada aplicativo +de acordo com o uso real e com as condições no dispositivo. Por +exemplo, o ART mantém um perfil dos principais métodos do aplicativo e pode pré-compilar +e armazenar esses métodos em cache para obter o melhor desempenho. As outras partes do aplicativo +não são compiladas até que sejam realmente utilizadas.

+ +

Além de aprimorar o desempenho para as principais partes do aplicativo, a compilação +ajuda a reduzir o uso geral de recursos de RAM, incluindo os binários +associados. Esse recurso é particularmente importante em dispositivos com pouca memória.

+ +

O ART gerencia a compilação orientada a perfil de forma a minimizar o impacto sobre a +bateria do dispositivo. A pré-compilação é executada apenas quando o dispositivo está ocioso e +com a bateria sendo carregada, economizando tempo e bateria com a execução antecipada dessa tarefa.

+ +

Caminho rápido para a instalação de aplicativos

+ +

Um dos benefícios mais tangíveis do compilador JIT do ART é a velocidade de instalação dos +aplicativos e das atualizações do sistema. Até mesmo aplicativos grandes, que exigiam diversos minutos para +otimização e instalação no Android 6.0, podem agora ser instalados em +segundos. As atualizações de sistema também ficaram mais rápidas, pois não existe mais a etapa de otimização.

+ +

Modo soneca em movimento...

+ +

O Android 6.0 introduziu o modo soneca, um modo de sistema que economiza bateria adiando +atividades de CPU e rede dos aplicativos quando o dispositivo está ocioso, como +quando está em uma mesa ou gaveta.

+ +

Agora, no Android N, o modo soneca foi aprimorado e economiza bateria quando em movimento. +Sempre que a tela ficar desativada por um período e o dispositivo ficar desativado, +o modo soneca aplicará um subconjunto das restrições familiares de CPU e rede aos aplicativos. +Isso significa que os usuários podem economizar bateria transportando os dispositivos no +bolso.

+ + + +

+ Figura 3. O modo soneca agora aplica + restrições para aumentar a vida útil da bateria mesmo quando o dispositivo não está estacionário. +

+ + +

Pouco depois de a tela ser desativada com o dispositivo alimentado pela bateria, o modo soneca +restringe o acesso de rede e adia trabalhos e sincronizações. Durante breves janelas de +manutenção, os aplicativos podem acessar a rede e todos os +trabalhos/sincronizações adiados são executados. A ativação da tela ou do dispositivo encerra +o modo soneca.

+ +

Quando o dispositivo voltar a ficar estacionário, com a tela desativada e alimentado por bateria por um +período, o modo soneca aplicará as restrições completas de CPU e rede em {@link +android.os.PowerManager.WakeLock}, alarmes {@link android.app.AlarmManager} e +verificações de GPS/Wi-Fi.

+ +

As práticas recomendadas para adaptar o aplicativo ao modo soneca são as mesmas para +dispositivos estacionários ou em movimento. Portanto, se você já atualizou o aplicativo para +processar o modo soneca corretamente, está pronto. Caso contrário, comece a adaptar +o aplicativo para o modo soneca agora.

+ +

Project Svelte: otimizações em segundo plano

+ +

O Project Svelte é um esforço contínuo para minimizar o uso de RAM pelo sistema e pelos aplicativos +nos dispositivos Android existentes no ecossistema. No Android N, o Project +Svelte se concentra em otimizar a forma de execução dos aplicativos em segundo plano.

+ +

O processamento em segundo plano é uma parte essencial da maioria dos aplicativos. Quando executado corretamente, a experiência +do usuário pode ficar incrível — imediata, rápida e sensível ao contexto. +Quando executado incorretamente, o processamento em segundo plano pode consumir desnecessariamente RAM (e +bateria) e afetar o desempenho do sistema para os outros aplicativos.

+ +

Desde o Android 5.0, {@link android.app.job.JobScheduler} é a forma +preferencial para execução de trabalho em segundo plano de uma maneira que beneficia +os usuários. Os aplicativos podem agendar trabalhos e permitir que o sistema execute otimizações com base em +condições de memória, energia e conectividade. O JobScheduler oferece controle +e simplicidade, e queremos que seja usado por todos os aplicativos.

+ +

+ Outra boa opção é o + GCMNetworkManager, parte do Google Play Services, que + oferece um agendamento de trabalhos similar, compatível com versões legadas do + Android. +

+ +

Continuamos a expandir o JobScheduler e o +GCMNetworkManager para atender a mais +casos de uso — por exemplo, no Android N, você já pode agendar trabalhos +em segundo plano de acordo com mudanças nos provedores de conteúdo. Ao mesmo tempo, começamos a +substituir alguns padrões mais antigos que podem reduzir o desempenho do sistema, +particularmente em dispositivos com pouca memória.

+ +

No Android N, estamos removendo três transmissões implícitas de uso comum — + {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link + android.hardware.Camera#ACTION_NEW_PICTURE} e {@link + android.hardware.Camera#ACTION_NEW_VIDEO} —, pois podem despertar simultaneamente +processos em segundo plano de vários aplicativos, aumentando o consumo de memória e bateria. Se +o seu aplicativo receber essas transmissões, aproveite o N Developer Preview para + migrar para o JobScheduler e as APIs relacionadas.

+ +

+ Consulte a documentação de Otimizações +em segundo plano para obter mais detalhes. +

+ + +

Economizador de dados

+ +
+ + +

+ Figura 4. O Economizador de dados em Settings. +

+
+ +

Normalmente, o custo de um plano de dados de celular ao longo da vida útil do dispositivo móvel +excede o custo do próprio dispositivo. Para muitos usuários, os dados de celular +são um recurso caro que querem economizar.

+ +

O Android N introduz o modo Economizador de dados, um novo serviço do sistema que ajuda a reduzir +o uso de dados de celular pelos aplicativos em situações de roaming, perto do final do ciclo de cobrança +ou em pacotes de dados pré-pagos pequenos. O Economizador de dados permite que os usuários controlem o +uso de dados de celular e possibilita que os desenvolvedores ofereçam serviços mais eficientes quando o modo Economizador +de dados estiver ativado.

+ +

Quando um usuário ativa o Economizador de dados em Settings e o dispositivo está +em uma rede tarifada, o sistema bloqueia o uso de dados em segundo plano e avisa aos aplicativos +para reduzir o uso de dados no primeiro plano sempre que possível — como, por exemplo, limitar a +taxa de bits de streaming, reduzir a qualidade de imagens, adiar o armazenamento prévio otimista em cache +e assim por diante. Os usuários podem autorizar aplicativos específicos a usar dados tarifados em segundo plano, +mesmo com o Economizador de dados ativado.

+ +

O Android N estende o {@link android.net.ConnectivityManager} para oferecer aos aplicativos uma +forma de recuperar as +preferências do usuário para o Economizador de dados e monitorar +as mudanças de preferências. Todos os aplicativos devem verificar se o usuário ativou o Economizador +de dados e tentar limitar o uso de dados em primeiro e segundo plano.

+ + +

Quick Settings Tile API

+ + +
+ + +

+ Figura 5. Blocos de Configurações rápidas na aba de notificações. +

+ + +

As Configurações rápidas são uma forma popular e simples de expor as principais configurações e ações +diretamente na aba de notificações. No Android N, ampliamos o escopo das +Configurações rápidas para aumentar ainda mais a utilidade e a conveniência.

+ +

Adicionamos mais espaço para os blocos de Configurações rápidas, que os usuários podem +acessar em uma área de exibição paginada deslizando à direita ou à esquerda. Além disso, +permitimos que os usuários controlem quais blocos de Configurações rápidas são exibidos, bem como o local +em que são exibidos — para adicionar ou mover blocos, os usuários simplesmente arrastam e largam os blocos.

+ +

Para desenvolvedores, o Android N também adiciona uma API nova que permite definir os próprios +blocos de Configurações rápidas para que os usuários possam acessar facilmente os principais controles e ações do seu aplicativo.

+ +

+ Os blocos de Configurações rápidas estão reservados para controles ou ações que são + urgentemente necessários ou frequentemente usados e não devem ser usados como atalhos para + iniciar aplicativos. +

+ +

+ Após definir os blocos, você pode disponibilizá-los aos usuários, que por sua vez podem adicioná-los + às Configurações rápidas usando o recurso de arrastar e soltar. +

+ +

+ Para obter informações sobre a criação de um bloco de aplicativo, consulte + android.service.quicksettings.Tile na Referência da API, disponível para download. +

+ + + +

Bloqueio de números

+ +

O Android N agora oferece suporte a bloqueio de números na plataforma e disponibiliza uma +API de estrutura para permitir que provedores de serviço mantenham uma lista de números bloqueados. O +aplicativo padrão de SMS, o aplicativo padrão de telefone e os aplicativos de provedor podem ler e gravar +a lista de números bloqueados. A lista não pode ser acessada por outros aplicativos.

+ +

Ao oferecer o bloqueio de número como recurso padrão da plataforma, o Android oferece +uma forma consistente de bloqueio de números em uma grande variedade de +dispositivos. Alguns benefícios que podem ser aproveitados pelos aplicativos são:

+ +
    +
  • Números bloqueados nas chamadas também são bloqueados nos textos +
  • Números bloqueados podem persistir entre várias redefinições e dispositivos por meio do +recurso Backup e restauração +
  • Vários aplicativos podem usar a mesma lista de números bloqueados +
+ +

Além disso, a integração de aplicativos da operadora por meio do Android significa que as operadoras podem +ler a lista de números bloqueados no dispositivo e executar um bloqueio do lado do servidor +para o usuário, impedindo que chamadas e textos indesejados cheguem a ele +por qualquer meio, como pontos finais de VOIP ou encaminhamento de telefones.

+ +

+ Para obter mais informações, consulte android.provider.BlockedNumberContract + na Referência da API, +disponível para download. +

+ +

Triagem de chamadas

+ +

+ O Android N permite que o aplicativo de telefone padrão faça triagem das chamadas recebidas. O aplicativo + de telefone faz isso implementando o novo CallScreeningService, + que permite que a execução de diversas ações com base nos + {@link android.telecom.Call.Details Call.Details} da chamada recebida, como: +

+ +
    +
  • Rejeitar a chamada recebida +
  • Não incluir a chamada no registro de chamadas +
  • Não mostrar ao usuário a notificação da chamada +
+ +

+ Para obter mais informações, consulte android.telecom.CallScreeningService + na Referência da API, +disponível para download. +

+ + +

Suporte a diversas localidades, mais idiomas

+ + +

O Android N agora permite que os usuários selecionem diversas localidades em Settings +para oferecer melhor suporte a casos de uso bilíngues. Os aplicativos podem usar +uma API nova para obter as localidades selecionadas pelo usuário e oferecer +experiências de usuário mais sofisticadas para usuários com diversas localidades — como, por exemplo, mostrar resultados de pesquisa em +diversos idiomas e não oferecer a tradução de páginas da web que usam +um idioma conhecido pelo usuário.

+ +

Juntamente com o suporte a várias localidades, o Android N também amplia o número de idiomas +disponíveis aos usuários. Ele oferece mais de 25 variantes para cada um dos idiomas +mais comuns, como inglês, espanhol, francês e árabe. Além disso, ele adiciona suporte +parcial a mais de 100 novos idiomas.

+ +

Os aplicativos podem obter a lista de localidades definida pelo usuário chamando LocaleList.GetDefault(). Para oferecer suporte ao maior número de localidades, o Android N está alterando a forma +como resolve recursos. Não deixe de testar e verificar se seus aplicativos +funcionam da forma esperada com a nova lógica de resolução de recursos.

+ +

Para saber mais sobre o novo comportamento de resolução de recursos e sobre as práticas recomendadas que você deve +seguir, consulte Suporte a vários idiomas.

+ +

APIs ICU4J no Android

+ +

+ O Android N oferece agora um subconjunto das APIs ICU4J na estrutura do Android no + pacote android.icu. A migração é simples e consiste principalmente em + alterar o espaço de nome com.java.icu para + android.icu. Se você já usa um pacote ICU4J nos seus + aplicativos, a mudança para as APIs do android.icu disponibilizadas na estrutura do + Android pode reduzir substancialmente o tamanho do APK. +

+ +

+ Para saber mais sobre as APIs ICU4J no Android, consulte Suporte ao ICU4J. +

+ + + +

OpenGL™ ES 3.2 API

+ +

O Android N adiciona interfaces de estrutura e suporte de plataforma ao OpenGL ES 3.2, incluindo:

+ +
    +
  • Todas as extensões do Pacote de extensão Android (AEP), exceto EXT_texture_sRGB_decode. +
  • Framebuffers de ponto flutuante para HDR e sombreamento adiado. +
  • Chamadas de desenho a BaseVertex para possibilitar melhor organização em lotes e transmissão. +
  • Controle robusto de acesso a buffers para reduzir a sobrecarga do WebGL. +
+ +

A API da estrutura do OpenGL ES 3.2 no Android N é fornecida pela classe + GLES32. Ao usar o OpenGL ES 3.2, não deixe de declarar o +requisito no arquivo manifesto usando a tag <uses-feature> e o +atributo android:glEsVersion.

+ +

Para obter mais informações sobre como usar o OpenGL ES, incluindo como verificar a versão do +OpenGL ES compatível do dispositivo no tempo de execução, consulte o guia da OpenGL ES API.

+ + +

Gravação do Android TV

+ +

O Android N adiciona a capacidade de gravar e reproduzir conteúdo de serviços de entrada +do Android TV por meio de novas APIs de gravação. Criados usando as APIs atuais de time-shifting, +os serviços de entrada de TV podem controlar quais dados de canal são gravados e como +as sessões gravadas são salvas, bem como gerenciar a interação do usuário com o conteúdo gravado.

+ +

Para obter mais informações, consulte APIs de gravação do Android TV.

+ + +

Android for Work

+ +

O Android for Work adiciona vários recursos e APIs para dispositivos que executam o Android N. +Veja a seguir alguns destaques — para obter uma lista completa das atualizações do Android for Work +relacionadas ao Android N, consulte Mudanças no Android for Work.

+ +

Desafio de segurança de perfil de trabalho

+ +

+ Os donos de perfil podem especificar um desafio de segurança separado para os aplicativos executados no + perfil de trabalho. O desafio de trabalho será mostrado quando o usuário tentar abrir + qualquer aplicativo de trabalho. A resolução bem-sucedida do desafio de segurança desbloqueia e, +se necessário, descriptografa o perfil de trabalho. Para donos de perfil, + ACTION_SET_NEW_PASSWORD solicita que o usuário defina um desafio + de trabalho e ACTION_SET_NEW_PARENT_PROFILE_PASSWORD um + bloqueio de dispositivo. +

+ +

+ Os donos de perfil podem definir políticas de senha distintas para o desafio de trabalho + (como o comprimento mínimo do PIN ou se é permitido usar uma impressão digital + para desbloquear o perfil) usando setPasswordQuality(), + setPasswordMinimumLength() e métodos relacionados. O dono + de perfil também pode definir o bloqueio de dispositivo usando a instância de DevicePolicyManager + retornada pelo novo método getParentProfileInstance(). + Além disso, donos de perfil podem personalizar a tela de credenciais do + desafio de trabalho usando os novos métodos setOrganizationColor() e + setOrganizationName(). +

+

Desativar o trabalho

+ +

Os usuários podem alternar o modo de trabalho em dispositivos com um perfil de trabalho. Quando o modo de trabalho está +desativado, o usuário gerenciado é encerrado temporariamente, o que desativa +os aplicativos, a sincronização em segundo plano e as notificações do perfil de trabalho, inclusive o aplicativo +do dono do perfil. Quando o modo de trabalho está desativado, o sistema exibe um ícone de status +persistente para lembrar ao usuário que não é possível iniciar aplicativos de trabalho. A tela de início +indica que os aplicativos e widgets de trabalho não podem ser acessados.

+ +

Always on VPN

+ +

Os donos de dispositivo e perfil podem garantir que os aplicativos de trabalho se conectem sempre +por meio de uma VPN especificada. O sistema inicia automaticamente a VPN após a +inicialização do dispositivo.

+ +

+ Os novos métodos DevicePolicyManager são + setAlwaysOnVpnPackage() e + getAlwaysOnVpnPackage(). +

+ +

Como os serviços de VPN podem ser vinculados diretamente pelo sistema sem interação com +aplicativos, os clientes de VPN precisam processar novos pontos de entrada para o Always on VPN. Da +mesma forma que antes, os serviços são indicados ao sistema por um filtro de intenção correspondente +à ação android.net.VpnService.

+ +

+ Além disso, os usuários podem definir manualmente clientes do Always on VPN que implementam + métodos VPNService no usuário principal usando + Settings>More>Vpn. +

+ +

Aprimoramentos na acessibilidade

+ +

O Android N agora oferece Configurações de visão diretamente na tela de boas-vindas na instalação +de novos dispositivos. Isso permite que os usuários descubram e configurem recursos de acessibilidade +em seus dispositivos de forma muito mais fácil, incluindo gesto de ampliação, tamanho +da fonte, tamanho da tela e TalkBack.

+ +

Com o posicionamento mais proeminente desses recursos de acessibilidade, os usuários +ficarão mais propensos a experimentar o aplicativo com os recursos ativados. Não deixe de testar antecipadamente os aplicativos +com essas configurações ativadas. Você pode ativá-las em Settings > +Accessibility.

+ +

Além disso, os serviços de acessibilidade no Android N podem ajudar usuários com deficiências +motoras a tocar na tela. A nova API permite criar serviços com +recursos como acompanhamento de face, acompanhamento de olho e varredura de pontos, entre outros, para +atender às necessidades desses usuários.

+ +

Para obter mais informações, consulte android.accessibilityservice.GestureDescription + na Referência da API, disponível para download.

+ + +

Inicialização direta

+ +

A inicialização direta reduz os tempos de inicialização dos dispositivos e permite que aplicativos +registrados tenham funcionalidade limitada, mesmo após uma reinicialização inesperada. +Por exemplo, se um dispositivo criptografado reinicializar durante o sono do usuário, +alarmes registrados, mensagens e chamadas recebidas podem agora continuar notificando +o usuário normalmente. Isso também significa que serviços de acessibilidade podem ser + disponibilizados imediatamente após um reinício.

+ +

A inicialização direita aproveita a criptografia baseada em arquivo do Android N +para ativar políticas de criptografia detalhadas para dados de sistema e aplicativos. +O sistema usa um armazenamento criptografado pelo dispositivo para determinados dados de sistema e dados +de aplicativos registrados explicitamente. Por padrão, um armazenamento criptografado por credencial é usado para todos + os outros dados de sistema, dados de usuário, aplicativos e dados de aplicativos.

+ +

Na inicialização, o sistema inicia em um modo restrito que permite +acessar apenas dados criptografados pelo dispositivo, sem acesso geral a aplicativos ou dados. +Se você deseja executar componentes nesse modo, pode registrá-los +definindo um sinalizador no manifesto. Após a reinicialização, o sistema ativa +componentes registrados transmitindo a intenção +LOCKED_BOOT_COMPLETED. O sistema garante que dados de aplicativos registrados criptografados pelos dispositivos sejam disponibilizados +antes do destravamento. Todos os outros dados ficarão indisponíveis até que o usuário confirme suas + credenciais de tela de bloqueio para descriptografá-los.

+ +Para obter mais informações, consulte Inicialização direta.

+

+ + +

Confirmação de chaves

+ +

Os armazenamentos de chaves protegidos por hardware oferecem um método muito mais seguro para criar, armazenar +e usar chaves de criptografia em dispositivos Android. Eles protegem chaves contra o +kernel do Linux, possíveis vulnerabilidades do Android e extração em +dispositivos com acesso root.

+ +

Para permitir o uso de armazenamento de chaves protegido por hardware com maior facilidade e segurança, +o Android N introduziu a confirmação de chaves. Aplicativos em dispositivos móveis e fora deles podem usar a confirmação +de chaves para determinar com precisão se um par de chaves RSA ou EC está +protegido por hardware, quais as propriedades do par de chaves e quais +as restrições aplicadas ao uso e à validação.

+ +

Aplicativos e serviços externos aos dispositivos móveis podem solicitar informações sobre um par de chaves +por meio de um certificado de confirmação X.509, que deve estar assinado por uma +chave de confirmação válida. A chave de confirmação é uma chave de assinatura ECDSA, +injetada no armazenamento de chaves protegido por hardware do dispositivo na fábrica. +Portanto, um certificado de confirmação assinado com uma chave de confirmação +válida confirma a existência de um armazenamento de chaves protegido por hardware, além de +detalhes dos pares de chaves desse armazenamento de chaves.

+ +

Para garantir que o dispositivo esteja usando uma imagem Android oficial de fábrica +e segura, a confirmação de chaves exige que o bootloader + do dispositivo forneça as seguintes informações ao Ambiente + de execução confiável (TEE):

+ +
    +
  • A versão do sistema operacional e o nível de correção instalado no dispositivo
  • +
  • A chave pública Verified Boot e seu status de bloqueio
  • +
+ +

Para obter mais informações sobre o recurso de armazenamento de chaves protegido por hardware, +consulte o guia Armazenamento de chaves protegido por hardware.

+ +

Além da confirmação de chaves, o Android N também introduziu + chaves associadas a impressões digitais que não são revogadas no cadastramento de impressões digitais.

+ +

Configuração de segurança de rede

+ +

No Android N, os aplicativos podem personalizar o comportamento de conexões seguras (HTTPS, TLS) +de forma segura, sem modificação no código, usando a +Configuração de segurança de rede declarativa em vez das +APIs programáticas propensas a erro (por exemplo, X509TrustManager).

+ +

Recursos compatíveis:

+
    +
  • Âncoras confiáveis personalizadas. Permitem que um aplicativo personalize quais +Autoridades de certificado (CA) são confiáveis para suas conexões seguras. Por +exemplo, confiar em determinados certificados autoassinados ou em um conjunto restrito de CAs públicas. +
  • +
  • Substituições apenas em depuração. Permite que um desenvolvedor de aplicativos depure +conexões seguras do aplicativo com segurança, sem adicionar riscos à base +instalada. +
  • +
  • Cancelamento do uso de tráfego de texto simples. Permite que um aplicativo seja proteja contra +o uso acidental de tráfego de texto simples.
  • +
  • Fixação de certificados. Um recurso avançado que permite que os aplicativos + limitem quais chaves de servidor são confiáveis para conexões seguras.
  • +
+ +

Para obter mais configurações, consulte Configuração de segurança +de rede.

+ +

Autoridade de certificado confiável padrão

+ +

Por padrão, os aplicativos direcionados ao Android N confiam apenas em certificados fornecidos pelo sistema +e não confiam mais em Autoridades de certificado (CA) adicionadas pelo usuário. Os aplicativos direcionados ao Android +N que querem confiar em CAs adicionadas pelo usuário devem usar a +Configuração de segurança de rede para +especificar como confiar nas CAs de usuário.

+ +

Esquema de assinatura de APK v2

+ +

A classe PackageManager agora permite a verificação de aplicativos usando o +esquema de assinatura de APK v2. O esquema de assinatura APK v2 é um esquema de assinatura integral de arquivos +que acelera consideravelmente a verificação e fortalece as garantias + de integridade, detectando qualquer alteração não autorizada em arquivos APK.

+ +

Para manter a compatibilidade com versões anteriores, o APK deve ser assinado com o esquema de assinatura +v1 (esquema de assinatura JAR) antes de ser assinado com o esquema de assinatura v2. +Com o esquema de assinatura v2, a verificação falhará se você assinar o APK com um + certificado adicional após assiná-lo com o esquema v2.

+ +

O suporte ao esquema de assinatura de APK v2 será disponibilizado posteriormente no N Developer +Preview.

+ +

Acessos a diretório com escopo

+ +

No Android N, os aplicativos podem usar novas APIs para solicitar acesso a diretórios de armazenamento +externo, incluindo diretórios em mídia removível como cartões +SD. As novas APIs simplificam substancialmente o acesso de aplicativos a diretórios de +armazenamento externo padrão, como o diretório Pictures. Os aplicativos, +como aplicativos de fotografia, podem usar essas APIs em vez de +READ_EXTERNAL_STORAGE, que concede acesso a todos os diretórios de +armazenamento, ou da Estrutura de acesso ao armazenamento, que faz o usuário navegar até +o diretório.

+ +

Além disso, as novas APIs simplificam as etapas executadas pelo usuário para conceder ao aplicativo +acesso ao armazenamento externo. Quando você usa as novas APIs, o sistema usa uma IU + de permissões simples que detalha claramente a qual diretório o aplicativo +está solicitando acesso.

+ +

Para obter mais informações, consulte a documentação para desenvolvedores +Acessos + a diretório com escopo.

+ + + + + + diff --git a/docs/html-intl/intl/pt-br/preview/behavior-changes.jd b/docs/html-intl/intl/pt-br/preview/behavior-changes.jd new file mode 100644 index 000000000000..b7f0f38deed2 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/behavior-changes.jd @@ -0,0 +1,480 @@ +page.title=Mudanças de comportamento +page.keywords=preview,sdk,compatibility +meta.tags="preview", "compatibilidade" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-changes_2x.png +@jd:body + + + + + +

+ Além de novos recursos e funcionalidades, o Android N + inclui diversas mudanças de comportamento de sistema e APIs. Este documento + destaca algumas principais mudanças que você deve entender e considerar + nos aplicativos. +

+ +

+ Caso tenha publicado anteriormente um aplicativo para Android, saiba que ele pode ser afetado + pelas alterações na plataforma. +

+ + +

Melhorias no desempenho

+ +

+ O Android N contém mudanças de comportamento com a finalidade de aprimorar a vida útil + da bateria dos dispositivos, o uso de RAM e o desempenho de aplicativos. Essas alterações podem afetar a + disponibilidade de recursos de sistema e notificações de sistema no aplicativo. Analise + essas mudanças e avalie os ajustes que podem ser necessários no + aplicativo. +

+ +

Soneca

+ +

+ Introduzido no Android 6.0 (nível da API 23), o modo soneca aumenta a vida útil da bateria + adiando atividades de CPU e rede quando um usuário deixa um dispositivo desconectado, + estacionário e com a tela desativada. O Android N aprimora + ainda mais o modo soneca aplicando um subconjunto de restrições de CPU e rede + quando o dispositivo está desconectado e com a tela desativada, mas não necessariamente + estacionário como, por exemplo, quando o celular está no bolso do usuário. +

+ + + +

+ Figura 1. Ilustração de como o modo soneca aplica um primeiro nível de + restrições de atividades de sistema para aumentar a vida útil da bateria. +

+ +

+ Quando o dispositivo estiver sendo alimentado pela bateria e a tela estiver desativada por um determinado + período, o dispositivo entrará no modo de soneca e aplicará o primeiro subconjunto de restrições: o + acesso do aplicativo à rede será desativado e os trabalhos e sincronizações serão adiados. Se o dispositivo permanecer + estacionário por um determinado período após entrar no modo soneca, o sistema aplicará as + demais restrições de soneca a {@link android.os.PowerManager.WakeLock}, + aos alarmes {@link android.app.AlarmManager} e às verificações de GPS e Wi-Fi. Independentemente + de as restrições de soneca serem aplicadas parcial ou totalmente, o sistema despertará o + dispositivo para breves janelas de manutenção, quando os aplicativos + poderão acessar a rede e executar todos os trabalhos/sincronizações adiados. +

+ + + +

+ Figura 2. Ilustração de como o modo soneca aplica um segundo nível de + restrições de atividades de sistema após o dispositivo permanecer estacionário por um determinado período. +

+ +

+ Note que a ativação da tela ou do dispositivo encerra o modo soneca e + remove essas restrições de processamento. O comportamento adicional não + afeta as recomendações e práticas recomendadas para a adaptação do aplicativo à versão + anterior do modo soneca, introduzida no Android 6.0 (nível da API 23), como discutido em + + Otimização para soneca e aplicativo em espera. Você deve continuar + a seguir essas recomendações, como o uso do Google Cloud Messaging (GCM) para + enviar e receber mensagens, e começar a planejar atualizações para acomodar o + comportamento adicional do modo soneca. +

+ + +

Project Svelte: otimizações em segundo plano

+ +

+ O Android N remove três transmissões implícitas para ajudar a otimizar o + uso de memória e o consumo de energia. Essa alteração é necessária porque transmissões + implícitas iniciam frequentemente em segundo plano aplicativos + registrados para escutá-las. A remoção dessas transmissões pode beneficiar consideravelmente o + desempenho do dispositivo e a experiência do usuário. +

+ +

+ Os dispositivos móveis experimentam frequentes alterações de conectividade, como ao mudar + entre dados de Wi-Fi e móveis. No momento, os aplicativos podem monitorar alterações de + conectividade registrando um receptor para a transmissão implícita {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} em seu + manifesto. Como vários aplicativos se registram para receber essa transmissão, uma única + mudança de rede pode fazer com que todos despertem e processem a transmissão + ao mesmo tempo. +

+ +

+ De forma semelhante, os aplicativos podem se registrar para receber transmissões implícitas {@link + android.hardware.Camera#ACTION_NEW_PICTURE} e {@link + android.hardware.Camera#ACTION_NEW_VIDEO} de outros aplicativos, como + Câmera. Quando um usuário tira uma fotografia com o aplicativo Câmera, esses aplicativos são despertados + para processar a transmissão. +

+ +

+ Para aliviar esses problemas, o Android N aplica a seguintes + otimizações: +

+ +
    +
  • Os aplicativos direcionados ao Android N não receberão transmissões {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION}, mesmo + se tiverem entradas no manifesto solicitando notificação desses eventos. Aplicativos em execução + em primeiro plano ainda poderão escutar {@code CONNECTIVITY_CHANGE} no + encadeamento principal se solicitarem notificação com um {@link + android.content.BroadcastReceiver}. +
  • + +
  • Os aplicativos não poderão enviar nem receber transmissões {@link + android.hardware.Camera#ACTION_NEW_PICTURE} ou {@link + android.hardware.Camera#ACTION_NEW_VIDEO}. Essa otimização + afeta todos os aplicativos e não apenas os direcionados ao Android N. +
  • +
+ +

+ Versão futuras do Android poderão substituir mais transmissões implícitas, bem + como desvincular serviços em segundo plano. Por esse motivo, evite ou + remova dependências de receptores declarados no manifesto para transmissões implícitas + e de serviços em segundo plano. +

+ +

+ A estrutura do Android oferece diversas soluções para reduzir a necessidade + dessas transmissões implícitas ou de serviços em segundo plano. Por exemplo, a API {@link + android.app.job.JobScheduler} oferece um mecanismo robusto para agendar + operações de rede quando ocorrem condições especificadas, como conexão a uma rede + ilimitada. Você pode até usar {@link + android.app.job.JobScheduler} para reagir a mudanças em provedores de conteúdo. +

+ +

+ Para obter mais informações sobre essa mudança de comportamento e sobre como adaptar seus aplicativos, + consulte Otimizações +em segundo plano. +

+ + +

Alterações nas permissões

+ +

+ O Android N inclui alterações em permissões que podem afetar seu aplicativo, + incluindo permissões de contas de usuário e uma nova permissão para gravar em + armazenamento externo. Veja a seguir um resumo das permissões que mudaram + no Preview: +

+ +
    +
  • {@code GET_ACCOUNTS} (obsoleto) +

    + A permissão GET_ACCOUNTS passou a ser obsoleta. O sistema ignora essa + permissão em aplicativos direcionados ao Android N. +

    +
  • + +
+ + + +

Melhorias na acessibilidade

+ +

+ O Android N inclui mudanças criadas para aprimorar a facilidade de uso da + plataforma para usuários com visão reduzida ou deficiente. Normalmente, essas mudanças + não exigirão alterações de código no aplicativo. No entanto, analise + esse recurso e teste-o em seu aplicativo para avaliar possíveis impactos na experiência + do usuário. +

+ + +

Zoom de tela

+ +

+ O Android N permite que os usuários definam Display size, que amplia + ou reduz todos os elementos na tela, melhorando a acessibilidade do dispositivo + para usuários com visão deficiente. Os usuários não podem alterar o zoom da tela além da largura mínima de + tela de + sw320dp, que é a largura do Nexus 4, um telefone comum de tamanho médio. +

+ +
+ +
+ +
+
+ +
+ +
+

+ Figura 3. A tela à direita mostra o efeito de + reduzir o Display size de um dispositivo executando uma imagem do sistema Android N. +

+ + +

+ Quando a densidade do dispositivo mudar, o sistema notificará os aplicativos em execução das + seguintes formas: +

+ +
    +
  • Se um aplicativo for direcionado ao nível da API 23 ou anterior, o sistema eliminará + todos os processos em segundo plano. Isso significa que, se um usuário alternar + desse aplicativo para abrir a tela Settings e alterar a + configuração Display size, o sistema eliminará o aplicativo da mesma + forma que faria em uma situação de pouca memória. Se o aplicativo tiver processos + em primeiro plano, o sistema notificará esses processos sobre a mudança de configuração, como + descrito em Processamento + de alterações no tempo de execução, como se a orientação do dispositivo tivesse mudado. +
  • + +
  • Se um aplicativo for direcionado ao Android N, todos os seus processos + (em primeiro e segundo plano) serão notificados da mudança de configuração, como + descrito em Processamento + de alterações no tempo de execução. +
  • +
+ +

+ A maioria dos aplicativos não precisa ser alterada para ser compatível com esse recurso, desde que + os aplicativos sigam as práticas recomendadas do Android. Os itens específicos a serem verificados são: +

+ +
    +
  • Teste o aplicativo em um dispositivo com largura de tela sw320dp + e verifique se ele funciona adequadamente. +
  • + +
  • Quando a configuração do dispositivo mudar, atualize todas as informações + dependentes de densidade armazenadas no cache, como bitmaps no cache ou recursos carregados da + rede. Verifique a ocorrência de alterações de configuração quando o aplicativo sair do estado pausado e retomar + a execução. +

    + Observação: se você armazenar em cache dados dependentes de configuração, +recomendamos incluir metadados relevantes, como o tamanho de tela + adequado ou a densidade de pixels desses dados. Salvar esses dados permitirá que você + decida se será necessário atualizar os dados armazenados em cache após uma mudança + de configuração. +

    +
  • + +
  • Evite especificar dimensões com unidades px, pois elas não são redimensionadas de + acordo com a densidade de tela. Em vez disso, especifique dimensões com unidades de pixel independente de + densidade (dp). +
  • +
+ +

Configurações de visão no assistente de configuração

+ +

+ Agora, o Android N inclui Configurações de visão na tela de boas-vindas, onde os usuários podem + definir as configurações de acessibilidade a seguir em um novo dispositivo: + Magnification gesture, Font size, + Display size e TalkBack. Essa mudança + aumenta a visibilidade de erros relacionados a configurações de tela diferentes. Para + avaliar o impacto desse recurso, teste os aplicativos com essas + configurações ativadas. Você encontrará as configurações em Settings > + Accessibility. +

+ +

Aplicativos NDK vinculados a bibliotecas de plataforma

+ +

+ O Android N inclui mudanças de espaço de nome para evitar o carregamento de APIs não públicas. + Se você usar o NDK, use apenas APIs públicas da plataforma Android. + O uso de APIs não públicas na próxima versão oficial do Android + poderá causar problemas no seu aplicativo. +

+ +

+ Para alertar sobre o uso de APIs não públicas, os aplicativos executados em um dispositivo + Android N geram um erro na saída logcat quando um aplicativo chama uma API não pública. + Esse erro também é exibido na tela do dispositivo como mensagem para + que o usuário fique ciente da situação. Revise o código do seu aplicativo para + remover o uso de APIs de plataformas não públicas e faça testes completos do aplicativo usando + um dispositivo de visualização ou um emulador. +

+ +

+ Se o seu aplicativo depender de bibliotecas de plataforma, consulte a documentação do NDK + para obter soluções usuais de substituição de APIs privadas comuns por APIs públicas equivalentes. + Também é possível que você esteja vinculando bibliotecas de plataforma sem perceber, + particularmente se o aplicativo usar uma biblioteca que faz parte da plataforma (como + libpng), mas não faz parte do NDK. Nesse caso, verifique se + o APK contém todos os arquivos .so que você pretende vincular. +

+ +

+ Cuidado: algumas bibliotecas de terceiros podem conter links para APIs + não públicas. Se o aplicativo usar essas bibliotecas, poderá falhar quando executado + na próxima versão oficial do Android. +

+ +

+ Os aplicativos não devem depender de nem usar bibliotecas nativas não incluídas + no NDK, pois elas podem ser alteradas ou removidas entre uma versão do Android + e outra. A mudança de OpenSSL para BoringSSL é um exemplo dessas alterações. + Além disso, dispositivos diferentes podem oferecer níveis distintos de compatibilidade, porque + não há requisitos de compatibilidade para bibliotecas de plataforma não incluídas + no NDK. Se você precisar acessar bibliotecas que não são do NDK em dispositivos mais antigos, torne o + carregamento dependente do nível do Android API. +

+ +

+ Para ajudar a diagnosticar esses tipos de problemas, veja a seguir alguns exemplos de erros + de Java e NDK que podem ocorrer durante a compilação do aplicativo com o Android N: +

+ +

Exemplo de erro de Java:

+
+java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
+    is not accessible for the namespace "classloader-namespace"
+
+ +

Exemplo de erro de NDK:

+
+dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
+
+ + +

+ Veja a seguir algumas correções comuns para aplicativos que encontram esses tipos de erro: +

+ +
    +
  • O uso de getJavaVM e getJNIEnv do libandroid_runtime.so pode ser substituído + por funções JNI padrão: +
    +AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
    +AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
    +JavaVM::AttachCurrentThread from <jni.h>.
    +
    +
  • + +
  • O uso do símbolo {@code property_get} de {@code libcutils.so} pode ser + substituído pelo {@code __system_property_get} alternativo público. + Para fazer isso, use {@code __system_property_get} com o include abaixo: +
    +#include <sys/system_properties.h>
    +
    +
  • + +
  • O uso do símbolo {@code SSL_ctrl} de {@code libcrypto.so} deve ser + substituído por uma versão local do aplicativo. Por exemplo, vincule estaticamente + {@code libcyrpto.a} no arquivo {@code .so} ou inclua dinamicamente o seu próprio + {@code libcrypto.so} do BoringSSL ou OpenSSL no aplicativo. +
  • +
+ +

Android for Work

+

+ O Android N contém mudanças para aplicativos direcionados ao Android for Work, incluindo + mudanças em instalação de certificados, redefinição de senhas, gerenciamento de + usuários secundários e acesso a identificadores de dispositivos. Se você estiver criando aplicativos para + ambientes do Android for Work, examine essas mudanças e modifique + o aplicativo conforme necessário. +

+ +
    +
  • Você precisa instalar um instalador de certificado delegado antes que o DPC possa + configurá-lo. Para aplicativos de donos de perfil e dispositivo direcionados ao N SDK, você deve + instalar o instalador de certificado delegado antes de chamar o + controlador de políticas de dispositivo (DPC) + DevicePolicyManager.setCertInstallerPackage(). Se o instalador + não estiver instalado, o sistema gerará uma + IllegalArgumentException. +
  • + +
  • As restrições de redefinição de senha de administradores do dispositivo agora se aplicam também a + donos de perfil. Os administradores de dispositivo não podem mais usar + DevicePolicyManager.resetPassword() para limpar senhas nem para alterar + as já definidas. Os administradores de dispositivo ainda poderão definir uma senha, mas apenas + em dispositivos sem senha, PIN ou padrão. +
  • + +
  • Donos de dispositivo e perfil poderão gerenciar contas, mesmo se restrições forem + definidas. Eles podem chamar as APIs de gerenciamento de contas, + mesmo se restrições de usuário DISALLOW_MODIFY_ACCOUNTS forem implementadas. +
  • + +
  • Os donos de dispositivo podem gerenciar usuários secundários com maior facilidade. Quando um dispositivo + executar no modo de dono do dispositivo, a restrição DISALLOW_ADD_USER + será definida automaticamente. Isso evita que os usuários criem usuários secundários + não gerenciados. Além disso, os métodos CreateUser() e + createAndInitial() ficaram obsoletos e foram substituídos + pelo novo método DevicePolicyManager.createAndManageUser(). +
  • + +
  • Os donos de dispositivo podem acessar identificadores de dispositivo. O dono do dispositivo pode acessar o + endereço MAC Wi-Fi de um dispositivo usando + DevicePolicyManagewr.getWifiMacAddress(). Se o Wi-Fi nunca + foi ativado no dispositivo, esse método retorna o valor {@code null}. +
  • +
+ +

+ Para obter mais informações sobre as mudanças no Android for Work no Android N, consulte + Atualizações no Android for Work. +

+ +

Outros pontos importantes

+ +
    +
  • Quando um aplicativo for executado no Android N, mas for direcionado a um nível da API menor + e o usuário alterar o tamanho da tela, o processo do aplicativo será eliminado. O aplicativo + deverá ser capaz de processar corretamente esse cenário. Caso contrário, falhará + quando o usuário restaurá-lo usando Recents. + +

    +Você deve testar o aplicativo para verificar +se esse comportamento não ocorre. +Isso pode ser feito causando uma falha idêntica +eliminando o aplicativo manualmente usando o DDMS. +

    + +

    +Aplicativos direcionados ao Android N e versões posteriores não serão eliminados automaticamente em mudanças de densidade. +No entanto, podem continuar a responder a alterações de configurações de forma não ideal. +

    +
  • + +
  • +Os aplicativos no Android N devem ser capazes de processar corretamente mudanças de configuração +e não devem falhar em inicializações subsequentes. Você pode verificar o comportamento do aplicativo +alterando o tamanho da fonte (Setting > +Display > Font size) e depois restaurando +o aplicativo em Recents. +
  • +
+ diff --git a/docs/html-intl/intl/pt-br/preview/download.jd b/docs/html-intl/intl/pt-br/preview/download.jd new file mode 100644 index 000000000000..432967e28815 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/download.jd @@ -0,0 +1,541 @@ +page.title=Testar em um dispositivo +meta.tags="preview", "nexus","system image" +page.tags="preview", "androidn" +page.image=images/cards/card-n-downloads_2x.png + +@jd:body + +
+ + + + +
+ + + +

+ Para executar e testar o aplicativo na nova plataforma, você deve configurar um ambiente de tempo de execução do + Android N. Isso pode ser feito das seguintes maneiras: +

+ +
    +
  • Instale o Android N em um dispositivo de hardware compatível ou
  • +
  • Configure um emulador do Android que execute o Android N
  • +
+ +

+ Se quiser um ambiente para fazer testes básicos de compatibilidade do seu aplicativo na + nova plataforma, você só precisará do seu APK atual e de um dispositivo de hardware ou + emulador. Não é necessário atualizar o ambiente de desenvolvimento completo + para fazer testes básicos. +

+ +

+ Se quiser modificar seu aplicativo para direcioná-lo ao Android N ou usar as novas APIs do Android N, + você deverá configurar um ambiente de desenvolvimento atualizado para oferecer suporte ao + Android N. O documento Preparação para desenvolver para o + Android N oferece os detalhes. +

+ + +

Configurar um dispositivo de hardware

+ +

+ O N Developer Preview oferece atualizações de sistema para diversos dispositivos de hardware + que podem ser usados para testar o aplicativo, de celulares a tablets e televisões. +

+ +

+ Se você tiver acesso a um dispositivo compatível, poderá atualizá-lo para uma versão de marco do Developer + Preview de uma das seguintes maneiras: +

+ +
    +
  • Inscreva o dispositivo nas atualizações de sistema automáticas por OTA usando o + programa beta do Android. Após a inscrição, seu dispositivo receberá atualizações regulares + por OTA de todas as versões de marco do N Developer Preview. Essa + abordagem é recomendada porque ela permite que você faça uma transição tranquila do seu ambiente + atual para as várias versões do N Developer Preview.
  • +
  • Faça o download de uma imagem de sistema do Developer Preview e atualize o dispositivo manualmente. + Atualizações por OTA não são fornecidas automaticamente para dispositivos que são atualizados manualmente, mas + é possível inscrever esses dispositivos no programa beta do Android para receber atualizações por OTA.
  • +
+ +

Inscrever o dispositivo para receber atualizações automáticas por OTA

+ +

+ Se você tiver acesso a um dispositivo compatível (veja a lista na tabela de + downloads), poderá receber atualizações por OTA de versões do Preview do Android + ao inscrever esse dispositivo no programa beta do Android. Essas atualizações são + baixadas automaticamente e serão aplicadas em seu dispositivo da mesma maneira que + atualizações de sistema oficiais. +

+ +

+ Você pode cancelar a inscrição de um dispositivo a qualquer momento. O dispositivo receberá uma atualização por OTA + para a versão de produção mais recente disponível do Android para o dispositivo em questão + (por exemplo, o Android 6.0 Marshmallow). Essa atualização exige que o dispositivo seja + totalmente redefinido, portanto, os dados do usuário serão removidos. Não deixe de fazer o backup + de dados importantes antes de cancelar a inscrição de um dispositivo. +

+ +

+ Para saber mais e para inscrever seu dispositivo, consulte + o site do programa beta do Android. +

+ +

Observação: + cancelar um dispositivo exige uma redefinição total. Faça primeiro o backup + de dados importantes. +

+ +

Atualizar um dispositivo manualmente

+ +

+ A qualquer momento, você pode fazer o download da imagem de sistema mais recente do Developer Preview e + aplicá-la manualmente ao seu dispositivo. Consulte a tabela abaixo para fazer o download da imagem de sistema + para o dispositivo de teste. A atualização manual de um dispositivo é útil se você precisa de um + controle preciso sobre o ambiente de teste ou se precisa reinstalar com frequência, + como em testes automatizados. +

+ +

+ Instalar uma imagem de sistema em um dispositivo remove todos os dados + do dispositivo, portanto, faça primeiro o backup dos dados. +

+ +

+ Após fazer o backup dos dados do dispositivo e baixar a imagem de sistema abaixo que + corresponda ao seu dispositivo, siga as instruções em developers.google.com/android + para aplicar a imagem no dispositivo. +

+ +

+ Imagens de sistema atualizadas manualmente não recebem + atualizações por OTA automaticamente para versões de marco posteriores do + Developer Preview. Mantenha seu ambiente atualizado e aplique + uma nova imagem de sistema a cada marco do Developer Preview. +

+ +

+ Se decidir que deseja obter atualizações por OTA após atualizar um dispositivo manualmente, +basta inscrevê-lo no programa beta do + Android. É possível inscrever dispositivos a qualquer momento para receber a próxima atualização do Preview + por OTA. +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DispositivoDownload / Checksums
Nexus 5X
"bullhead"
bullhead-npc56p-preview-6c877a3d.tgz
+ MD5: b5cf874021023b398f5b983b24913f5d
+ SHA-1: 6c877a3d9fae7ec8a1678448e325b77b7a7b143a +
Nexus 6
"shamu"
shamu-npc56p-preview-54b13c67.tgz
+ MD5: af183638cf34e0eb944a1957d7696f60
+ SHA-1: 54b13c6703d369cc79a8fd8728fe4103c6343973 +
Nexus 6P
"angler"
angler-npc56p-preview-85ffc1b1.tgz
+ MD5: bc4934ea7bd325753eee1606d3725a24
+ SHA-1: 85ffc1b1be402b1b96f9ba10929e86bba6c6c588 +
Nexus 9
"volantis"
volantis-npc56p-preview-0e8ec8ef.tgz
+ MD5: c901334c6158351e945f188167ae56f4
+ SHA-1: 0e8ec8ef98c7a8d4f58d15f90afc5176303efca4 +
Nexus 9G
"volantisg"
volantisg-npc56p-preview-1bafdbfb.tgz
+ MD5: 7bb95bebc478d7257cccb4652899d1b4
+ SHA-1: 1bafdbfb502e979a9fe4c257a379c4c7af8a3ae6 +
Nexus Player
"fugu"
fugu-npc56r-preview-7027d5b6.tgz
+ MD5: f5d3d8f75836ccfe4c70e8162e498be4
+ SHA-1: 7027d5b662bceda4c80a91a0a14ef0e5a7ba795b +
Pixel C
"ryu"
ryu-npc56p-preview-335a86a4.tgz
+ MD5: 4e21fb183bbbf467bee91598d587fd2e
+ SHA-1: 335a86a435ee51f18464de343ad2e071c38f0e92 +
General Mobile 4G (Android One)
"seed"
seed_l8150-npc56p-preview-82472ebc.tgz
+ MD5: 983e083bc7cd0c4a2d39d6ebaa20202a
+ SHA-1: 82472ebc9a6054a103f53cb400a1351913c95127 +
+ +

Desinstalar o Preview de um dispositivo

+ +

+ O Preview pode ser desinstalado de um dispositivo de uma das + seguintes maneiras:

+
    +
  • Obtenha uma imagem de sistema com especificações de fábrica e aplique-a + manualmente no dispositivo. +
      +
    • Para dispositivos Nexus e Pixel C, consulte + a página de downloads de Imagens de fábrica + para dispositivos Nexus.
    • +
    • Para outros dispositivos, entre em contato diretamente com +o fabricante. Como alternativa, se o dispositivo tiver suporte + no programa beta do Android, será possível inscrevê-lo no + programa e cancelar a inscrição (veja abaixo).
    • +
    +
  • +
  • Cancele a inscrição do dispositivo no programa Beta do Android. Se o + dispositivo estiver inscrito no programa beta do + Android, independentemente de qual ele seja, você poderá simplesmente cancelar a inscrição. +

    + O dispositivo receberá uma atualização por OTA para a versão de produção mais recente + disponível do Android para o dispositivo em questão (por exemplo, o Android 6.0 Marshmallow). + Essa atualização exige que o dispositivo seja totalmente redefinido, portanto, os dados do usuário serão + removidos. Não deixe de fazer o backup de dados importantes antes + de cancelar a inscrição de um dispositivo. +

    +
  • +
+ +

Observação: + para desinstalar uma imagem de sistema do Developer Preview antes do + fim do programa, é preciso redefinir o dispositivo por completo e remover todos os dados + do usuário no dispositivo. +

+ + +

Configurar um emulador

+ +

Para usar o emulador do Android para executar o Android N Preview, você deve +fazer o download do Android N Preview SDK e criar um dispositivo virtual para o +emulador.

+ +

Primeiro, faça o download do Android N Preview SDK da seguinte maneira (se você +já adquiriu esse recurso ao se preparar +para desenvolver para o Android N, pule esta etapa): + +

    +
  1. No Android Studio, abra a caixa de diálogo Settings + (File > Settings no Windows/Linux ou + Android Studio > Preferences no Mac). No painel à + esquerda, selecione Appearance & Behavior > + System Settings > Android SDK. + +
  2. Clique na guia SDK Platforms e marque a caixa de seleção + Android N Preview.
  3. + +
  4. Clique na guia SDK Tools e marque as caixas de seleção + Android SDK Build Tools, Android SDK + Platform-Tools e Android SDK Tools +. +
  5. + +
  6. Clique em OK e aceite os termos de licença + de qualquer pacote que precise ser instalado. +
  7. +
+ +

Agora, você deve ter o Android SDK Built-Tools 24.0 0 rc1, +o Platform-Tools 24.0.0 rc1 e o SDK Tools +25.0.9. Se você não atualizar o SDK Tools para a versão 25.0.9, não será +possível executar as imagens de sistema x86_64 para o Android N.

+ + +

Agora, crie um dispositivo virtual com a imagem de sistema do Android N:

+ +
    +
  1. Abra o AVD Manager selecionando Tools > Android > + AVD Manager.
  2. +
  3. Clique em Create Virtual Device.
  4. +
  5. Selecione um dispositivo como Nexus 5X, Nexus 6P, Nexus 9 ou Android TV + e clique em Next.
  6. +
  7. Selecione a imagem de sistema N (com ABI + x86) e clique em Next. + (Apenas imagens de sistema x86 atualmente são compatíveis com o emulador do Android +para o Android N Preview.) +
  8. Conclua a configuração do AVD e clique em + Finish.
  9. +
+ +

Agora, é possível iniciar o emulador do Android com o AVD Android N Preview.

+ +

+Para ter a melhor experiência possível com o emulador do Android, instale o +Android Studio 2.1 Preview, que oferece suporte ao Android Emulator 2.0 Beta, +cujo desempenho é muito superior ao do emulador no +Android Studio 1.5.

+ +

Observação: + se você está usando o Android Studio 2.0 Beta, há um problema conhecido + que impede a criação de AVDs com imagens de sistema do N Preview, portanto, + é preciso usar o Android Studio 2.1 Preview para criar AVDs. +

+ +

Para saber mais sobre como criar dispositivos virtuais para teste, consulte Gerenciamento de dispositivos virtuais. +

+ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd b/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd new file mode 100644 index 000000000000..a328d89be661 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd @@ -0,0 +1,388 @@ +page.title=Otimizações em segundo plano +page.metaDescription=Novas restrições a transmissões implícitas. +page.keywords="android N", "implicit broadcasts", "job scheduler" +@jd:body + + + +

+ Os processos em segundo plano podem fazer uso intensivo de memória e bateria. Por exemplo, uma + transmissão implícita poderá iniciar diversos processos em segundo plano registrados + para escutá-la, mesmo se esses processos não forem muito usados. Isso pode afetar + substancialmente o desempenho do dispositivo e a experiência de usuário. +

+ +

+ Para aliviar esse problema, o N Developer Preview aplica as seguintes + restrições: +

+ +
    +
  • Os aplicativos direcionados ao Preview não receberão transmissões {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} se estiverem + registrados para recebê-las no seu manifesto. Aplicativos executados em primeiro plano + ainda poderão escutar {@code CONNECTIVITY_CHANGE} no encadeamento principal + registrando um {@link android.content.BroadcastReceiver} em {@link + android.content.Context#registerReceiver Context.registerReceiver()}. +
  • + +
  • Os aplicativos não podem enviar nem receber transmissões {@link + android.hardware.Camera#ACTION_NEW_PICTURE} ou {@link + android.hardware.Camera#ACTION_NEW_VIDEO}. Essa otimização + afeta todos os aplicativos e não apenas os direcionados ao Preview. +
  • +
+ +

+ A estrutura do Android oferece diversas soluções para reduzir a necessidade dessas + transmissões implícitas. Por exemplo, {@link android.app.job.JobScheduler} + e +{@code GcmNetworkManager} oferecem mecanismos robustos para agendar operações + de rede quando ocorrem condições especificadas, como conexão a uma + rede ilimitada. Agora, você também pode usar {@link android.app.job.JobScheduler} + para reagir a mudanças em provedores de conteúdo. Os objetos {@link android.app.job.JobInfo} + encapsulam os parâmetros usados por {@link android.app.job.JobScheduler} + para agendar o seu trabalho. Quando as condições do trabalho forem atendidas, o sistema + executará o trabalho no {@link android.app.job.JobService} do seu aplicativo. +

+ +

+ Neste documento, veremos como usar métodos alternativos, como + {@link android.app.job.JobScheduler}, para adaptar seu aplicativo a essas novas + restrições. +

+ +

+ Restrições sobre CONNECTIVITY_ACTION +

+ +

+ Os aplicativos direcionados ao N Developer Preview não receberão transmissões {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} se estiverem + registrados para recebê-las no seu manifesto e os processos que dependerem dessas + transmissões não serão iniciados. Isso pode ser um problema para aplicativos que quiserem + escutar mudanças de rede ou executar atividades de rede em massa quando o + dispositivo se conectar a uma rede ilimitada. Já existem várias soluções para contornar essa + restrição na estrutura do Android, mas a escolha da solução correta + depende do que o aplicativo pretende realizar. +

+ +

+ Observação: um {@link android.content.BroadcastReceiver} registrado em + {@link android.content.Context#registerReceiver Context.registerReceiver()} + continuará a receber essas transmissões enquanto o aplicativo estiver em primeiro plano. +

+ +

+ Agendamento de trabalhos de rede em conexões ilimitadas +

+ +

+ Ao usar a classe {@link android.app.job.JobInfo.Builder JobInfo.Builder} + para compilar o objeto {@link android.app.job.JobInfo}, aplique o método {@link + android.app.job.JobInfo.Builder#setRequiredNetworkType + setRequiredNetworkType()} e passe {@link android.app.job.JobInfo + JobInfo.NETWORK_TYPE_UNMETERED} como parâmetro do trabalho. O código a seguir + agendará a execução de um serviço quando o dispositivo se conectar a uma rede + ilimitada e estiver carregando: +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+      (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo job = new JobInfo.Builder(
+    MY_BACKGROUND_JOB,
+    new ComponentName(context, MyJobService.class))
+      .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
+      .setRequiresCharging(true)
+      .build();
+  js.schedule(job);
+}
+
+ +

+ Quando as condições para o trabalho forem atendidas, o aplicativo receberá um retorno de chamada para executar + o método {@link android.app.job.JobService#onStartJob onStartJob()} na + {@code JobService.class} especificada. Para ver mais exemplos da implementação de {@link + android.app.job.JobScheduler}, consulte o aplicativo de exemplo do JobScheduler. +

+ +

+ Os aplicativos que usarem serviços do GMSCore e forem direcionados ao Android 5.0 (nível da API 21) + ou anterior poderão usar + {@code GcmNetworkManager} e especificar {@code Task.NETWORK_STATE_UNMETERED}. +

+ +

+ Monitoramento de conectividade de rede durante a execução do aplicativo +

+ +

+ Aplicativos executados em primeiro plano ainda poderão escutar {@code + CONNECTIVITY_CHANGE} com um {@link + android.content.BroadcastReceiver} registrado. No entanto, a API {@link + android.net.ConnectivityManager} oferece um método mais robusto para solicitar + um retorno de chamada apenas quando condições de rede especificadas são atendidas. +

+ +

+ Os objetos {@link android.net.NetworkRequest} definem os parâmetros do + retorno de chamada de rede em termos de {@link android.net.NetworkCapabilities}. Objetos + {@link android.net.NetworkRequest} são criados com a classe {@link + android.net.NetworkRequest.Builder NetworkRequest.Builder}. Em seguida, {@link + android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, + android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} + passa o objeto {@link android.net.NetworkRequest} ao sistema. Quando + as condições de rede forem atendidas, o aplicativo receberá um retorno de chamada para executar o + método {@link android.net.ConnectivityManager.NetworkCallback#onAvailable + onAvailable()} definido em sua classe {@link + android.net.ConnectivityManager.NetworkCallback}. +

+ +

+ O aplicativo continuará a receber retornos de chamada até que o aplicativo encerre ou chame + {@link android.net.ConnectivityManager#unregisterNetworkCallback + unregisterNetworkCallback()}. +

+ +

+ Restrições sobre NEW_PICTURE e NEW_VIDEO +

+ +

+ No N Developer Preview, os aplicativos não conseguem enviar nem receber transmissões {@link + android.hardware.Camera#ACTION_NEW_PICTURE} ou {@link + android.hardware.Camera#ACTION_NEW_VIDEO}. Essa restrição ajuda a + aliviar os impactos no desempenho e na experiência de usuário quando vários aplicativos devem + despertar para processar uma nova imagem ou vídeo. O N Developer Preview + estende {@link android.app.job.JobInfo} e {@link + android.app.job.JobParameters} para oferecer uma solução alternativa. +

+ +

+ Novos métodos JobInfo +

+ +

+ Para acionar trabalhos em mudanças de URI de conteúdo, o N Developer Preview estende + a API {@link android.app.job.JobInfo} com os seguintes métodos: +

+ +
+
+ {@code JobInfo.TriggerContentUri()} +
+ +
+ Encapsula os parâmetros necessários para acionar um trabalho quando ocorrem mudanças de URI de conteúdo. +
+ +
+ {@code JobInfo.Builder.addTriggerContentUri()} +
+ +
+ Passa um objeto {@code TriggerContentUri} para {@link + android.app.job.JobInfo}. Um {@link android.database.ContentObserver} + monitora o URI de conteúdo encapsulado. Se houver vários objetos {@code + TriggerContentUri} associados a um trabalho, o sistema fornecerá um + retorno de chamada, mesmo se indicar uma mudança em apenas um dos URIs de conteúdo. +
+ +
+ Adicione o sinalizador {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} para + acionar o trabalho em caso de mudança em qualquer um dos descendentes do URI especificado. Esse indicador + corresponde ao parâmetro {@code notifyForDescendants} passado para {@link + android.content.ContentResolver#registerContentObserver + registerContentObserver()}. +
+
+ +

+ Observação: não é possível usar {@code TriggerContentUri()} + juntamente com {@link android.app.job.JobInfo.Builder#setPeriodic + setPeriodic()} ou {@link android.app.job.JobInfo.Builder#setPersisted + setPersisted()}. Para monitorar continuamente mudanças de conteúdo, agende um novo + {@link android.app.job.JobInfo} antes que o {@link + android.app.job.JobService} do aplicativo encerre o processamento do retorno de chamada mais recente. +

+ +

+ O exemplo de código a seguir agenda um trabalho que será acionado quando o sistema indicar + uma mudança no URI de conteúdo {@code MEDIA_URI}: +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+          (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo.Builder builder = new JobInfo.Builder(
+          MY_BACKGROUND_JOB,
+          new ComponentName(context, MediaContentJob.class));
+  builder.addTriggerContentUri(
+          new JobInfo.TriggerContentUri(MEDIA_URI,
+          JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
+  js.schedule(builder.build());
+}
+
+

+ Quando o sistema indicar uma mudança nos URIs de conteúdo especificados, o aplicativo + receberá um retorno de chamada e um objeto {@link android.app.job.JobParameters} será + passado para o método {@link android.app.job.JobService#onStartJob onStartJob()} + na {@code MediaContentJob.class}. +

+ +

+ Novos métodos JobParameter +

+ +

+ O N Developer Preview também estende {@link android.app.job.JobParameters} para + permitir que o aplicativo receba informações úteis sobre quais autoridades de conteúdo + e URIs acionaram o trabalho: +

+ +
+
+ {@code Uri[] getTriggeredContentUris()} +
+ +
+ Retorna uma matriz de URIs que acionaram o trabalho. O retorno será {@code + null} se o trabalho não foi acionado por URIs (por exemplo, o trabalho foi + acionado devido a um prazo ou por outro motivo) ou o número de URIs modificados + for maior que 50. +
+ +
+ {@code String[] getTriggeredContentAuthorities()} +
+ +
+ Retorna uma matriz de strings de autoridades de conteúdo que acionaram o trabalho. + Se a matriz retornada não for {@code null}, use {@code getTriggeredContentUris()} + para recuperar os detalhes sobre quais URIs foram modificados. +
+
+ +

+ O exemplo de código a seguir substitui o método {@link + android.app.job.JobService#onStartJob JobService.onStartJob()} e + registra as autoridades de conteúdo e URIs que acionaram o trabalho: +

+ +
+@Override
+public boolean onStartJob(JobParameters params) {
+  StringBuilder sb = new StringBuilder();
+  sb.append("Media content has changed:\n");
+  if (params.getTriggeredContentAuthorities() != null) {
+      sb.append("Authorities: ");
+      boolean first = true;
+      for (String auth :
+          params.getTriggeredContentAuthorities()) {
+          if (first) {
+              first = false;
+          } else {
+             sb.append(", ");
+          }
+           sb.append(auth);
+      }
+      if (params.getTriggeredContentUris() != null) {
+          for (Uri uri : params.getTriggeredContentUris()) {
+              sb.append("\n");
+              sb.append(uri);
+          }
+      }
+  } else {
+      sb.append("(No content)");
+  }
+  Log.i(TAG, sb.toString());
+  return true;
+}
+
+ +

+ Otimização adicional do aplicativo +

+ +

+ A otimização dos aplicativos para execução em dispositivos com pouca memória ou em + condições de pouca memória pode melhorar o desempenho e a experiência do usuário. A remoção de + dependências de serviços em segundo plano e receptores de transmissão + implícita registrados estatisticamente podem aprimorar a execução do aplicativo nesses dispositivos. Embora + o N Developer Preview avance na redução de alguns desses problemas, + recomendamos que você otimize os aplicativos para execução sem o uso desses + processos em segundo plano. +

+ +

+ O N Developer Preview introduz alguns comandos adicionais do Bridge de Debug Android (ADB) que + podem ser usados para testar o comportamento do aplicativo de teste com esses processos em segundo plano desativados: +

+ +
    +
  • Para simular condições em que transmissões implícitas e serviços em segundo plano + não estão disponíveis, insira o seguinte comando: +
  • + +
  • +
    +{@code $ adb shell cmd appops set RUN_IN_BACKGROUND ignore}
    +
    +
  • + +
  • Para reativar transmissões implícitas e serviços em segundo plano, insira o + seguinte comando: +
  • + +
  • +
    +{@code $ adb shell cmd appops set RUN_IN_BACKGROUND allow}
    +
    +
  • +
\ No newline at end of file diff --git a/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd b/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd new file mode 100644 index 000000000000..a462b2316778 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd @@ -0,0 +1,180 @@ +page.title=Inicialização direta +page.keywords=preview,sdk,direct boot +page.tags=androidn + +@jd:body + + + +

O Android N é executado em um modo seguro de inicialização direta +quando o dispositivo é ligado, mas o usuário não o +desbloqueia. Para isso, o sistema oferece dois locais de armazenamento para dados:

+ +
    +
  • O armazenamento criptografado de credenciais, que é o local de armazenamento padrão +e é disponibilizado apenas depois que o usuário desbloqueia o dispositivo.
  • +
  • O armazenamento criptografado do dispositivo, que é um local de armazenamento disponibilizado +durante o modo de inicialização direta e depois que o usuário desbloqueia o dispositivo.
  • +
+ +

Por padrão, aplicativos não são executados no modo de inicialização direta. +Se seu aplicativo precisa executar ações durante esse modo, você pode registrar os +componentes que devem ser executados. Alguns casos comuns +para aplicativos que precisam ser executados no modo de inicialização direta:

+ +
    +
  • Aplicativos com notificações programadas, como aplicativos de +relógio.
  • +
  • Aplicativos que fornecem notificações importantes ao usuário, como aplicativos de SMS.
  • +
  • Aplicativos que fornecem serviços de acessibilidade, como o Talkback.
  • +
+ +

Se seu aplicativo precisar acessar dados enquanto estiver no modo de inicialização direta, use +o armazenamento criptografado do dispositivo. O armazenamento criptografado do dispositivo contém dados +criptografados com uma chave que só é disponibilizada depois que o dispositivo realizou +uma inicialização verificada com sucesso.

+ +

Para dados que devem ser criptografados com uma chave associada às credenciais +do usuário, como um PIN ou uma chave, use o armazenamento criptografado de credenciais. +Esse armazenamento só é disponibilizado depois que o usuário +desbloquear o dispositivo com sucesso e até que ele reinicie o dispositivo novamente. Se o +usuário ativar a tela de bloqueio após desbloquear o dispositivo, isso não bloqueará +o armazenamento criptografado de credenciais.

+ +

Solicitar acesso para executar durante a inicialização direta

+ +

Aplicativos devem registrar seus componentes com o sistema antes de +poderem ser executados no modo de inicialização direta ou acessar o armazenamento criptografado +do dispositivo. Os aplicativos são registrados com o sistema ao marcar os componentes como +tendo reconhecimento de criptografia. Para marcar seu componente como tendo reconhecimento de criptografia, defina o atributo +android:encryptionAware como true no manifesto.

+ +

Componentes com reconhecimento de criptografia podem se registrar para receber uma mensagem de transmissão +LOCKED_BOOT_COMPLETED do +sistema quando o dispositivo for reiniciado. Nesse momento, o armazenamento criptografado do +dispositivo é disponibilizado e pode executar tarefas +necessárias durante o modo de inicialização, como o acionamento de um alarme programado.

+ +

O fragmento de código a seguir é um exemplo de como registrar um +{@link android.content.BroadcastReceiver} como tendo reconhecimento de criptografia e adicionar um +filtro de intenção para LOCKED_BOOT_COMPLETED no manifesto do aplicativo:

+ +
+<receiever
+  android:encryptionAware="true" >
+  ...
+  <intent-filter>
+    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+  </intent-filter>
+</receiver>
+
+ +

Quando o usuário desbloquear o dispositivo, todos os componentes poderão acessar o armazenamento +criptografado do dispositivo e o armazenamento criptografado de credenciais.

+ +

Acessar armazenamento criptografado do dispositivo

+ +

Para acessar o armazenamento criptografado do dispositivo, crie uma segunda instância de +{@link android.content.Context} chamando +Context.createDeviceEncryptedStorageContext(). Todas as chamadas da API +de armazenamento que usam esse contexto acessam o armazenamento criptografado do dispositivo. O +exemplo a seguir acessa o armazenamento criptografado do dispositivo e abre um +arquivo de dados existente do aplicativo:

+ +
+Context directBootContext = Context.createDeviceEncryptedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+
+ +

Use o armazenamento criptografado do dispositivo somente para +informações que precisem ser acessadas durante o modo de inicialização direta. +Não use o armazenamento criptografado do dispositivo como um repositório criptografado para fins gerais. +Para informações particulares do usuário ou dados criptografados que não são necessários durante +o modo de inicialização direta, use o armazenamento criptografado de credenciais.

+ +

Receber notificação quando o usuário desbloquear

+ +

Quando o usuário desbloquear o dispositivo após a reinicialização, seu aplicativo poderá voltar +a acessar o armazenamento criptografado de credenciais e usar serviços regulares do sistema que +dependem das credenciais do usuário.

+ +

Para receber uma notificação quando o usuário desbloquear o dispositivo após uma reinicialização, +registre um {@link android.content.BroadcastReceiver} do componente em execução +para ouvir a mensagem ACTION_USER_UNLOCKED. Você também pode +receber a mensagem {@link android.content.Intent#ACTION_BOOT_COMPLETED +ACTION_BOOT_COMPLETED} existente, que agora indica que o dispositivo foi inicializado e que +o usuário o desbloqueou.

+ +

Você pode enviar uma consulta diretamente se o usuário desbloquear o dispositivo chamando +UserManager.isUserUnlocked().

+ +

Migrar dados existentes

+ +

Se um usuário atualizar o dispositivo para usar o modo de inicialização direta, você poderá ter dados +existentes que precisem ser migrados para o armazenamento criptografado do dispositivo. Use +Context.migrateSharedPreferencesFrom() e +Context.migrateDatabaseFrom() para migrar dados de preferências e do banco de +dados entre o armazenamento criptografado de credenciais e o armazenamento criptografado do dispositivo.

+ +

Tenha bom senso ao decidir quais dados migrar do armazenamento +criptografado de credenciais para o armazenamento criptografado do dispositivo. Não migre +informações particulares do usuário, como senhas ou tokens de autorização, para o +armazenamento criptografado do dispositivo. Em alguns casos, pode ser necessário gerenciar +conjuntos separados de dados nos dois repositórios criptografados.

+ +

Testar seu aplicativo com reconhecimento de criptografia

+ +

Teste seu aplicativo com reconhecimento de criptografia usando o novo modo de inicialização direta. Existem duas +maneiras de ativar a inicialização direta.

+ +

Cuidado: ao ativar a inicialização direta, +você apaga todos os dados do usuário no dispositivo.

+ +

Em dispositivos compatíveis com o Android N instalado, ative a +inicialização direta seguindo um destes procedimentos:

+ +
    +
  • No dispositivo, ative Developer options, se ainda não tiver feito isso, +acessando Settings > About phone e tocando em Build number +sete vezes. Quando a tela de opções do desenvolvedor for disponibilizada, acesse +Settings > Developer options e selecione +Convert to file encryption.
  • +
  • Use os seguintes comandos de shell adb para ativar o modo de inicialização direta: +
    +$ adb reboot-bootloader
    +$ fastboot --wipe-and-use-fbe
    +
    +
  • +
+ +

Um modo de inicialização direta emulado também está disponível, caso você precise trocar +de modo nos dispositivos de teste. O modo emulado só deve ser usado durante +o desenvolvimento e pode causar perda de dados. Para ativar o modo de inicialização direta, +defina um padrão de bloqueio no dispositivo, escolha "No thanks", caso seja solicitada +uma tela de inicialização segura ao definir esse padrão, e, em seguida, use o +seguinte comando de shell adb:

+ +
+$ adb shell sm set-emulate-fbe true
+
+ +

Para desativar o modo de inicialização direta emulado, use o seguinte comando:

+ +
+$ adb shell sm set-emulate-fbe false
+
+ +

O uso desses comandos faz com que o dispositivo seja reinicializado.

diff --git a/docs/html-intl/intl/pt-br/preview/features/icu4j-framework.jd b/docs/html-intl/intl/pt-br/preview/features/icu4j-framework.jd new file mode 100644 index 000000000000..290ea0df6b56 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/features/icu4j-framework.jd @@ -0,0 +1,158 @@ +page.title=APIs de estrutura do Android para ICU4J + +@jd:body + + + +

+ O ICU4J é um conjunto de bibliotecas Java de código aberto e amplamente usadas que fornecem suporte para Unicode + e globalização para aplicativos de software. O Android N + expõe um subconjunto de APIs do ICU4J na estrutura do Android para uso dos desenvolvedores de aplicativos + no pacote {@code android.icu}. Essas APIs usam + dados de localização presentes no dispositivo. Consequentemente, você pode reduzir o uso de APK + ao não compilar as bibliotecas do ICU4J no seu APK. Em vez disso, pode + simplesmente chamá-las na estrutura. (Neste caso, pode ser conveniente fornecer + várias versões + do seu APK para que os usuários que tenham versões inferiores ao Android N + possam fazer o download de uma versão do aplicativo que contenha as bibliotecas do ICU4J.) +

+ +

+ Este documento começa fornecendo informações básicas sobre os níveis mínimos da + Android API necessários para oferecer suporte a essas bibliotecas. Em seguida, ele explica o que + você deve saber sobre a implementação do ICU4J específica do Android. Por fim, + ele informa como usar as APIs do ICU4J na estrutura do Android. +

+ +

Relação com o ICU4J

+ +

+ O Android N expõe um subconjunto de APIs do ICU4J por meio do pacote + android.icu, não do com.ibm.icu. A + estrutura do Android pode optar por não + expor as APIs do ICU4J por diversos motivos. Por exemplo, o Android N não expõe + algumas APIs obsoletas ou APIs que a equipe do ICU ainda não declarou como + estáveis. Conforme a equipe do ICU torna APIs obsoletas, o Android também as marcará + como obsoletas, mas continuará incluindo-as. +

+ +

Tabela 1. Versões ICU e CLDR usadas + no Android N.

+ + + + + + + + + + + +
Nível da Android APIVersão ICUVersão CLDR
Android N5628
+ +

Algumas observações importantes:

+ +
    +
  • As APIs de estrutura do Android para ICU4J não incluem todas as APIs do ICU4J.
  • +
  • Desenvolvedores de NDK devem saber que o Android ICU4C não é compatível.
  • +
  • As APIs da estrutura do Android não substituem o suporte do Android para a +localização com +recursos.
  • +
+ +

Migrar do pacote com.ibm.icu para o android.icu

+ +

+ Se você já estiver usando as APIs do ICU4J no seu aplicativo e as APIs + android.icu atenderem aos seus requisitos, a migração para + as APIs de estrutura exigirão que você altere as importações Java + de com.ibm.icu para android.icu. Você, então, poderá + remover sua própria cópia dos arquivos do ICU4J do APK. +

+ +

+ Observação: As APIs de estrutura do ICU4J usam o espaço de nome {@code android.icu} + em vez de {@code com.ibm.icu}. Isso ocorre para evitar conflitos + de espaço de nome em APKs que contêm as próprias bibliotecas {@code com.ibm.icu}. +

+ +

+ Migrar para APIs android.icu de outras APIs do Android SDK +

+ +

+ Algumas classes dos pacotes java e android têm + equivalentes para as encontradas no ICU4J. No entanto, o ICU4J frequentemente fornece um suporte + mais amplo para padrões e linguagens. +

+

Alguns exemplos para você começar:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClasseAlternativas
java.lang.Character android.icu.lang.UCharacter
java.text.BreakIterator android.icu.text.BreakIterator
java.text.DecimalFormat android.icu.text.DecimalFormat
java.util.Calendar +android.icu.util.Calendar
android.text.BidiFormatter + android.icu.text.Bidi +
android.text.format.DateFormat + android.icu.text.DateFormat +
android.text.format.DateUtils android.icu.text.DateFormat +android.icu.text.RelativeDateTimeFormatter +
+ +

Licenciamento

+ +

+ O ICU4J é liberado sob a licença do ICU. Para saber mais, consulte o Guia do usuário do + ICU. +

diff --git a/docs/html-intl/intl/pt-br/preview/features/multi-window.jd b/docs/html-intl/intl/pt-br/preview/features/multi-window.jd new file mode 100644 index 000000000000..31fa01205aff --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/features/multi-window.jd @@ -0,0 +1,582 @@ +page.title=Suporte a várias janelas +page.metaDescription=Novo suporte à exibição de mais de um aplicativo ao mesmo tempo no Android N. +page.keywords="multi-window", "android N", "split screen", "free-form" + +@jd:body + + + +

+ O Android N adiciona suporte à exibição de mais de um aplicativo ao + mesmo tempo. Em dispositivos portáteis, dois aplicativos podem ser executados lado a lado ou + um acima do outro no modo de tela dividida. Em dispositivos de TV, os aplicativos podem + usar o modo de imagem em imagem para continuar a reprodução do vídeo enquanto os usuários + interagem com outro aplicativo. +

+ +

+ Se você compilar o aplicativo com o N Preview SDK, poderá configurar como o aplicativo + processa a exibição de várias janelas. Por exemplo, você pode especificar as dimensões +mínimas permitidas para a atividade. Você também pode desativar a exibição de várias janelas para + o aplicativo, garantindo que o sistema mostre o aplicativo apenas +em modo de tela inteira. +

+ +

Visão geral

+ +

+ O Android N permite que diversos aplicativos compartilhem a tela ao mesmo tempo. Por + exemplo, um usuário pode dividir a tela para visualizar uma página da web no lado esquerdo + e compor um e-mail no lado direito. A experiência do usuário depende do + dispositivo: +

+ +
    +
  • Os dispositivos portáteis que executam o Android N oferecem o + modo de tela dividida. Nesse modo, o sistema preenche a tela com dois aplicativos, exibindo-os + lado a lado ou um acima do outro. O usuário pode arrastar a linha divisória + que separa os dois para que um aplicativo fique maior e o outro menor. +
  • + +
  • No Nexus Player executando Android N, os aplicativos podem entrar + no modo de imagem em imagem, o que permite + que continuem a exibir conteúdo enquanto o usuário navega ou interage com + outros aplicativos. +
  • + +
  • Fabricantes de dispositivos maiores podem optar pelo modo de + forma livre, em que o usuário pode redimensionar livremente cada atividade. Se o + fabricante ativar esse recurso, o dispositivo oferecerá o modo de forma livre + e o modo de tela dividida. +
  • +
+ + +

+ Figura 1. Dois aplicativos executando lado a lado em modo de tela dividida. +

+ +

+ O usuário pode mudar para o modo de várias janelas das seguintes maneiras: +

+ +
    +
  • Se o usuário abrir a tela + Overview e pressionar longamente um + título de atividade, poderá arrastá-la para uma parte destacada da + tela para colocá-la no modo de várias janelas. +
  • + +
  • Se o usuário pressionar longamente o botão Overview, o dispositivo colocará + a atividade atual no modo de várias janelas e abrirá a tela Overview para + permitir que o usuário escolha outra atividade para compartilhar a tela. +
  • +
+ +

+ Os usuários podem arrastar e + soltar dados de uma atividade para outra enquanto as atividades compartilham + a tela. (Anteriormente, os usuários podiam apenas arrastar e soltar dados em uma única + atividade.) +

+ +

Ciclo de vida do modo de várias janelas

+ +

+ O modo de várias janelas não altera o ciclo de vida + da atividade. +

+ +

+ No modo de várias janelas, somente a atividade com a qual o usuário interagiu mais recentemente + fica ativa em um determinado momento. Essa atividade é considerada a atividade superior. + Todas as outras atividades ficam no estado pausado, mesmo se visíveis. + No entanto, o sistema atribui a essas atividades pausadas, mas visíveis, uma prioridade maior + que a das atividades não visíveis. Se o usuário interagir com uma das + atividades pausadas, ela será retomada e a atividade previamente superior + será pausada. +

+ +

+ Observação: em modo de suporte a várias janelas, um aplicativo pode estar no estado + pausado e continuar visível ao usuário. Pode ser necessário que um aplicativo continue com suas + atividades, mesmo se pausado. Por exemplo, um aplicativo que reproduz vídeo e que está no + modo pausado, mas visível, deve continuar a exibir o vídeo. Por esse + motivo, recomendamos que atividades que reproduzem vídeo não pausem o + vídeo nos manipuladores {@link android.app.Activity#onPause onPause()}. + Em vez disso, o vídeo deve ser pausado em {@link android.app.Activity#onStop + onStop()} e a reprodução retomada em {@link android.app.Activity#onStart + onStart()}. +

+ +

+ Quando o usuário coloca um aplicativo no modo de várias janelas, o sistema notifica a + atividade sobre a mudança de configuração, como especificado em Processamento de alterações + no tempo de execução. Essencialmente, essa alteração afeta + o ciclo de vida da atividade da mesma forma que quando o sistema notifica o aplicativo de que o dispositivo mudou + do modo de retrato para paisagem, exceto que as dimensões do dispositivo são + alteradas, em vez de simplesmente permutadas. Como discutido em Processamento de alterações + no tempo de execução, a sua atividade pode processar ela mesma a mudança de configuração ou + permitir que o sistema destrua a atividade e recrie-a com as novas + dimensões. +

+ +

+ Se o usuário redimensionar uma janela e aumentar uma de suas dimensões, o + sistema redimensionará a atividade para corresponder à ação do usuário e emitirá mudanças de tempo de execução + conforme necessário. Se o aplicativo demorar a desenhar nas áreas recém-expostas, o + sistema preencherá temporariamente essas áreas com a cor especificada pelo atributo {@link + android.R.attr#windowBackground windowBackground} ou pelo atributo de estilo padrão + windowBackgroundFallback. +

+ +

Configuração do aplicativo para o modo de várias janelas

+ +

+ Se o seu aplicativo for direcionado ao Android N, você poderá configurar como + e se as atividades do aplicativo suportam a exibição em várias janelas. Você pode definir + atributos no manifesto para controlar o tamanho e o layout. + As definições de atributos de uma atividade raiz se aplicam a todas as atividades + em sua pilha de tarefas. +

+ +

+ Observação: se você compilar um aplicativo com várias orientações usando uma versão + do SDK anterior ao Android N e o usuário usar o aplicativo em + modo de suporte a várias janelas, o sistema redimensionará forçosamente o aplicativo. O sistema apresenta uma + caixa de diálogo avisando o usuário de que o aplicativo pode se comportar de forma inesperada. O sistema + não redimensiona aplicativos de orientação fixa; se + o usuário tentar abrir um aplicativo de orientação fixa no modo de várias janelas, + o aplicativo ocupará toda a tela. +

+ +

android:resizeableActivity

+

+ Defina esse atributo no nó <activity> ou + <application> em seu manifesto para ativar ou desativar a exibição em + várias telas: +

+ +
+android:resizeableActivity=["true" | "false"]
+
+ +

+ Se esse atributo for definido como verdadeiro, a atividade poderá ser inicializada nos + modos de tela dividida e forma livre. Se o atributo for definido como falso, a + atividade não oferecerá suporte ao modo de várias janelas. Se esse valor for falso e o + usuário tentar iniciar a atividade no modo de várias janelas, a atividade ocupará + a tela inteira. +

+ +

+ Se o aplicativo for direcionado ao Android N, mas o valor desse atributo não for + especificado, o atributo assumirá o valor padrão de verdadeiro. +

+ +

android:supportsPictureInPicture

+ +

+ Defina esse atributo no nó <activity> ou no seu manifesto para + indicar se a atividade oferece suporte à exibição no modo de imagem em imagem. Esse + atributo será ignorado se android:resizeableActivity for falso. +

+ +
+android:supportsPictureInPicture=["true" | "false"]
+
+ +

Atributos de layout

+ +

+ No Android N, o elemento de manifesto <layout> + oferece suporte a diversos atributos que afetam o comportamento da atividade no + modo de várias janelas: +

+ +
+
+ android:defaultWidth +
+ +
+ Largura padrão da atividade quando iniciada no modo de forma livre. +
+ +
+ android:defaultHeight +
+ +
+ Altura padrão da atividade quando iniciada no modo de forma livre. +
+ +
+ android:gravity +
+ +
+ Posicionamento inicial da atividade quando iniciada no modo de forma livre. Consulte a + referência de {@link android.view.Gravity} para obter os valores adequados. +
+ +
+ android:minimalSize +
+ +
+ Altura mínima e largura mínima para a atividade nos modos de tela dividida + e forma livre. Se o usuário mover o divisor no modo de tela dividida + para tornar uma atividade menor que o mínimo especificado, o sistema recortará + a atividade para o tamanho solicitado pelo usuário. +
+
+ +

+ Por exemplo, o código a seguir mostra como especificar um tamanho e uma localização + padrão para a atividade, bem como o tamanho mínimo, quando a atividade é exibida no + modo de forma livre: +

+ +
+<activity android:name=".MyActivity">
+    <layout android:defaultHeight="500dp"
+          android:defaultWidth="600dp"
+          android:gravity="top|end"
+          android:minimalSize="450dp" />
+</activity>
+
+ +

Execução do aplicativo no modo de várias janelas

+ +

+ O Android N oferece nova funcionalidade para dar suporte a aplicativos que podem ser executados + no modo de várias janelas. +

+ +

Recursos desativados no modo de várias janelas

+ +

+ Alguns recursos são desativados ou ignorados quando um dispositivo está no modo de + várias janelas, pois não fazem sentido para uma atividade que pode estar compartilhando a + tela do dispositivo com outras atividades ou aplicativos. Esses recursos incluem: + +

    +
  • Algumas opções de personalização de IU do sistema + são desativadas. Por exemplo, os aplicativos não podem ocultar a barra de status + se não estiverem executando no modo de tela cheia. +
  • + +
  • O sistema ignora as alterações no atributo android:screenOrientation. +
  • +
+ +

Notificações e consultas de mudança no modo de várias janelas

+ +

+ Os novos métodos a seguir foram adicionados à classe {@link android.app.Activity} + para oferecer suporte à exibição em várias janelas. Para obter detalhes sobre cada método, consulte a + Referência do N Preview SDK. +

+ +
+
+ Activity.inMultiWindow() +
+ +
+ Chame para descobrir se a atividade está no modo de várias janelas. +
+ +
+ Activity.inPictureInPicture() +
+ +
+ Chame para descobrir se a atividade está no modo de imagem em imagem. + +

+ Observação: o modo de imagem em imagem é um caso especial do + modo de várias janelas. Se myActivity.inPictureInPicture() + retornar verdadeiro, myActivity.inMultiWindow() também retornará + verdadeiro. +

+
+ +
+ Activity.onMultiWindowChanged() +
+ +
+ O sistema chama esse método sempre que a atividade entra ou sai do + modo de várias janelas. O sistema passará ao método o valor verdadeiro se a + atividade entrar no modo de várias janelas e falso se a atividade + sair do modo de várias janelas. +
+ +
+ Activity.onPictureInPictureChanged() +
+ +
+ O sistema chama esse método sempre que a atividade entra ou sai do + modo de imagem em imagem. O sistema passará ao método o valor verdadeiro se + a atividade entrar no modo de várias janelas e falso se a atividade + sair do modo de várias janelas. +
+
+ +

+ Existem também versões de {@link android.app.Fragment} para cada um desses + métodos como, por exemplo, Fragment.inMultiWindow(). +

+ +

Entrar no modo de imagem em imagem

+ +

+ Para colocar uma atividade no modo de imagem em imagem, chame o novo método + Activity.enterPictureInPicture(). Esse método não terá efeito se + o dispositivo não oferecer suporte ao modo de imagem em imagem. Para obter mais informações, + consulte a documentação do modo imagem em imagem. +

+ +

Iniciar novas atividades no modo de várias janelas

+ +

+ Quando você iniciar uma nova atividade, poderá indicar ao sistema que a + a nova atividade deverá ser exibida adjacente à atual, se possível. Para fazer + isso, use o sinalizador + Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT. A passagem + desse sinalizador solicita o seguinte comportamento: +

+ +
    +
  • Se o dispositivo estiver no modo de tela dividida, o sistema tentará criar a + nova atividade ao lado da atividade que a iniciou para que as duas atividades + compartilhem a tela. Nem sempre o sistema conseguirá fazer isso, mas as + atividades ficarão adjacentes, se possível. +
  • + +
  • Se o dispositivo não estiver no modo de tela dividida, esse sinalizador não terá efeito. +
  • +
+ +

+ Se um dispositivo estiver no modo de forma livre e você iniciar uma nova atividade, poderá + especificar as dimensões e a posição na tela da nova atividade chamando + ActivityOptions.setLaunchBounds(). Esse método não terá efeito se + o dispositivo não estiver no modo de várias janelas. +

+ +

+ Observação: se você iniciar uma atividade em uma pilha de tarefas, essa + atividade substituirá a atividade na tela, herdando todas as + propriedades de suporte a várias janelas. Se você quiser iniciar a nova atividade como janela + separada no modo de várias janelas, inicie essa atividade em uma nova pilha de tarefas. +

+ +

Suporte a arrastar e soltar

+ +

+ Os usuários podem arrastar e + soltar dados de uma atividade para outra enquanto as duas atividades + compartilham a tela. (Anteriormente, os usuários podiam apenas arrastar e soltar dados em uma + única atividade.) Por esse motivo, se o aplicativo não tem a funcionalidade de arrastar e soltar, + pode ser uma boa ideia adicioná-la. +

+ +

+ O N Preview SDK estende o pacote android.view + para oferecer suporte ao recurso arrastar e soltar entre aplicativos. Para obter detalhes sobre os seguintes + métodos e classes, consulte a Referência + do Preview SDK. +

+ +
+
+ android.view.DropPermissions +
+ +
+ Objeto token responsável por especificar as permissões concedidas ao aplicativo + que recebe uma ação de soltar. +
+ +
+ View.startDragAndDrop() +
+ +
+ Novo alias de {@link android.view.View#startDrag View.startDrag()}. Para + ativar o recurso de arrastar e soltar entre atividades, passe o novo sinalizador + View.DRAG_FLAG_GLOBAL. Se você precisar conceder permissões de URI à + atividade de destino, passe os novos sinalizadores, + View.DRAG_FLAG_GLOBAL_URI_READ ou + View.DRAG_FLAG_GLOBAL_URI_WRITE, conforme o caso. +
+ +
+ View.cancelDragAndDrop() +
+ +
+ Cancela uma operação de arrastar em andamento. Somente pode ser chamado + pelo aplicativo que originou a operação de arrastar. +
+ +
+ View.updateDragShadow() +
+ +
+ Substitui a sombra de arrastar para uma operação de arrastar em andamento. Somente + pode ser chamado pelo aplicativo que originou a operação de arrastar. +
+ +
+ Activity.requestDropPermissions() +
+ +
+ Solicita as permissões dos URIs de conteúdo passados com {@link + android.content.ClipData} contidos em {@link android.view.DragEvent}. +
+
+ +

Teste do suporte a várias janelas em seu aplicativo

+ +

+ Atualizando ou não o seu aplicativo para o Android N, você deve + verificar como ele se comporta no modo de várias janelas, pois um usuário pode tentar iniciá-lo + no modo de várias janelas em um dispositivo executando o Android N. +

+ +

Configuração de um dispositivo de teste

+ +

+ Se você instalar o Android N em um dispositivo, o modo de tela dividida + será instalado automaticamente. +

+ +

Se o aplicativo não foi compilado com o N Preview SDK

+ +

+ Se você não compilou o aplicativo com o N Preview SDK e o usuário tentar usar + o aplicativo no modo de várias janelas, o sistema redimensionará obrigatoriamente o aplicativo, a menos que este + declare uma orientação fixa. +

+ +

+ Se o aplicativo não declarar uma orientação fixa, inicie o aplicativo + em um dispositivo executando Android N e tente colocar o aplicativo no modo + de tela dividida. Verifique se a experiência de usuário é + aceitável quando o aplicativo é redimensionado obrigatoriamente. +

+ +

+ Se o aplicativo declarar uma orientação fixa, você deverá tentar colocá-lo no + modo de várias janelas. Verifique se, ao fazê-lo, o aplicativo continua + no modo de tela cheia. +

+ +

Se você oferecer suporte ao modo de várias janelas

+ +

+ Se você compilar o aplicativo com o N Preview SDK e não tiver desativado o + suporte a várias janelas, verifique o comportamento a seguir nos modos de tela dividida + e forma livre. +

+ +
    +
  • Inicie o aplicativo em modo de tela inteira e mude para o modo de várias janelas + pressionando longamente o botão Overview. Verifique se o aplicativo alterna corretamente. +
  • + +
  • Inicie o aplicativo diretamente no modo de várias janelas e verifique se o aplicativo + é iniciado corretamente. Você pode iniciar um aplicativo no modo de várias telas pressionando o + botão Overview, pressionando longamente a barra de título do aplicativo e arrastando-o + para uma das áreas destacadas na tela. +
  • + +
  • Redimensione o aplicativo no modo de tela dividida, arrastando a linha divisora. + Verifique se o aplicativo é redimensionado sem falhar e se os elementos de IU necessários + estão visíveis. +
  • + +
  • Se você especificou dimensões mínimas para o aplicativo, tente redimensionar + o aplicativo abaixo dessas dimensões. Verifique se não é possível redimensionar o aplicativo + para um tamanho menor que o mínimo especificado. +
  • + +
  • Em todos os testes, verifique se o desempenho do aplicativo é aceitável. Por + exemplo, verifique se há uma demora muito grande para atualizar a IU após o + redimensionamento do aplicativo. +
  • +
+ +

Lista de verificação de teste

+ +

+ Para verificar o desempenho do aplicativo no modo de várias janelas, experimente as operações + a seguir. Você deve tentar essas operações nos modos de tela dividida e + várias telas, exceto onde houver instruções diferentes. +

+ +
    +
  • Entre e saia do modo de várias janelas. +
  • + +
  • Alterne do seu aplicativo para outro e verifique se o seu aplicativo se comporta + corretamente enquanto visível, mas não ativo. Por exemplo, se o seu aplicativo estiver + reproduzindo vídeo, verifique se a reprodução não é interrompida quando o usuário + interage com outro aplicativo. +
  • + +
  • No modo de tela dividida, tente mover a barra divisora para aumentar e reduzir + o tamanho do aplicativo. Tente essas operações nas configurações lado a lado + e um acima do outro. Verifique se o aplicativo não falha, + se a funcionalidade essencial fica visível e se a operação de redimensionamento não demora + demais. +
  • + +
  • Execute várias operações de redimensionamento em rápida sucessão. Verifique se o + aplicativo não falha nem apresenta vazamento de memória. Para obter informações sobre como verificar o uso de memória + do aplicativo, consulte + Investigação do uso de RAM. +
  • + +
  • Use o aplicativo normalmente em diversas configurações diferentes de janela e + verifique se o aplicativo se comporta corretamente. Verifique se o texto é legível e se os + elementos de IU não ficam pequenos demais para a interação. +
  • +
+ +

Se você desativou o suporte a várias janelas

+ +

+ Se você desativou o suporte a várias janelas definindo + android:resizableActivity="false", inicie o aplicativo em + um dispositivo executando Android N e tente colocá-lo nos modos + de forma livre e tela dividida. Verifique se, ao fazê-lo, o aplicativo continua + no modo de tela cheia. +

diff --git a/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd b/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd new file mode 100644 index 000000000000..77ad4b746a42 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd @@ -0,0 +1,214 @@ +page.title=Idioma e localidade +@jd:body + + + +

O Android N oferece suporte avançado para usuários multilíngues, +permitindo que eles selecionem várias localidades nas configurações. O Android N +fornece esse recurso ao expandir significativamente a quantidade de localidades com suporte +e mudando a forma como o sistema resolve recursos. O novo método para resolver +recursos é mais robusto e foi projetado para ser compatível com APKs existentes, mas +tenha cuidado adicional para identificar comportamentos inesperados. Por exemplo, você +deve testar para garantir que seu aplicativo assuma o idioma esperado por padrão. Além disso, +se seu aplicativo oferecer suporte a vários idiomas, você deverá garantir que esse suporte funcione da maneira +esperada. Por fim, garanta que seu aplicativo possa lidar corretamente +com idiomas que ele não tenha sido explicitamente projetado para suportar.

+ +

Este documento começa explicando a estratégia de resolução de recursos anterior ao +Android N. Em seguida, ele descreve a estratégia +de resolução de recursos aprimorada do Android N. Por fim, ele explica como aproveitar as vantagens +do maior número de localidades para oferecer suporte a usuários multilíngues.

+ +

Desafios ao resolver recursos de idioma

+ +

Antes do Android N, o Android nem sempre conseguia + corresponder aplicativos e localidades de sistema corretamente. Por exemplo, supondo que o idioma padrão do seu aplicativo + seja o inglês americano, mas que ele também tenha strings em espanhol em arquivos de recurso {@code es_ES} +.

+

Quando seu código Java fizesse referência a strings, ele resolveria os idiomas das strings da +seguinte maneira:

+
    +
  • Se um dispositivo fosse definido como {@code es_MX} (espanhol do México), o Android carregaria +strings dos arquivos de recurso {@code es_ES}.
  • +
  • Se um dispositivo fosse definido como {@code en_AU}, o Android assumiria {@code +en_US}. O sistema também assumiria {@code en_US} como padrão se um usuário escolhesse um +idioma não suportado pelo aplicativo, como o francês.
  • +
+ + +

Esses problemas de resolução surgiram porque o sistema removia o código de país + da localidade se não encontrasse uma correspondência exata. Por exemplo:

+

+Tabela 1. Resolução de recurso sem uma correspondência exata de localidade. +

+ + + + + + + + + + + + + +
Configurações do usuárioRecursos do aplicativoResolução do recurso
fr_CH +padrão (en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+Tentativa de fr_CH => Falha
+Tentativa de fr => Falha
+Usar o padrão (en) +
+ + +

Neste exemplo, o sistema exibe strings em inglês sem saber +se o usuário entende inglês. Esse comportamento é bastante comum +hoje em dia. O Android N deverá reduzir de forma significativa a frequência de +resultados como esse.

+ +

Melhorias na estratégia de resolução de recursos

+

O Android N proporciona uma resolução de recurso mais robusta e +encontra soluções alternativas melhores. No entanto, para agilizar a resolução e melhorar + a capacidade de manutenção, você deve armazenar os recursos no dialeto pai mais comum. + Por exemplo, se você estava armazenando recursos em espanhol no diretório {@code es-US} + antes, mova-os para o diretório {@code es-419}, que contém o espanhol latino-americano. + Da mesma maneira, se você tiver strings de recurso em uma pasta {@code en-GB}, renomeie + essa pasta para {@code en-001} (inglês internacional), pois o pai mais comum + para strings en-GB é {@code en-001}. + O exemplo a seguir explica por que essas práticas melhoram o desempenho e +a confiabilidade da resolução de recursos.

+ +

Exemplos de resolução de recursos

+ +

Com o Android N, o caso descrito na Tabela 1 é resolvido +de forma diferente:

+ +

+Tabela 2. Uma estratégia de resolução melhorada para quando não há +uma correspondência exata para a localidade.

+ + + + + + + + + + + + +
Configurações do usuárioRecursos do aplicativoResolução do recurso
    +
  1. fr_CH
  2. +
+
+padrão (en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+Tentativa de fr_CH => Falha
+Tentativa de fr => Falha
+Tentativa de filhos de fr => fr_FR
+Usar fr_FR +
+ + +

Agora o usuário obtém recursos em francês em vez de inglês. Esse exemplo também mostra + por que você deve armazenar strings em francês em {@code fr} em vez de em {@code fr_FR} + para o Android N. Nesse caso, a ação necessária é fazer a correspondência com o dialeto pai mais próximo, + tornando a resolução mais rápida e mais previsível.

+ +

Além dessa lógica de resolução melhorada, agora o Android oferece mais + idiomas de usuário dentre os quais escolher. Vamos experimentar o exemplo acima novamente com o italiano + especificado como um idioma de usuário adicional, mas sem suporte para francês no aplicativo.

+ +

+Tabela 3. Resolução de recurso quando o aplicativo faz a correspondência apenas da +segunda configuração de localidade preferencial do usuário.

+ + + + + + + + + + + + + + +
Configurações do usuárioRecursos do aplicativoResolução do recurso
    +
  1. fr_CH
  2. +
  3. it_CH
  4. +
+
+padrão (en)
+de_DE
+es_ES
+it_IT
+
+Tentativa de fr_CH => Falha
+Tentativa de fr => Falha
+Tentativa de filhos de fr => Falha
+Tentativa de it_CH => Falha
+Tentativa de it => Falha
+Tentativa de filhos de it => it_IT
+Usar it_IT +
+

O usuário obtém um idioma que ele compreende, mesmo que o aplicativo não tenha suporte para +o francês.

+ + +

Projetar seu aplicativo para oferecer suporte a localidades adicionais

+

LocaleList API

+ +

O Android N adiciona uma nova API {@code LocaleList.GetDefault()} +que permite que os aplicativos façam uma consulta direta na lista de idiomas especificados por um usuário. Essa API +permite que você crie um comportamento mais sofisticado + para o aplicativo e uma exibição de conteúdo mais otimizada. Por exemplo, uma pesquisa + pode mostrar resultados em vários idiomas com base nas configurações do usuário. Aplicativos de navegador + podem evitar ofertas de tradução de páginas em um idioma que o usuário conhece + e os aplicativos de teclado também podem ativar todos os layouts apropriados automaticamente.

+ +

Formatadores

+ +

Até o Android 6.0 (nível da API 23), o Android oferecia suporte para apenas uma ou duas localidades + para muitos idiomas comuns +(en, es, ar, fr, ru). Como só existiam poucas variantes de cada idioma, +os aplicativos podiam armazenar alguns números e datas como strings no código +nos arquivos de recurso. No entanto, com o conjunto mais amplo de localidades suportadas do Android, +podem existir +diferenças significativas nos formatos de data, hora, moeda e informações +similares dentro da mesma localidade. Colocar formatos no código podem produzir uma +experiência confusa para os usuários. Portanto, ao desenvolver para o Android N, +não deixe de usar formatadores em vez de strings no código para números e datas.

+ +

Um bom exemplo é o árabe, cujo suporte no Android N foi expandido de +uma {@code ar_EG} para 27 localidades de árabe. Essas localidades podem compartilhar a maioria dos recursos, +mas algumas preferem dígitos ASCII, enquanto outras preferem dígitos nativos. Por exemplo, +quando você quer criar uma frase com uma variável em dígito, como +“Choose a 4 digit pin”, use formatadores como mostrado abaixo:

+ +
 format(locale, "Choose a %d-digit PIN", 4)
diff --git a/docs/html-intl/intl/pt-br/preview/features/notification-updates.jd b/docs/html-intl/intl/pt-br/preview/features/notification-updates.jd new file mode 100644 index 000000000000..a714abb796db --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/features/notification-updates.jd @@ -0,0 +1,328 @@ +page.title=Notificações +page.tags=notifications +helpoutsWidget=true +page.image=/preview/images/notifications-card.png + +trainingnavtop=true + +@jd:body + +
+ +
+ +

O Android N introduz diversas APIs novas que permitem que aplicativos publiquem + notificações altamente visíveis e interativas.

+ +

O Android N estende a API de notificação {@link android.support.v4.app.RemoteInput} + atual para permitir respostas em linha em celulares. Esse recurso permite que os usuários + respondam rapidamente na aba de notificações sem acessar o aplicativo.

+ +

+ O Android N permite empacotar notificações semelhantes para + exibição como única notificação. Para que isso seja possível, o Android N usa o método {@link + android.support.v4.app.NotificationCompat.Builder#setGroup + NotificationCompat.Builder.setGroup()} existente. Os usuários podem expandir todas as + notificações, executando ações como responder e descartar em cada uma + delas individualmente na aba de notificações. +

+ +

Por fim, o Android N também adiciona várias APIs que permitem usar decorações + do sistema nas visualizações de notificação personalizadas do aplicativo. Essas APIs ajudam + a garantir que as visualizações de notificação compartilhem uma apresentação consistente com os + modelos padrão.

+ +

Este documento destaca algumas principais mudanças que você deve considerar + ao usar os novos recursos de notificação em aplicativos.

+ +

Resposta direta

+ +

Com o recurso de resposta direta no Android N, os usuários podem responder + rapidamente a mensagens de texto ou atualizar listas de tarefas diretamente na interface de + notificação. Em um dispositivo portátil, a ação de resposta em linha aparece como botão adicional + anexado à notificação. Quando um usuário responde pelo teclado, o sistema anexa + a resposta de texto à intenção + especificada como ação de notificação e envia a intenção ao + aplicativo no dispositivo. + + + +

+ Figura 1. O Android N adiciona o botão de ação + Reply. +

+ +

Adição de ações de resposta em linha

+ +

Para criar uma ação de notificação com suporte à resposta direta: +

+ +
    +
  1. Crie uma instância de {@link android.support.v4.app.RemoteInput.Builder} + que possa ser adicionada à ação de + notificação. O construtor dessa classe aceita uma string, usada pelo sistema como chave + da entrada de texto. Posteriormente, o aplicativo no dispositivo usará essa chave para recuperar o texto + da entrada. + +
    +// Key for the string that's delivered in the action's intent
    +private static final String KEY_TEXT_REPLY = "key_text_reply";
    +String replyLabel = getResources().getString(R.string.reply_label);
    +RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
    +        .setLabel(replyLabel)
    +        .build();
    +
    +
  2. +
  3. Anexe o objeto {@link android.support.v4.app.RemoteInput} + a uma ação usando addRemoteInput(). + +
    +// Create the reply action and add the remote input
    +Notification.Action action =
    +        new Notification.Action.Builder(R.drawable.ic_reply_icon,
    +                getString(R.string.label), replyPendingIntent)
    +                .addRemoteInput(remoteInput)
    +                .build();
    +
    +
  4. + +
  5. Aplique a ação a uma notificação e emita a notificação. + +
    +// Build the notification and add the action
    +Notification notification =
    +        new Notification.Builder(mContext)
    +                .setSmallIcon(R.drawable.ic_message)
    +                .setContentTitle(getString(R.string.title))
    +                .setContentText(getString(R.string.content))
    +                .addAction(action))
    +                .build();
    +
    +// Issue the notification
    +NotificationManager notificationManager =
    +        NotificationManager.from(mContext);
    +notificationManager.notify(notificationId, notification);
    +
    +
    +
  6. + +
+ + +

O sistema solicita que o usuário informe uma resposta quando acionar a + ação de notificação.

+ + +

+ Figura 2. O usuário insere texto na aba de notificações. +

+ +

Recuperação da entrada do usuário na resposta em linha

+ +

Para receber a entrada do usuário da interface de notificação para a atividade + declarada na intenção de ação de resposta:

+
    +
  1. Chame {@link android.support.v4.app.RemoteInput#getResultsFromIntent + getResultsFromIntent()} passando a intenção da ação de notificação como + parâmetro de entrada. Esse método retorna um {@link android.os.Bundle} que + contém a resposta de texto. +
  2. + +
    +Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
    +
    + +
  3. Consulte a resposta usando a chave de resultado (fornecida ao construtor {@link + android.support.v4.app.RemoteInput.Builder}). +
  4. +
+ +

O fragmento de código a seguir mostra como um método recupera o texto de entrada + de um pacote:

+ +
+// Obtain the intent that started this activity by calling
+// Activity.getIntent() and pass it into this method to
+// get the associated string.
+
+private CharSequence getMessageText(Intent intent) {
+    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+    if (remoteInput != null) {
+            return remoteInput.getCharSequence(KEY_TEXT_REPLY);
+            }
+    return null;
+ }
+
+ +

Os aplicativos podem aplicar lógica para decidir as ações a serem executadas para o texto + recuperado. + Para aplicativos interativos (como bate-papos), forneça mais contexto na própria notificação + (por exemplo, várias linhas de histórico de bate-papo, incluindo as mensagens do próprio usuário) + para que o usuário possa responder de forma adequada. + Quando o usuário responde via {@link android.support.v4.app.RemoteInput}, + inclua o texto no histórico de resposta com o método +{@code setRemoteInputHistory()}.

+ +

Notificações empacotadas

+ +

O Android N oferece aos desenvolvedores uma nova forma de representar + uma fila de notificações: notificações empacotadas. Essa forma é semelhante ao recurso + Pilhas + de Notificações no Android Wear. Por exemplo, se o aplicativo criar notificações + para mensagens recebidas, quando mais de uma mensagem for recebida, empacote as + notificações como um único grupo. Você pode + usar o método existente {@link android.support.v4.app.NotificationCompat.Builder#setGroup +Builder.setGroup()} para empacotar notificações semelhantes.

+ +

+ Um grupo de notificações impõe uma hierarquia nas notificações que o compõe. + Na parte superior dessa hierarquia, está a notificação pai, que exibe informações + resumidas para o grupo. O usuário pode expandir + progressivamente o grupo de notificações e o sistema mostra mais informações à medida que o + usuário aumenta o detalhamento. Quando o usuário expande o pacote, o sistema revela + mais informações para todas as notificações filhas. Quando o usuário + expande uma das notificações, o sistema revela todo o seu conteúdo. +

+ + +

+ Figura 3. O usuário pode expandir progressivamente o grupo + de notificações. +

+ +

Para saber como adicionar notificações a um grupo, consulte +Adicionar +cada notificação a um grupo.

+ + +

Práticas recomendadas para notificações empacotadas

+

Esta seção oferece diretrizes sobre quando usar grupos de notificações em vez + de notificações {@link android.app.Notification.InboxStyle InboxStyle} + que foram disponibilizadas em versões anteriores da + plataforma Android.

+ +

Quando usar notificações empacotadas

+ +

Você deve usar grupos de notificações apenas quando todas as condições a seguir forem + verdadeiras para o seu caso de uso:

+ +
    +
  • As notificações filhas são notificações completas e podem ser exibidas + individualmente sem necessidade de um resumo do grupo.
  • +
  • A exibição individual de notificações filhas pode ser vantajosa. Por + exemplo: +
  • +
      +
    • Elas são acionáveis, sem ações específicas para cada filha.
    • +
    • Há mais informações na filha que as que o usuário quer ler.
    • +
    +
+ +

Os exemplos de bons casos de uso para grupos de notificações incluem: um aplicativo de mensagens + exibindo uma lista de mensagens recebidas ou um aplicativo de e-mail exibindo uma lista de + e-mails recebidos.

+ +

+Os exemplos de casos em que uma única notificação é preferível + incluem mensagens individuais de uma única pessoa ou uma representação em lista + de itens de texto com uma única linha. Você pode usar +({@link android.app.Notification.InboxStyle InboxStyle} ou + {@link android.app.Notification.BigTextStyle BigTextStyle}) para + isso. +

+ +

Exibição de notificações empacotadas

+ +

+ O aplicativo deve sempre publicar um resumo do grupo, mesmo se o grupo tiver apenas uma + única filha. O sistema suprimirá o resumo e exibirá diretamente a + notificação filha se ela contiver apenas uma única notificação. Isso garante + que o sistema possa oferecer uma experiência consistente quando o usuário deslizar por + filhas de um grupo. +

+ +

+ Observação: esta versão do Android N ainda não + elimina o resumo de grupos de notificações contendo uma única filha. Essa + funcionalidade será adicionada em uma versão posterior do Android N. +

+ +

Observação de notificações

+ +

Embora o sistema normalmente exiba notificações filhas como grupo, você pode + configurá-las para exibição temporária como + + notificações heads-up. Esse recurso é particularmente útil porque permite + acesso imediato à filha mais recente e a suas ações associadas. +

+ + +

Compatibilidade com versões anteriores

+ +

+ Os grupos de notificações e as entradas remotas fazem parte da API {@link + android.app.Notification} desde o Android 5.0 (nível da API 21) para oferecer suporte a + dispositivos Android Wear. Se você já criou notificações com essas APIs, + a única ação necessária é verificar se o comportamento do aplicativo corresponde + às diretrizes descritas acima e considerar a implementação de {@code + setRemoteInputHistory()}. +

+ +

+ Para compatibilidade com versões anteriores, as mesmas APIs estão disponíveis com + a classe {@link android.support.v4.app.NotificationCompat} da biblioteca de suporte +, permitindo criar notificações que funcionem em versões anteriores do + Android. Em celulares e tablets, os usuários somente visualizam as notificações resumidas. + Portanto, um aplicativo deve ter uma notificação no estilo de caixa de entrada ou equivalente, + representativa de todo o conteúdo de informações do grupo. Como dispositivos Android + Wear permite que os usuários vejam todos as notificações filhas, mesmo em níveis + de plataforma antigos, você deve criar notificações filhas independentemente do nível + da API. +

+ +

Visualizações personalizadas

+

Começando com o Android N, é possível personalizar visualizações de notificação e + continuar obtendo decorações de sistema, como cabeçalhos de notificação, ações e layouts + expansíveis.

+ +

Para ativar esses recursos, o Android N adiciona as seguintes APIs para aplicar estilo à + visualização personalizada:

+ +
+
+{@code DecoratedCustomViewStyle()}
+
Aplica estilo a notificações que não sejam notificações + de mídia.
+
+{@code DecoratedMediaCustomViewStyle()}
+
Aplica estilo a notificações de mídia.
+
+ +

Para usar essa nova API, chame o método {@code setStyle()}, passando o + estilo de visualização personalizada desejado.

+ +

Este fragmento mostra como construir um objeto de notificação personalizada com o método + {@code DecoratedCustomViewStyle()}.

+ +
+Notification noti = new Notification.Builder()
+           .setSmallIcon(R.drawable.ic_stat_player)
+           .setLargeIcon(albumArtBitmap))
+           .setCustomContentView(contentView);
+           .setStyle(new Notification.DecoratedCustomViewStyle())
+           .build();
+
+
diff --git a/docs/html-intl/intl/pt-br/preview/features/picture-in-picture.jd b/docs/html-intl/intl/pt-br/preview/features/picture-in-picture.jd new file mode 100644 index 000000000000..ec75fa3a4ad7 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/features/picture-in-picture.jd @@ -0,0 +1,186 @@ +page.title=Imagem em imagem +page.keywords=preview,sdk,PIP,Picture-in-picture +page.tags=androidn + +@jd:body + + + +

No Android N, os usuários do Android TV agora podem assistir a um vídeo +em uma janela fixada em um canto da tela enquanto navegam em +aplicativos. O modo de imagem em imagem (PIP) permite que os aplicativos executem uma atividade de vídeo +na janela fixada enquanto outra atividade continua em +segundo plano. A janela do PIP permite que os usuários realizem várias tarefas enquanto usam seu aplicativo, o que os +ajuda a ser mais produtivos.

+ +

Seu aplicativo pode decidir quando acionar o modo de PIP. Veja alguns exemplos de +quando entrar no modo de PIP:

+ +
    +
  • Seu aplicativo pode passar um vídeo para o modo de PIP quando o usuário +sai do vídeo para navegar por outro conteúdo.
  • +
  • Seu aplicativo pode passar um vídeo para o modo de PIP quando um usuário assiste ao final +de um episódio de conteúdo. A janela principal exibe informações promocionais ou de resumo +sobre o próximo episódio da série.
  • +
  • Seu aplicativo pode fornecer uma maneira de os usuários colocarem conteúdo adicional em uma fila enquanto +assistem a um vídeo. O vídeo continua a ser reproduzido no modo de PIP enquanto a tela principal +exibe uma atividade de seleção de conteúdo.
  • +
+ +

A janela do modo de PIP tem 240x135 dp e é mostrada na camada superior de um dos +quatro cantos da tela, escolhido pelo sistema. O usuário pode exibir um +menu de PIP que permite que coloque a janela do PIP em tela inteira ou feche-a +ao pressionar o botão Home do controle remoto. Se outro +vídeo começar a ser reproduzido na tela principal, a janela do PIP será fechada +automaticamente. Os usuários também podem fechar a janela do PIP em Recents.

+ + +

Figura 1. Um vídeo no modo de imagem em imagem +visível no canto da tela enquanto o usuário navega por conteúdo +na janela principal.

+ +

O PIP utiliza as APIs de várias janelas disponíveis no Android N para +fornecer a janela sobreposta de vídeo fixo. Para adicionar o modo de PIP ao seu aplicativo, você deve +registrar as atividades que oferecem suporte a PIP, alternar a atividade para o modo de PIP conforme +a necessidade e garantir que os elementos de interface sejam ocultados e que a reprodução do vídeo continue quando +a atividade estiver no modo de PIP.

+ +

Declarar que sua atividade oferece suporte ao modo de imagem em imagem

+ +

Por padrão, o sistema não oferece suporte ao modo de PIP automaticamente para seus aplicativos. +Se quiser esse suporte para seu aplicativo, registre a atividade +de vídeo no manifesto definindo +android:supportsPictureInPicture e +android:resizeableActivity como true. Além disso, especifique +que a atividade processa alterações na configuração de layout de forma que a atividade +não seja reiniciada quando ocorrem essas alterações durante as transições do modo de PIP.

+ +
+<activity android:name="VideoActivity"
+    android:resizeableActivity="true"
+    android:supportsPictureInPicture="true"
+    android:configChanges=
+        "screenSize|smallestScreenSize|screenLayout|orientation"
+    ...
+
+ +

Ao registrar a atividade, lembre-se de que, no modo de PIP, ela +é mostrada em uma pequena janela sobreposta em uma tela de TV. Atividades de reprodução de +vídeo com uma quantidade mínima de itens de interface oferecem a melhor experiência para o usuário. Atividades que contêm +pequenos elementos de interface podem não oferecer uma boa experiência para o usuário +no modo de PIP, pois ele não conseguirá enxergar os detalhes desses elementos +na janela do PIP.

+ +

Alternar sua atividade para o modo de imagem em imagem

+ +Quando precisar colocar a atividade no modo de PIP, chame +Activity.enterPictureInPicture(). Os exemplos a seguir entram +no modo de PIP quando o usuário seleciona um botão dedicado ao PIP em uma barra de controle +de mídia:

+ +
+@Override
+public void onActionClicked(Action action) {
+    if (action.getId() == R.id.lb_control_picture_in_picture) {
+        getActivity().enterPictureInPicture();
+        return;
+    }
+    ...
+
+ +

Adicionar um botão de PIP à sua barra de controle de mídia permite que o usuário entre no +modo de PIP com facilidade ao controlar a reprodução de um vídeo.

+ + +

Figura 1. Um botão do +modo de imagem em imagem em uma barra de controle de mídia.

+ +

O Android N inclui uma nova classe +PlaybackControlsRow.PictureInPictureAction que define ações do PIP +para a barra de controle e usa o ícone do PIP.

+ +

Lidar com a interface durante o modo de imagem em imagem

+ +

Quando a atividade entra no modo de PIP, ela deve mostrar apenas a reprodução do +vídeo. Remova elementos de interface antes que a atividade entre no modo de PIP +e restaure esses elementos quando a atividade voltar ao modo de tela inteira. +Substitua Activity.onPictureInPictureChanged() ou +Fragment.onPictureInPictureChanged() e ative ou +desative os elementos de interface conforme for necessário. Por exemplo:

+ +
+@Override
+public void onPictureInPictureChanged(boolean inPictureInPicture) {
+    if (inPictureInPicture) {
+        // Hide the controls in picture-in-picture mode.
+        ...
+    } else {
+        // Restore the playback UI based on the playback status.
+        ...
+    }
+}
+
+ +

Continuar a reprodução de vídeos no modo de +imagem em imagem

+ +

Quando a atividade entra no modo de PIP, o sistema a considera +pausada e chama o método onPause() da atividade. A reprodução +de vídeos não deverá ser pausada se a atividade +for pausada devido ao modo de PIP. Verifique o PIP no método +onPause() da atividade e realize a reprodução da forma apropriada. Por +exemplo:

+ +
+@Override
+public void onPause() {
+    // If called due to PIP, do not pause playback
+    if (inPictureInPicture()) {
+        // Continue playback
+        ...
+    }
+    // If paused but not in PIP, pause playback if necessary
+    ...
+}
+
+ +

Quando a atividade sai do modo de PIP e volta à tela inteira, o +sistema retoma a atividade e chama o método onResume().

+ +

Práticas recomendadas

+ +

O PIP é destinado a atividades que reproduzem vídeos em tela inteira. Ao passar +a atividade para o modo de PIP, evite mostrar qualquer coisa que não seja o conteúdo do vídeo. +Rastreie quando a atividade entrar no modo de PIP e oculte os elementos de interface, conforme descrito +em Lidar com a interface durante o modo de imagem em imagem.

+ +

Como a janela do PIP é mostrada como uma janela flutuante no canto da +tela, você deve evitar exibir informações essenciais em qualquer área +da janela principal que possa ser ocultada pela janela do PIP.

+ +

Quando uma atividade está no modo de PIP, ela não recebe foco de entrada por padrão. Para +receber eventos de entrada no modo de PIP, use +MediaSession.setMediaButtonReceiver().

diff --git a/docs/html-intl/intl/pt-br/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/pt-br/preview/features/scoped-folder-access.jd new file mode 100644 index 000000000000..277a37c596ea --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/features/scoped-folder-access.jd @@ -0,0 +1,124 @@ +page.title=Acesso a diretórios com escopo +page.keywords=preview,sdk,scoped directory access +page.tags=androidn + +@jd:body + + + +

Aplicativos, como aplicativos de fotos, normalmente só precisam acessar diretórios específicos de um +armazenamento externo, como o diretório Pictures. As abordagens +existentes para o acesso de armazenamentos externos não foram desenvolvidas para fornecer com facilidade +acesso direcionado a diretórios para esses tipos de aplicativos. Por exemplo:

+ +
    +
  • Solicitar {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} +ou {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} em seu manifesto +permite o acesso a todos os diretórios públicos no armazenamento externo, o que pode ser mais do +que o aplicativo precisa.
  • +
  • Usar a +Estrutura de +acesso ao armazenamento geralmente faz com que o usuário selecione diretórios +por meio de uma interface de sistema, o que é desnecessário se seu aplicativo sempre acessa o mesmo +diretório externo.
  • +
+ +

O Android N fornece uma nova API simplificada para acessar +diretórios de armazenamento externo comuns.

+ +

Acessar um diretório de armazenamento externo

+ +

Use a classe StorageManager para obter a instância +StorageVolume apropriada. Em seguida, crie uma intenção chamando o método +StorageVolume.createAccessIntent() dessa instância. +Use essa intenção para acessar os diretórios de armazenamento externo. Para obter uma lista de +todos os volumes disponíveis, incluindo volumes de mídias removíveis, use +StorageManager.getVolumesList().

+ +

O fragmento de código a seguir é um exemplo de como abrir o diretório +Pictures no armazenamento compartilhado principal:

+ +
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

O sistema tenta conceder acesso ao diretório externo e, +se necessário, confirma o acesso com o usuário usando uma interface simplificada:

+ + +

Figura 1. Um aplicativo solicitando +acesso ao diretório Pictures.

+ +

Se o usuário conceder o acesso, o sistema chamará sua substituição de +onActivityResult() com um código de resultado de +Activity.RESULT_OK e os dados de intenção que contêm o URI. Use +o URI fornecido para acessar as informações do diretório, o que é semelhante a usar URIs +retornados pela +Estrutura de +acesso ao armazenamento.

+ +

Se o usuário não conceder o acesso, o sistema chamará sua substituição de +onActivityResult() com um código de resultado de +Activity.RESULT_CANCELED e dados de intenção nulos.

+ +

Observação: Ao obter acesso a um diretório externo específico, +você também obtém acesso aos subdiretórios dentro do diretório em questão.

+ +

Acessar um diretório em uma mídia removível

+ +

Para usar o Acesso a diretórios com escopo para acessar diretórios em uma mídia removível, +primeiro adicione um {@link android.content.BroadcastReceiver} que escute a notificação +{@link android.os.Environment#MEDIA_MOUNTED}. Por exemplo:

+ +
+<receiver
+    android:name=".MediaMountedReceiver"
+    android:enabled="true"
+    android:exported="true" >
+    <intent-filter>
+        <action android:name="android.intent.action.MEDIA_MOUNTED" />
+        <data android:scheme="file" />
+    </intent-filter>
+</receiver>
+
+ +

Quando o usuário monta uma mídia removível, como um cartão SD, o sistema envia uma notificação +{@link android.os.Environment#MEDIA_MOUNTED}. Essa notificação +fornece um objeto StorageVolume nos dados de intenção que +você pode usar para acessar os diretórios na mídia removível. O exemplo a seguir +acessa o diretório Pictures na mídia removível:

+ +
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+    mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

Práticas recomendadas

+ +

Quando possível, mantenha o URI de acesso a diretórios externos para que você não precise +solicitar acesso ao usuário várias vezes. Quando o usuário conceder o acesso, chame +getContentResolver().takePersistableUriPermssion() com o +URI de acesso ao diretório. O sistema manterá o URI e as solicitações de acesso +subsequentes retornarão RESULT_OK e não mostrarão a mensagem de confirmação para o +usuário.

+ +

Se o usuário negar acesso a um diretório externo, não repita a +solicitação imediatamente. Insistir em solicitações de acesso repetidas vezes gera uma experiência +negativa para o usuário.

diff --git a/docs/html-intl/intl/pt-br/preview/features/security-config.jd b/docs/html-intl/intl/pt-br/preview/features/security-config.jd new file mode 100644 index 000000000000..673de0f58009 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/features/security-config.jd @@ -0,0 +1,744 @@ +page.title=Configurações de segurança de rede +page.keywords=preview,security,network + +@jd:body + + + + +

+ O Android N inclui um recurso de configurações de segurança de rede + que permite que os aplicativos personalizem as configurações de segurança de rede em um arquivo de configurações declarativo e seguro + sem modificar o código do aplicativo. Essas configurações podem + ser definidas para domínios específicos e para um aplicativo específico. Os principais + recursos são: +

+ +
    +
  • + Âncoras de confiança personalizadas: personalize quais autoridades de certificado (CA) + são confiáveis para as conexões seguras de um aplicativo. Por + exemplo, confiar em certificados autoassinados privados ou restringir + o conjunto de CAs públicas nas quais o aplicativo confia. +
  • + +
  • + Substituições somente depuração: depure conexões seguras do aplicativo com segurança, + sem adicionar riscos à base instalada. +
  • + +
  • + Cancelar uso de tráfego de texto simples: proteja aplicativos contra + o uso acidental de tráfego de texto simples. +
  • + +
  • + Fixar certificados: restrinja a conexão segura de um aplicativo + a certificados específicos. +
  • +
+ + +

Adicionar um arquivo de configurações de segurança

+ +

+ O recurso de configurações de segurança de rede usa um arquivo XML no qual você especifica + as configurações do seu aplicativo. Inclua uma entrada no manifesto do seu + aplicativo para apontar para esse arquivo. Este trecho de código de um manifesto + demonstra como criar essa entrada: +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+...
+<app ...>
+    <meta-data android:name="android.security.net.config"
+               android:resource="@xml/network_security_config" />
+    ...
+</app>
+
+ +

Personalizar CAs confiáveis

+ +

+ Um aplicativo pode querer confiar em um conjunto personalizado de CAs em vez de no padrão + da plataforma. Os motivos mais comuns para isso são: +

+ +
    +
  • Conectar-se a um host com uma autoridade de certificado personalizada (autoassinada, + emitida por uma CA corporativa interna etc.). +
  • + +
  • Limitar o conjunto de CAs para apenas aquelas nas quais você confia em vez de todas + as CAs pré-instaladas. +
  • + +
  • Confiar em CAs adicionais não incluídas no sistema. +
  • +
+ +

+ Por padrão, conexões seguras (por exemplo, TLS, HTTPS) de todos os aplicativos confiam + nas CAs pré-instaladas do sistema e os aplicativos direcionados ao nível da API 23 + (Android M) e inferior também confiam no repositório de CAs adicionadas pelo usuário por padrão. Um + aplicativo pode personalizar as próprias conexões usando {@code base-config} (para + personalização em todo o aplicativo) ou {@code domain-config} (para personalização + por domínio). +

+ + +

Configurar uma CA personalizada

+ +

+ Suponhamos que você queira se conectar a um host que use um certificado SSL autoassinado + ou a um host cujo certificado SSL foi emitido por uma CA não pública + na qual confia, como a CA interna da sua empresa. +

+ +

+ res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ Adicione o certificado da CA autoassinada ou não pública em formato PEM ou DER em + {@code res/raw/my_ca}. +

+ + +

Limitar o conjunto de CAs confiáveis

+ +

+ Um aplicativo que não queira confiar em todas as CAs nas quais o sistema confia + pode especificar o próprio conjunto limitado de CAs confiáveis. Isso protege o + aplicativo contra certificados fraudulentos emitidos por qualquer outra CA. +

+ +

+ A configuração para limitar o conjunto de CAs confiáveis é semelhante a confiar em uma CA personalizada para um domínio específico, mas + fornecendo várias CAs no recurso. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">secure.example.com</domain>
+        <domain includeSubdomains="true">cdn.example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/trusted_roots"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ Adicione as CAs confiáveis em formato PEM ou DER em {@code res/raw/trusted_roots}. + Observe que, ao usar o formato PEM, o arquivo deve conter somente dados PEM, + sem texto adicional. Você também pode fornecer vários elementos + <certificates> +em vez de um. +

+ + +

+ Confiar em CAs adicionais +

+ +

+ Um aplicativo pode querer confiar em CAs adicionais nas quais o sistema não confia. + Isso pode ocorrer se o sistema ainda não incluiu a CA ou se a CA + não atender aos requisitos de inclusão no sistema Android. O + aplicativo pode fazer isso ao especificar várias fontes de certificados para uma + configuração. +

+

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="@raw/extracas"/>
+            <certificates src="system"/>
+        </trust-anchors>
+    </base-config>
+</network-security-config>
+
+

+ + +

Configurar CAs para depuração

+ +

+ Ao depurar um aplicativo conectado por HTTPS, você pode querer + se conectar a um servidor de desenvolvimento local que não tenha o certificado SSL + do seu servidor de produção. Para fazer isso sem + modificar o código do aplicativo, você pode especificar CAs somente de depuração que + sejam confiáveis apenas quando +android:debuggable + for {@code true} ao usar {@code debug-overrides}. Normalmente, IDEs e ferramentas de compilação + definem esse sinalizador automaticamente para compilações de não lançamento. +

+ +

+ Isso é mais seguro do que o código condicional normal, pois, como medida + de segurança, os repositórios do aplicativo não aceitam aplicativos marcados como + depuráveis. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="@raw/debug_cas"/>
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+

+ + +

Cancelar uso de tráfego de texto simples

+ +

+ Aplicativos que pretendem se conectar a destinos usando apenas conexões + seguras podem cancelar o uso de texto simples de suporte (usando o protocolo HTTP não criptografado + em vez de HTTPS) para esses destinos. Essa opção ajuda a evitar + regressões acidentais em aplicativos devido a alterações nos URLs fornecidos por fontes externas, + como servidores de back-end. + Consulte {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted + NetworkSecurityPolicy.isCleartextTrafficPermitted()} para saber mais. +

+ +

+ Por exemplo, um aplicativo pode querer garantir que todas as conexões com {@code + secure.example.com} sejam sempre realizadas por HTTPS para proteger o tráfego confidencial + de redes hostis. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config usesCleartextTraffic="false">
+        <domain includeSubdomains="true">secure.example.com</domain>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Fixar certificados

+ +

+ Normalmente, um aplicativo confia em todas as CAs pré-instaladas. Se qualquer uma dessas CAs + emitir um certificado fraudulento, o aplicativo estará em risco de ataques + MiTM. Alguns aplicativos optam por limitar o conjunto de certificados que aceitam + restringindo o conjunto de CAs ou fixando certificados. +

+ +

+ A fixação de certificados é realizada ao fornecer um conjunto de certificados pelo hash da + chave pública (SubjectPublicKeyInfo do certificado X.509). Uma cadeia de certificados + é válida somente se contiver pelo menos uma + das chaves públicas fixadas. +

+ +

+ Observe que, ao usar a fixação de certificados, você deve sempre incluir uma chave de backup + para que, se você for forçado a alternar para novas chaves ou alterar as CAs (ao + fixar um certificado de CA ou um intermediário dessa CA), a + conectividade do seu aplicativo não seja afetada. Caso contrário, você precisará enviar + uma atualização ao aplicativo para restaurar a conectividade. +

+ +

+ Além disso, é possível definir um tempo de expiração para as fixações, após o qual + elas não sejam mais realizadas. Isso ajuda a evitar problemas de conectividade + em aplicativos que não foram atualizados. No entanto, definir um tempo de expiração + para fixações pode permitir que as fixações sejam ignoradas. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <pin-set expiration="2018-01-01">
+            <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+            <!-- backup pin -->
+            <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Comportamento de herança de configuração

+ +

+ Valores não definidos em uma configuração específica são herdados. Esse comportamento permite + configurações mais complexas, mantendo o arquivo de configuração legível. +

+ +

+ Se um valor não for definido em uma entrada específica, o valor da próxima entrada + mais genérica será usado. Valores não definidos em um {@code domain-config} são + obtidos pelo {@code domain-config} pai, se aninhados, ou, caso contrário, pelo {@code + base-config}. Valores não definidos no {@code base-config} usam os + valores padrão da plataforma. +

+ +

+ Por exemplo, considere um caso no qual todas as conexões para subdomínios de {@code + example.com} devem usar um conjunto personalizado de CAs. Além disso, o tráfego de texto simples para esses + domínios é permitido exceto ao se conectar com {@code + secure.example.com}. Ao aninhar a configuração para {@code + secure.example.com} dentro da configuração para {@code example.com}, o + {@code trust-anchors} não precisa ser duplicado. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+        <domain-config cleartextTrafficPermitted="false">
+            <domain includeSubdomains="true">secure.example.com</domain>
+        </domain-config>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Formato do arquivo de configurações

+ +

+ O recurso de configurações de segurança de rede usa um arquivo no formato XML. + A estrutura geral desse arquivo é mostrada no seguinte exemplo de código: +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </base-config>
+
+    <domain-config>
+        <domain>android.com</domain>
+        ...
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+        <pin-set>
+            <pin digest="...">...</pin>
+            ...
+        </pin-set>
+    </domain-config>
+    ...
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+ +

+ As seções a seguir descrevem a sintaxe e outros detalhes do formato do + arquivo. +

+ +

+ <network-security-config> +

+ +
+
+ pode conter: +
+ +
+ 0 ou 1 de <base-config>
+ Qualquer número de <domain-config>
+ 0 ou 1 de <debug-overrides> +
+
+ +

+ <base-config> +

+ +
+
+ sintaxe: +
+
+ +
+<base-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</base-config>
+
+
+
+ pode conter: +
+ +
+ <trust-anchors> +
+ +
+ descrição: +
+ +
+ A configuração padrão usada por todas as conexões cujo destino não é + coberto por um domain-config. + +

+ Qualquer valor não definido usa os valores padrão da plataforma. A configuração padrão + para aplicativos direcionados a níveis de API acima do 24: +

+ +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+    </trust-anchors>
+</base-config>
+
+A configuração padrão para aplicativos direcionados a níveis de API 23 e inferiores: +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+        <certificates src="user" />
+    </trust-anchors>
+</base-config>
+
+ +
+
+ +

<domain-config>

+
+
sintaxe:
+
+
<domain-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</domain-config>
+
+ +
Pode conter:
+ +
+1 ou mais <domain> +
0 ou 1 <trust-anchors> +
0 ou 1 <pin-set> +
Qualquer número de <domain-config> aninhados
+ +
Descrição
+
A configuração usada para conexões com destinos específicos, conforme é definido pelos elementos {@code domain}. + +

Observe que, se vários elementos {@code domain-config} cobrirem um destino, a configuração com a regra de domínio correspondente +mais específica (mais longa) será usada.

+
+ + +

<domain>

+ +
+
+ sintaxe: +
+ +
+
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+
+
+ +
+ Atributos: +
+ +
+
+
+ {@code includeSubdomains} +
+ +
+ Se {@code "true"}, a regra de domínio corresponderá ao domínio e a todos os + subdomínios, incluindo subdomínios de subdomínios. Caso contrário, a regra + se aplica apenas a correspondências exatas. +
+
+
+ +
+ Descrição: +
+
+ +

<debug-overrides>

+ +
+
+ sintaxe: +
+ +
+
+<debug-overrides>
+    ...
+</debug-overrides>
+
+
+ +
+ Pode conter: +
+ +
+ 0 ou 1 <trust-anchors> +
+ +
+ Descrição: +
+ +
+ Substituições a serem aplicadas quando android:debuggable + for {@code "true"}, o que normalmente ocorre em compilações de não lançamento + geradas por IDEs e ferramentas de compilação. Âncoras de confiança especificadas em {@code + debug-overrides} são adicionadas a todas as demais configurações e a fixação + de certificados não é realizada quando a cadeia de certificados do servidor usar uma + dessas âncoras de confiança de somente depuração. Se android:debuggable + for {@code "false"}, esta seção será ignorada por completo. +
+
+ +

<trust-anchors>

+
+
+ sintaxe: +
+ +
+
+<trust-anchors>
+...
+</trust-anchors>
+
+
+ +
+ Pode conter: +
+ +
+ Qualquer número de <certificates> +
+ +
+ Descrição: +
+ +
+ Conjunto de âncoras de confiança para conexões seguras. +
+
+ + +

<certificates>

+
+
sintaxe:
+
<certificates src=["system" | "user" | "raw resource"]
+              overridePins=["true" | "false"] />
+
+
descrição:
+
Conjunto de certificados X.509 para elementos {@code trust-anchors}.
+ +
atributos:
+
+
{@code src}
+
+A fonte de certificados de CA, que pode ser um dos +
    +
  • IDs de recursos brutos que apontam para um arquivo que contém certificados X.509. + Os certificados devem ser codificados em formato DER ou PEM. No caso de certificados PEM, + o arquivo não deve conter dados não PEM adicionais, como + comentários. +
  • + +
  • {@code "system"} para os certificados de CA pré-instalados do sistema +
  • + +
  • {@code "user"} para certificados de CA adicionados pelo usuário +
  • +
+
+ +
{@code overridePins}
+
+

+ Especifica se as CAs dessa fonte ignoram a fixação de certificados. Se {@code + “true”} e forem certificadas cadeias de certificados que incluam uma das CAs dessa + fonte, a fixação não será realizada. Isso pode ser útil para depurar CAs + ou permitir que o usuário execute ataques MiTM no tráfego seguro do seu aplicativo. +

+ +

+ O padrão é {@code "false"} a não ser que seja especificado em um elemento {@code debug-overrides} +. Nesse caso, o padrão será {@code "true"}. +

+
+
+
+ + +

<pin-set>

+ +
+
+ sintaxe: +
+ +
+
+<pin-set expiration="date">
+...
+</pin-set>
+
+
+ +
+ Pode conter: +
+ +
+ Qualquer número de <pin> +
+ +
+ Descrição: +
+ +
+ Um conjunto de fixações de chave pública. Para que uma conexão segura seja confiável, uma das + chaves públicas na cadeia de confiança deve estar presente no conjunto de fixações. Consulte + <pin> para saber mais sobre o formato das fixações. +
+ +
+ Atributos: +
+ +
+
+
+ {@code expiration} +
+ +
+ A data, no formato {@code yyyy-MM-dd}, após a qual as fixações + expiram e são desativadas. Se o atributo não for definido, as fixações + não expirarão. +

+ A expiração ajuda a evitar problemas de conectividade em aplicativos que não + recebem atualizações para o conjunto de fixações, por exemplo, porque o usuário + desativou as atualizações do aplicativo. +

+
+
+
+
+ +

<pin>

+
+
+ sintaxe: +
+ +
+
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+    SubjectPublicKeyInfo (SPKI)</pin>
+
+
+ +
+ Atributos: +
+ +
+
+
+ {@code digest} +
+ +
+ O algoritmo de resumo usado para gerar a fixação. No momento, apenas + {@code "SHA-256"} é permitido. +
+
+
+
diff --git a/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd b/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd new file mode 100644 index 000000000000..95b5787e1a75 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd @@ -0,0 +1,120 @@ +page.title=Gravação para TV +page.keywords=preview,sdk,tv,recording +page.tags=androidn + +@jd:body + + + +

Serviços de entrada de TV permitem que o usuário pause e retome a reprodução do canal por meio de +APIs de time-shifting. O Android N expande o time-shifting +ao permitir que o usuário salve várias sessões gravadas.

+ +

Os usuários podem programar gravações antecipadamente ou iniciar uma gravação enquanto assistem a +um programa. Quando o sistema salvar a gravação, o usuário poderá navegar, gerenciar +e reproduzir a gravação usando o aplicativo de TV do sistema.

+ +

Se quiser fornecer recursos de gravação para seu serviço de entrada de TV, +indique para o sistema que seu aplicativo oferece suporte a gravação, implemente +a capacidade de gravar programas, solucione e comunique erros ocorridos +durante a gravação e gerencie as sessões gravadas.

+ +

Indicar suporte para gravação

+ +

Para informar ao sistema que seu serviço de entrada de TV oferece suporte a gravação, siga +estas etapas:

+ +
    +
  1. No método TvInputService.onCreate(), crie um novo objeto +TvInputInfo usando a classe TvInputInfo.Builder +.
  2. +
  3. Ao criar o novo objeto TvInputInfo, chame +setCanRecord(true) antes de chamar build() para +indicar que seu serviço oferece suporte a gravação.
  4. +
  5. Registre seu objeto TvInputInfo com o sistema chamando +TvInputService.updateTvInputInfo().
  6. +
+ +

Gravar uma sessão

+ +

Depois que o serviço de entrada de TV registrar que oferece suporte ao recurso +de gravação, o sistema chamará seu +TvInputService.onCreateRecordingSession() quando precisar acessar +a implementação de gravação do seu aplicativo. Implemente sua própria subclasse +TvInputService.RecordingSession e retorne-a +quando o retorno de chamada onCreateRecordingSession() +for acionado. Essa subclasse é responsável por alternar para os dados de canal corretos, +gravando os dados solicitados e comunicando o status de gravação e os erros ao +sistema.

+ +

Quando o sistema chamar RecordingSession.onTune(), passando um +URI de canal, acesse o canal especificado pelo URI. Notifique o sistema de que +seu aplicativo acessou o canal desejado ao chamar notifyTuned() +ou, se o aplicativo não conseguiu acessar o canal correto, chame +notifyError().

+ +

Em seguida, o sistema invoca o retorno de chamada RecordingSession.onStartRecording() +. O aplicativo deve iniciar a gravação imediatamente. Quando o sistema invoca +esse retorno de chamada, ele pode fornecer um URI que contenha informações sobre o programa +que será gravado. Quando a gravação for concluída, você deverá copiar esses +dados para a tabela de dados RecordedPrograms.

+ +

Por fim, o sistema chama RecordingSession.onStopRecording(). +Nesse momento, o aplicativo deve interromper a gravação imediatamente. Também é preciso +criar uma entrada na tabela RecordedPrograms. Essa entrada deve +incluir o URI dos dados da sessão gravada na coluna +RecordedPrograms.COLUMN_RECORDING_DATA_URI e qualquer informação +sobre o programa fornecida pelo sistema na chamada inicial em +onStartRecording().

+ +

Para saber mais sobre como acessar a tabela RecordedPrograms, +consulte Gerenciar sessões gravadas.

+ +

Solucionar erros de gravação

+ +

Se um erro ocorrer durante a gravação, inutilizando os dados gravados, +notifique o sistema chamando RecordingSession.notifyError(). +Também é possível chamar notifyError() depois que uma sessão de gravação é +criada para informar ao sistema que seu aplicativo não pode mais gravar sessões.

+ +

Se um erro ocorrer durante a gravação, mas você quiser fornecer uma gravação +parcial que pode ser usada pelos usuários para reprodução, chame +RecordingSession.notifyRecordingStopped() para permitir que o sistema +use a sessão parcial.

+ +

Gerenciar sessões gravadas

+ +

O sistema mantém as informações de todas as sessões gravadas de todos +os aplicativos de canais com recursos de gravação na tabela de provedor de conteúdo TvContract.RecordedPrograms +. Essas informações podem ser acessadas pelo URI de conteúdo +RecordedPrograms.Uri. Use APIs de provedores de conteúdos para +ler, adicionar e excluir entradas dessa tabela.

+ +

Para saber mais sobre como trabalhar com dados de provedores de conteúdo, consulte + +Fundamentos do provedor de conteúdo .

+ +

Práticas recomendadas

+ +

Dispositivos de TV podem ter armazenamento limitado, então tenha bom senso ao +alocar armazenamento para salvar sessões gravadas. Use +RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) quando +não houver espaço suficiente para salvar uma sessão gravada.

+ +

Quando o usuário iniciar a gravação, comece a gravar os dados assim +que possível. Para facilitar esse processo, realize qualquer tarefa demorada imediatamente, +como acessar e alocar o espaço de armazenamento, quando o sistema invocar o retorno de chamada +onCreateRecordingSession(). Isso permite que você comece +a gravar imediatamente após o acionamento do retorno de chamada onStartRecording() +.

diff --git a/docs/html-intl/intl/pt-br/preview/index.jd b/docs/html-intl/intl/pt-br/preview/index.jd new file mode 100644 index 000000000000..54531f595a45 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/index.jd @@ -0,0 +1,120 @@ +page.title=Android N Developer Preview +page.tags="preview","developer" +meta.tags="preview", "android" +fullpage=true +forcelocalnav=true +header.hide=1 +footer.hide=1 +@jd:body + + + +
+
+
+ +
+

Android N Developer Preview

+

+ Prepare-se para o Android N! + Teste seus aplicativos no Nexus e em outros dispositivos. Ofereça suporte a novos + comportamentos de sistema para economizar energia e memória. + Estenda seus aplicativos com a interface de várias janelas, + direcione notificações de resposta e muito mais. +

+ + + + Primeiros passos + +
+
+ +
+
+
+
+
+
+
+ + + + + +
+

Recursos

+
+ Informações essenciais para ajudar você a preparar seus aplicativos para o Android N. +
+ +
+ +
+
+ diff --git a/docs/html-intl/intl/pt-br/preview/j8-jack.jd b/docs/html-intl/intl/pt-br/preview/j8-jack.jd new file mode 100644 index 000000000000..601a20b6377e --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/j8-jack.jd @@ -0,0 +1,183 @@ +page.title=Recursos de linguagem do Java 8 +page.keywords="android N", "Java 8", "Jack" +@jd:body + + + +

O Android N introduz o suporte aos recursos de linguagem do Java 8 + que podem ser usados ao desenvolver aplicativos direcionados ao Android N. + Esta página descreve os novos recursos de linguagem com suporte no Android N + Preview, como configurar seu projeto para usá-los e os + problemas conhecidos que você poderá encontrar. +

+ +

Para começar a usar esses recursos, primeiro faça o download e instale o Android +Studio 2.1 (preview) e o Android N Preview SDK, que inclui a +cadeia de ferramentas Jack obrigatória e o Android Plugin for Gradle atualizado. Se você ainda não +instalou o Android N Preview SDK, consulte Preparação para desenvolver para o Android N.

+ + + +

+ Observação: o uso dos novos recursos de linguagem do Java 8 não é + obrigatório para desenvolver aplicativos direcionados à plataforma Android N. Se + não quiser escrever código com os recursos de linguagem do Java 8, você poderá manter + os valores de compatibilidade de origem e destino do seu projeto definidos para o Java 7, mas ainda + será necessário compilar com o JDK 8 para desenvolver para a plataforma Android N. +

+ +

+ Recursos de linguagem e APIs do Java 8 com suporte +

+ +

+ Atualmente, o Android não oferece suporte a todos os recursos de linguagem do Java 8. No entanto, os + recursos a seguir agora estão disponíveis para o desenvolvimento de aplicativos direcionados ao + Android N Preview: +

+ + + + +

+ Além disso, as seguintes APIs de recursos de linguagem do Java 8 agora estão disponíveis: +

+ +
    +
  • APIs relacionadas a reflexo e linguagem: +
  • + +
  • +
      +
    • {@code java.lang.FunctionalInterface} +
    • + +
    • {@code java.lang.annotation.Repeatable} +
    • + +
    • {@code java.lang.reflect.Method.isDefault()} +
    • + +
    • e APIs de reflexo associadas a anotações repetíveis, como + {@code AnnotatedElement.getAnnotationsByType(Class)} +
    • +
    +
  • +
  • APIs utilitárias: +
  • + +
  • +
      +
    • {@code java.util.function} +
    • +
    +
  • +
+ +

+ Observação: o Android N baseia a implementação de + expressões lambda em classes anônimas. Essa abordagem permite que elas + sejam compatíveis e possam ser executadas em versões anteriores do Android. Para testar as + expressões lambda em versões mais antigas, lembre-se de acessar o arquivo {@code +build.gradle} e definir{@code compileSdkVersion} e {@code +targetSdkVersion} como 23 ou menos. +

+ +

+ Como ativar os recursos do Java 8 e a cadeia de ferramentas Jack +

+ +

+ Para usar os novos recursos de linguagem do Java 8, você também deve usar a + nova cadeia de ferramentas Jack. Essa nova + cadeia de ferramentas Android compila o código-fonte de linguagem Java em um código de bytes dex que pode ser lido no Android +, tem o próprio formato de biblioteca {@code .jack} e fornece a maioria dos recursos + de uma cadeia de ferramentas em uma só ferramenta: reempacotamento, redução, ofuscação e + multidex. +

+ +

Veja uma comparação entre duas cadeias de ferramentas usadas para compilar arquivos DEX Android:

+
    +
  • Cadeia de ferramentas legada javac:
    + javac ({@code .java} --> {@code .class}) --> dx ({@code + .class} --> {@code .dex}) +
  • + +
  • Nova cadeia de ferramentas Jack:
    + Jack ({@code .java} --> {@code .jack} --> {@code .dex}) +
  • +
+ +

+ Configuração do Gradle +

+ +

+ Para ativar os recursos de linguagem do Java 8 e o Jack para seu projeto, insira + o seguinte no arquivo {@code build.gradle} específico do módulo: +

+ +
+android {
+  ...
+  defaultConfig {
+    ...
+    jackOptions {
+      enabled true
+    }
+  }
+  compileOptions {
+    sourceCompatibility JavaVersion.VERSION_1_8
+    targetCompatibility JavaVersion.VERSION_1_8
+  }
+}
+
+ +

+ Problemas conhecidos +

+ +

+ O Instant Run, introduzido no Android Studio 2.0 (Beta), não funciona com o + Jack e será desativado enquanto a nova cadeia de ferramentas estiver em uso. +

+ +

Como o Jack não gera arquivos de classe intermediária ao compilar um +aplicativo, ferramentas que dependem desses arquivos não funcionam com o Jack. Alguns +exemplos dessas ferramentas:

+ +
    +
  • Detectores de códigos suspeitos que operam em arquivos de classe +
  • + +
  • Ferramentas e bibliotecas que exigem os arquivos de classe do aplicativo (como JaCoCo + e Mockito)
  • +
+ +

Se encontrar outros problemas ao usar o Jack, envie um relatório de erros.

\ No newline at end of file diff --git a/docs/html-intl/intl/pt-br/preview/overview.jd b/docs/html-intl/intl/pt-br/preview/overview.jd new file mode 100644 index 000000000000..be4e43f5d76f --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/overview.jd @@ -0,0 +1,440 @@ +page.title=Visão geral do programa +page.metaDescription=Prepare seus aplicativos para a próxima versão do Android. +page.image=images/cards/card-n-overview_2x.png +meta.tags="preview", "developer", "android" +page.tags="preview", "developer", "android" + +@jd:body + + +

+ Bem-vindo ao Android N Developer Preview, um programa que + oferece tudo de que você precisa para testar e otimizar seus aplicativos para a próxima + versão do Android. Ele é gratuito e você pode começar imediatamente ao + fazer o download das ferramentas do N Developer Preview. +

+ + + + + + + +
+
+
+
+
+ Imagens de emulador e hardware +
+ +

+ Execute e teste seus aplicativos em diversos dispositivos ou em um emulador. + +

+
+ +
+
+ Código de plataforma mais recente +
+ +

+ Forneceremos atualizações mensais durante o Preview. Portanto, você testará de acordo com as alterações mais recentes da plataforma. +

+
+ +
+
+ Prioridade para problemas de desenvolvimento +
+ +

+ Durante as primeiras semanas, nós daremos prioridade aos problemas informados + por desenvolvedores. Portanto, teste e forneça-nos feedback o quanto antes. +

+
+ +
+ +
+ + +
+
+ Novos comportamentos e recursos +
+ +

+ Comece a trabalhar mais cedo para oferecer suporte aos novos comportamentos da plataforma e desenvolver seus aplicativos com novos recursos. +

+
+ +
+
+ Atualizações entregues por OTA +
+ +

+ Atualizações OTA eficientes para qualquer dispositivo compatível por meio do + programa beta do Android. Não é preciso atualizar manualmente. +

+
+ +
+
+ Feedback e suporte +
+ +

+ Informe problemas e envie feedback usando nosso +issue tracker. Conecte-se com outros + desenvolvedores na + Comunidade N Developer. +

+
+
+
+
+ + + +

Cronograma e atualizações

+ + +

+ O N Developer Preview será executado a partir de 3 de março de 2016 até o último lançamento público do Android N + para AOSP e OEMs, planejado para o terceiro trimestre de 2016. +

+ +

+ Nos marcos mais importantes do desenvolvimento, fornecedores atualizações para seu ambiente de teste e + desenvolvimento. De modo geral, você pode esperar atualizações mensais (intervalo de + 4 a 6 semanas). Os marcos estão listados abaixo. +

+ +
    +
  • Preview 1 (versão inicial, alpha)
  • +
  • Preview 2 (atualização incremental, beta)
  • +
  • Preview 3 (atualização incremental, beta)
  • +
  • Preview 4 (APIs finais e SDK oficial, publicação no Play)
  • +
  • Preview 5 (imagens de sistema quase finalizadas para o teste final)
  • +
  • Versão final para AOSP e ecossistema
  • +
+ +

+ Cada atualização inclui ferramentas do SDK, imagens de sistema do Preview, emuladores, documentação de + referência e diferenças entre as APIs. +

+ +

+ Os três primeiros marcos do Preview oferecem um ambiente + de teste e desenvolvimento antecipado para ajudar você a identificar + problemas de compatibilidade em seus aplicativos atuais e planejar a migração ou o trabalho em recursos + necessários para desenvolver para a nova plataforma. Esse é o período prioritário no qual você deve + fornecer feedback sobre os recursos e as APIs e informar problemas de compatibilidade + — para isso, use o issue + tracker. As APIs sofrerão algumas alterações nessas atualizações. +

+ +

+ Nos Previews 4 e 5, você terá acesso às versões finais + das APIs e do SDK do N, com as quais poderá desenvolver, além de imagens de sistema quase finalizadas + para testar comportamentos e recursos do sistema. O Android N fornecerá uma API de nível + padrão no momento. Você poderá iniciar os testes finais de compatibilidade dos seus aplicativos + legados e refinar códigos novos que usem as APIs ou os recursos do N. +

+ +

+ Também a partir do Preview 4, você poderá publicar aplicativos + para dispositivos que executem o Android N no nível da API oficial, como + dispositivos de consumidor que optaram pelo programa beta do Android. Será possível + publicar nos canais alfa e beta do Google Play primeiro para testar + seus aplicativos com clientes beta do Android antes de distribuir para os demais clientes + da loja. +

+ +

+ Ao testar e desenvolver no Android N, recomendamos que você mantenha + o ambiente de desenvolvimento atualizado à medida que atualizações do Preview são + lançadas. Para facilitar o processo, você pode inscrever seus dispositivos de teste no + programa beta do Android e receber atualizações por OTA durante + cada marco. Como alternativa, imagens atualizadas do Preview estão disponíveis para + download e atualização manual. +

+ +

+ Notificaremos você quando as atualizações do Preview estiverem disponíveis por meio do Android Developers Blog, além + deste site e da Comunidade + Android N Developer. +

+ + +

O que o N Developer Preview inclui?

+ +

+ O N Developer Preview inclui tudo o que é necessário para testar seus aplicativos existentes + em uma variedade de tamanhos de tela, tecnologias de rede, chipsets de CPU/GPU + e arquiteturas de hardware. +

+ +

Ferramentas do SDK

+ +

É possível fazer o download desses componentes pelo SDK Manager no Android Studio:

+ +
    +
  • SDK e ferramentas do N Developer Preview +
  • Imagem do sistema de emulador (32 bits e 64 bits) do N Developer Preview +
  • Imagem do sistema de emulador para Android TV (32 bits) do N Developer Preview +
  • Bibliotecas de suporte do N Developer Preview (para novos modelos de aplicativos) +
+ +

+ Forneceremos atualizações para essas ferramentas de desenvolvimento em cada marco, conforme a necessidade. +

+ +

Imagens do sistema de hardware

+ +

+ O N Developer Preview inclui imagens do Nexus e de outros sistemas de hardware que podem ser usadas ao + testar e desenvolver em dispositivos físicos. Consulte a página Imagens de dispositivo para ver a lista completa + de imagens de hardware. +

+ +

+ Forneceremos imagens de sistema atualizadas para esses dispositivos em cada marco. Você + pode fazer o download e atualizar as imagens de sistema manualmente + em seus dispositivos de teste com a frequência necessária. Isso é especialmente útil para ambientes + de teste automatizados nos quais seja preciso atualizar o dispositivo várias + vezes. +

+ +

Observação: + dispositivos atualizados manualmente não receberão atualizações por OTA como no + Preview do ano anterior. Neste ano, você recebe OTAs ao inscrever os dispositivos no + programa beta do Android — veja detalhes na próxima seção. +

+ +

Atualizações por OTA no programa beta do Android

+ +

+ Uma novidade do Android N é um programa de atualização por OTA que automaticamente + fornece as últimas atualizações do Preview do Android N diretamente para os dispositivos inscritos + no programa. O programa é gratuito e está aberto a todos que tenham + um dispositivo compatível registrado na conta do Google. +

+ +

+ Para se inscrever no programa, acesse o site do programa beta do Android +. Você + verá uma lista de todos os dispositivos registrados em sua conta que estejam qualificados para inscrição no + programa beta do Android. +

+ +
    +
  1. Escolha os dispositivos nos quais deseja receber atualizações do Android N +
  2. Clique em Enroll, leia e concorde com os termos de serviço e clique em OK +
+ +

+ Seu dispositivo receberá uma atualização pouco tempo depois da inscrição. Na maioria dos casos, + não é necessário fazer uma redefinição completa para migrar para o Android N, mas + é recomendável fazer o backup de qualquer dado que você não queira perder antes de + inscrever o dispositivo. +

+ +

+ Conforme as atualizações são enviadas ao seu dispositivo, recomendamos que elas sejam baixadas e + instaladas assim que possível. Mantenha-se atualizado com as + últimas mudanças na interface, no comportamento, nas APIs e nos recursos do sistema. +

+ +

+ Quando o Developer Preview for concluído, os dispositivos inscritos + receberão uma atualização para a versão oficial do Android N. +

+ +

+ É possível cancelar a inscrição dos seus dispositivos no programa beta do Android a qualquer momento no + site do programa. Antes de cancelar a inscrição, não deixe de fazer o backup dos dados + no dispositivo. +

+ +

Observação: + ao cancelar a inscrição, seu dispositivo será redefinido para as configurações de fábrica +, recebendo a última versão + do Android 6.0 Marshmallow (não necessariamente a versão instalada + antes da inscrição do dispositivo). Para garantir uma instalação limpa, + seus dados serão apagados do dispositivo, incluindo contatos, mensagens, + fotos etc. +

+ +

Exemplo de código e documentação

+ +

+ Estes recursos de documentação estão disponíveis no site do Developer Preview para + ajudar você a saber mais sobre o Android N: +

+ + + +

Referência da API para download

+ +

+ Durante as primeiras atualizações do Preview, você pode fazer o download da + referência da API + mais recente para a plataforma Android N como um arquivo zip separado. Esse download + também inclui um relatório de diferenças que ajuda você a identificar as mudanças da API em relação à + API 23 e à atualização anterior. +

+ +

+ Quando as APIs do Android N forem finalizadas e um nível de API oficial for atribuído, + forneceremos a referência da API on-line em https://developer.android.com. +

+ +

+ Recursos de suporte +

+ +

+ Ao testar e desenvolver no N Developer Preview, use estes canais para + informar problemas e enviar feedback. +

+ +
    +
  • O issue tracker do N Developer Preview + é seu principal canal de feedback. Você pode informar erros, problemas de + desempenho e enviar feedback geral pelo issue tracker. Também é possível consultar +problemas conhecidos e + encontrar etapas de soluções alternativas. Manteremos você atualizado sobre seu problema conforme ele for avaliado e + enviado para a equipe de engenharia do Android para análise.
  • +
  • A Comunidade Android N Developer é + uma comunidade do Google+ onde é possível se conectar a outros desenvolvedores que trabalham com o + Android N. É possível compartilhar observações ou ideias, além de encontrar respostas + para as dúvidas sobre o Android N. Moderaremos a comunidade e fornecemos respostas e + orientações conforme for necessário.
  • +
+ +

Direcionamento, APIs do Preview e publicação

+ +

+ O N Developer Preview fornece um sistema apenas para desenvolvimento e uma biblioteca Android + que não tem um nível de API padrão. Se desejar + optar por não utilizar comportamentos de compatibilidade para testar seu aplicativo (o que é altamente + recomendável), será possível direcionar seus esforços para a versão Preview do Android N ao definir + o targetSdkVersion + do seu aplicativo para “N”. +

+ +

+ O Android N Developer Preview fornece APIs do Preview + — as APIs não serão oficiais até o lançamento do SDK final, + atualmente planejado para o terceiro trimestre de 2016. Isso significa que você pode + esperar pequenas mudanças na API ao longo do tempo, especialmente durante + as semanas iniciais do programa. Forneceremos um resumo das alterações com + cada atualização do Android N Developer Preview. +

+ +

+ Observação: apesar de as APIs do Preview poderem ser alteradas, os + comportamentos essenciais do sistema são estáveis e estão prontos para + serem testados. +

+ +

+ O Google Play impede a publicação de aplicativos direcionados ao N Developer + Preview. Quando o SDK final do Android N estiver disponível, você poderá + direcionar seus esforços para o nível de API oficial do Android N e publicar seu aplicativo no Google + Play pelos canais de lançamento alfa e beta. Enquanto isso, caso queira + distribuir um aplicativo direcionado ao Android N para testadores, poderá fazê-lo por e-mail ou + por download direto pelo seu site. +

+ +

+ No lançamento completo do Android N para AOSP e OEMs, planejado para o terceiro trimestre de 2016, + você poderá publicar seus aplicativos direcionados ao Android N no canal de lançamento + público do Google Play. +

+ + +

Como começar

+ +

+ Para começar o teste do seu aplicativo com o Android N: +

+ +
    +
  1. Consulte a Visão geral da API + e as Mudanças de comportamento para + ter uma ideia das novidades e de como elas afetam seus aplicativos. Especificamente, + obtenha informações sobre os novos recursos de notificações e + o suporte a várias janelas.
  2. +
  3. Configure seu ambiente seguindo as instruções para Configurar o Preview SDK + e configurar os dispositivos de teste.
  4. +
  5. Siga as instruções de atualização + manual para instalar a última imagem de sistema do Android N no seu dispositivo.
  6. +
  7. Consulte a referência da API + e os exemplos do Android N para obter mais + informações sobre os novos recursos de API e como usá-los no seu aplicativo. +
  8. Participe da Comunidade Android N + Developer para obter as notícias mais recentes e conectar-se a outros + desenvolvedores que trabalham com a nova plataforma.
  9. +
+ +

+ Agradecemos sua participação no programa Android N Developer Preview! +

diff --git a/docs/html-intl/intl/pt-br/preview/samples.jd b/docs/html-intl/intl/pt-br/preview/samples.jd new file mode 100644 index 000000000000..c4c421f08dff --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/samples.jd @@ -0,0 +1,85 @@ +page.title=Exemplos +page.tags="preview", "samples", "android" +page.image=images/cards/card-n-samples_2x.png +@jd:body + +

+ Os exemplos de código a seguir são fornecidos para o Android N. Para + fazer o download dos exemplos no Android Studio, selecione a opção de menu File > Import + Samples. +

+ +

+ Observação: estes projetos disponíveis para download foram criados + para uso com o Gradle e o Android Studio. +

+ + +

Interface com várias janelas

+ +

+ Este exemplo demonstra como aproveitar as vantagens de interfaces de usuário com várias janelas + com seu aplicativo. +

+

+ +Obter no GitHub +

+ +
+

Notificações ativas

+ +

+ Este é um exemplo pré-existente que mostra um serviço simples que envia + notificações usando NotificationCompat. Cada conversa não lida de um usuário + é enviada como uma notificação distinta. +

+

+ Este exemplo foi atualizado para utilizar os novos recursos de notificação + disponíveis no Android N. +

+

+ +Obter no GitHub +

+ +
+

Serviço de mensagens

+ +

+ Este é um exemplo pré-existente que demonstra como usar o + NotificationManager para identificar quantas notificações um aplicativo está mostrando + no momento. +

+

+ Este exemplo foi atualizado para utilizar os novos recursos de notificação + disponíveis no Android N. +

+

+ +Obter no GitHub +

+ +
+

Inicialização direta

+ +

+ Este exemplo demonstra como armazenar e acessar dados no armazenamento criptografado de um dispositivo + que está sempre disponível enquanto o dispositivo é inicializado. +

+

+ +Obter no GitHub +

+ +
+

Acessos a diretório com escopo

+ +

+ Este exemplo demonstra como ler e gravar dados de diretórios + específicos exigindo menos permissões. +

+

+ +Obter no GitHub +

\ No newline at end of file diff --git a/docs/html-intl/intl/pt-br/preview/setup-sdk.jd b/docs/html-intl/intl/pt-br/preview/setup-sdk.jd new file mode 100644 index 000000000000..4766a88251c8 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/setup-sdk.jd @@ -0,0 +1,226 @@ +page.title=Configurar o Preview +meta.keywords="preview", "android" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-sdk_2x.png + +@jd:body + + + + +

Para desenvolver aplicativos para o Android N Preview, você precisa fazer algumas atualizações +no ambiente de desenvolvedor, conforme é descrito nesta página.

+ +

Para simplesmente testar a compatibilidade do seu aplicativo na imagem do sistema +Android N, siga o guia para Testar em um dispositivo Android N.

+ + + + +

Obter o Android Studio 2.1 (preview)

+ +

A plataforma Android N adiciona suporte para os recursos de linguagem do Java 8, +que exigem um novo compilador chamado Jack. A versão mais recente do Jack +só é compatível com o Android Studio 2.1 no momento. Portanto, se quiser +usar os recursos de linguagem do Java 8, será preciso usar o Android Studio 2.1 para +compilar seu aplicativo. Caso contrário, não será preciso usar o Jack, mas ainda será +necessário atualizar para o JDK 8 para desenvolver para a plataforma Android N, +conforme é descrito abaixo. +

+ + + +

No momento, o Android Studio 2.1 está disponível como prévia no canal da versão canary +. Se já tiver +o Android Studio e não quiser atualizar para o canal canary, poderá +fazer o download do Android Studio 2.1 como uma instalação separada e usá-lo +para desenvolvimento com o Android N, não afetando o ambiente principal do Android Studio +.

+ +

Para fazer o download do Android Studio 2.1 como uma instalação separada, siga as etapas +abaixo (ou, se quiser receber o Android Studio 2.1 como uma atualização da sua +instalação existente, pule para a etapa 4):

+ +
    +
  1. Edite o nome da sua + instalação existente do Android Studio e altere o número da versão. Assim, + quando você instalar a nova versão, ela não substituirá a existente.
  2. +
  3. Faça o download do arquivo ZIP apropriado para seu sistema operacional na + página de downloads do canal canary. +
  4. +
  5. Descompacte o pacote e mova o conteúdo do Android Studio 2.1 para o + local apropriado para aplicativos no seu sistema. Em seguida, inicie-o.
  6. +
  7. Abra a caixa de diálogo Settings + (File > Settings no Windows/Linux ou + Android Studio > Preferences no Mac). No painel à + esquerda, selecione Appearance & Behavior > System Settings > + Updates. +
  8. +
  9. No painel Updates, marque a caixa de seleção Automatically + check updates for e selecione + Canary Channel na lista suspensa. +
  10. +
+ +

Mantenha essa janela aberta para a próxima etapa.

+ + +

Obter o N Preview SDK

+ +

Para começar a desenvolver com as APIs do Android N, instale o +Android N Preview SDK no Android Studio da seguinte maneira:

+ +
    +
  1. Ainda no painel Updates (etapa 4 dos procedimentos acima), + marque a caixa de seleção Automatically + check updates for Android SDK e selecione + Preview Channel na lista suspensa. +
  2. +
  3. Clique em Check Now.
  4. + +
  5. No painel à esquerda, selecione Appearance & Behavior > + System Settings > Android SDK. + +
  6. Clique na guia SDK Platforms e marque a caixa de seleção + Android N Preview.
  7. + +
  8. Clique na guia SDK Tools e marque as caixas de seleção + Android SDK Build Tools, Android SDK + Platform-Tools e Android SDK Tools +. +
  9. + +
  10. Clique em OK e aceite os termos de licença + de qualquer pacote que precise ser instalado. +
  11. +
+ +

Obter a documentação de referência do N Preview SDK

+ +

+ Informações detalhadas sobre as APIs do Android N são disponibilizadas na documentação de referência do N Preview +, que pode ser baixada pela tabela a seguir. + Este pacote contém uma versão off-line resumida do site de desenvolvedores do Android + e inclui uma referência atualizada para as APIs do Android N, além de um relatório + das diferenças entre as APIs. +

+ + + + + + + + + + +
DocumentaçãoChecksums
+ n-preview-1-docs.zip + MD5: 4ab33ccbe698f46f125cc5b807cf9c2f
+ SHA-1: 6a3880b3ccd19614daae5a4d0698ea6ae11c20a5 +
+ + + +

Obter o Java 8 JDK e JRE

+ +

Para compilar seu aplicativo para a plataforma Android N, você deve usar +o Java 8 Developer Kit (JDK 8) e, para usar algumas ferramentas com o Android +Studio 2.1, é preciso instalar o Java 8 Runtime Environment (JRE 8). Portanto, se +não tiver as versões mais recentes desses recursos, faça o download do JDK 8 e do JRE 8 +agora mesmo.

+ +

Em seguida, defina a versão do JDK no Android Studio da seguinte maneira:

+ +
    +
  1. Abra um projeto Android no Android Studio e, em seguida, abra a caixa de diálogo + Project Structure selecionando File > + Project Structure. (Como alternativa, é possível definir o padrão + para todos os projetos selecionando File > Other Settings > + Default Project Structure.) +
  2. +
  3. No painel à esquerda da caixa de diálogo, clique em SDK Location. +
  4. +
  5. No campo JDK Location, insira o local do + Java 8 JDK (clique no botão à direita + para procurar em seus arquivos) e clique em OK. +
  6. +
+ + + + +

Atualizar ou criar um projeto

+ +

+ Para usar as APIs do Android N, seu projeto deve ser configurado da maneira apropriada. +

+ +

Se planeja usar os recursos de linguagem do Java 8, consulte +Recursos de linguagem do Java 8 +para saber mais sobre os recursos do Java 8 com suporte e +como configurar seu projeto com o compilador Jack.

+ + +

Atualizar um projeto existente

+ +

Abra o arquivo + build.gradle de seu módulo e atualize os valores da seguinte + forma: +

+ +
+android {
+  compileSdkVersion 'android-N'
+  buildToolsVersion '24.0.0-rc1'
+  ...
+
+  defaultConfig {
+     minSdkVersion 'N'
+     targetSdkVersion 'N'
+     ...
+  }
+  ...
+}
+ + +

Criar um novo projeto

+ + +

Para criar um novo projeto para desenvolvimento com o Android N Preview SDK:

+ +
    +
  1. Clique em File > New Project e siga as etapas + até chegar na página Target Android Devices. +
  2. +
  3. Nela, selecione a opção Phone and Tablet.
  4. +
  5. Na opção Phone and Tablet, na lista Minimum + SDK, selecione + N: Android API 23, N Preview (Preview).
  6. +
+ + +

Próximas etapas

+ + + diff --git a/docs/html-intl/intl/ru/preview/api-overview.jd b/docs/html-intl/intl/ru/preview/api-overview.jd new file mode 100644 index 000000000000..d4e60427a98a --- /dev/null +++ b/docs/html-intl/intl/ru/preview/api-overview.jd @@ -0,0 +1,676 @@ +page.title=Android N для разработчиков +meta.tags="предварительная версия", "androidn" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-apis_2x.png +@jd:body + + + + + + + + +

Система Android N еще находится в активной стадии разработки, но ее уже можно опробовать в виде предварительной версии +N Developer Preview. В следующих разделах рассматриваются некоторые из + ее новых возможностей для разработчиков.

+ +

+ Обязательно изучите раздел Изменения в работе, в котором описаны +изменения платформы, способные повлиять на работу приложений, ознакомьтесь более подробно с основными возможностями +в руководствах для разработчиков и загрузите справочник по API с подробным описанием новых +API-интерфейсов. +

+ +

Поддержка многооконного режима

+ + +

В Android N представлена новая долгожданная функция многозадачности +– многооконный режим.

+ +

Теперь пользователи смогут открывать на экране два приложения одновременно.

+
    +
  • На телефонах и планшетах под управлением +Android N пользователи могут запустить два приложения рядом или друг над другом +в режиме разделенного экрана. Размеры окон приложений можно изменить с помощью +разделителя между ними.
  • + +
  • На устройствах Android TV для приложений будет доступен режим +"картинка в картинке", который позволит приложению отображать контент, пока пользователь просматривает другие приложения или +взаимодействует с ними. Более подробная информация приведена ниже.
  • +
+ +
+ +

+ Рис. 1. Приложения в режиме разделенного экрана. +

+
+ +

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

+ +

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

+ +

+ Дополнительная информация содержится в документе для разработчиков Поддержка многооконного режима. + +

+ +

Новые возможности уведомлений

+ +

В Android N изменен дизайн уведомлений, которые стали проще и удобнее. +Ниже приведены некоторые изменения.

+ +
    +
  • + Обновления шаблонов. В новых шаблонах уведомлений +сделан акцент на изображении и аватаре контакта. Разработчики смогут +использовать новые шаблоны с минимальными изменениями своего кода. +
  • + +
  • + Группы уведомлений. Система может группировать уведомления, +например по теме сообщений, и отображать группу. Пользователь может применять к группам +действия, например, закрывать их или архивировать. Если вы ранее выполняли реализацию +уведомлений для Android Wear, то вам уже должна быть знакома эта +модель. +
  • + +
  • + Непосредственный ответ в уведомлении. +Android теперь поддерживает функцию внутренних ответов в приложениях для общения в режиме реального времени. Это позволяет быстро ответить на +СМС или текстовое сообщение непосредственно в интерфейсе уведомления. +
  • + +
  • + Собственные представления. Два новых API-интерфейса позволяют применять системные элементы, +такие как заголовки и действия уведомлений, при использовании собственных представлений в +уведомлениях. +
  • +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +

+ Рис. 2. Группы уведомлений и непосредственный ответ. +

+ +

Способы реализации новых возможностей описаны в руководстве +Уведомления. +

+ + + +

Профильная динамическая/предварительная компиляция

+ +

В Android N добавлен динамический (JIT) компилятор с профилированием кода для среды +ART, который позволяет постоянно улучшать производительность приложений Android во время их работы. +JIT-компилятор дополняет текущий предварительный (AOT) компилятор ART +и помогает повысить производительность, сократить потребление памяти, а также ускорить обновления приложений и системы. +

+ +

Профильная компиляция позволяет ART управлять AOT/JIT-компиляцией каждого приложения +в соответствии с его фактическим использованием и характеристиками устройства. Например, +ART ведет профиль часто используемых методов каждого приложения, которые она может предварительно скомпилировать +и кэшировать для оптимальной производительности. Компиляция остальных частей приложения откладывается до того момента, +когда они действительно понадобятся.

+ +

Кроме повышения производительности основных частей приложения профильная +компиляция помогает сократить общее использование оперативной памяти приложением, в том числе связанными двоичными файлами. +Эта возможность особенно важна для устройств с небольшим объемом памяти.

+ +

ART управляет профильной компиляцией с минимальным потреблением заряда +аккумулятора. Предварительная компиляция выполняется только тогда, когда устройство неактивно +и находится на зарядке, поэтому заблаговременное выполнение этой работы экономит время и энергию.

+ +

Быстрый способ установки приложения

+ +

Одним из наиболее ощутимых преимуществ JIT-компилятора ART является скорость установки приложений +и обновлений системы. Даже большие приложения, требовавшие нескольких минут для своей оптимизации и установки на +Android 6.0 , теперь могут быть установлены за секунды. + Обновления системы также выполняются быстрее, поскольку стадия оптимизации теперь отсутствует.

+ +

Сон на ходу: режим Doze

+ +

В Android 6.0 был введен системный режим Doze для экономии заряда аккумулятора. В этом режиме +выполнение процессорных и сетевых операций приложений откладывается, когда устройство не используется и неподвижно – например, лежит на столе или в ящике. +

+ +

В Android N режим Doze сделал шаг вперед и экономит заряд аккумулятора на ходу. +Каждый раз, когда экран выключается на определенный промежуток времени и устройство не заряжается, +Doze применяет частичный набор знакомых ограничений процессорной и сетевой активности приложений. +Это означает, что пользователи могут экономить заряд аккумулятора, даже когда их устройство лежит в кармане. +

+ + + +

+ Рис. 3. Режим Doze теперь применяет +энергосберегающие ограничения, даже когда устройство находится в движении. +

+ + +

Вскоре после блокировки экрана, когда устройство питается от аккумулятора, режим Doze +ограничивает сетевой доступ и откладывает выполнение заданий и синхронизации. В течение коротких периодов пробуждения +для приложений открывается доступ к сети и разрешается выполнение отложенных +заданий и операций синхронизации. Включение экрана или подключение к источнику питания выводит +устройство из режима Doze.

+ +

Если устройство снова остается неподвижным в течение определенного периода времени (с погашенным экраном и питанием от аккумулятора), +Doze применяет полный набор процессорных и сетевых ограничений к {@link +android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} оповещениям и сканированию +GPS/Wi-Fi.

+ +

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

+ +

Проект Svelte: оптимизация фоновых процессов

+ +

Продолжено развитие проекта Svelte, нацеленного на сокращение использования оперативной памяти системой и приложениями +в различных устройствах экосистемы Android. В Android N проект +Svelte уделяет особое внимание оптимизации работы приложений в фоновом режиме.

+ +

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

+ +

Начиная с Android 5.0, предпочтительным и оптимальным для пользователей способом выполнения фоновых операций стало использование планировщика {@link android.app.job.JobScheduler}. +Приложения могут планировать свои задания, позволяя системе оптимизировать их на основе состояния памяти, +питания и сетевого соединения. Планировщик JobScheduler прост в использовании и обеспечивает необходимый контроль, +поэтому он рекомендуется для применения во всех приложениях. +

+ +

+ Другим хорошим вариантом является планировщик +GCMNetworkManager в составе служб Google Play, который +предлагает аналогичные возможности планирования заданий и совместимость с прежними версиями +Android. +

+ +

Мы продолжаем расширять область применения планировщиков JobScheduler и +GCMNetworkManager. +Например, в Android N теперь можно планировать фоновую обработку на основании +изменений поставщиков контента. В то же время мы начинаем исключать некоторые +устаревшие шаблоны, которые могут ухудшить производительность системы, +особенно на устройствах с малым объемом памяти.

+ +

В Android N удалены три часто используемые неявные рассылки — + {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link +android.hardware.Camera#ACTION_NEW_PICTURE} и {@link +android.hardware.Camera#ACTION_NEW_VIDEO}, — поскольку они могут пробудить +фоновые процессы сразу нескольких приложений, повысив потребление памяти и заряда аккумулятора. Если +ваше приложение получает эти рассылки, используйте преимущество N Developer Preview для миграции на +JobScheduler и связанные с ним API-интерфейсы.

+ +

+ Дополнительная информация содержится в документе Оптимизация +фоновых процессов. +

+ + +

Экономия трафика

+ +
+ + +

+ Рис. 4. Настройка экономии трафика. +

+
+ +

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

+ +

В Android N появился режим экономии трафика – новая системная служба, которая помогает сократить +использование сотового трафика приложениями в роуминге, в конце периода тарификации +или для небольших предоплаченных пакетов трафика. Режим экономии трафика дает пользователям возможность контроля использования сотового трафика приложениями +и позволяет разработчикам повысить эффективность работы служб. +

+ +

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

+ +

Android N расширяет применение класса {@link android.net.ConnectivityManager}, позволяя приложениям +выяснять пользовательские настройки +экономии трафика и отслеживать +изменения этих настроек. Все приложения должны проверять, был ли включен режим экономии трафика, +и пытаться ограничить использование трафика в фоновом и активном режимах.

+ + +

API панели быстрых настроек

+ + +
+ + +

+ Рис. 5. Плитки быстрых настроек в панели уведомлений. +

+ + +

Быстрые настройки являются простым и популярным способом доступа к основным настройкам и действиям +непосредственно из панели уведомлений. В Android N возможности быстрых настроек +были расширены – они стали еще более полезными и удобными.

+ +

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

+ +

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

+ +

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

+ +

+ После определения плитки можно показать пользователям, которые смогут добавить их на +панель быстрых настроек обычным перетаскиванием. +

+ +

+ Дополнительную информацию о создании плиток приложений можно найти в описании +android.service.quicksettings.Tile в загружаемом Справочнике по API. +

+ + + +

Блокировка номеров

+ +

Платформа Android N теперь поддерживает блокировку номеров и предоставляет +API-интерфейс платформы, который позволяет поставщикам услуг вести список блокируемых номеров. Этот список доступен для чтения и записи стандартным приложениям +для СМС, звонков и приложениям поставщика. +Для других приложений это список недоступен.

+ +

Сделав блокировку номеров стандартной функцией платформы, Android предоставляет приложениям +единообразный способ поддержки блокировки номеров на разных устройствах. +Приложения также получают следующие преимущества:

+ +
    +
  • Номера, блокируемые при вызовах, также блокируются в текстовых сообщениях. +
  • Заблокированные номера могут быть сохранены при переустановках и переносах на другие устройства с помощью функции резервного копирования и восстановления. + +
  • Разные приложения могут использовать один и тот же список блокируемых номеров. +
+ +

Кроме того, возможность интеграции приложения оператора мобильной сети в Android означает, что операторы могут +читать список блокируемых номеров на устройстве и выполнять блокировку для пользователя на своей стороне, +предотвращая доставку пользователю нежелательных вызовов и текстовых сообщений через какого-либо посредника, +например, через конечную точку VOIP или переадресацию звонков.

+ +

+ Дополнительную информацию можно найти в описании android.provider.BlockedNumberContract +в загружаемом Справочнике по API. + +

+ +

Фильтрация вызовов

+ +

+ Android N дает возможность стандартному приложению для звонков фильтровать входящие вызовы. Для этого +в приложении для звонков реализована новая служба CallScreeningService, +которая позволяет приложению выполнять ряд действий на основании +{@link android.telecom.Call.Details Call.Details} входящего вызова, например: +

+ +
    +
  • отклонить входящий вызов; +
  • не регистрировать вызов в журнале вызовов; +
  • не показывать пользователю уведомление о вызове. +
+ +

+ Дополнительную информацию можно найти в описании android.telecom.CallScreeningService +в загружаемом Справочнике по API. + +

+ + +

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

+ + +

Android N теперь позволяет пользователям выбрать несколько языковых настроек +для улучшенной поддержки случаев двуязычного применения. Приложения могут использовать +новый API для получения выбранных пользователем языковых настроек и затем предоставлять более сложные +интерфейсы для многоязычных пользователей, например: показывать результаты поиска +на нескольких языках; не предлагать перевод веб-страниц с того языка, который уже знаком пользователю. +

+ +

Вместе с поддержкой нескольких языковых настроек Android N также расширяет список доступных языков. +Для каждого распространенного +языка, такого как английский, испанский, французский и арабский, предлагается более 25 вариантов. Также добавлена частичная +поддержка более 100 новых языков.

+ +

Приложения могут получить список языковых настроек, установленных пользователем, вызвав метод LocaleList.GetDefault(). Для поддержки расширенного количества языковых настроек в Android N изменен способ +разрешения ресурсов. Вам следует обязательно проверить и убедиться в том, +что ваши приложения работают надлежащим образом с новой логикой разрешения ресурсов.

+ +

Дополнительная информация о новом способе разрешения ресурсов и соответствующие рекомендации содержатся +в документе Поддержка нескольких языков.

+ +

API-интерфейсы ICU4J в Android

+ +

+ Платформа Android N теперь предлагает частичный набор API-интерфейсов ICU4J в +пакете android.icu. Миграция выполняется легко и в основном заключается +в простом изменении пространства имен с com.java.icu на +android.icu. Если вы уже используете пакет ICU4J в своих приложениях, +переход на API-интерфейсы android.icu, предоставленные платформой Android, +может существенно сократить размер пакетов APK. +

+ +

+ Дополнительные сведения по Android ICU4J API содержатся в документе Поддержка ICU4J. +

+ + + +

API OpenGL™ ES 3.2

+ +

В платформу Android N добавлены интерфейсы и поддержка OpenGL ES 3.2, включая следующие возможности.

+ +
    +
  • Все расширения из Android Extension Pack (AEP) кроме EXT_texture_sRGB_decode. +
  • Кадровые буферы с плавающей запятой для HDR и отложенного затенения. +
  • Вызовы отрисовки BaseVertex для улучшения пакетной обработки и потоковой передачи данных. +
  • Эффективный контроль обращений к буферу для сокращения служебных операций WebGL. +
+ +

API-интерфейс платформы для OpenGL ES 3.2 в Android N предоставляется классом +GLES32. При использовании OpenGL ES 3.2 обязательно следует объявить требование +в файле манифеста с помощью тега <uses-feature> и атрибута +android:glEsVersion.

+ +

Для получения дополнительных сведений об использовании OpenGL ES, включая +определение версии, поддерживаемой устройством, см. Руководство по API OpenGL ES.

+ + +

Запись Android TV

+ +

В Android N добавлена возможность записи и воспроизведения контента из служб Android TV +через новые API-интерфейсы записи. Службы телевидения на основе существующих API +с временным сдвигом могут контролировать выбор данных телеканала для записи, сохранение +сеансов записи и управлять взаимодействием пользователя с записанным контентом.

+ +

Дополнительная информация содержится в документе API-интерфейсы записи Android TV.

+ + +

Android for Work

+ +

В Android for Work добавлены много новых возможностей и API-интерфейсов для устройств под управлением Android N. +Некоторые из них приведены ниже. Полный список обновлений Android for Work, касающихся +Android N, содержится в списке изменений Android for Work.

+ +

Пароль безопасности для рабочего профиля

+ +

+ Владельцы профиля могут установить отдельный пароль безопасности для приложений, запускаемых в рабочем профиле. +Когда пользователь пытается открыть любые рабочие +приложения, выводится запрос пароля. Успешный ввод пароля снимает блокировку рабочего профиля +и, при необходимости, дешифрует его. Владельцы профиля +могут отправить пользователю запрос ACTION_SET_NEW_PASSWORD, предлагающий установить рабочий пароль, + или запрос ACTION_SET_NEW_PARENT_PROFILE_PASSWORD, предлагающий установить пароль блокировки устройства. + +

+ +

+ Владельцы профиля могут устанавливать различные политики паролей для рабочей проверки безопасности +(например, длину PIN-кода, возможность использования отпечатка пальца +для разблокировки профиля) с помощью setPasswordQuality(), +setPasswordMinimumLength() и других связанных методов. Владелец +профиля может также установить блокировку устройства с помощью экземпляра DevicePolicyManager, +возвращаемого новым методом getParentProfileInstance(). +Кроме того, владельцы профиля могут настроить экран учетных данных для рабочей проверки безопасности +с помощью новых методов setOrganizationColor() и +setOrganizationName(). +

+

Выключение рабочего режима

+ +

Пользователи устройства с рабочим профилем могут переключать рабочий режим. Когда рабочий режим +выключен, управляемый им пользователь временно выходит из системы, что отключает приложения рабочего профиля, +фоновую синхронизацию и уведомления. Также отключается приложение владельца профиля. +При выключенном рабочем режиме система отображает постоянный значок состояния, +напоминая пользователю о том, что он не может запустить рабочие приложения. Средство запуска при этом указывает, +что рабочие приложения и виджеты недоступны.

+ +

Постоянное подключение к VPN

+ +

Владельцы устройства и профиля могут обеспечить постоянное подключение рабочих приложений через указанную сеть +VPN. Система автоматически подключается к этой VPN после загрузки устройства. +

+ +

+ Для этого в интерфейсе DevicePolicyManager используются новые методы +setAlwaysOnVpnPackage() и +getAlwaysOnVpnPackage(). +

+ +

Поскольку привязка служб VPN может быть выполнена непосредственно системой без взаимодействия с приложениями, +клиентам VPN требуется обрабатывать новые точки доступа для постоянного подключения к VPN. Как и раньше, +службы для системы указываются фильтром намерений, соответствующим действию +android.net.VpnService.

+ +

+ Пользователи могут вручную установить клиентов постоянного подключения к VPN, реализующих методы +VPNService, на экране настроек основного пользователя +Settings>More>Vpn. +

+ +

Расширение специальных возможностей

+ +

Android N теперь предлагает настройки Vision Settings непосредственно на экране приветствия при начальной установке нового устройства. +Это значительно упрощает пользователям обнаружение и настройку на своих устройствах +специальных возможностей, включая жесты увеличения, размер шрифта, размер экрана и +функцию TalkBack.

+ +

Благодаря более приметному расположению этих настроек пользователи +чаще будут пробовать ваше приложение с включенными специальными возможностями. Обязательно протестируйте ваше приложение с этими настройками, +включив их на экране Settings > +Accessibility.

+ +

Также в Android N предусмотрены службы специальных возможностей которые помогут пользователям с нарушениями двигательных функций +касаться экрана. Новый API позволяет встроить в службы такие +возможности, как отслеживание лица, отслеживание взгляда, сканирование точек и другой функционал, соответствующий потребностям +этих пользователей.

+ +

Дополнительную информацию можно найти в описании android.accessibilityservice.GestureDescription + в загружаемом Справочнике по API.

+ + +

Режим Direct Boot

+ +

Режим Direct Boot ускоряет загрузку устройства и позволяет зарегистрированным приложениям +сохранить ограниченную функциональность даже после непредвиденной перезагрузки. +Например, если зашифрованное устройство перезагрузится, когда пользователь спит, +уведомления о зарегистрированных предупреждениях, сообщениях и входящих вызовах будут поступать пользователю, как в обычном режиме. +Это также означает, что специальные возможности могут быть доступны сразу после перезагрузки. +

+ +

Режим Direct Boot использует преимущество шифрования на уровне файлов в Android N +для применения детализированных политик шифрования к данным системы и приложений. +Система использует хранилище, зашифрованное на уровне устройства, для выбранных системных данных и данных из явным образом зарегистрированных приложений. +По умолчанию для всех остальных системных данных, пользовательских данных, приложений и +данных приложений используется хранилище, зашифрованное на уровне учетной записи.

+ +

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

+ +Дополнительная информация приведена в документе Direct Boot.

+

+ + +

Аттестация ключей

+ +

Аппаратные хранилища ключей обеспечивают безопасный метод создания, хранения, +и использования криптографических ключей на устройствах Android. Они защищают ключи от +ядра Linux, потенциальных уязвимостей Android и извлечения из устройств +с корневым доступом.

+ +

Чтобы упростить и повысить безопасность использования аппаратных хранилищ ключей +в Android N введена возможность аттестации ключей. Приложения и внешние хранилища ключей могут использовать аттестацию, +чтобы определить, является ли пара ключей RSA или EC +аппаратной, какие свойства имеет эта пара ключей и какие ограничения применяются +к ее использованию и сроку действия.

+ +

Приложения и службы внешних хранилищ могут запросить информацию о паре ключей +через сертификат аттестации X.509, который должен быть подписан действительным ключом +аттестации. Ключ аттестации представляет собой ключ подписи ECDSA, который +встраивается в аппаратное хранилище ключей устройства при его изготовлении на заводе. +Поэтому сертификат аттестации, подписанный действительным ключом аттестации, +подтверждает существование аппаратного хранилища ключей вместе со сведениями о парах ключей в таком хранилище. +

+ +

Чтобы убедиться в том, что устройство использует безопасный официальный заводской образ Android, +для аттестации ключей требуется предоставление загрузчиком устройства +следующей информации о доверенной +среде выполнения (TEE):

+ + + +

Дополнительная информация об аппаратном хранилище ключей содержится +в соответствующем руководстве.

+ +

В дополнение к аттестации ключей в Android N также добавлены ключи, +привязанные к отпечаткам пальцев, которые не отменяются при регистрации новых отпечатков.

+ +

Конфигурация сетевой безопасности

+ +

В Android N приложения могут безопасно настраивать поведение своих защищенных (HTTPS, TLS) +подключений, без каких-либо изменений кода, используя декларативную +конфигурацию сетевой безопасности вместо обычных ненадежных +программных API-интерфейсов (например, X509TrustManager).

+ +

Поддерживаемые возможности:

+
    +
  • Пользовательские якоря доверия. Позволяют приложению определить доверенные +центры сертификации (ЦС) для его защищенных соединений. Например, +приложение может доверять определенным самозаверенным сертификатам или ограниченному набору общих ЦС. +
  • +
  • Замена при отладке. Позволяет разработчику безопасно отладить +защищенные соединения своего приложения без дополнительного риска для установленной базы. + +
  • +
  • Отказ от передачи данных открытым текстом. Позволяет приложению защитить себя от +случайной передачи данных открытым текстом.
  • +
  • Прикрепление сертификатов. Дополнительная возможность, позволяющая приложению +ограничить доверенные ключи сервера для защищенных соединений.
  • +
+ +

Дополнительная информация содержится в документе Конфигурация сетевой безопасности. +

+ +

Доверенный центр сертификации по умолчанию

+ +

По умолчанию приложения для Android N могут доверять только системным сертификатам +и не доверяют ЦС, добавленным пользователем. Если приложению для Android N +требуется доверять пользовательским ЦС, ему следует указать в +конфигурации сетевой безопасности эти доверенные пользовательские ЦС. +

+ +

Схема получения подписи APK, версия 2

+ +

Класс PackageManager теперь поддерживает подтверждение приложений с использованием схемы подписи APK +версии 2. Вторая версия схемы подписи APK применяется ко всему файлу, +что существенно ускоряет подтверждение и повышает надежность, позволяя обнаруживать любые несанкционированные изменения файлов APK. +

+ +

Для поддержки обратной совместимости пакет APK должен быть подписан с помощью первой версии схемы +(схема подписи JAR) до того, как он будет подписан по схеме версии 2. +Подпись по схеме версии 2 не пройдет подтверждение, если APK будет подписан дополнительным сертификатом +после добавления подписи по схеме версии 2.

+ +

Поддержка подписи APK по схеме версии 2 будет доступна в последующих выпусках N Developer +Preview.

+ +

Доступ к выделенным каталогам

+ +

В Android N приложения могут использовать новые API-интерфейсы для запроса доступа к конкретным каталогам внешнего хранилища, +включая каталоги на съемных носителях, таких как SD-карты. +Новые API-интерфейсы значительно упрощают доступ к стандартным каталогам +внешнего хранилища, таким как Pictures. Например, приложения, работающие с фотографиями, +могут использовать эти API-интерфейсы вместо +READ_EXTERNAL_STORAGE, который разрешает доступ ко всем каталогам +хранилища или платформы Storage Access Framework, благодаря чему выполняется переход к указанному каталогу. +

+ +

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

+ +

Дополнительная информация содержится в документации для разработчиков +Доступ к выделенным каталогам. +

+ + + + + + diff --git a/docs/html-intl/intl/ru/preview/behavior-changes.jd b/docs/html-intl/intl/ru/preview/behavior-changes.jd new file mode 100644 index 000000000000..a04866073c55 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/behavior-changes.jd @@ -0,0 +1,480 @@ +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 нацелены на более экономное использование заряда аккумулятора +и оперативной памяти, а также на повышение производительности приложений. Эти изменения могут повлиять +на системные уведомления и доступность системных ресурсов для вашего приложения. Вам следует +ознакомиться с этими изменениями и оценить, какие исправления могут понадобиться вашему приложению для соответствия этим изменениям. + +

+ +

Режим Doze

+ +

+ Появившийся в Android 6.0 (уровень API 23), режим Doze экономит заряд аккумулятора, +откладывая процессорные и сетевые операции, когда устройство находится не на зарядке, +оно неподвижно, и его экран погашен. Android N расширяет возможности +режима Doze, применяя частичный набор процессорных и сетевых ограничений +в тех случаях, когда устройство находится не на зарядке, с погашенным экраном, но не обязательно неподвижно, +например, когда оно находится в кармане пользователя. +

+ + + +

+ Рис. 1. Иллюстрация применения первого уровня ограничений активности системы в режиме Doze +для экономии заряда аккумулятора. +

+ +

+ Когда устройство питается от аккумулятора и его экран отключен в течение некоторого промежутка времени, +устройство переходит в режим Doze и применяет первый частичный набор ограничений: закрывается доступ приложений +к сети, откладывается выполнение заданий и синхронизации. Если устройство +остается неподвижным в течение определенного времени после перехода в режим Doze, система применяет +остальные ограничения Doze для {@link android.os.PowerManager.WakeLock}, +оповещений {@link android.app.AlarmManager}, сканирования GPS и Wi-Fi. Независимо от того, были применены +все или только некоторые ограничения режима Doze, устройство периодически пробуждается на короткий промежуток времени, +в течение которого приложениям разрешается сетевой доступ +и выполнение отложенных заданий или синхронизации. +

+ + + +

+ Рис. 2. Иллюстрация применения второго уровня ограничений активности системы в режиме Doze +после того, как устройство неподвижно в течение определенного времени. +

+ +

+ Следует отметить, что включение экрана или подключение к источнику питания приводит +к выходу устройства из режима Doze и +снимает эти ограничения обработки. Эти дополнительные особенности поведения +не влияют на советы и рекомендации по адаптации приложений к предыдущей +версии режима Doze из Android 6.0 (уровень API 23), которые были рассмотрены в документе +Оптимизация для режима Doze и режима ожидания для приложений. +Вы должны следовать этим рекомендациям (например, использовать Google Cloud Messaging (GCM) +для отправки и получения сообщений) и приступить к планированию обновлений для соответствия дополнительному поведению режима +Doze. +

+ + +

Проект Svelte: оптимизация фоновых процессов

+ +

+ В 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 N не получают широковещательные рассылки {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION}, даже если в их манифесте +указаны требования получения уведомлений об этих событиях. Приложения в активном режиме +могут следить за событиями {@code CONNECTIVITY_CHANGE} в своем +основном потоке, если они запрашивают уведомление через {@link + android.content.BroadcastReceiver}. +
  • + +
  • Приложения не могут отправлять или получать широковещательные рассылки {@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 внесены изменения разрешений, которые могут повлиять на ваше приложение, +включая разрешения учетных записей пользователей и новое разрешение на запись +во внешнем хранилище. Ниже приводится краткое описание разрешений, измененных в +предварительной версии. +

+ +
    +
  • {@code GET_ACCOUNTS} (устарело) +

    + Разрешение GET_ACCOUNTS теперь считается устаревшим. Система игнорирует это разрешение +для приложений, разработанных для Android N. +

    +
  • + +
+ + + +

Улучшенные специальные возможности

+ +

+ В Android N внесены изменения, которые должны сделать платформу более удобной для пользователей +со слабым или нарушенным зрением. Эти изменения в целом +не требуют исправления кода вашего приложения, однако вам следует проверить их +и протестировать на своем приложении, чтобы оценить их возможное влияние на интерфейс +пользователя. +

+ + +

Масштабирование экрана

+ +

+ Android N позволяет пользователям установить параметр Display size, который увеличивает или уменьшает +все элементы на экране, делая таким образом устройство более удобным +для пользователей со слабым зрением. Пользователи не могут масштабировать экран до ширины менее + sw320dp (ширина экрана Nexus 4, обычного телефона среднего размера). + +

+ +
+ +
+ +
+
+ +
+ +
+

+ Рис. 3. На экране справа показан эффект +увеличения параметра Display size на устройстве под управлением Android N. +

+ + +

+ При изменении плотности экрана устройства система уведомляет запущенные приложения следующим способами. + +

+ +
    +
  • Если приложение предназначено для API уровня 23 или ниже, система автоматически завершает +все его фоновые процессы. Это означает, что если пользователь переходит из такого приложения +на экран Settings и изменяет параметр +Display size, то система завершает работу приложения таким же образом, +как в случае нехватки памяти. Если у приложения имеются процессы, работающие в активном режиме, +система уведомляет эти процессы об изменении конфигурации согласно описанию в документе +Обработка изменений +в режиме выполнения, как в случае изменения ориентации устройства. +
  • + +
  • Если приложение разработано для Android N, все его процессы +(активные и фоновые) уведомляются об изменении конфигурации, как это описано в документе +Обработка изменений в режиме выполнения. + +
  • +
+ +

+ Большинству приложений не требуются какие-либо изменения для поддержки этой возможности при условии, +что эти приложения соответствуют рекомендациям по разработке для Android. Необходимо проверить следующие моменты. +

+ +
    +
  • Протестируйте свое приложение на устройстве с шириной экрана sw320dp +и убедитесь в его корректной работе. +
  • + +
  • При изменении конфигурации устройства обновите в кэше все данные, зависящие от плотности экрана, +такие как кэшированные растровые изображения или ресурсы, загруженные из сети. +Проверьте изменения конфигурации, когда приложение возобновляет свою работу после паузы. + +

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

    +
  • + +
  • Избегайте указания абсолютных размеров в пикселях, поскольку они не масштабируются вместе с изменением плотности экрана. +Вместо этого указывайте размеры в независимых от плотности пикселях (dp). + +
  • +
+ +

Vision Settings в мастере настройки

+ +

+ В Android N появились настройки Vision Settings на экране приветствия, где пользователи могут установить +следующие параметры специальных возможностей на новом устройстве: +Magnification gesture, Font size, +Display size и TalkBack. В результате этого изменения +становятся более заметными ошибки, связанные с различными настройками экрана. Чтобы +оценить влияние этой функции, следует протестировать свое приложение, включив эти настройки +на экране Settings > +Accessibility. +

+ +

Связь приложений NDK с библиотеками платформы

+ +

+ В 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 ...
+
+ + +

+ Ниже приведены некоторые стандартные способы устранения подобных ошибок в приложениях. +

+ +
    +
  • Использование getJavaVM и getJNIEnv из libandroid_runtime.so может быть заменено +стандартными функциями JNI: +
    +AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
    +AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
    +JavaVM::AttachCurrentThread from <jni.h>.
    +
    +
  • + +
  • Использование символа {@code property_get} из {@code libcutils.so} может быть +заменено открытой альтернативой {@code __system_property_get}. +Для этого используйте {@code __system_property_get} со следующим включением include: +
    +#include <sys/system_properties.h>
    +
    +
  • + +
  • Использование символа {@code SSL_ctrl} из {@code libcrypto.so} должно быть заменено локальной версией. +Например, вы должны статически связать +{@code libcyrpto.a} в своем файле {@code .so} или динамически включить в свое приложение собственную библиотеку +{@code libcrypto.so} из BoringSSL или OpenSSL. +
  • +
+ +

Android for Work

+

+ Android N содержит изменения для приложений, предназначенных для Android for Work, включая изменения установки сертификата, +сброса пароля, управления вторичным пользователем, +и доступа к идентификаторам устройства. Если вы создаете приложение для среды +Android for Work, вам следует ознакомиться с этими изменениями и откорректировать +приложение соответствующим образом. +

+ +
    +
  • Вы должны установить делегированный установщик сертификатов, прежде чем DPC сможет его настроить. + Для приложений владельца профиля и устройства, разработанных под N SDK, необходимо установить + делегированный установщик сертификатов, прежде чем контроллер политик устройства +(DPC) вызовет метод +DevicePolicyManager.setCertInstallerPackage(). В случае отсутствия установщика +система выдаст ошибку +IllegalArgumentException. +
  • + +
  • Ограничения сброса пароля для администраторов устройства теперь применяются для владельцев +профиля. Администраторы устройства более не могут использовать +DevicePolicyManager.resetPassword() для сброса или изменения +установленных паролей. Администраторы по-прежнему могут установить пароль, но только тогда, когда для устройства не установлен +пароль, PIN-код или графический шаблон. +
  • + +
  • Владельцы устройства и профиля могут управлять учетными записями даже при наличии ограничений. +Они могут вызывать API-интерфейсы управления учетными записями +даже при установленных ограничениях пользователя DISALLOW_MODIFY_ACCOUNTS. +
  • + +
  • Владельцам устройства стало проще управлять дополнительными пользователями. Когда устройство +находится в режиме владельца устройства, автоматически включается ограничение DISALLOW_ADD_USER. +Это предотвращает создание неуправляемых дополнительных пользователей. +Кроме того, прекращено использование методов CreateUser() и +createAndInitial(), которые заменены новым методом +DevicePolicyManager.createAndManageUser(). +
  • + +
  • Владельцы устройства получили доступ к идентификаторам устройства. Владелец устройства может получить MAC-адрес +Wi-Fi для устройства, используя метод +DevicePolicyManagewr.getWifiMacAddress(). Если интерфейс Wi-Fi никогда не включался +на устройстве, этот метод возвращает значение {@code null}. +
  • +
+ +

+ Дополнительная информация об изменениях Android for Work в Android N содержится в документе +Обновления Android for Work. +

+ +

Другие важные моменты

+ +
    +
  • Процесс приложения, запущенного под Android N, но разработанного для API более низкого уровня, +завершается, если пользователь изменяет размер экрана. Приложение +должно корректно обработать такой сценарий. В противном случае оно завершится с ошибкой, если пользователь +запустит его с экрана последних задач. + +

    +Вы должны протестировать свое приложение и убедиться, +что оно не будет работать подобным образом. +Для этого можно вызвать аналогичную ошибку, +принудительно завершив процесс приложения через DDMS. +

    + +

    +Приложения для N и последующих версий Android не завершаются автоматически при изменении плотности экрана, +однако они могут плохо реагировать на изменения конфигурации. +

    +
  • + +
  • +Приложения для Android N должны уметь корректно обрабатывать изменения конфигурации +и не должны завершаться с ошибкой при последующих запусках. Вы можете проверить поведение приложения, +изменив размер шрифта (Setting > +Display > Font size) и перезапустив затем приложение +с экрана последних задач. +
  • +
+ diff --git a/docs/html-intl/intl/ru/preview/download.jd b/docs/html-intl/intl/ru/preview/download.jd new file mode 100644 index 000000000000..b286cad7a7a9 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/download.jd @@ -0,0 +1,541 @@ +page.title=Тестирование на устройстве +meta.tags="предварительная версия", "nexus","образ системы" +page.tags="preview", "androidn" +page.image=images/cards/card-n-downloads_2x.png + +@jd:body + +
+ + + + +
+ + + +

+ Для запуска и тестирования приложения на новой платформе необходимо настроить среду выполнения Android N +. Это можно выполнить одним из следующих способов: +

+ +
    +
  • установить Android N на поддерживаемом устройстве;
  • +
  • настроить эмулятор Android с операционной системой Android N.
  • +
+ +

+ Если вы хотите выполнить просто тестирование совместимости приложения и +новой платформы, вам нужен только текущий APK и устройство или +эмулятор. Для простого тестирования не требуется обновлять всю среду +разработки. +

+ +

+ Если вы хотите изменить приложение, сделав Android N целевой ОС, или использовать новые API-интерфейсы Android N, +необходимо настроить среду разработки, которая поддерживает +Android N. Настройка в целях разработки для +Android N имеет ряд особенностей. +

+ + +

Настройка устройства

+ +

+ Программа N Developer Preview предлагает системные обновления, +которые можно использовать для тестирования приложений на различных устройствах: от телефонов до планшетов и телевизоров. +

+ +

+ Если у вас есть поддерживаемое устройство, вы сможете обновить его до ключевой сборки Developer +Preview одним из следующих способов. +

+ +
    +
  • Зарегистрируйте устройство для получения автоматических обновлений системы по беспроводной связи в рамках +программы бета-тестирования Android. После регистрации ваше устройство будет регулярно получать +по беспроводной связи обновления всех ключевых сборок в N Developer Preview. Такой +способ рекомендуется потому, что он обеспечивает простой переход с текущей +среды с помощью различных выпусков N Developer Preview.
  • +
  • Загрузите системный образ Developer Preview и запишите его во флэш-память устройства. +Обновления по беспроводной связи не предоставляются для устройств, запись во флэш-память которых выполнялась вручную, но такие +устройства можно зарегистрировать в программе бета-тестирования Android для получения обновлений по беспроводной связи.
  • +
+ +

Регистрация устройства для получения автоматических обновлений по беспроводной связи

+ +

+ Если у вас есть поддерживаемое устройство (см. список в таблице "Загрузки"), +вы можете получать обновления предварительных версий Android по беспроводной связи, +зарегистрировав устройство в программе бета-тестирования Android. Эти обновления автоматически +загружаются и устанавливаются на устройство как официальные +системные обновления. +

+ +

+ Отменить регистрацию устройства можно в любое время. Устройство будет по беспроводной связи получать последнюю +версию Android, доступную для него +(например, Android 6.0 Marshmallow). Для обновления потребуется полный сброс +настроек устройства в целях удаления с устройства всех данных пользователя. Перед отменой регистрации устройства выполните резервное копирование +наиболее важных данных. +

+ +

+ Для получения дополнительной информации по регистрации устройства см. +веб-сайт программы бета-тестирование Android. +

+ +

Примечание. +Для отмены регистрации требуется полный сброс настроек устройства. Выполните +резервное копирование наиболее важных данных. +

+ +

Запись во флэш-память устройства вручную

+ +

+ В любое время вы можете загрузить последний системный образ Developer Preview и +вручную записать его во флэш-память устройства. См. информацию в следующей таблице, чтобы загрузить системный образ +для своего тестового устройства. Запись вручную во флэш-память устройства удобна, если требуется +точное управление средой тестирования или частая переустановка, +например при автоматическом тестировании. +

+ +

+ При установке системного образа с устройства будут удалены все +данные, поэтому сначала необходимо выполнить резервное копирование данных. +

+ +

+ После резервного копирования данных устройства и загрузки системного образа, + соответствующего этому устройству, выполните инструкции, которые приведены по адресу developers.google.com/android, +чтобы записать этот образ во флэш-память устройства. +

+ +

+ Записанные вручную системные образы не +получают автоматические обновления ключевых сборок Developer Preview +по беспроводной связи. Регулярно обновляйте свою среду и выполняйте запись +нового системного образа во флэш-память устройства при каждом выпуске ключевой сборки Developer Preview. +

+ +

+ Если вы захотите получить обновления по беспроводной связи после записи на устройство вручную, +вам нужно просто зарегистрировать устройство в программе +бета-тестировании Android. Вы можете зарегистрировать устройство в любое время для получения следующего обновления предварительной версии +по беспроводной связи. +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
УстройствоФайлы для загрузки и контрольные суммы
Nexus 5X
"bullhead"
bullhead-npc56p-preview-6c877a3d.tgz
+ MD5: b5cf874021023b398f5b983b24913f5d
+ SHA-1: 6c877a3d9fae7ec8a1678448e325b77b7a7b143a +
Nexus 6
"shamu"
shamu-npc56p-preview-54b13c67.tgz
+ MD5: af183638cf34e0eb944a1957d7696f60
+ SHA-1: 54b13c6703d369cc79a8fd8728fe4103c6343973 +
Nexus 6P
"angler"
angler-npc56p-preview-85ffc1b1.tgz
+ MD5: bc4934ea7bd325753eee1606d3725a24
+ SHA-1: 85ffc1b1be402b1b96f9ba10929e86bba6c6c588 +
Nexus 9
"volantis"
volantis-npc56p-preview-0e8ec8ef.tgz
+ MD5: c901334c6158351e945f188167ae56f4
+ SHA-1: 0e8ec8ef98c7a8d4f58d15f90afc5176303efca4 +
Nexus 9G
"volantisg"
volantisg-npc56p-preview-1bafdbfb.tgz
+ MD5: 7bb95bebc478d7257cccb4652899d1b4
+ SHA-1: 1bafdbfb502e979a9fe4c257a379c4c7af8a3ae6 +
Nexus Player
"fugu"
fugu-npc56r-preview-7027d5b6.tgz
+ MD5: f5d3d8f75836ccfe4c70e8162e498be4
+ SHA-1: 7027d5b662bceda4c80a91a0a14ef0e5a7ba795b +
Pixel C
"ryu"
ryu-npc56p-preview-335a86a4.tgz
+ MD5: 4e21fb183bbbf467bee91598d587fd2e
+ SHA-1: 335a86a435ee51f18464de343ad2e071c38f0e92 +
General Mobile 4G (Android One)
"seed"
seed_l8150-npc56p-preview-82472ebc.tgz
+ MD5: 983e083bc7cd0c4a2d39d6ebaa20202a
+ SHA-1: 82472ebc9a6054a103f53cb400a1351913c95127 +
+ +

Удаление предварительной версии с устройства

+ +

+ Удаление предварительной версии с устройства можно выполнить одним из +следующих способов.

+
    +
  • Получить заводской образ системы и вручную +записать его во флэш-память устройства. +
      +
    • При использовании устройств Nexus и Pixel C ссылки для загрузки см. на странице +Заводские образы +для устройств Nexus.
    • +
    • Для других устройств обратитесь напрямую к производителю устройства. + Если устройство поддерживается +программой бета-тестирования Android, вы можете зарегистрировать его для +участия в программе, а затем, если потребуется, отменить регистрацию (см. ниже).
    • +
    +
  • +
  • Отмена регистрации устройства в программе бета-тестировании Android. Если +устройство зарегистрировано в программе бета-тестировании +Android, можно в любое время отменить регистрацию независимо от типа устройства. +

    + Устройство будет получать по беспроводной связи последнюю версию +Android, доступную для устройства (например, Android 6.0 Marshmallow). + Для обновления требуется полный сброс настроек устройства в целях удаления с устройства +всех данных пользователя. Поэтому перед отменой регистрации устройства выполните резервное копирование наиболее важных данных. + +

    +
  • +
+ +

Примечание. +Удаление системного образа Developer Preview до +завершения программы требует полного сброса настроек устройства и приводит к удалению всех данных пользователя +на этом устройстве. +

+ + +

Настройка эмулятора

+ +

Чтобы использовать эмулятор Android для запуска Android N Preview, необходимо +загрузить Android N Preview SDK и создать виртуальное устройство для +эмулятора.

+ +

Сначала загрузите Android N Preview SDK, сделав это следующим образом (если вы получили его +во время настройки +в целях разработки для Android N, этот шаг можно пропустить). + +

    +
  1. В Android Studio откройте окно "Settings" +(File > Settings в Windows/Linux или +Android Studio > Preferences для Mac). В левой +панели выберите Appearance & Behavior > +System Settings > Android SDK. + +
  2. Перейдите на вкладку SDK Platforms и установите флажок +Android N Preview.
  3. + +
  4. Откройте вкладку SDK Tools и затем установите флажки +Android SDK Build Tools, Android SDK +Platform-Tools, Android SDK Tools. + +
  5. + +
  6. Нажмите OK и примите лицензионные +соглашения для всех устанавливаемых пакетов. +
  7. +
+ +

У вас должны быть пакеты Android SDK Built-Tools 24.0 0 rc1, +Platform-Tools 24.0.0 rc1 и SDK Tools +25.0.9. Если вы не обновите SDK Tools до версии 25.0.9, вы не сможете +запустить системный образ x86_64 для Android N.

+ + +

Теперь необходимо создать виртуальное устройство с системным образом Android N.

+ +
    +
  1. Откройте AVD Manager, выбрав Tools > Android > +AVD Manager.
  2. +
  3. Нажмите Create Virtual Device.
  4. +
  5. Выберите устройство, например: Nexus 5X, Nexus 6P, Nexus 9 или Android TV, +затем нажмите Next.
  6. +
  7. Выберите системный образ N (с +x86 ABI), затем нажмите Next. +(Эмулятором Android в настоящий момент поддерживаются только системные образы x86 +для Android N Preview.) +
  8. Выполните остальные настройки конфигурации AVD и нажмите +Finish.
  9. +
+ +

Теперь можно запустить эмулятор Android с Android N Preview AVD.

+ +

+Для обеспечения эффективной работы эмулятора Android установите +Android Studio 2.1 Preview с поддержкой Android Emulator 2.0 Beta, +который обеспечивает более высокую производительность по сравнению с эмулятором в +Android Studio 1.5.

+ +

Примечание. +Если вы используете Android Studio 2.0 Beta, в нем есть известная неисправность, +которая не позволяет создавать AVD с системными образами N Preview, поэтому вам потребуется +использовать Android Studio 2.1 Preview для создания AVD. +

+ +

Для получения дополнительной информации о создании виртуальных устройств см. страницу Управление виртуальными устройствами. +

+ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html-intl/intl/ru/preview/features/background-optimization.jd b/docs/html-intl/intl/ru/preview/features/background-optimization.jd new file mode 100644 index 000000000000..a222343ed190 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/features/background-optimization.jd @@ -0,0 +1,388 @@ +page.title=Оптимизация фоновых процессов +page.metaDescription=Новые ограничения для неявных широковещательных сообщений. +page.keywords="android N", "implicit broadcasts", "job scheduler" +@jd:body + + + +

+ Фоновые процессы могут потреблять много памяти и заряда аккумулятора. Например, +неявное широковещательное сообщение может запускать множество фоновых процессов, +которые его прослушивают, даже если они сами не выполняют полезной работы. Это +может значительно снизить производительность устройства и быстродействие пользовательского интерфейса. +

+ +

+ Чтобы устранить подобные проблемы, в N Developer Preview применяются следующие +ограничения. +

+ +
    +
  • Приложения для версии Preview не получают рассылок {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION}, если они +зарегистрированы для их получения в манифесте. Приложения в активном режиме +по-прежнему могут прослушивать {@code CONNECTIVITY_CHANGE} в главном потоке, +зарегистрировав {@link android.content.BroadcastReceiver} с помощью метода {@link +android.content.Context#registerReceiver Context.registerReceiver()}. +
  • + +
  • Приложения не могут отправлять или получать широковещательные сообщения {@link + android.hardware.Camera#ACTION_NEW_PICTURE} и {@link + android.hardware.Camera#ACTION_NEW_VIDEO}. Эта оптимизация +затрагивает все приложения, а не только предназначенные для версии Preview. +
  • +
+ +

+ Платформа Android предоставляет несколько решений, позволяющих отказаться +от таких неявных рассылок. Например, в {@link android.app.job.JobScheduler} +и +{@code GcmNetworkManager} реализованы надежные механизмы для планирования сетевых +операций, которые запускаются при выполнении определенных условий, таких как наличие безлимитной +сети. Теперь вы также можете использовать {@link android.app.job.JobScheduler} +, чтобы реагировать на изменения поставщиков контента. В объектах {@link android.app.job.JobInfo} +инкапсулированы параметры, которые {@link android.app.job.JobScheduler} +использует для планирования заданий. Если условия задания выполнены, система +выполняет его через {@link android.app.job.JobService} вашего приложения. +

+ +

+ Здесь мы рассмотрим, как использовать альтернативные методы, такие как +{@link android.app.job.JobScheduler}, для адаптации приложения к новым +ограничениям. +

+ +

+ Ограничения для CONNECTIVITY_ACTION +

+ +

+ Приложения для N Developer Preview не получают широковещательные сообщения {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION}, если они +зарегистрированы для их получения в своем манифесте. При этом процессы, которые зависят от этого +широковещательного сообщения, не запускаются. Это может вызвать проблемы для приложений, которым необходимо +прослушивать изменения сети или выполнять +массовые сетевые операции, когда устройство подключается к безлимитной сети. Платформа Android уже предоставляет ряд способов обойти +это ограничение, но выбор нужного метода +зависит от того, чего вы хотите добиться от приложения. +

+ +

+ Примечание. Объект {@link android.content.BroadcastReceiver}, зарегистрированный с помощью метода +{@link android.content.Context#registerReceiver Context.registerReceiver()}, +продолжает получать такие рассылки, если приложение работает в активном режиме. +

+ +

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

+ +

+ При использовании класса {@link android.app.job.JobInfo.Builder JobInfo.Builder} для создания +объекта {@link android.app.job.JobInfo} примените метод {@link + android.app.job.JobInfo.Builder#setRequiredNetworkType + setRequiredNetworkType()} и передайте {@link android.app.job.JobInfo + JobInfo.NETWORK_TYPE_UNMETERED} в качестве параметра задания. В следующем примере кода +служба запускается, если устройство подключается к безлимитной +сети и заряжается: +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+      (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo job = new JobInfo.Builder(
+    MY_BACKGROUND_JOB,
+    new ComponentName(context, MyJobService.class))
+      .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
+      .setRequiresCharging(true)
+      .build();
+  js.schedule(job);
+}
+
+ +

+ Если условия задания выполнены, приложение получает обратный вызов для запуска +метода {@link android.app.job.JobService#onStartJob onStartJob()} в указанном +классе {@code JobService.class}. Другие примеры реализации {@link + android.app.job.JobScheduler} см. в примере приложения JobScheduler. +

+ +

+ В приложениях, использующих службы GMSCore и предназначенных для Android 5.0 (уровень API 21) +или предыдущих версий, можно воспользоваться + {@code GcmNetworkManager} и указать {@code Task.NETWORK_STATE_UNMETERED}. +

+ +

+ Отслеживание сетевого подключения во время работы приложения +

+ +

+ Приложения в активном режиме по-прежнему могут прослушивать {@code + CONNECTIVITY_CHANGE} с помощью зарегистрированного объекта {@link + android.content.BroadcastReceiver}. Однако в API-интерфейсе {@link + android.net.ConnectivityManager} есть более надежный метод для запроса +обратного вызова только при выполнении указанных сетевых условий. +

+ +

+ В объектах {@link android.net.NetworkRequest} параметры +сетевого обратного вызова задаются с помощью {@link android.net.NetworkCapabilities}. Объекты {@link android.net.NetworkRequest} создаются +с использованием класса {@link + android.net.NetworkRequest.Builder NetworkRequest.Builder}. Затем метод {@link + android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, + android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} + передает объект {@link android.net.NetworkRequest} системе. Если +сетевые условия выполнены, приложение получает обратный вызов для выполнения метода + {@link android.net.ConnectivityManager.NetworkCallback#onAvailable + onAvailable()}, определенного в своем классе {@link + android.net.ConnectivityManager.NetworkCallback}. +

+ +

+ Приложение продолжает получать обратные вызовы, пока оно не будет закрыто или не будет вызван метод + {@link android.net.ConnectivityManager#unregisterNetworkCallback + unregisterNetworkCallback()}. +

+ +

+ Ограничения для NEW_PICTURE и NEW_VIDEO +

+ +

+ В N Developer Preview приложения не могут отправлять или получать широковещательные сообщения {@link + android.hardware.Camera#ACTION_NEW_PICTURE} и {@link + android.hardware.Camera#ACTION_NEW_VIDEO}. Это ограничение + позволяет улучшить производительность, если для обработки нового изображения или видео должны + активироваться несколько приложений. N Developer Preview + расширяет классы {@link android.app.job.JobInfo} и {@link + android.app.job.JobParameters}, что дает разработчикам альтернативное решение. +

+ +

+ Новые методы JobInfo +

+ +

+ Для активации заданий при изменении URI контента в N Developer Preview + были добавлены следующие методы для API-интерфейса {@link android.app.job.JobInfo}. +

+ +
+
+ {@code JobInfo.TriggerContentUri()} +
+ +
+ Инкапсулирует параметры, необходимые для активации задания при изменении URI контента. +
+ +
+ {@code JobInfo.Builder.addTriggerContentUri()} +
+ +
+ Передает объект {@code TriggerContentUri} в контейнер {@link + android.app.job.JobInfo}. Объект {@link android.database.ContentObserver} + отслеживает инкапсулированный URI контента. Если с заданием связано несколько объектов {@code + TriggerContentUri}, система предоставляет + обратный вызов, даже если изменился только один из URI контента. +
+ +
+ Добавьте флаг {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS}, чтобы + активировать задание при изменении любых потомков указанного URI. Этот флаг + соответствует параметру {@code notifyForDescendants}, переданному методу {@link + android.content.ContentResolver#registerContentObserver + registerContentObserver()}. +
+
+ +

+ Примечание. Метод {@code TriggerContentUri()} не может использоваться + вместе с {@link android.app.job.JobInfo.Builder#setPeriodic + setPeriodic()} или {@link android.app.job.JobInfo.Builder#setPersisted + setPersisted()}. Чтобы непрерывно отслеживать изменения контента, запланируйте новый объект задания + {@link android.app.job.JobInfo}, прежде чем {@link + android.app.job.JobService} завершит обработку последнего обратного вызова. +

+ +

+ В следующем примере кода планируется задание, которое активируется, когда система сообщает + об изменении URI контента {@code MEDIA_URI}: +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+          (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo.Builder builder = new JobInfo.Builder(
+          MY_BACKGROUND_JOB,
+          new ComponentName(context, MediaContentJob.class));
+  builder.addTriggerContentUri(
+          new JobInfo.TriggerContentUri(MEDIA_URI,
+          JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
+  js.schedule(builder.build());
+}
+
+

+ Если система сообщает об изменении указанных URI контента, приложение + получает обратный вызов, а объект {@link android.app.job.JobParameters} передается + методу {@link android.app.job.JobService#onStartJob onStartJob()} + в {@code MediaContentJob.class}. +

+ +

+ Новые методы JobParameter +

+ +

+ В N Developer Preview также расширен класс {@link android.app.job.JobParameters}, чтобы + приложения могли получать полезные сведения о том, какие источники контента + и URI инициировали задание. +

+ +
+
+ {@code Uri[] getTriggeredContentUris()} +
+ +
+ Возвращает массив URI, которые активировали задание. Возвращается значение {@code + null}, если ни один URI не инициировал задание (например, задание было + активировано по времени или из-за другой причины), или число измененных + URI больше 50. +
+ +
+ {@code String[] getTriggeredContentAuthorities()} +
+ +
+ Возвращает строковый массив источников контента, которые активировали задание. + Если возвращенный массив не равен {@code null}, используйте метод {@code getTriggeredContentUris()}, + чтобы получить сведения об измененных URI. +
+
+ +

+ В следующем примере кода перегружается метод {@link + android.app.job.JobService#onStartJob JobService.onStartJob()} и + записываются источники и URI контента, вызвавшие задание: +

+ +
+@Override
+public boolean onStartJob(JobParameters params) {
+  StringBuilder sb = new StringBuilder();
+  sb.append("Media content has changed:\n");
+  if (params.getTriggeredContentAuthorities() != null) {
+      sb.append("Authorities: ");
+      boolean first = true;
+      for (String auth :
+          params.getTriggeredContentAuthorities()) {
+          if (first) {
+              first = false;
+          } else {
+             sb.append(", ");
+          }
+           sb.append(auth);
+      }
+      if (params.getTriggeredContentUris() != null) {
+          for (Uri uri : params.getTriggeredContentUris()) {
+              sb.append("\n");
+              sb.append(uri);
+          }
+      }
+  } else {
+      sb.append("(No content)");
+  }
+  Log.i(TAG, sb.toString());
+  return true;
+}
+
+ +

+ Дальнейшая оптимизация приложения +

+ +

+ Оптимизация приложений для устройств с малым объемом памяти + или для условий с ограниченным объемом памяти помогает улучшить производительность и удобство работы пользователей. Удаление + зависимостей от фоновых служб и статически зарегистрированных приемников неявных широковещательных сообщений + способно помочь приложению более эффективно работать на таких устройствах. Хотя + на платформе N Developer Preview приняты меры для устранения некоторых из этих проблем, + рекомендуется оптимизировать приложения, полностью отказавшись + от подобных фоновых процессов. +

+ +

+ В N Developer Preview представлен ряд дополнительных команд Android Debug Bridge (ADB), с помощью + которых можно тестировать поведение приложения с отключенными фоновыми процессами. +

+ +
    +
  • Для эмуляции условий, в которых неявные широковещательные сообщения и фоновые службы + недоступны, введите следующую команду: +
  • + +
  • +
    +{@code $ adb shell cmd appops set RUN_IN_BACKGROUND ignore}
    +
    +
  • + +
  • Чтобы снова включить неявные широковещательные сообщения и фоновые службы, введите + следующую команду: +
  • + +
  • +
    +{@code $ adb shell cmd appops set RUN_IN_BACKGROUND allow}
    +
    +
  • +
\ No newline at end of file diff --git a/docs/html-intl/intl/ru/preview/features/direct-boot.jd b/docs/html-intl/intl/ru/preview/features/direct-boot.jd new file mode 100644 index 000000000000..2bf03f6fd451 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/features/direct-boot.jd @@ -0,0 +1,180 @@ +page.title=Режим Direct Boot +page.keywords=preview,sdk,direct boot +page.tags=androidn + +@jd:body + + + +

Android N работает в защищенном режиме Direct Boot, когда +устройство было включено, но не разблокировано пользователем. + Для поддержки такого режима работы в системе имеется два хранилища данных:

+ +
    +
  • Хранилище, зашифрованное на уровне учетных данных.Это хранилище используется по умолчанию +и доступно только тогда, когда пользователь разблокирует устройство.
  • +
  • Хранилище, зашифрованное на уровне устройства.Это хранилище доступно в режиме +Direct Boot и тогда, когда пользователь разблокирует устройство.
  • +
+ +

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

+ +
    +
  • Приложения с уведомлениями по расписанию, например, +будильники.
  • +
  • Приложения, посылающие пользователю важные уведомления, например, приложения СМС.
  • +
  • Приложения для лиц с ограниченными возможностями, например, Talkback.
  • +
+ +

Если вашему приложению требуется доступ к данным в режиме Direct Boot, используйте +шифрованное хранилище устройства. Шифрованное хранилище устройства содержит данные, +зашифрованные с помощью ключа, доступного только после +успешной подтвержденной загрузки устройства.

+ +

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

+ +

Запрос доступа для запуска в режиме Direct Boot

+ +

Прежде +чем работать в режиме Direct Boot или получать доступ к шифрованному +хранилищу устройства, приложения должны зарегистрировать свои компоненты в системе. Приложения регистрируются в системе, помечая компоненты как +поддерживающие шифрование. Чтобы пометить компонент как поддерживающий шифрование, нужно установить для атрибута +android:encryptionAware в манифесте значение true.

+ +

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

+ +

В следующем фрагменте кода приведен пример регистрации компонента +{@link android.content.BroadcastReceiver} как поддерживающего шифрование и добавления +фильтра намерения LOCKED_BOOT_COMPLETED в манифест приложения:

+ +
+<receiever
+  android:encryptionAware="true" >
+  ...
+  <intent-filter>
+    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+  </intent-filter>
+</receiver>
+
+ +

После разблокировки устройства пользователем все компоненты имеют доступ к шифрованному хранилищу устройства +и к шифрованному хранилищу, требующему ввода учетных данных.

+ +

Доступ к шифрованному хранилищу данных устройства

+ +

Для получения доступа к шифрованному хранилищу устройства следует создать второй экземпляр +{@link android.content.Context} посредством вызова +Context.createDeviceEncryptedStorageContext(). Все вызовы API +системы хранения данных с использованием этого контекста получают доступ к шифрованному хранилищу устройства. В +следующем примере показано, как получить доступ к шифрованному хранилищу устройства и открыть существующий +файл данных приложения:

+ +
+Context directBootContext = Context.createDeviceEncryptedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+
+ +

Шифрованное хранилище устройства следует использовать только для +информации, которая должна быть доступна в режиме Direct Boot. +Шифрованное хранилище устройства не следует использовать в качестве шифрованного хранилища общего назначения. +Для хранения данных пользователя или шифрованных данных, которые не требуются в режиме +Direct Boot, следует использовать шифрованное хранилище, требующее ввода учетных данных.

+ +

Уведомление о разблокировке пользователем

+ +

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

+ +

Чтобы приложение получало уведомления о разблокировке устройства пользователем после перезагрузки, +необходимо зарегистрировать {@link android.content.BroadcastReceiver} работающего компонента +для отслеживания сообщения ACTION_USER_UNLOCKED. Также приложение может +получать существующее сообщение {@link android.content.Intent#ACTION_BOOT_COMPLETED +ACTION_BOOT_COMPLETED}, которое теперь указывает, что устройство загружено и разблокировано +пользователем.

+ +

Приложение может направлять запрос напрямую, если пользователь разблокирует устройство посредством вызова +UserManager.isUserUnlocked().

+ +

Перенос имеющихся данных

+ +

Если пользователь обновит свое устройство для использования режима Direct Boot, вашему приложению может потребоваться перенести +имеющиеся данные в шифрованное хранилище устройства. Используйте +Context.migrateSharedPreferencesFrom() и +Context.migrateDatabaseFrom() для переноса данных о настройках и содержимого баз данных +между шифрованным хранилищем, требующим ввода учетных данных, и шифрованным хранилищем устройства.

+ +

Хорошо обдумайте, какие данные следует перенести из +шифрованного хранилища, требующего ввода учетных данных, в шифрованное хранилище устройства. Не следует переносить в +шифрованное хранилище устройства личные данные пользователя, такие как +пароли или токены авторизации. В некоторых случаях вашему приложению может потребоваться работать +с отдельными наборами данных в двух шифрованных хранилищах.

+ +

Тестирование приложения с поддержкой шифрования

+ +

Протестируйте свое приложение с поддержкой шифрования в новом режиме Direct Boot. Существуют +два способа включить режим Direct Boot.

+ +

Внимание! При включении режима Direct Boot +с устройства удаляются все данные пользователя.

+ +

Чтобы включить режим +Direct Boot на поддерживаемых устройствах с Android N, выполните одну из следующих последовательностей действий.

+ +
    +
  • Включите на устройстве параметры разработчика Developer options, если вы еще не сделали этого ранее. Для этого +перейдите на экран Settings > About phone и нажмите семь раз Build number. + Когда параметры разработчика станут доступны, откройте раздел +Settings > Developer options и выберите +Convert to file encryption.
  • +
  • Используйте следующие команды оболочки adb для включения режима Direct Boot: +
    +$ adb reboot-bootloader
    +$ fastboot --wipe-and-use-fbe
    +
    +
  • +
+ +

Если вам требуется переключать +режимы на тестовых устройствах, вы можете использовать эмуляцию режима Direct Boot. Режим эмуляции следует использовать только для целей +разработки, в нем возможна потеря данных. Чтобы включить эмуляцию режима Direct Boot, +установите режим блокировки устройства, выберите пункт "No thanks", если система предлагает открыть +защищенный экран запуска при установке режима блокировки, а затем используйте +следующую команду оболочки adb:

+ +
+$ adb shell sm set-emulate-fbe true
+
+ +

Для отключения эмуляции режима Direct Boot нужно использовать следующую команду:

+ +
+$ adb shell sm set-emulate-fbe false
+
+ +

При использовании этих команд устройство перезагружается.

diff --git a/docs/html-intl/intl/ru/preview/features/icu4j-framework.jd b/docs/html-intl/intl/ru/preview/features/icu4j-framework.jd new file mode 100644 index 000000000000..8d92dd4fd193 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/features/icu4j-framework.jd @@ -0,0 +1,158 @@ +page.title=API-интерфейсы ICU4J в платформе Android + +@jd:body + + + +

+ ICU4J — широко используемый набор библиотек Java с открытым кодом, обеспечивающий для приложений поддержку формата Unicode +и глобализации. Android N +открывает в платформе Android частичный набор API-интерфейсов ICU4J, который разработчики приложений +могут использовать в составе пакета {@code android.icu}. Эти API используют +данные локализации, присутствующие на устройстве. Это позволяет уменьшить размеры APK +, не компилируя библиотеки ICU4J в APK, а +просто вызывая их в платформе. (В этом случае может оказаться удобно предоставлять +несколько версий +вашего APK, чтобы пользователи с версиями Android ниже Android N +могли загружать версию приложения, содержащую библиотеки ICU4J.) +

+ +

+ В начале этого документа предоставляется базовая информация по минимальным уровням +Android API, которые требуются для поддержки этих библиотек. Далее приводятся необходимые пояснения +о реализации ICU4J в Android. В заключение +в нем рассказывается, как использовать API-интерфейсы ICU4J в платформе Android. +

+ +

Связь с ICU4J

+ +

+ В Android N частичный набор API-интерфейсов ICU4J открывается через пакет + android.icu, а не через com.ibm.icu. Для платформы +Android может быть принято решение не +открывать API-интерфейсы ICU4J по различным причинам. Например, Android N не открывает +некоторые устаревшие API-интерфейсы, а также те, которые рабочая группа ICU еще не объявила +стабильными. По мере того, как рабочая группа ICU будет объявлять API-интерфейсы устаревшими, они будут так же помечаться и в Android, +но при этом будут и дальше входить в состав платформы. +

+ +

Таблица 1. Версии ICU и CLDR, используемые +в Android N.

+ + + + + + + + + + + +
Уровень Android APIВерсия ICUВерсия CLDR
Android N5628
+ +

Следует отметить несколько важных моментов:

+ +
    +
  • В состав API-интерфейсов ICU4J платформы Android входят не все API-интерфейсы ICU4J.
  • +
  • Разработчикам NDK следует помнить, что Android ICU4C не поддерживается.
  • +
  • API-интерфейсы в платформе Android не заменяют поддержку +локализации с +ресурсами в Android.
  • +
+ +

Переход на пакет android.icu с com.ibm.icu

+ +

+ Если вы уже используете в своем приложении API-интерфейсы ICU4J, и если API + android.icu соответствуют вашим требованиям, то для перехода на +API-интерфейсы платформы вам нужно будет изменить импорт Java +с com.ibm.icu на android.icu. После этого вы сможете +удалить свои копии файлов ICU4J из APK. +

+ +

+ Примечание. API-интерфейсы ICU4J в платформе используют пространство имен {@code android.icu} +вместо {@code com.ibm.icu}. Это позволяет избежать конфликтов пространств имен +в пакетах APK, содержащих собственные библиотеки {@code com.ibm.icu}. +

+ +

+ Переход на API-интерфейсы android.icu с других API Android SDK +

+ +

+ Некоторые классы в пакетах java и android имеют +эквиваленты в ICU4J. Однако ICU4J обычно обеспечивает более широкую +поддержку стандартов и языков. +

+

Ниже приведены несколько примеров для начала работы:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
КлассАльтернативы
java.lang.Character android.icu.lang.UCharacter
java.text.BreakIterator android.icu.text.BreakIterator
java.text.DecimalFormat android.icu.text.DecimalFormat
java.util.Calendar +android.icu.util.Calendar
android.text.BidiFormatter + android.icu.text.Bidi +
android.text.format.DateFormat + android.icu.text.DateFormat +
android.text.format.DateUtils android.icu.text.DateFormat +android.icu.text.RelativeDateTimeFormatter +
+ +

Лицензирование

+ +

+ ICU4J выпускается по лицензии ICU. Более подробную информацию можно найти в Руководстве пользователя +ICU. +

diff --git a/docs/html-intl/intl/ru/preview/features/multi-window.jd b/docs/html-intl/intl/ru/preview/features/multi-window.jd new file mode 100644 index 000000000000..f1a8ea603ddd --- /dev/null +++ b/docs/html-intl/intl/ru/preview/features/multi-window.jd @@ -0,0 +1,582 @@ +page.title=Поддержка многооконного режима +page.metaDescription=Новые возможности в Android N для одновременного отображения нескольких приложений. +page.keywords="multi-window", "android N", "split screen", "free-form" + +@jd:body + + + +

+ В Android N добавлена поддержка отображения нескольких приложений + одновременно. На мобильных устройствах два приложения могут быть запущены рядом + или друг над другом в режиме разделения экрана. На телевизорах приложения могут + использовать режим "картинка в картинке", чтобы воспроизводить видео, + пока пользователи работают с другим приложением. +

+ +

+ Если вы создаете приложение с использованием N Preview SDK, вы можете указать, как оно + будет действовать в многооконном режиме. Например, можно задать минимальные + допустимые размеры окна приложения. Также можно отключить многооконный режим для приложения, + чтобы оно отображалось только в полноэкранном + режиме. +

+ +

Обзор

+ +

+ В Android N несколько приложений могут одновременно находиться на экране. Например, + пользователь может разделить экран, чтобы просматривать веб-страницу + слева и писать сообщение электронной почты справа. Возможности пользователя зависят от + устройства. +

+ +
    +
  • На мобильных устройствах с Android N доступен режим + разделения экрана. В этом режиме два приложения отображаются рядом + или друг над другом. Пользователь может перетащить + линию разделения, чтобы увеличить окно одного приложения и уменьшить окно другого. +
  • + +
  • На устройствах Nexus Player с Android N для приложений + будет доступен режим "картинка в картинке", который + позволит приложению отображать контент, пока пользователь просматривает + другие приложения или взаимодействует с ними. +
  • + +
  • Производители более крупных устройств могут активировать + режим произвольной формы, где пользователь может любым образом изменять размер каждого окна. В этом случае + помимо режима разделения экрана + на устройстве будет доступен и этот режим. +
  • +
+ + +

+ Рис. 1. Два приложения отображаются рядом в режиме разделения экрана. +

+ +

+ Пользователь может перейти в многооконный режим следующими способами. +

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

+ Пользователи могут перетаскивать +данные между окнами операций в режиме + совместного отображения. (Ранее перетаскивать данные можно было только в рамках + одной операции). +

+ +

Жизненный цикл многооконного режима

+ +

+ Многооконный режим не меняет жизненный + цикл операции. +

+ +

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

+ +

+ Примечание. В многооконном режиме приложение может быть приостановлено + и по-прежнему видимо для пользователя. Приложению может потребоваться + продолжать свои операции, даже если оно приостановлено. Например, видимое приостановленное приложение, + воспроизводящее видео, будет по-прежнему показывать видео. Поэтому + мы не рекомендуем приостанавливать воспроизведение + в обработчиках {@link android.app.Activity#onPause onPause()} таких приложений. + Вместо этого следует приостановить видео в {@link android.app.Activity#onStop + onStop()} и возобновить воспроизведение в {@link android.app.Activity#onStart + onStart()}. +

+ +

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

+ +

+ Если пользователь увеличивает одну из сторон окна, система меняет + размер окна операции в соответствии с действием пользователя и применяет изменения в режиме выполнения + по мере необходимости. Если приложение не успевает отрисовать новые области, система + временно заполняет их цветом, заданным атрибутом {@link + android.R.attr#windowBackground windowBackground} или атрибутом стиля + windowBackgroundFallback по умолчанию. +

+ +

Настройка приложения для многооконного режима

+ +

+ Если ваше приложение предназначено для Android N, вы + можете указать, каким образом поддерживают (и поддерживают ли) операции вашего приложения многооконный режим. Атрибуты управления размером и макетом устанавливаются + в манифесте. + Настройки атрибутов корневой операции применяются + ко всем операциям в ее стеке задач. +

+ +

+ Примечание. Если приложение с поддержкой различной + ориентации было создано с версией SDK, + более ранней, чем Android N, и пользователь запустит это приложение в многооконном режиме, система принудительно изменит размер приложения. Система отображает диалоговое окно + с предупреждением о том, что приложение может работать непредвиденным образом. Система + не меняет размер окна для приложений с + фиксированной ориентацией. Если пользователь попытается открыть такое приложение + в многооконном режиме, оно займет весь экран. +

+ +

android:resizeableActivity

+

+ Установите этот атрибут в узле <activity> или + <application> манифеста, чтобы включить или отключить многооконный + режим: +

+ +
+android:resizeableActivity=["true" | "false"]
+
+ +

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

+ +

+ Если приложение предназначено для Android N, но +значение для этого атрибута не было указано, то по умолчанию используется значение true. +

+ +

android:supportsPictureInPicture

+ +

+ Установите этот атрибут в узле <activity> манифеста, + чтобы указать, поддерживает ли операция режим "картинка в картинке". Этот + атрибут не принимается во внимание, если для android:resizeableActivity установлено значение false. +

+ +
+android:supportsPictureInPicture=["true" | "false"]
+
+ +

Атрибуты макета

+ +

+ В Android N элемент манифеста <layout> поддерживает + несколько атрибутов, которые определяют поведение + операции в многооконном режиме. +

+ +
+
+ android:defaultWidth +
+ +
+ Ширина окна операции по умолчанию в режиме произвольной формы. +
+ +
+ android:defaultHeight +
+ +
+ Высота окна операции по умолчанию в режиме произвольной формы. +
+ +
+ android:gravity +
+ +
+ Начальная позиция окна операции в режиме произвольной формы. Допустимые значения + см. в описании класса {@link android.view.Gravity}. +
+ +
+ android:minimalSize +
+ +
+ Минимальные значения высоты и ширины окна операции в режимах разделения экрана + и произвольной формы. Если пользователь перемещает разделительную линию + в режиме разделения экрана, чтобы сделать размер окна операции + меньше указанного минимума, система обрезает его до запрошенного пользователем размера. +
+
+ +

+ В следующем примере кода показано, как задать размер и + позицию окна операции по умолчанию, а также ее минимальный размер в + режиме произвольной формы: +

+ +
+<activity android:name=".MyActivity">
+    <layout android:defaultHeight="500dp"
+          android:defaultWidth="600dp"
+          android:gravity="top|end"
+          android:minimalSize="450dp" />
+</activity>
+
+ +

Запуск приложения в многооконном режиме

+ +

+ Android N предоставляет новые возможности для поддержки + приложений в многооконном режиме. +

+ +

Недоступные возможности в многооконном режиме

+ +

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

    +
  • Отключены некоторые параметры настройки системного интерфейса. + Например, приложения не могут + скрыть строку состояния, если они не работают в полноэкранном режиме. +
  • + +
  • Система не учитывает изменения атрибута android:screenOrientation. +
  • +
+ +

Уведомления об изменениях и запросы в многооконном режиме

+ +

+ Для поддержки многооконного режима в класс {@link android.app.Activity} + были добавлены следующие методы. Подробнее о каждом из них см. в + справочнике по N Preview SDK. +

+ +
+
+ Activity.inMultiWindow() +
+ +
+ Вызовите этот метод, чтобы узнать, находится ли операция в многооконном режиме. +
+ +
+ Activity.inPictureInPicture() +
+ +
+ Вызовите этот метод, чтобы узнать, находится ли операция в режиме "картинка в картинке". + +

+ Примечание. Режим "картинка в картинке" — это частный + случай многооконного режима. Если метод myActivity.inPictureInPicture() + возвращает значение true, myActivity.inMultiWindow() также возвращает + true. +

+
+ +
+ Activity.onMultiWindowChanged() +
+ +
+ Система вызывает этот метод, когда операция переходит в многооконный + режим или выходит из него. Система передает методу значение true, если + операция входит в многооконный режим, и значение false, если + она выходит из него. +
+ +
+ Activity.onPictureInPictureChanged() +
+ +
+ Система вызывает этот метод, когда операция переходит в режим + "картинка в картинке". Система передает методу значение true, + если операция входит в режим "картинка в картинке", и значение false, + если она выходит из него. +
+
+ +

+ Также существуют версии {@link android.app.Fragment} для этих методов, +например, Fragment.inMultiWindow(). +

+ +

Переход в режим "картинка в картинке"

+ +

+ Чтобы перевести операцию в режим "картинка в картинке", + вызовите новый метод Activity.enterPictureInPicture(). Этот метод игнорируется, если + устройство не поддерживает режим "картинка в картинке". Дополнительная информация содержится в документации + Режим "картинка в картинке". +

+ +

Запуск новых операций в многооконном режиме

+ +

+ При запуске новой операции можно сообщить системе, что окно новой + операции следует показать рядом с текущим, если это возможно. Для этого + используйте флаг + Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT. Этот + флаг запрашивает следующее поведение. +

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

+ Если при запуске + новой операции устройство находится в режиме произвольной формы, вы можете задать размеры и позицию окна новой операции, + вызвав метод ActivityOptions.setLaunchBounds(). Этот метод игнорируется, если + устройство не находится в многооконном режиме. +

+ +

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

+ +

Поддержка перетаскивания

+ +

+ Пользователи могут перетаскивать данные + между окнами операций в режиме + совместного отображения. (Ранее перетаскивать данные можно было только в рамках + одной операции). Поэтому вы можете реализовать функции перетаскивания + в своем приложении, если оно еще их не поддерживает. +

+ +

+ В N Preview SDK пакет android.view + расширен для поддержки перетаскивания между приложениями. Дополнительная информация о нижеприведенных классах + и методах содержится в справочнике по N + Preview SDK. +

+ +
+
+ android.view.DropPermissions +
+ +
+ Объект токена для указания разрешений + приложению, в которое перетаскиваются данные. +
+ +
+ View.startDragAndDrop() +
+ +
+ Новый псевдоним для {@link android.view.View#startDrag View.startDrag()}. Чтобы + разрешить перетаскивание между операциями, передайте + новый флаг View.DRAG_FLAG_GLOBAL. Если вам нужно предоставить принимающей операции разрешения на чтение или запись URI, + передайте новый флаг + View.DRAG_FLAG_GLOBAL_URI_READ или + View.DRAG_FLAG_GLOBAL_URI_WRITE соответственно. +
+ +
+ View.cancelDragAndDrop() +
+ +
+ Отменяет текущую операцию перетаскивания. Этот метод может вызвать только + приложение, в котором была инициирована операция перетаскивания. +
+ +
+ View.updateDragShadow() +
+ +
+ Заменяет тень текущей операции перетаскивания. Этот метод может вызвать только приложение, + в котором была инициирована операция перетаскивания. +
+ +
+ Activity.requestDropPermissions() +
+ +
+ Запрашивает разрешения для URI контента, переданных в объекте {@link + android.content.ClipData} в {@link android.view.DragEvent}. +
+
+ +

Тестирование приложения в многооконном режиме

+ +

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

+ +

Настройка тестового устройства

+ +

+ Если установить Android N на устройстве, режим разделения + экрана будет поддерживаться автоматически. +

+ +

Если приложение было создано без использования N Preview SDK

+ +

+ Если вы не применяли N Preview SDK для создания приложения и пользователь + попытается запустить его в многооконном режиме, система принудительно + изменит размер окна приложения, если его ориентация не зафиксирована. +

+ +

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

+ +

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

+ +

Если приложение поддерживает многооконный режим

+ +

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

+ +
    +
  • Запустите приложение в полноэкранном режиме, а затем переключитесь + в многооконный режим долгим нажатием кнопки "Обзор". Убедитесь, что приложение корректно переключается между режимами. +
  • + +
  • Запустите приложение непосредственно в многооконном режиме + и убедитесь, что оно работает нормально. Вы можете запустить приложение в многооконном режиме, нажав + кнопку "Обзор", затем длительно нажав строку заголовка приложения и + перетащив ее в одну из выделенных областей на экране. +
  • + +
  • Измените размер окна приложения в режиме разделения экрана, перетащив линию разделения. + Убедитесь, что изменение размера не приводит к сбою и что необходимые + элементы интерфейса остаются видимыми. +
  • + +
  • Если вы указали минимальные размеры окна приложения, попытайтесь + установить размер меньше минимального. Убедитесь в невозможности установить размер + меньше указанного минимума. +
  • + +
  • Во время всех тестов следите за производительностью приложения — она должна быть приемлемой. Например, + убедитесь, что после изменения размера окна приложения не возникает большой + задержки обновления интерфейса. +
  • +
+ +

Контрольный список тестирования

+ +

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

+ +
    +
  • Перейдите в многооконный режим и выйдите из него. +
  • + +
  • Переключитесь из своего приложения в другое приложение и убедитесь, + что приложение работает нормально, если оно видимо, но не активно. Например, если приложение + показывает видео, оно должно продолжать воспроизведение, когда + пользователь работает с другим приложением. +
  • + +
  • В режиме разделения экрана попробуйте перемещать линию + разделения, увеличивая и уменьшая окно приложения. Попробуйте выполнить эти операции, когда окна двух + приложений находятся рядом и друг над другом. Убедитесь, что приложение не завершается с ошибкой, + необходимые элементы видны и изменение размера не занимает + слишком много времени. +
  • + +
  • Быстро измените размер окна приложения несколько раз подряд. Убедитесь, что + приложение не зависает и не вызывает утечку памяти. Информация о проверке использования памяти + приложением содержится в документе +Анализ использования оперативной памяти. +
  • + +
  • Поработайте с приложением в различных оконных конфигурациях и + убедитесь, что оно ведет себя должным образом. Текст должен легко читаться, а + элементы интерфейса не должны быть слишком маленькими. +
  • +
+ +

Если вы отключили поддержку многооконного режима

+ +

+ Если вы отключили поддержку многооконного режима, + установив атрибут android:resizableActivity="false", запустите + приложение на устройстве с Android N и + попытайтесь перевести его в режимы произвольной формы и разделения экрана. Убедитесь, что при этом + приложение остается в полноэкранном режиме. +

diff --git a/docs/html-intl/intl/ru/preview/features/multilingual-support.jd b/docs/html-intl/intl/ru/preview/features/multilingual-support.jd new file mode 100644 index 000000000000..f9c47d3139e9 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/features/multilingual-support.jd @@ -0,0 +1,214 @@ +page.title=Язык и языковой стандарт +@jd:body + + + +

Android N обеспечивает расширенную поддержку многоязычных пользователей, +позволяя им выбирать в настройках из нескольких языковых стандартов. Эта возможность реализована в Android N +за счет значительного увеличения числа поддерживаемых языковых стандартов +и изменения способа разрешения ресурсов в системе. Новый метод разрешения +ресурсов более надежен и разработан с учетом совместимости с существующими APK. Тем не менее, +при его использовании следует очень внимательно следить за признаками непредвиденного поведения приложения. Например, при его использовании +следует провести тесты и убедиться, что приложение по умолчанию использует ожидаемый язык. Если +ваше приложение поддерживает несколько языков, нужно убедиться, что поддержка работает +ожидаемым образом. Также следует попытаться обеспечить корректную работу приложения с +языками, поддержка которых не предусматривалась явным образом в его коде.

+ +

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

+ +

Сложности с разрешением языковых ресурсов

+ +

До выпуска Android N в Android не всегда удавалось успешно сопоставлять + языковые стандарты приложений и системы. Допустим, по умолчанию в вашем приложении используется английский язык + (США), но оно также содержит строки на испанском, локализованные в файлах ресурсов {@code es_ES}. +

+

В коде Java разрешение языков строк происходило следующим +образом:

+
    +
  • Если на устройстве был установлен язык {@code es_MX} (испанский, Мексика), Android загружал +строки из файлов ресурсов {@code es_ES}.
  • +
  • Если на устройстве был установлен язык {@code en_AU}, Android возвращался к языку {@code +en_US}. Также система использовала по умолчанию язык {@code en_US}, если пользователь выбирал язык, +который вообще не поддерживался приложением, например, французский.
  • +
+ + +

Проблемы с разрешением возникали из-за того, что система удаляла код страны + из строки языкового стандарта при отсутствии точного совпадения. Например:

+

+Таблица 1. Разрешение ресурсов без точного совпадения языковых стандартов. +

+ + + + + + + + + + + + + +
Пользовательские настройкиРесурсы приложенияРазрешение ресурсов
fr_CH +по умолчанию (en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+Попытка использования fr_CH => Отказ
+Попытка использования fr => Отказ
+Использование языка по умолчанию (en) +
+ + +

В этом примере система отображает строки на английском, +не зная, понимает ли пользователь английский язык. Такое поведение приложений сейчас довольно +распространено. С выпуском Android N подобные ситуации +будут возникать намного реже.

+ +

Улучшение стратегии разрешения ресурсов

+

В Android N используется более надежная система разрешения ресурсов, +которая автоматически находит более подходящие альтернативные варианты. Однако для ускорения процесса разрешения и упрощения + обслуживания ресурсы следует хранить на наиболее распространенном языке верхнего уровня. + Например, если вы хранили ресурсы на испанском в каталоге{@code es-US} +, их следует переместить в каталог {@code es-419}, где содержатся ресурсы на латиноамериканском диалекте испанского языка. + Аналогичным образом, если вы хранили строки ресурсов в папке {@code en-GB}, вам следует изменить название папки + на {@code en-001} (международная версия английского языка), поскольку {@code en-001} — наиболее распространенный + язык верхнего уровня для строк en-GB. + В следующих примерах объясняется, почему такая практика повышает производительность и +надежность процесса разрешения ресурсов.

+ +

Примеры разрешения ресурсов

+ +

В Android N ситуация, описанная в Таблице 1, разрешается +иначе:

+ +

+Таблица 2. Улучшенная стратегия разрешения при отсутствии +точного совпадения языкового стандарта.

+ + + + + + + + + + + + +
Пользовательские настройкиРесурсы приложенияРазрешение ресурсов
    +
  1. fr_CH
  2. +
+
+по умолчанию (en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+Попытка использования fr_CH => Отказ
+Попытка использования fr => Отказ
+Попытка использования диалекта fr => fr_FR
+Использование fr_FR +
+ + +

В этом примере пользователь получает ресурсы на французском языке, а не на английском. В этом примере также показано, почему для Android N + следует хранить строки на французском языке в каталоге {@code fr}, а не в каталоге {@code fr_FR}. +Здесь целью разрешения является нахождение наиболее близкого диалекта верхнего уровня, + что ускоряет процесс разрешения и делает его более предсказуемым.

+ +

Помимо улучшенной логики разрешения в Android добавлены + дополнительные языки. Рассмотрим предыдущий пример в ситуации, когда итальянский + указан как дополнительный язык пользователя, а приложение не поддерживает французский язык.

+ +

+Таблица 3. Разрешение ресурсов в ситуации, когда приложение находит соответствие только для +второго предпочитаемого пользователем языкового стандарта.

+ + + + + + + + + + + + + + +
Пользовательские настройкиРесурсы приложенияРазрешение ресурсов
    +
  1. fr_CH
  2. +
  3. it_CH
  4. +
+
+по умолчанию (en)
+de_DE
+es_ES
+it_IT
+
+Попытка использования fr_CH => Отказ
+Попытка использования fr => Отказ
+Попытка использования диалекта fr => Отказ
+Попытка использования it_CH => Отказ
+Попытка использования it => Отказ
+Попытка использования диалекта it => it_IT
+Использование it_IT +
+

Пользователь получает данные на понятном ему языке, хотя приложение и не +поддерживает французский язык.

+ + +

Проектирование приложения для поддержки дополнительных языковых стандартов

+

API LocaleList

+ +

В Android N добавлен новый API {@code LocaleList.GetDefault()}, + позволяющий приложениям напрямую запрашивать список языков, выбранных пользователем. Этот API +позволяет реализовать более сложное поведение + приложений и лучше оптимизировать отображение содержимого на экране. Например, результаты поиска + могут отображаться на разных языках в зависимости от пользовательских настроек. Приложения в браузере + могут не предлагать пользователю перевести приложения на знакомый ему язык, + а приложения, использующие клавиатуру, могут автоматически включать все подходящие раскладки.

+ +

Средства форматирования

+ +

Версии Android до 6.0 включительно (уровень API 23) поддерживали только один или два языковых стандарта + для большинства распространенных языков +(en, es, ar, fr, ru). Поскольку у каждого языка имелось лишь немного вариантов, +приложения могли хранить числа и даты в виде жестко закодированных строк +в файлах ресурсов. Однако с расширением числа поддерживаемых Android языковых стандартов +могут возникнуть +значительные различия форматов даты, времени, валюты и другой подобной +информации даже в рамках одного языкового стандарта. Жесткое кодирование форматов может запутать +конечных пользователей. Поэтому при разработке приложений для Android N +следует использовать средства форматирования, а не жесткое кодирование строк с числами и датами.

+ +

В качестве наглядного примера можно привести арабский язык, поддержка которого в Android N расширена +с одного {@code ar_EG} до 27 языковых стандартов. Большинство ресурсов этих языковых стандартов общие, но +в некоторых из них используются цифры формата ASCII, а в других — собственные цифры. Например, +если вы хотите создать предложение с числовой переменной +"Выберите ПИН-код из 4 цифр", вам нужно использовать средства форматирования следующим образом:

+ +
 format(locale, "Choose a %d-digit PIN", 4)
diff --git a/docs/html-intl/intl/ru/preview/features/notification-updates.jd b/docs/html-intl/intl/ru/preview/features/notification-updates.jd new file mode 100644 index 000000000000..9c7cb9347719 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/features/notification-updates.jd @@ -0,0 +1,328 @@ +page.title=Уведомления +page.tags=notifications +helpoutsWidget=true +page.image=/preview/images/notifications-card.png + +trainingnavtop=true + +@jd:body + + + +

В Android N представлено несколько новых API-интерфейсов, позволяющих +публиковать заметные и интерактивные уведомления.

+ +

Существующий API-интерфейс уведомлений {@link android.support.v4.app.RemoteInput} +в Android N расширен для поддержки внутренних ответов на смартфонах. С помощью этой возможности + пользователи могут быстро отвечать на сообщения в панели уведомлений, не открывая приложение.

+ +

+ Android N также позволяет группировать несколько похожих + уведомлений, чтобы они отображались как одно. Для этого в Android N используется существующий метод {@link + android.support.v4.app.NotificationCompat.Builder#setGroup + NotificationCompat.Builder.setGroup()}. Пользователи могут развернуть все + уведомления и выполнить различные действия, например ответить на сообщение + или закрыть каждое из уведомлений по отдельности в панели уведомлений. +

+ +

Наконец, в Android N представлены новые API-интерфейсы, позволяющие +использовать системные элементы в собственных представлениях уведомлений вашего приложения. Благодаря им +уведомления отображаются единообразно на основе +стандартных шаблонов.

+ +

В этом документе рассматриваются некоторые наиболее важные изменения, + которые следует учитывать при использовании новых уведомлений в приложениях.

+ +

Прямой ответ

+ +

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

+ Рисунок 1. В Android N добавлена кнопка Reply. + +

+ +

Добавление действий внутренних ответов

+ +

Создание действия уведомления, которое поддерживает прямой ответ: +

+ +
    +
  1. Создайте экземпляр класса {@link android.support.v4.app.RemoteInput.Builder}, + который можно добавить в действие +уведомления. Конструктор класса принимает строку, которую система использует как + ключ для введенного текста. Потом ваше приложение использует этот ключ для получения + текста. + +
    +// Key for the string that's delivered in the action's intent
    +private static final String KEY_TEXT_REPLY = "key_text_reply";
    +String replyLabel = getResources().getString(R.string.reply_label);
    +RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
    +        .setLabel(replyLabel)
    +        .build();
    +
    +
  2. +
  3. Прикрепите объект {@link android.support.v4.app.RemoteInput} + к действию с помощью метода addRemoteInput(). + +
    +// Create the reply action and add the remote input
    +Notification.Action action =
    +        new Notification.Action.Builder(R.drawable.ic_reply_icon,
    +                getString(R.string.label), replyPendingIntent)
    +                .addRemoteInput(remoteInput)
    +                .build();
    +
    +
  4. + +
  5. Примените действие к уведомлению и отправьте его. + +
    +// Build the notification and add the action
    +Notification notification =
    +        new Notification.Builder(mContext)
    +                .setSmallIcon(R.drawable.ic_message)
    +                .setContentTitle(getString(R.string.title))
    +                .setContentText(getString(R.string.content))
    +                .addAction(action))
    +                .build();
    +
    +// Issue the notification
    +NotificationManager notificationManager =
    +        NotificationManager.from(mContext);
    +notificationManager.notify(notificationId, notification);
    +
    +
    +
  6. + +
+ + +

Система запрашивает у пользователя ввод ответа, если он инициирует +действие уведомления.

+ + +

+ Рисунок 2. Пользователь вводит текст в панели уведомлений. +

+ +

Получение введенного пользователем текста из внутреннего ответа

+ +

Получение введенного пользователем текста из интерфейса +уведомлений в операции, объявленной в намерении действия:

+
    +
  1. Вызовите метод {@link android.support.v4.app.RemoteInput#getResultsFromIntent + getResultsFromIntent()}, передав намерение действия уведомления + в качестве входного параметра. Этот метод возвращает объект {@link android.os.Bundle}, + содержащий текст ответа. +
  2. + +
    +Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
    +
    + +
  3. Запросите группу, используя ключ результата (предоставленный конструктору {@link + android.support.v4.app.RemoteInput.Builder}). +
  4. +
+ +

В следующем фрагменте кода показано, как метод извлекает введенный +текст из группы:

+ +
+// Obtain the intent that started this activity by calling
+// Activity.getIntent() and pass it into this method to
+// get the associated string.
+
+private CharSequence getMessageText(Intent intent) {
+    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+    if (remoteInput != null) {
+            return remoteInput.getCharSequence(KEY_TEXT_REPLY);
+            }
+    return null;
+ }
+
+ +

Приложения могут применять логику, чтобы определить, какие действия следует выполнить с полученным +текстом. +Для интерактивных приложений (например, чатов) предоставьте больше контекста в самом уведомлении + (например, несколько строк истории чата, в том числе собственные сообщения пользователя), + чтобы у пользователя было достаточно информации для ответа. +Когда пользователь отвечает через {@link android.support.v4.app.RemoteInput}, + добавьте текст в историю ответов, применив метод {@code setRemoteInputHistory()}. +

+ +

Группы уведомлений

+ +

Android N предоставляет разработчикам новый способ отображения + очереди уведомлений: группы уведомлений. Они похожи на + стеки + уведомлений в Android Wear. Например, если приложение создает уведомления + для входящих сообщений и получено несколько сообщений, объедините + уведомления в одну группу. Для группировки похожих уведомлений используйте + существующий метод {@link android.support.v4.app.NotificationCompat.Builder#setGroup +Builder.setGroup()}.

+ +

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

+ + +

+ Рисунок 3. Пользователь может постепенно раскрывать группу уведомлений. + +

+ +

Добавление уведомлений в группу описано в разделе +Добавление +каждого уведомления в группу.

+ + +

Рекомендации по работе с группами уведомлений

+

В этом разделе описываются рекомендации по использованию групп +уведомлений вместо уведомлений {@link android.app.Notification.InboxStyle InboxStyle}, + которые были доступны в предыдущих версиях платформы + Android.

+ +

Ситуации, в которых следует использовать группы уведомлений

+ +

Вам следует использовать группы уведомлений, только если выполняются +все следующие условия.

+ +
    +
  • Дочерние уведомления являются полноценными уведомлениями, которые можно + показать отдельно без сводной информации о группе.
  • +
  • Отображение дочерних уведомлений по отдельности имеет смысл. Например: + +
  • +
      +
    • в дочерних уведомлениях можно выполнять какие-либо соответствующие им действия;
    • +
    • дочернему уведомлению предшествует больше информации, чем требуется пользователю.
    • +
    +
+ +

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

+ +

+К примерам ситуаций, когда предпочтительнее использовать одно + уведомление, относятся отдельные сообщения от одного пользователя или + списочное представление однострочных текстовых элементов. Для них можно использовать +{@link android.app.Notification.InboxStyle InboxStyle} или +{@link android.app.Notification.BigTextStyle BigTextStyle}. + +

+ +

Отображение группы уведомлений

+ +

+ Приложение всегда должно публиковать сводную информацию группы, даже если эта группа содержит + всего одно дочернее уведомление. В этом случае система не показывает сводную информацию, а + непосредственно отображает это уведомление. Это обеспечивает + единообразие интерфейса при + пролистывании дочернего элемента группы. +

+ +

+ Примечание. Эта версия Android N пока еще не + блокирует отображение сводной информации для групп уведомлений, содержащих только один дочерний элемент. Эта + возможность будет добавлена в следующих версиях Android N. +

+ +

Всплывающие уведомления

+ +

Хотя система обычно отображает дочерние уведомления в виде группы, + их можно временно показывать в виде + всплывающих +уведомлений. Эта возможность очень удобна, так как позволяет + быстро получить доступ к последнему дочернему уведомлению и связанным с ним действиям. +

+ + +

Обратная совместимость

+ +

+ И группы уведомлений, и удаленный ввод входили в состав API {@link + android.app.Notification} для поддержки устройств + Android Wear, начиная с Android 5.0 (уровень API 21). Если вы уже использовали эти API-интерфейсы для создания уведомлений, + вам нужно только убедиться, что поведение приложения соответствует + описанным выше рекомендациям, и рассмотреть возможность реализации {@code + setRemoteInputHistory()}. +

+ +

+ Для поддержки обратной совместимости те же API-интерфейсы доступны в + классе {@link android.support.v4.app.NotificationCompat} + вспомогательной библиотеки, что позволяет реализовать уведомления, работающие в предыдущих версиях Android. + На смартфонах и планшетах пользователи видят только сводное уведомление, + поэтому в приложении все равно должно быть уведомление + в стиле Inbox или аналогичное уведомление, содержащее всю информацию о группе. Так как устройства Android +Wear позволяют пользователям видеть все дочерние уведомления даже + на более ранних уровнях платформы, эти уведомления следует создавать независимо от уровня API. + +

+ +

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

+

Начиная с Android N, вы можете настраивать представления уведомлений +и по-прежнему получать системные элементы, такие как заголовки уведомлений, действия и +расширяемые макеты.

+ +

Для этого в Android N добавлены следующие API-интерфейсы, позволяющие + настраивать собственные представления.

+ +
+
+{@code DecoratedCustomViewStyle()}
+
Определяет стиль для всех уведомлений, кроме +уведомлений мультимедиа.
+
+{@code DecoratedMediaCustomViewStyle()}
+
Определяет стиль для уведомлений мультимедиа.
+
+ +

Чтобы воспользоваться этим новым API-интерфейсом, вызовите метод {@code setStyle()}, передав в него +нужный стиль собственного представления.

+ +

В этом фрагменте показано, как создать собственный объект уведомления с помощью метода +{@code DecoratedCustomViewStyle()}.

+ +
+Notification noti = new Notification.Builder()
+           .setSmallIcon(R.drawable.ic_stat_player)
+           .setLargeIcon(albumArtBitmap))
+           .setCustomContentView(contentView);
+           .setStyle(new Notification.DecoratedCustomViewStyle())
+           .build();
+
+
diff --git a/docs/html-intl/intl/ru/preview/features/picture-in-picture.jd b/docs/html-intl/intl/ru/preview/features/picture-in-picture.jd new file mode 100644 index 000000000000..5be0bffc505d --- /dev/null +++ b/docs/html-intl/intl/ru/preview/features/picture-in-picture.jd @@ -0,0 +1,186 @@ +page.title=Режим "картинка в картинке" +page.keywords=preview,sdk,PIP,Picture-in-picture +page.tags=androidn + +@jd:body + + + +

В Android N пользователи Android TV могут смотреть видео +в закрепленном окне в углу экрана во время работы в +приложениях. Режим "картинка в картинке" (PIP) позволяет приложениям отображать видео +в закрепленном окне одновременно с выполнением другой операции +фоновом режиме. Окно PIP обеспечивает возможность многозадачности внутри вашего приложения, что +повышает продуктивность работы пользователей.

+ +

Ваше приложение может определить момент активации режима PIP. Ниже приведено несколько примеров +моментов перехода в режим PIP:

+ +
    +
  • Ваше приложение может перевести видео в режим PIP, когда пользователь переходит +от видео к просмотру другого контента.
  • +
  • Ваше приложение может переключить видео в режим PIP, когда пользователь смотрит конец +эпизода контента. На основном экране отображается рекламная или сводная информация +о следующем эпизоде серии.
  • +
  • Ваше приложение может предоставить пользователям возможность добавлять в очередь дополнительный контент при +просмотре видео. В режиме PIP видео продолжает воспроизводиться, когда на основном +экране отображается операция выбора контента.
  • +
+ +

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

+ + +

Рисунок 1. Видео в режиме "картинка в картинке" + отображается в углу экрана, пока пользователь просматривает +контент на главном экране.

+ +

Режим PIP использует многооконные API-интерфейсы в Android N для +отображения закрепленного окна с видео на верхнем слое. Чтобы добавить в приложение функцию PIP, вам нужно зарегистрировать +операции, поддерживающие PIP, добавить необходимые переключения операции в режим PIP, +а также обеспечить скрытие элементов пользовательского интерфейса и воспроизведение видео в то время, когда +операция находится в режиме PIP.

+ +

Декларация поддержки операцией режима "картинка в картинке"

+ +

По умолчанию в системе отсутствует автоматическая поддержка режима PIP для приложений. +Если вы хотите, чтобы ваше приложение поддерживало режим PIP, зарегистрируйте операцию +воспроизведения видео в манифесте приложения, установив для параметров +android:supportsPictureInPicture и +android:resizeableActivity значение true. Также укажите, что +ваша операция обрабатывает изменения конфигурации макета экрана, чтобы эта операция не +запускалась заново в случае изменения макета при переходах в режиме PIP.

+ +
+<activity android:name="VideoActivity"
+    android:resizeableActivity="true"
+    android:supportsPictureInPicture="true"
+    android:configChanges=
+        "screenSize|smallestScreenSize|screenLayout|orientation"
+    ...
+
+ +

При регистрации операции помните, что в режиме PIP она +отображается в небольшом наложенном окне на экране телевизора. Для пользователей наиболее удобны операции +воспроизведения видео с минимальным пользовательским интерфейсом. Операции +с небольшими элементами пользовательского интерфейса могут оказаться неудобными для пользователей +в режиме PIP, потому что в окне PIP пользователи +не видят деталей этих элементов.

+ +

Переключение операции в режим "картинка в картинке"

+ +Если вам нужно переключить операцию в режим PIP, вызовите метод +Activity.enterPictureInPicture(). В следующем примере показано переключение +в режим PIP, когда пользователь нажимает кнопку PIP на панели +управления мультимедиа:

+ +
+@Override
+public void onActionClicked(Action action) {
+    if (action.getId() == R.id.lb_control_picture_in_picture) {
+        getActivity().enterPictureInPicture();
+        return;
+    }
+    ...
+
+ +

Добавление кнопки PIP на панель управления мультимедиа позволяет пользователям легко переключаться +в режим PIP с сохранением возможностей управления воспроизведением видео.

+ + +

Рисунок 1. Кнопка режима "картинка в картинке" +на панели управления мультимедиа.

+ +

В Android N входит новый класс +PlaybackControlsRow.PictureInPictureAction, который определяет действия PIP +на панели управления и использует значок PIP.

+ +

Работа пользовательского интерфейса в режиме "картинка в картинке"

+ +

Когда операция переходит в режим PIP, она должна отображать только воспроизведение +видео. Уберите элементы пользовательского интерфейса перед переходом операции в режим PIP +и восстановите их после возвращения операции в полноэкранный режим. +Переопределите Activity.onPictureInPictureChanged() или +Fragment.onPictureInPictureChanged() и включайте или +отключайте элементы пользовательского интерфейса по мере необходимости, например:

+ +
+@Override
+public void onPictureInPictureChanged(boolean inPictureInPicture) {
+    if (inPictureInPicture) {
+        // Hide the controls in picture-in-picture mode.
+        ...
+    } else {
+        // Restore the playback UI based on the playback status.
+        ...
+    }
+}
+
+ +

Продолжение воспроизведения видео в режиме +"картинка в картинке"

+ +

Когда операция переключается в режим PIP, система видит ее в состоянии +паузы и вызывает метод onPause() этой операции. При этом воспроизведение видео +должно продолжаться без паузы, если операция +приостановлена в режиме PIP. Проверьте режим PIP в методе +onPause() своей операции и обеспечьте обработку воспроизведения соответствующим образом, +например:

+ +
+@Override
+public void onPause() {
+    // If called due to PIP, do not pause playback
+    if (inPictureInPicture()) {
+        // Continue playback
+        ...
+    }
+    // If paused but not in PIP, pause playback if necessary
+    ...
+}
+
+ +

Когда операция возвращается из режима PIP в полноэкранный режим, система +возобновляет выполнение операции и вызывает методonResume() вашего приложения.

+ +

Советы и рекомендации

+ +

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

+ +

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

+ +

По умолчанию фокус ввода не переключается на операцию, которая находится в режиме PIP. Для +получения событий ввода в режиме PIP следует использовать +MediaSession.setMediaButtonReceiver().

diff --git a/docs/html-intl/intl/ru/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/ru/preview/features/scoped-folder-access.jd new file mode 100644 index 000000000000..a39230c252fe --- /dev/null +++ b/docs/html-intl/intl/ru/preview/features/scoped-folder-access.jd @@ -0,0 +1,124 @@ +page.title=Доступ к выделенным каталогам +page.keywords=preview,sdk,scoped directory access +page.tags=androidn + +@jd:body + + + +

Некоторым приложениям (например, фотоприложениям) обычно требуется доступ только к отдельным каталогам +внешнего хранилища, например, к каталогу Pictures. Существующие +методы доступа к внешним хранилищам не предназначены для обеспечения приложениям такого типа удобного +доступа к выделенным каталогам. Например:

+ +
    +
  • Запросы {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} +или {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} в манифесте +разрешают доступ ко всем общедоступным каталогам внешнего хранилища, хотя +вашему приложению может не требоваться такой уровень доступа.
  • +
  • При использовании инфраструктуры +Storage +Access Framework пользователь обычно выбирает каталоги через +системный пользовательский интерфейс, что не требуется, если приложение всегда использует один +и тот же внешний каталог.
  • +
+ +

Android N предоставляет новый упрощенный API для доступа +к распространенным каталогам внешнего хранилища.

+ +

Доступ к каталогу во внешнем хранилище

+ +

Используйте класс StorageManager для получения соответствующего экземпляра +StorageVolume. Затем создайте намерение, вызвав метод +StorageVolume.createAccessIntent() этого экземпляра. +Используйте это намерение для доступа к каталогам внешнего хранилища. Чтобы получить список +всех доступных томов, в том числе томов на съемных носителях, используйте +StorageManager.getVolumesList().

+ +

В следующем фрагменте кода приведен пример того, как открывать каталог +Pictures в главном общем хранилище:

+ +
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

Система пытается предоставить доступ к внешнему каталогу и, при необходимости, +запрашивает подтверждение доступа у пользователя с помощью упрощенного пользовательского интерфейса:

+ + +

Рисунок 1. Приложение запрашивает +доступ к каталогу Pictures.

+ +

Если пользователь предоставляет доступ, система вызывает переопределенный метод +onActivityResult() с кодом результата +Activity.RESULT_OK, а также данные намерения, содержащие URI. Используйте +предоставленный URI для доступа к данным каталога аналогично использованию URI, +возвращаемых +Storage +Access Framework.

+ +

Если пользователь не предоставляет доступ, система вызывает переопределенный метод +onActivityResult() с кодом результата +Activity.RESULT_CANCELED и отсутствующими данными намерения.

+ +

Примечание. При получении доступа к определенному внешнему каталогу +приложение также получает доступ к вложенным в него каталогам.

+ +

Доступ к каталогу на съемном носителе

+ +

Чтобы использовать доступ к выделенным каталогам на съемном носителе, +сначала нужно добавить объект {@link android.content.BroadcastReceiver}, отслеживающий уведомления +{@link android.os.Environment#MEDIA_MOUNTED}, например:

+ +
+<receiver
+    android:name=".MediaMountedReceiver"
+    android:enabled="true"
+    android:exported="true" >
+    <intent-filter>
+        <action android:name="android.intent.action.MEDIA_MOUNTED" />
+        <data android:scheme="file" />
+    </intent-filter>
+</receiver>
+
+ +

Когда пользователь подключает съемный носитель, например SD-карту, система отправляет уведомление +{@link android.os.Environment#MEDIA_MOUNTED}. Это уведомление +предоставляет в данных намерения объект StorageVolume, который вы можете использовать +для доступа к каталогам на съемном носителе. В следующем примере показано, +как осуществляется доступ к каталогу Pictures на съемном носителе:

+ +
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+    mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

Советы и рекомендации

+ +

По возможности оставляйте постоянный URI для доступа к внешнему каталогу, чтобы приложению не +приходилось многократно запрашивать у пользователя разрешение на доступ. После предоставления доступа пользователем вызовите метод +getContentResolver().takePersistableUriPermssion() для +URI доступа к каталогу. Система сохранит постоянный URI и при последующих запросах +доступа будет возвращать ответ RESULT_OK. Таким образом, приложение не будет постоянно выводить +окно с запросом подтверждения пользователя.

+ +

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

diff --git a/docs/html-intl/intl/ru/preview/features/security-config.jd b/docs/html-intl/intl/ru/preview/features/security-config.jd new file mode 100644 index 000000000000..ff3494fd278e --- /dev/null +++ b/docs/html-intl/intl/ru/preview/features/security-config.jd @@ -0,0 +1,744 @@ +page.title=Конфигурация сетевой безопасности +page.keywords=preview,security,network + +@jd:body + + + + +

+ В Android N имеется функция "Конфигурация сетевой безопасности", + позволяющая приложениям настраивать свои параметры сетевой безопасности в защищенном + декларативном файле конфигурации без изменения программного кода приложения. Эти параметры можно + настроить для определенных областей и приложений. Основные + возможности этой функции: +

+ +
    +
  • + Пользовательские якоря доверия. Настройка доверенных центров сертификации (ЦС) + для защищенных соединений приложения. Примером может служить + настройка доверия определенным самозаверенным сертификатам или ограничение + набора общих ЦС, которым доверяет приложение. +
  • + +
  • + Замена при отладке. Безопасная отладка защищенных соединений приложения + без дополнительного риска для установленной базы. +
  • + +
  • + Отказ от передачи данных открытым текстом. Защита приложений от + случайной передачи данных открытым текстом. +
  • + +
  • + Прикрепление сертификатов. Ограничение защищенных соединений приложения + определенными сертификатами. +
  • +
+ + +

Добавление файла конфигурации безопасности

+ +

+ Функция конфигурации сетевой безопасности использует файл XML, где вы можете указать + настройки своего приложения. Вы должны включить в манифест своего приложения + запись, указывающую на этот файл. В следующем отрывке кода из манифеста + показано, как создать такую запись: +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+...
+<app ...>
+    <meta-data android:name="android.security.net.config"
+               android:resource="@xml/network_security_config" />
+    ...
+</app>
+
+ +

Настройка доверенных ЦС

+ +

+ Приложению может потребоваться возможность доверять пользовательскому набору центров сертификации (ЦС) вместо набора ЦС платформы, установленного по умолчанию. + Наиболее распространенные причины: +

+ +
    +
  • Подключение к узлу с пользовательским ЦС (самозаверенным, + внутренним корпоративным ЦС и т. д.) +
  • + +
  • Ограничение списка только доверенными ЦС вместо + предустановленных. +
  • + +
  • Добавление дополнительных ЦС, не установленных в системе, в список доверенных. +
  • +
+ +

+ По умолчанию защищенные соединения всех приложений (например, TLS, HTTPS) доверяют + предустановленным системным ЦС, а приложения для API уровня 23 + (Android M) и ниже также по умолчанию доверяют ЦС, добавленным пользователем. Приложение + может настраивать свои соединения, используя {@code base-config} (для + настройки на уровне приложения) или {@code domain-config} (для настройки на уровне + доменов). +

+ + +

Настройка пользовательского ЦС

+ +

+ Предположим, вы хотите подключиться к своему узлу, использующему самозаверенный сертификат SSL, + или к узлу, чей сертификат SSL был выпущен закрытым ЦС, + которому вы доверяете, например внутренним ЦС вашей компании. +

+ +

+ res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ Добавьте самозаверенный сертификат или сертификат закрытого ЦС в формате PEM или DER в + {@code res/raw/my_ca}. +

+ + +

Ограничение набора доверенных ЦС

+ +

+ Если приложению не нужно доверять всем ЦС, которым доверяет система, для него + можно указать сокращенный набор доверенных ЦС. Это позволит защитить + приложение от поддельных сертификатов, выпущенных любыми другими ЦС. +

+ +

+ Настройка ограниченного набора доверенных ЦС похожа на настройку доверия пользовательскому ЦС для определенного домена, за тем исключением, + что в ресурсе указывается несколько ЦС. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">secure.example.com</domain>
+        <domain includeSubdomains="true">cdn.example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/trusted_roots"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ Добавьте список доверенных ЦС в формате PEM или DER в {@code res/raw/trusted_roots}. + Обратите внимание, что файл в формате PEM должен содержать только данные PEM + без какого-либо дополнительного текста. Вы также можете указать несколько элементов + <certificates> +вместо одного. +

+ + +

+ Добавление дополнительных ЦС в доверенные +

+ +

+ Приложению может потребоваться доверять дополнительным ЦС, которые не входят в список доверенных ЦС системы. + Это может быть связано с тем, что эти ЦС еще не добавлены в систему или + не соответствуют требованиям для включения в систему Android. Приложение + может добавить такие ЦС в доверенные, указав несколько источников сертификатов для + конфигурации. +

+

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="@raw/extracas"/>
+            <certificates src="system"/>
+        </trust-anchors>
+    </base-config>
+</network-security-config>
+
+

+ + +

Настройка конфигурации ЦС для отладки

+ +

+ При отладке приложения, которое использует для подключения протокол HTTPS, вам может потребоваться + подключение к локальному серверу разработки, у которого нет сертификата SSL + для рабочего сервера. Чтобы выполнить отладку без изменения кода + приложения, вы можете указать ЦС для отладки, + которые входят в число доверенных, только если для параметра +android:debuggable + установлено значение {@code true} с использованием {@code debug-overrides}. Обычно среды разработки и инструменты + сборки устанавливают этот флаг автоматически для всех сборок, кроме выпускаемой версии. +

+ +

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

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="@raw/debug_cas"/>
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+

+ + +

Отказ от передачи данных открытым текстом

+ +

+ Приложения, которым нужно подключаться к узлам только через защищенные соединения, + могут отказаться от поддержки передачи данных открытым текстом (с использованием нешифрованного протокола HTTP + вместо HTTPS) на эти узлы. Эта возможность помогает предотвратить + случайные неполадки в приложениях, связанные с изменениями URL-адресов, предоставленных внешними + источниками, например, инфраструктурными серверами. + Дополнительную информацию можно найти в описании метода {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted + NetworkSecurityPolicy.isCleartextTrafficPermitted()}. +

+ +

+ Например, приложение может потребовать обязательное использование протокола HTTPS для всех соединений с {@code + secure.example.com}, чтобы защитить важный трафик + от небезопасных сетей. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config usesCleartextTraffic="false">
+        <domain includeSubdomains="true">secure.example.com</domain>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Прикрепление сертификатов

+ +

+ Обычно приложение доверяет всем предустановленным ЦС. Если любой из этих ЦС выпустит + поддельный сертификат, приложение подвергается риску атаки с перехватом данных. + Некоторым приложениям требуется ограничить принимаемый набор сертификатов + либо ограничением списка доверенных ЦС, либо прикреплением сертификатов. +

+ +

+ Прикрепление сертификатов осуществляется путем предоставления набора сертификатов через хэш + открытого ключа (SubjectPublicKeyInfo сертификата X.509). В этом случае цепочка + сертификатов будет действительна, только если она содержит хотя бы один + прикрепленный открытый ключ. +

+ +

+ При использовании прикрепления сертификатов всегда необходимо добавлять резервный + ключ, чтобы работа приложения не пострадала при необходимости перехода на новые ключи или смены ЦС (при + прикреплении сертификата ЦС или посредника этого ЦС). + Без резервного ключа для восстановления возможности подключения приложения потребуется срочно выпускать + его обновление. +

+ +

+ Кроме того, существует возможность установить срок прикрепления, по истечении которого + прикрепление не выполняется. Это помогает предотвратить проблемы с подключением + приложений, которые не были обновлены. Однако установка срока действия + прикреплений позволяет обойти их ограничения. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <pin-set expiration="2018-01-01">
+            <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+            <!-- backup pin -->
+            <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Поведение при наследовании конфигурации

+ +

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

+ +

+ Если в определенной записи не установлено значение, используется значение из следующей более общей записи. + Значения, не установленные в {@code domain-config}, + берутся из родительского элемента {@code domain-config} в многоуровневых конфигурациях или из элемента {@code + base-config} в простых конфигурациях. Для значений, не установленных в {@code base-config}, используются + значения по умолчанию для платформы. +

+ +

+ Рассмотрим пример, где все соединения с доменами нижнего уровня {@code + example.com} должны использовать пользовательский набор ЦС. Кроме того, для этих доменов разрешена + передача данных открытым текстом, кроме случаев подключения к {@code + secure.example.com}. При вложении конфигурации {@code + secure.example.com} в конфигурацию {@code example.com} не требуется дублирование + {@code trust-anchors}. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+        <domain-config cleartextTrafficPermitted="false">
+            <domain includeSubdomains="true">secure.example.com</domain>
+        </domain-config>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Формат файла конфигурации

+ +

+ Функция конфигурации сетевой безопасности использует формат файлов XML. + Общая структура файла показана в следующем примере кода: +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </base-config>
+
+    <domain-config>
+        <domain>android.com</domain>
+        ...
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+        <pin-set>
+            <pin digest="...">...</pin>
+            ...
+        </pin-set>
+    </domain-config>
+    ...
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+ +

+ В следующих разделах содержится описание синтаксиса и других деталей формата + файла. +

+ +

+ <network-security-config> +

+ +
+
+ Может содержать: +
+ +
+ 0 или 1 <base-config>
+ Любое количество <domain-config>
+ 0 или 1 <debug-overrides> +
+
+ +

+ <base-config> +

+ +
+
+ Синтаксис: +
+
+ +
+<base-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</base-config>
+
+
+
+ Может содержать: +
+ +
+ <trust-anchors> +
+ +
+ Описание: +
+ +
+ Конфигурация по умолчанию, используемая всеми подключениями к узлам, не входящим в domain-config. + + +

+ Если значения не установлены, используются значения по умолчанию для платформы. Конфигурация по умолчанию + для приложений, использующих API уровня 24 или выше: +

+ +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+    </trust-anchors>
+</base-config>
+
+Конфигурация по умолчанию для приложений, использующих API уровня 23 или ниже: +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+        <certificates src="user" />
+    </trust-anchors>
+</base-config>
+
+ +
+
+ +

<domain-config>

+
+
Синтаксис:
+
+
<domain-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</domain-config>
+
+ +
Может содержать:
+ +
+1 или более <domain> +
0 или 1 <trust-anchors> +
0 или 1 <pin-set> +
Любое количество вложенных <domain-config>
+ +
Описание
+
Конфигурация, используемая для подключения к конкретным узлам, определенными элементами {@code domain}. + +

Если для узла назначения существует несколько элементов {@code domain-config}, используется правило для наиболее конкретного (самого длинного) совпадающего домена. +

+
+ + +

<domain>

+ +
+
+ Синтаксис: +
+ +
+
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+
+
+ +
+ Атрибуты: +
+ +
+
+
+ {@code includeSubdomains} +
+ +
+ Если значение равно {@code "true"}, то правило домена соответствует указанному домену и всем доменам его + нижних уровней. В противном случае правило действует + только для полных совпадений. +
+
+
+ +
+ Описание: +
+
+ +

<debug-overrides>

+ +
+
+ Синтаксис: +
+ +
+
+<debug-overrides>
+    ...
+</debug-overrides>
+
+
+ +
+ Может содержать: +
+ +
+ 0 или 1 <trust-anchors> +
+ +
+ Описание: +
+ +
+ Переопределения применяются, когда параметр android:debuggable + имеет значение {@code "true"}, что обычно верно для промежуточных сборок, + создаваемых средами разработки и инструментами сборки. Якоря доверия, указанные в {@code + debug-overrides}, добавляются ко всем другим конфигурациям, и прикрепление + сертификатов не выполняется, если цепочка сертификатов сервера использует один из этих + якорей доверия, предназначенных только для отладки. Если параметр android:debuggable + имеет значение {@code "false"}, этот раздел полностью игнорируется. +
+
+ +

<trust-anchors>

+
+
+ Синтаксис: +
+ +
+
+<trust-anchors>
+...
+</trust-anchors>
+
+
+ +
+ Может содержать: +
+ +
+ Любое количество <certificates> +
+ +
+ Описание: +
+ +
+ Набор якорей доверия для защищенных соединений. +
+
+ + +

<certificates>

+
+
Синтаксис:
+
<certificates src=["system" | "user" | "raw resource"]
+              overridePins=["true" | "false"] />
+
+
Описание:
+
Набор сертификатов X.509 для элементов {@code trust-anchors}.
+ +
Атрибуты:
+
+
{@code src}
+
+Источник сертификатов ЦС может представлять собой +
    +
  • идентификатор исходного ресурса, указывающий на файл с сертификатами X.509. + Сертификаты должны быть закодированы в формате DER или PEM. При использовании сертификатов PEM + файл не должен содержать ничего, кроме данных PEM, например, + комментариев. +
  • + +
  • {@code "system"} для предустановленных в системе сертификатов ЦС +
  • + +
  • {@code "user"} для добавленных пользователем сертификатов ЦС +
  • +
+
+ +
{@code overridePins}
+
+

+ Указывает, пропускается ли прикрепление сертификатов для ЦС из этого источника. Если значение равно {@code + "true"}, то прикрепление сертификатов не выполняется для цепочек сертификатов, проходящих через один из ЦС этого + источника. Это применяется для отладки ЦС + или для разрешения пользователю перехватывать защищенный трафик вашего приложения. +

+ +

+ По умолчанию используется значение {@code "false"}, но если указан элемент {@code debug-overrides}, + то по умолчанию используется значение {@code "true"}. +

+
+
+
+ + +

<pin-set>

+ +
+
+ Синтаксис: +
+ +
+
+<pin-set expiration="date">
+...
+</pin-set>
+
+
+ +
+ Может содержать: +
+ +
+ Любое количество <pin> +
+ +
+ Описание: +
+ +
+ Набор прикрепленных открытых ключей. Чтобы защищенное соединение было доверенным, один из + открытых ключей в цепочке доверия должен входить в набор прикрепленных ключей. Формат ключей указан в + <pin>. +
+ +
+ Атрибуты: +
+ +
+
+
+ {@code expiration} +
+ +
+ Дата в формате {@code yyyy-MM-dd}, начиная с которой истекает срок прикрепления + и оно отключается. Если этот атрибут не установлен, + срок прикрепления не истекает. +

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

+
+
+
+
+ +

<pin>

+
+
+ Синтаксис: +
+ +
+
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+    SubjectPublicKeyInfo (SPKI)</pin>
+
+
+ +
+ Атрибуты: +
+ +
+
+
+ {@code digest} +
+ +
+ Алгоритм хэширования, используемый для создания прикреплений. В настоящее время поддерживается только алгоритм + {@code "SHA-256"}. +
+
+
+
diff --git a/docs/html-intl/intl/ru/preview/features/tv-recording-api.jd b/docs/html-intl/intl/ru/preview/features/tv-recording-api.jd new file mode 100644 index 000000000000..ff1c84e71d8d --- /dev/null +++ b/docs/html-intl/intl/ru/preview/features/tv-recording-api.jd @@ -0,0 +1,120 @@ +page.title=Запись ТВ +page.keywords=preview,sdk,tv,recording +page.tags=androidn + +@jd:body + + + +

Службы телевидения позволяют пользователю ставить воспроизведение телеканалов на паузу и возобновлять его, используя +для этого API-интерфейсы с временным сдвигом. Android N расширяет возможности временного сдвига, +позволяя пользователю сохранять несколько записанных сеансов.

+ +

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

+ +

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

+ +

Указание на поддержку записи

+ +

Чтобы сообщить системе, что ваша служба ТВ поддерживает запись, выполните +следующие шаги:

+ +
    +
  1. В методе TvInputService.onCreate() создайте новый объект +TvInputInfo, используя класс TvInputInfo.Builder. +
  2. +
  3. При создании нового объекта TvInputInfo вызовите метод +setCanRecord(true) до вызова build(), +чтобы указать на то, что служба поддерживает запись.
  4. +
  5. Зарегистрируйте объект TvInputInfo в системе посредством вызова метода +TvInputService.updateTvInputInfo().
  6. +
+ +

Запись сеанса

+ +

Когда служба ТВ зарегистрирует поддержку записи, +система будет вызывать ваш метод +TvInputService.onCreateRecordingSession(), когда ей потребуется доступ +к функции записи в вашем приложении. Реализуйте собственный подкласс +TvInputService.RecordingSession и возвращайте его +при получении обратного вызова onCreateRecordingSession(). + Этот подкласс отвечает за переключение на данные нужного канала, +запись запрошенных данных, а также передачу системе информации о состоянии записи +и ошибках.

+ +

Когда система будет вызывать метод RecordingSession.onTune(), передавая в него +URI канала, приложение должно переключаться на канал, указанный URI. Сообщите системе о том, что +приложение настроилось на желаемый канал, вызвав метод notifyTuned(). +Если приложению не удалось настроиться на желаемый канал, оно должно вызвать метод +notifyError().

+ +

Затем система передает обратный вызов RecordingSession.onStartRecording(). + После этого приложение должно сразу же начать запись. Когда система передает +этот обратный вызов, она может указать URI с информацией о программе +для записи. После завершения записи эти данные нужно +скопировать в таблицу данных RecordedPrograms.

+ +

Наконец, система вызывает метод RecordingSession.onStopRecording(). +В этот момент приложение должно сразу же прекратить запись. Также вам нужно будет +создать запись в таблице RecordedPrograms. Эта запись должна +содержать URI записанных данных в столбце +RecordedPrograms.COLUMN_RECORDING_DATA_URI, а также любую информацию +о программе, которая была предоставлена системой в исходном вызове +onStartRecording().

+ +

Более подробную информацию о доступе к таблице RecordedPrograms +можно найти в разделе Управление записанными сеансами.

+ +

Обработка ошибок записи

+ +

Если во время записи возникла ошибка, в результате которой записанные данные стали непригодными для использования, +то об этом нужно сообщить системе, вызвав метод RecordingSession.notifyError(). +Аналогичным образом, вы можете вызвать метод notifyError() после создания сеанса записи, +чтобы сообщить системе, что приложение больше не может записывать сеансы.

+ +

Если в процессе записи возникла ошибка, но вы хотите предоставить пользователям +приемлемую часть записи для воспроизведения, вызовите +RecordingSession.notifyRecordingStopped(), чтобы дать системе возможность +использовать частичный сеанс.

+ +

Управление записанными сеансами

+ +

Система хранит информацию обо всех записанных сеансах всех +приложений, поддерживающих запись каналов, в таблице поставщиков контента TvContract.RecordedPrograms. + Эта информация доступна через URI контента +RecordedPrograms.Uri. Используйте API-интерфейсы поставщиков контента для +чтения, добавления и удаления записей из этой таблицы.

+ +

Дополнительную информацию о работе с данными поставщиков контента можно найти в разделе + +Основные сведения о поставщике контента.

+ +

Советы и рекомендации

+ +

Объем хранилищ на телевизионных устройствах может быть ограничен, поэтому следует разумно +распределять доступные хранилища для хранения записанных сеансов. Используйте +RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE), когда для сохранения записанного сеанса +недостаточно места.

+ +

Когда пользователь инициирует запись, приложение должно как можно скорее начать записывать +данные. Для этого рекомендуется заранее выполнить все продолжительные задачи, +такие как получение доступа к хранилищу и распределение свободного места, когда система передает обратный вызов +onCreateRecordingSession(). Это позволяет сразу же начать +запись после получения обратного вызова onStartRecording(). +

diff --git a/docs/html-intl/intl/ru/preview/index.jd b/docs/html-intl/intl/ru/preview/index.jd new file mode 100644 index 000000000000..9bb56baccde8 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/index.jd @@ -0,0 +1,120 @@ +page.title=Android N Developer Preview +page.tags="preview","developer" +meta.tags="предварительная версия", "android" +fullpage=true +forcelocalnav=true +header.hide=1 +footer.hide=1 +@jd:body + + + +
+
+
+ +
+

Android N Developer Preview

+

+ Подготовьтесь к выходу Android N! +Протестируйте свои приложения на Nexus и других устройствах. Поддержите нововведения +системы, позволяющие снизить потребление энергии и памяти. +Добавьте в свои приложения многооконный режим, +возможность прямой отправки ответов из уведомлений и другие функции. +

+ + + + Начало работы + +
+
+ +
+
+
+
+
+
+
+ + + + + +
+

Ресурсы

+
+ Важная информация, которая поможет вам подготовить ваши приложения для работы в Android N. +
+ +
+ +
+
+ diff --git a/docs/html-intl/intl/ru/preview/j8-jack.jd b/docs/html-intl/intl/ru/preview/j8-jack.jd new file mode 100644 index 000000000000..fcd8d70ba047 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/j8-jack.jd @@ -0,0 +1,183 @@ +page.title=Возможности языка Java 8 +page.keywords="android N", "Java 8", "Jack" +@jd:body + + + +

В Android N появилась поддержка возможностей языка Java 8, +которые можно использовать при разработке приложений для Android N. +На данной странице приведены описания новых возможностей языка, поддерживаемых в Android N +Preview, объяснено как настроить проект для их использования, а также указаны известные +проблемы, с которыми можно столкнуться. +

+ +

Для использования этих функций необходимо загрузить и установить Android +Studio 2.1 (предварительная версия) и Android N Preview SDK, который включает набор инструментов +Jack и обновленный подключаемый модуль Android для Gradle. Если вы еще не установили +Android N Preview SDK, см. Настройка среды разработки для Android N.

+ + + +

+ Примечание. Использование новых возможностей языка Java 8 не является обязательным требованием +при разработке приложений для платформы Android N. Если вы не хотите +писать код с использованием возможностей языка Java 8, можно указать +Java 7 в качестве значения совместимости для проекта, однако все-равно +необходимо будет выполнить компиляцию с JDK 8 для осуществления сборки на платформе Android N. +

+ +

+ Поддерживаемые API-интерфейсы и возможности языка Java 8 +

+ +

+ В настоящее время Android поддерживает не все возможности языка Java 8. +Однако при разработке приложений для +Android N Preview доступны следующие функции. +

+ + + + +

+ Кроме того, доступны следующие API-интерфейсы для реализации возможностей языка Java 8. +

+ +
    +
  • API-интерфейсы отражения и языковых функций: +
  • + +
  • +
      +
    • {@code java.lang.FunctionalInterface}; +
    • + +
    • {@code java.lang.annotation.Repeatable}; +
    • + +
    • {@code java.lang.reflect.Method.isDefault()}; +
    • + +
    • а также API-интерфейсы отражения, связанные с повторяющимися примечаниями, например, +{@code AnnotatedElement.getAnnotationsByType(Class)}. +
    • +
    +
  • +
  • Вспомогательные API: +
  • + +
  • +
      +
    • {@code java.util.function}. +
    • +
    +
  • +
+ +

+ Примечание. В Android N реализация +лямбда-выражений выполнена с помощью анонимных классов. Данный подход обеспечивает их +обратную совместимость и возможность выполнения в предыдущих версиях Android. При тестировании +лямбда-выражений в предыдущих версиях перейдите в файл {@code + build.gradle} и установите для параметров {@code compileSdkVersion} и {@code + targetSdkVersion} значения 23 или ниже. +

+ +

+ Активация возможностей Java 8 и набора инструментов Jack +

+ +

+ Для использования новых возможностей языка Java 8 необходимо также использовать +новый набор инструментов Jack. С его помощью +Android компилирует языковой источник Java в считываемый Android байткод Dalvik Executable (dex). +В Jack предусмотрен собственный формат библиотеки {@code .jack}, большинство функциональных возможностей набора +инструментов предоставляется в рамках одного инструмента: перекомпоновка, сжатие, обфускация и +использование нескольких файлов DEX. +

+ +

Ниже представлено сравнение двух наборов инструментов, используемых для сборки файлов DEX в Android.

+
    +
  • Старый набор инструментов javac:
    + javac ({@code .java} --> {@code .class}) --> dx ({@code + .class} --> {@code .dex}) +
  • + +
  • Новый набор инструментов Jack:
    + Jack ({@code .java} --> {@code .jack} --> {@code .dex}) +
  • +
+ +

+ Настройка Gradle +

+ +

+ Чтобы использовать возможности языка Java 8 и набор инструментов Jack для проекта, добавьте +в файл модуля {@code build.gradle} следующий код: +

+ +
+android {
+  ...
+  defaultConfig {
+    ...
+    jackOptions {
+      enabled true
+    }
+  }
+  compileOptions {
+    sourceCompatibility JavaVersion.VERSION_1_8
+    targetCompatibility JavaVersion.VERSION_1_8
+  }
+}
+
+ +

+ Известные проблемы +

+ +

+ Функция Instant Run, появившаяся в Android Studio 2.0 (Beta), не работает +с набором инструментов Jack и будет отключена при его использовании. +

+ +

Поскольку набор инструментов Jack не создает промежуточные файлы классов при компиляции +приложения, инструменты, которые используют такие файлы, пока с Jack не работают. Примеры таких +инструментов приведены ниже.

+ +
    +
  • Детекторы Lint, работающие c файлами классов. +
  • + +
  • Инструменты и библиотеки, которым требуются файлы классов приложения (например, JaCoCo +и Mockito)
  • +
+ +

Если вы обнаружите другие проблемы во время использования набора инструментов Jack, сообщите о них.

\ No newline at end of file diff --git a/docs/html-intl/intl/ru/preview/overview.jd b/docs/html-intl/intl/ru/preview/overview.jd new file mode 100644 index 000000000000..e78af040f8ea --- /dev/null +++ b/docs/html-intl/intl/ru/preview/overview.jd @@ -0,0 +1,440 @@ +page.title=Обзор программы +page.metaDescription=Подготовьте свои приложения к выходу следующей версии Android. +page.image=images/cards/card-n-overview_2x.png +meta.tags="предварительная версия", "разработчик", "android" +page.tags="preview", "developer", "android" + +@jd:body + + +

+ Добро пожаловать в программу Android N Developer Preview, участники +которой получают все необходимое для тестирования и оптимизации +своих приложений для следующей версии платформы Android. Участие в программе бесплатно, вам предоставляется возможность использовать +инструменты N Developer Preview сразу же после их загрузки. +

+ + + + + + + +
+
+
+
+
+ Образы для эмулятора и оборудования +
+ +

+ Запустите и протестируйте свои приложения на широком спектре устройств или на эмуляторе. + +

+
+ +
+
+ Самый актуальный код платформы +
+ +

+ Во время знакомства с предварительной версией платформы мы будем предоставлять ежемесячные обновления, поэтому вы сможете протестировать самые актуальные изменения в платформе. +

+
+ +
+
+ Приоритетное исправление ошибок, зафиксированных разработчиками +
+ +

+ В течение первых нескольких недель мы будем рассматривать отчеты об ошибках, поступающие от разработчиков, в приоритетном порядке, +поэтому не теряйте времени и приступайте к тестированию и составлению отзывов как можно раньше. +

+
+ +
+ +
+ + +
+
+ Новые возможности и новые функции +
+ +

+ Заранее начните реализовывать в своих приложениях поддержку расширенной функциональности платформы. +

+
+ +
+
+ Получение обновлений по беспроводной связи +
+ +

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

+
+ +
+
+ Отзывы и поддержка +
+ +

+ Отправляйте отзывы и сообщайте о проблемах с помощью нашей +системы отслеживания ошибок. Общайтесь с другими +разработчиками в +сообществе разработчиков для Android N. +

+
+
+
+
+ + + +

График и обновления

+ + +

+ Срок действия программы N Developer Preview запланирован с 9 марта 2016 г. и до выпуска окончательной версии Android N +для AOSP и OEM, который состоится в третьем квартале 2016 г. +

+ +

+ На ключевых этапах разработки платформы мы предоставим обновления для среды разработки и +тестирования. Выход обновлений запланирован каждый месяц (с интервалом +4-6 недель). Основные этапы показаны ниже. +

+ +
    +
  • Предварительная версия 1 (первоначальный выпуск, альфа-версия)
  • +
  • Предварительная версия 2 (инкрементальное обновление, бета-версия)
  • +
  • Предварительная версия 3 (инкрементальное обновление, бета-версия)
  • +
  • Предварительная версия 4 (окончательные версии API и официальный SDK, публикация в Google Play)
  • +
  • Предварительная версия 5 (практически готовые системные образы для заключительного тестирования)
  • +
  • Выпуск окончательной версии в AOSP и экосистеме
  • +
+ +

+ Каждое обновление включает инструменты SDK, системные образы предварительной версии, эмуляторы, справочную +документацию и описание отличий в API. +

+ +

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

+ +

+ В предварительных версиях 4 и 5 вам будет предоставлен доступ к окончательным +версиям API-интерфейсов и SDK системы N, а также к практически готовым системным образам +для тестирования работоспособности и возможностей системы. Android N будет содержать API +стандартного уровня. Вы сможете начать заключительное тестирование совместимости старых +приложений и отладить новый код, в котором используются API-интерфейсы или возможности системы N. +

+ +

+ Начиная с предварительной версии 4, вы сможете публиковать приложения на +устройствах под управлением Android N, используя API-интерфейсы официального уровня, например на +пользовательских устройствах, участвующих в программе бета-тестирования Android. Вы можете +выполнить публикацию сначала на альфа- и бета-каналах Google Play для тестирования +приложений с помощью пользователей бета-версии Android перед их размещением в +магазине для общего доступа. +

+ +

+ Мы настоятельно рекомендуем вам в ходе тестирования и разработки приложений для Android N постоянно +обновлять вашу среду разработки по мере выхода обновлений +предварительной версии. Для упрощения процесса вы можете зарегистрировать тестовые устройства в программе +бета-тестирования Android и получать обновления по беспроводной связи на +каждом ключевом этапе. Кроме того, обновленные образы предварительной версии можно загрузить +и записать во флэш-память устройства вручную. +

+ +

+ Мы будем сообщать о появлении обновлений предварительной версии в блоге разработчиков Android, а +также на этом сайте и в сообществе разработчиков для +Android N. +

+ + +

Состав программы N Developer Preview

+ +

+ N Developer Preview содержит все, что необходимо для тестирования ваших существующих +приложений на экранах различных размеров, тестирования с использованием различных сетевых технологий, наборов микросхем ЦП и графических процессоров, +а также различных архитектур оборудования. +

+ +

Инструменты SDK

+ +

С помощью менеджера SDK в Android Studio вы сможете загрузить следующие компоненты:

+ +
    +
  • SDK и инструменты N Developer Preview; +
  • системный образ эмулятора (32- и 64-разрядная версии) для N Developer Preview; +
  • системный образ эмулятора для Android TV (32-разрядная версия) N Developer Preview; +
  • поддерживаемые библиотеки N Developer Preview (для новых шаблонов приложений). +
+ +

+ При необходимости мы предоставляем обновления инструментов разработки на каждом ключевом этапе. +

+ +

Системные образы оборудования

+ +

+ N Developer Preview включает системные образы для Nexus и других устройств, которые можно использовать при +тестировании и разработке на физических устройствах. См. полный список аппаратных образов на странице Образы устройств. + +

+ +

+ Мы будем предоставлять обновленные системные образы для этих устройств на каждом ключевом этапе. Вы +также сможете загружать и записывать обновленные системные образы во флэш-память тестовых устройств +вручную всегда, когда это будет необходимо. Это особенно удобно для автоматических +сред тестирования, где может требоваться многократная перезапись в флэш-память +устройства. +

+ +

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

+ +

Обновления по беспроводной связи в рамках программы бета-тестирования Android

+ +

+ Новой функцией Android N является программа получения обновлений по сети, которая автоматически +предоставляет последние обновления предварительной версии Android N непосредственно на устройства, зарегистрированные +в программе тестирования. Участие в программе бесплатно и доступно всем, кто имеет поддерживаемые устройства, +привязанные к учетной записи Google. +

+ +

+ Для регистрации посетите веб-сайт программы бета-тестирования +Android. Вы увидите +список всех устройств, привязанных к учетной записи, которые можно зарегистрировать +в программе бета-тестирования Android. +

+ +
    +
  1. Выберите устройства, для которых требуется получать обновления Android N. +
  2. Нажмите Enroll, прочтите условия использования и подтвердите согласие с ними, затем нажмите OK. +
+ +

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

+ +

+ При получении устройством обновлений рекомендуется загружать и +устанавливать максимально быстро. Это требуется, чтобы быть в курсе +последних изменений системного интерфейса, возможностей системы, особенностей API-интерфейсов и функций. +

+ +

+ По завершению программы тестирования Developer Preview на зарегистрированные устройства +будет отправлено обновление с официальной версией Android N. +

+ +

+ Вы можете отменить регистрацию устройств в программе бета-тестирования Android в любое время на сайте +программы. Перед отменой регистрации выполните резервное копирование данных на +устройстве. +

+ +

Примечание. +При отмене регистрации на вашем устройстве выполняется восстановление заводских настроек +для последней версии +Android 6.0 Marshmallow (не обязательно той версии, которая +была установлена до регистрации устройства). Для обеспечения правильности установки +ваши данные будут удалены с устройства, включая контакты, сообщения, +фотографии и др. +

+ +

Документация и примеры кода

+ +

+ Для ознакомления с Android N на сайте программы Developer Preview +представлены следующие документы. +

+ +
    +
  • Настройка в целях разработки для +Android N – содержит +пошаговые инструкции по началу работы.
  • +
  • Обзор изменений в +работе системы – указывает ключевые области для тестирования.
  • +
  • Документация по новым API-интерфейсам, включая Обзор API, доступный для загрузки +Справочник по +API и подробные руководства для разработчиков, в которых освещаются такие ключевые возможности, как поддержка многооконного режима, +группирование уведомлений, поддержка нескольких языковых настроек и др. +
  • Примеры кода, где +можно посмотреть реализацию поддержки разрешений доступа и других новых функций. +
  • Примечания к выпуску +для текущей версии N Developer Preview, включая информацию об изменениях и +отчеты о различиях. +
+ +

Справочник по API, доступный для загрузки

+ +

+ На этапе ранних обновлений предварительной версии вы сможете загрузить последний +Справочник по API +для платформы Android N в виде zip-архива. В нем также +содержится отчет о различиях, позволяющий легко определить изменения в API-интерфейсах между +API 23 и предыдущими версиями. +

+ +

+ После окончательного утверждения API-интерфейсов Android N и назначения официального уровня API, +вам будет предоставлен онлайн-справочник по этому API-интерфейсу по адресу https://developer.android.com. +

+ +

+ Ресурсы поддержки +

+ +

+ При тестировании и разработке приложений в рамках программы N Developer Preview используйте следующие каналы +для отправки отчетов о проблемах и отзывов. +

+ +
    +
  • Система отслеживания ошибок +в N Developer Preview является основным каналом для отправки отзывов. С его помощью можно сообщать об ошибках, проблемах +производительности и отправлять общие отзывы. Вы также сможете ознакомиться со списком +известных проблем и +выполнить поиск обходных путей для них. Мы будем держать вас в курсе по вашему вопросу после его сортировки и отправки +на рассмотрение инженерам Android.
  • +
  • Сообщество разработчиков для Android N – это +сообщество Google+, где можно общаться с другими разработчиками, работающими с +Android N. Делитесь в сообществе своими наблюдениями и идеями, а также находите ответы на +вопросы об Android N. Мы будем просматривать ваши сообщения и предоставлять ответы +и необходимые рекомендации.
  • +
+ +

Выбор целевого уровня, предварительные версии API и публикация приложений

+ +

+ Платформа N Developer Preview предоставляет ориентированные на разработку систему и библиотеку Android, +в которых отсутствуют API-интерфейсы стандартного уровня. Если вы не хотите +проверять свое приложение на совместимость (хотя мы настоятельно +рекомендуем сделать это), выберите целевую предварительную версию Android N, задав для +параметра targetSdkVersion +своего приложения значение “N”. +

+ +

+ В Android N Developer Preview представлены предварительные версии API-интерфейсов. +Они не будут официально публиковаться до выпуска окончательной версии пакета SDK, +намеченного на третий квартал 2016 г. Это значит, что в +API-интерфейсы могут вноситься небольшие изменения, особенно в первые недели после +запуска программы. Мы будем предоставлять вам сводку об изменениях с каждым +обновлением Android N Developer Preview. +

+ +

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

+ +

+ Политика Google Play однозначно запрещает публикацию приложений, разработанных для N Developer +Preview. Когда будет доступен окончательный SDK для Android N, вы сможете +установить в качестве целевого API-интерфейс Android N официального уровня и опубликовать приложение в Google +Play через альфа- и бета-каналы выпуска. Тем временем, если вы хотите распространить приложение, предназначенное для проверки под +Android N, используйте для этого электронную почту или разместите такие приложения на своем сайте +для прямой загрузки. +

+ +

+ После выхода полной версии Android N для AOSP и OEM, запланированного на третий квартал 2016 г., +можно будет публиковать приложения для Android N в общем доступе на +Google Play. +

+ + +

Начало работы

+ +

+ Чтобы приступить к тестированию своего приложения в Android N, выполните следующие действия. +

+ +
    +
  1. Ознакомьтесь с Обзором API +и сведениями об изменениях в работе, чтобы +получить представление о новых возможностях платформы и о том, как это может повлиять на ваши приложения. В частности, узнайте подробнее +о новых возможностях в отношении уведомлений и +поддержки многооконного режима.
  2. +
  3. Настройте свою среду, руководствуясь инструкциями в документе Настройка пакета SDK для предварительной версии +и рекомендациями по конфигурированию тестовых устройств.
  4. +
  5. Соблюдайте инструкции +по записи во флэш-память при выполнении записи системного образа Android N на устройство.
  6. +
  7. Просмотрите Справочник по APIпримеры кода Android N, чтобы узнать больше +о новых возможностях API-интерфейсов и о том, как использовать их в ваших приложениях. +
  8. Присоединяйтесь к сообществу разработчиков +Android N, чтобы всегда быть в курсе последних новостей и общаться с другими +разработчиками, работающими с новой платформой.
  9. +
+ +

+ Благодарим за участие в программе Android N Developer Preview! +

diff --git a/docs/html-intl/intl/ru/preview/samples.jd b/docs/html-intl/intl/ru/preview/samples.jd new file mode 100644 index 000000000000..1f674f38fe88 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/samples.jd @@ -0,0 +1,85 @@ +page.title=Примеры +page.tags="preview", "samples", "android" +page.image=images/cards/card-n-samples_2x.png +@jd:body + +

+ Следующие примеры кода представлены для Android N. Чтобы +загрузить примеры в Android Studio, выберите в меню File > Import +Samples. +

+ +

+ Примечание. Эти загружаемые проекты предназначены для +использования с Gradle и Android Studio. +

+ + +

Многооконный режим

+ +

+ В данном примере показаны преимущества многооконного +интерфейса для вашего приложения. +

+

+ +Загрузить с сайта GitHub +

+ +
+

Активные уведомления

+ +

+ В этом ранее созданном примере показана простая служба, которая отправляет +уведомления с помощью NotificationCompat. Каждое непрочитанное сообщение от пользователя +отправляется отдельным уведомлением. +

+

+ Этот пример был обновлен с использованием новых функций уведомлений, +доступных в Android N. +

+

+ +Загрузить с сайта GitHub +

+ +
+

Служба сообщений

+ +

+ В этом предварительно созданном примере показано, как использовать +NotificationManager для определения количества уведомлений, +отображаемого приложением. +

+

+ Этот пример был обновлен с использованием новых функций уведомлений, +доступных в Android N. +

+

+ +Загрузить с сайта GitHub +

+ +
+

Режим Direct Boot

+ +

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

+

+ +Загрузить с сайта GitHub +

+ +
+

Доступ к выделенным каталогам

+ +

+ В данном примере показано, как выполнять чтение и запись данных из определенных +каталогов при уменьшении числа требуемых разрешений. +

+

+ +Загрузить с сайта GitHub +

\ No newline at end of file diff --git a/docs/html-intl/intl/ru/preview/setup-sdk.jd b/docs/html-intl/intl/ru/preview/setup-sdk.jd new file mode 100644 index 000000000000..1fcbc0ce2567 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/setup-sdk.jd @@ -0,0 +1,226 @@ +page.title=Установка предварительной +версииmeta.keywords="предварительная версия", "android" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-sdk_2x.png + +@jd:body + + + + +

Создание приложений для Android N Preview требует некоторых обновлений среды разработки, +описанных в этом документе.

+ +

Чтобы просто протестировать совместимость вашего приложения на системном образе +Android N, следуйте рекомендациям руководства Тест на устройстве Android N.

+ + + + +

Установка Android Studio 2.1 (предварительная версия)

+ +

Платформа Android N добавляет поддержку возможностей языка Java 8, +которые требуют наличия нового компилятора, именуемого Jack. Последняя версия Jack +в настоящее время поддерживается только в Android Studio 2.1. Поэтому если вы хотите использовать возможности +языка Java 8 для +разработки своего приложения, вам понадобится Android Studio 2.1. В противном случае вам не потребуется использовать компилятор Jack, +однако все равно придется выполнить обновление до JDK 8 для компиляции под платформу Android N, +как описано ниже. +

+ + + +

Предварительная версия Android Studio 2.1 в настоящее время доступна на канале обновлений Canary. +Если у вас уже есть Android Studio +и вы не хотите обновлять ее до версии канала Canary, вы можете загрузить +Android Studio 2.1 для отдельной установки и использовать ее для разработки +под Android N, не затрагивая основную среду Android Studio. +

+ +

Чтобы загрузить Android Studio 2.1 для отдельной установки, выполните следующие шаги +(если вы хотите обновить существующую установку Android Studio до версии 2.1, начните с шага 4). +

+ +
    +
  1. Измените название существующей установки Android Studio, добавив к ней номер версии. +Таким образом, при установке новая версия не заменит собой существующую. +
  2. +
  3. Загрузите соответствующий ZIP-архив для своей операционной системы со +страницы загрузки канала Canary. +
  4. +
  5. Разархивируйте пакет и переместите содержимое Android Studio 2.1 в подходящее +место для приложений вашей системы, затем запустите программу установки.
  6. +
  7. Откройте окно "Settings" +(File > Settings для Windows/Linux, или +Android Studio > Preferences для Mac). В левой +панели выберите Appearance & Behavior > System Settings > +Updates. +
  8. +
  9. На панели "Updates" установите флажок Automatically +check updates for и выберите +Canary Channel в выпадающем списке. +
  10. +
+ +

Оставьте это окно настроек открытым для следующего шага.

+ + +

Установка N Preview SDK

+ +

Чтобы начать разработку с использованием API-интерфейсов Android N, необходимо установить +Android N Preview SDK в Android Studio, выполнив следующие шаги.

+ +
    +
  1. На открытой панели "Updates" (шаг 4 выше) +установите флажок Automatically +check updates for Android SDK и выберите +Preview Channel в выпадающем списке. +
  2. +
  3. Щелкните Check Now.
  4. + +
  5. В левой панели выберите Appearance & Behavior > System +Settings > Android SDK. + +
  6. Выберите вкладку SDK Platforms и установите флажок +Android N Preview.
  7. + +
  8. Откройте вкладку SDK Tools и установите флажки +Android SDK Build Tools, Android SDK +Platform-Tools и Android SDK Tools. + +
  9. + +
  10. Нажмите OK и примите лицензионные +соглашения для всех устанавливаемых пакетов. +
  11. +
+ +

Загрузка справочной документации по N Preview

+ +

+ Подробная информация по API-интерфейсам Android N содержится в справочной документации N Preview, +которую можно загрузить из следующей таблицы. +Этот пакет содержит сокращенную автономную версию веб-сайта для разработчиков Android +и включает в себя обновленный справочник по API-интерфейсам Android N, а также сведения о различиях +API. +

+ + + + + + + + + + +
ДокументацияКонтрольные суммы
+ n-preview-1-docs.zip + MD5: 4ab33ccbe698f46f125cc5b807cf9c2f
+ SHA-1: 6a3880b3ccd19614daae5a4d0698ea6ae11c20a5 +
+ + + +

Установка Java 8 JDK и JRE

+ +

Чтобы скомпилировать ваше приложение для платформы Android N, необходимо использовать +Java 8 Developer Kit (JDK 8), а для использования некоторых инструментов с Android +Studio 2.1 необходимо установить Java 8 Runtime Environment (JRE 8). Поэтому если у вас еще +нет последних версий каждого из этих пакетов, загрузите JDK 8 и JRE 8 +прямо сейчас.

+ +

Установите версию JDK в Android Studio, выполнив следующие шаги.

+ +
    +
  1. Откройте проект Android в Android Studio, затем откройте +окно "Project Structure", выбрав File > Project +Structure. (Вы также можете установить структуру по умолчанию для всех проектов, +выбрав File > Other Settings > Default Project Structure). + +
  2. +
  3. В левой панели окна щелкните SDK Location. +
  4. +
  5. В поле JDK Location укажите расположение +Java 8 JDK (нажмите кнопку справа +для просмотра своих файлов), затем нажмите OK. +
  6. +
+ + + + +

Обновление или создание проекта

+ +

+ Для использования API-интерфейсов Android N ваш проект должен быть сконфигурирован соответствующим образом. +

+ +

Если вы планируете использовать возможности языка Java 8, ознакомьтесь в документе +Возможности языка Java 8 +с информацией о поддерживаемых возможностях Java 8 и о настройке +проекта с компилятором Jack.

+ + +

Обновление существующего проекта

+ +

Откройте файл +build.gradle для своего модуля и укажите в нем следующие значения: + +

+ +
+android {
+  compileSdkVersion 'android-N'
+  buildToolsVersion '24.0.0-rc1'
+  ...
+
+  defaultConfig {
+     minSdkVersion 'N'
+     targetSdkVersion 'N'
+     ...
+  }
+  ...
+}
+ + +

Создание нового проекта

+ + +

Чтобы создать новый проект разработки с использованием Android N Preview SDK выполните следующие действия.

+ +
    +
  1. Выберите File > New Project и выполняйте указания, пока не перейдете на страницу +"Target Android Devices". +
  2. +
  3. На этой странице выберите вариант Phone and Tablet.
  4. +
  5. В разделе Phone and Tablet перейдите в список Minimum +SDK и выберите +N: Android API 23, N Preview (Preview).
  6. +
+ + +

Дальнейшие действия

+ + + diff --git a/docs/html-intl/intl/vi/preview/api-overview.jd b/docs/html-intl/intl/vi/preview/api-overview.jd new file mode 100644 index 000000000000..0e2c35e0e228 --- /dev/null +++ b/docs/html-intl/intl/vi/preview/api-overview.jd @@ -0,0 +1,676 @@ +page.title=Android N cho Nhà phát triển +meta.tags="preview", "androidn" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-apis_2x.png +@jd:body + + + + + + + + +

Android N vẫn đang trong quá trình phát triển nhưng bây giờ bạn có thể dùng thử +dưới dạng N Developer Preview. Các phần dưới đây sẽ nêu bật một số +tính năng mới cho nhà phát triển.

+ +

+ Bạn cần xem Các thay đổi Hành vi để biết được + những phần thay đổi của nền tảng có thể ảnh hưởng đến ứng dụng của bạn, hãy xem + các hướng dẫn cho nhà phát triển để biết thêm về những tính năng chính và tải xuống tài liệu Tham khảo API để biết chi tiết về + các API mới. +

+ +

Hỗ trợ đa cửa sổ

+ + +

Trong Android N, chúng tôi sẽ đưa vào nền tảng một tính năng đa nhiệm mới + rất được mong đợi — hỗ trợ đa cửa sổ.

+ +

Giờ đây người dùng có thể nhanh chóng mở đồng thời hai ứng dụng trên màn hình.

+
    +
  • Trên điện thoại và máy tính bảng +chạy Android N, người dùng có thể chạy hai ứng dụng song song hai bên hoặc + trên dưới trong chế độ chia đôi màn hình. Người dùng có thể thay đổi kích thước của ứng dụng bằng cách kéo +thanh phân chia ở giữa.
  • + +
  • Trên thiết bị Android TV, các ứng dụng có thể tự đặt vào chế độ +hình-trong-hình, cho phép ứng dụng tiếp tục hiển thị nội dung khi người dùng duyệt web hoặc +tương tác với ứng dụng khác. Hãy xem bên dưới để biết thêm thông tin.
  • +
+ +
+ +

+ Hình 1. Các ứng dụng chạy trong chế độ chia màn hình. +

+
+ +

Đặc biệt là trên máy tính bảng và các thiết bị màn hình lớn khác, việc hỗ trợ đa cửa sổ +cho phép bạn mang lại những cách thức mới thu hút người dùng. Thậm chí bạn còn có thể cho phép kéo thả trong +ứng dụng để người dùng kéo nội dung một cách thuận tiện vào hoặc ra ngoài ứng dụng của bạn — đây là một cách +nâng cao trải nghiệm của người dùng rất hiệu quả.

+ +

Thêm tính năng hỗ trợ đa màn hình vào ứng dụng của bạn và cấu hình cách thức +xử lý hiển thị đa cửa sổ là điều rất đơn giản. Ví dụ, bạn có thể chỉ định kích thước +tối thiểu cho phép của hoạt động, ngăn người dùng thay đổi kích thước của hoạt động nhỏ hơn +kích thước đó. Bạn cũng có thể vô hiệu hóa hiển thị đa cửa sổ cho ứng dụng của mình, giúp + đảm bảo hệ thống sẽ chỉ hiển thị ứng dụng của bạn ở chế độ toàn màn hình.

+ +

+ Để biết thêm thông tin, hãy xem tài liệu cho nhà phát triển Hỗ trợ đa cửa sổ +. +

+ +

Cải tiến thông báo

+ +

Chúng tôi đã thiết kế lại thông báo trong Android N để chúng được sử dụng dễ dàng và nhanh +hơn. Một số các thay đổi bao gồm:

+ +
    +
  • + Cập nhật Mẫu: Chúng tôi đã cập nhật các mẫu thông báo để + tạo điểm nhấn mới cho ảnh gây ấn tượng và ảnh đại diện. Nhà phát triển sẽ có thể + tận dụng các mẫu mới nhưng chỉ cần thực hiện một số chỉnh sửa nhỏ trong mã nguồn của họ. +
  • + +
  • + Thông báo gộp: Hệ thống có thể nhóm các tin nhắn + lại với nhau, ví dụ như theo chủ đề tin nhắn và hiển thị thành nhóm. Người dùng có thể + thực hiện các thao tác như Hủy hoặc Lưu trữ chúng ngay tại chỗ. Nếu bạn từng + triển khai các thông báo cho Android Wear thì bạn đã làm quen với + mô hình này. +
  • + +
  • + Trả lời trực tiếp: Đối với những ứng dụng giao tiếp theo thời gian thực, + hệ thống Android sẽ hỗ trợ trả lời ngay tại chỗ để người dùng có thể nhanh chóng phản hồi lại + một tin nhắn SMS hoặc tin nhắn văn bản trực tiếp bên trong giao diện thông báo đó. +
  • + +
  • + Dạng xem tùy chỉnh: Hai API mới cho phép bạn sử dụng các trang trí + hệ thống như tiêu đề và hành động của thông báo khi sử dụng các dạng xem + tùy chỉnh trong thông báo. +
  • +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +

+ Hình 2. Thông báo gộp và trả lời trực tiếp. +

+ +

Hãy xem + hướng dẫn về Thông báo + để biết cách triển khai các tính năng mới này.

+ + + +

Biên dịch JIT/AOT theo cấu hình

+ +

Trong Android N, chúng tôi đã bổ sung một trình biên dịch Just in Time (JIT) có mã được cấu hình cho +ART, cho phép nó nâng cao hiệu năng của các ứng dụng Android tức thì khi +chạy. Trình biên dịch JIT bổ trợ thêm cho trình biên dịch Ahead of Time (AOT) của ART +và giúp cải hiện hiệu năng thời gian chạy, tiết kiệm không gian lưu trữ và tăng tốc độ các bản cập nhật của +ứng dụng và cập nhật của hệ thống.

+ +

Biên dịch theo cấu hình cho phép ART quản lý quá trình biên dịch AOT/JIT của từng ứng dụng +tùy theo sử dụng thực tế cũng như các điều kiện trên thiết bị. Ví +dụ, ART sẽ duy trì một cấu hình cho các phương thức hay dùng nhất của mỗi ứng dụng và có thể biên dịch trước +rồi tạo bộ đệm cho các phương thức đó để có hiệu năng cao nhất. Những phần khác của ứng dụng +sẽ được giữ nguyên không biên dịch cho đến khi chúng thực sự được sử dụng.

+ +

Bên cạnh nâng cao hiệu năng cho các phần chính của ứng dụng, quá trình biên dịch +theo cấu hình còn giúp giảm tổng lượng RAM được sử dụng của ứng dụng, bao gồm cả các +tệp nhị phân liên quan. Tính năng này đặc biệt quan trọng trên các thiết bị ít bộ nhớ.

+ +

ART sẽ quản lý quá trình biên dịch theo cấu hình bằng cách giảm tối thiểu tác động đến +pin của thiết bị. Nó sẽ tiến hành quá trình biên dịch trước chỉ khi nào thiết bị nhàn rỗi và +đang sạc, giúp tiết kiệm thời gian và pin bằng cách thực hiện công việc đó trước.

+ +

Cài đặt ứng dụng nhanh chóng

+ +

Một trong những lợi ích dễ thấy nhất của trình biên dịch JIT của ART là tốc độ cài đặt +ứng dụng và cập nhật hệ thống. Ngay cả các ứng dụng lớn cần vài phút để +tối ưu và cài đặt trong Android 6.0 thì giờ đây có thể cài đặt chỉ trong một vài +giây. Các cập nhật cho hệ thống cũng sẽ nhanh hơn vì không còn bước tối ưu hóa nữa.

+ +

Chế độ Ngủ sâu khi di chuyển...

+ +

Chế độ Ngủ sâu đã được giới thiệu trong Android 6.0. Đây là một chế độ của hệ thống giúp tiết kiệm pin bằng cách trì hoãn +các hoạt động CPU và mạng của ứng dụng khi thiết bị đang nhàn rỗi, ví dụ như khi thiết bị +đang nằm trên bàn hoặc trong ngăn kéo.

+ +

Giờ đây Chế độ Ngủ sâu trong Android N đã được cải tiến thêm và tiết kiệm pin ngay cả khi đang di chuyển. +Bất kỳ khi nào màn hình đang tắt trong một khoảng thời gian và thiết bị không được cắm sạc thì +Chế độ Ngủ sâu sẽ áp dụng tập con của các hạn chế CPU và mạng quen thuộc đối với các ứng dụng. +Điều này có nghĩa là người dùng có thể tiết kiệm pin ngay cả khi đang mang thiết bị trong túi +của họ.

+ + + +

+ Hình 3. Chế độ Ngủ sâu đang áp dụng + các hạn chế để cải thiện thời lượng pin ngay cả khi thiết bị không được đặt một chỗ. +

+ + +

Sau một khoảng thời gian ngắn khi màn hình tắt và thiết bị chỉ chạy bằng nguồn pin, Chế độ Ngủ sâu +sẽ hạn chế truy cập mạng và trì hoãn các tác vụ, đồng bộ. Trong các khoảng thời gian +bảo trì ngắn, các ứng dụng sẽ được phép truy cập mạng và mọi tác vụ/đồng bộ +bị trì hoãn sẽ được thực thi. Bật màn hình hoặc cắm sạc vào thiết bị sẽ đưa +thiết bị thoát khỏi Chế độ Ngủ sâu.

+ +

Khi để thiết bị nằm một chỗ lần nữa với màn hình được tắt và chạy bằng pin trong một +khoảng thời gian thì Chế độ Ngủ sâu sẽ áp dụng toàn bộ các hạn chế CPU và mạng đối với {@link +android.os.PowerManager.WakeLock}, báo thức {@link android.app.AlarmManager} và quét +GPS/Wi-Fi.

+ +

Bạn có thể áp dụng các thực hành tốt nhất tương tự để điều chỉnh ứng dụng của mình cho Chế độ Ngủ sâu cho dù +thiết bị có đang di chuyển hay đứng yên. Do đó, nếu bạn đã cập nhật ứng dụng để xử lý +Chế độ Ngủ sâu một cách tinh tế thì bạn hoàn toàn yên tâm. Nếu không, hãy tiến hành làm cho + ứng dụng thích ứng với Chế độ Ngủ sâu ngay.

+ +

Dự án Svelte: Tối ưu hóa chạy ngầm

+ +

Dự án Svelte là một nỗ lực liên tục nhằm tối giảm sử dụng RAM của hệ thống và các ứng dụng +trên khắp hệ sinh thái các thiết bị Android. Trong Android N, dự án +Svelte tập trung vào việc tối ưu hóa cách thức các ứng dụng chạy ngầm.

+ +

Xử lý chạy ngầm là một phần quan trọng của hầu hết các ứng dụng. Khi sử dụng đúng cách, nó +có thể giúp cho trải nghiệm người dùng của bạn trở nên tuyệt vời — tức thì, nhanh chóng và nhận biết được bối cảnh. +Khi không sử dụng đúng cách, xử lý chạy ngầm có thể tiêu tốn RAM (và +pin) một cách không cần thiết cũng như ảnh hưởng đến hiệu năng hệ thống cho các ứng dụng khác.

+ +

Kể từ Android 5.0, {@link android.app.job.JobScheduler} đã trở thành +cách thức được ưu tiên để thực hiện công việc chạy ngầm thích hợp +cho người dùng. Ứng dụng có thể lên lịch cho các tác vụ trong khi cho phép hệ thống tối ưu hóa dựa trên +các điều kiện về bộ nhớ, nguồn điện và kết nối. JobScheduler đem lại khả năng kiểm soát và +sự đơn giản, và chúng tôi muốn mọi ứng dụng đều sử dụng nó.

+ +

+ Một giải pháp hiệu quả khác là + GCMNetworkManager, thuộc một phần của Dịch vụ Google Play, cho phép + lên lịch tác vụ tương tự với khả năng tương thích trên các phiên bản Android + cũ. +

+ +

Chúng tôi đang tiếp tục kế thừa JobScheduler và +GCMNetworkManager để đáp ứng nhiều hơn +các trường hợp sử dụng của bạn — ví dụ như trong Android N giờ đây bạn đã có thể lên lịch cho công việc +chạy ngầm dựa vào những thay đổi trong các Trình cung cấp Nội dung. Đồng thời, chúng tôi đang tiến hành +loại bỏ một số mẫu cũ có thể làm giảm hiệu năng hệ thống, +đặc biệt trên các thiết bị ít bộ nhớ.

+ +

Trong Android N, chúng tôi sẽ loại bỏ ba truyền phát không biểu thị được sử dụng phổ biến — +{@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link + android.hardware.Camera#ACTION_NEW_PICTURE} và {@link + android.hardware.Camera#ACTION_NEW_VIDEO} — bởi vì các truyền phát này có thể đánh thức +các tiến trình chạy ngầm của nhiều ứng dụng cùng lúc và sử dụng quá mức bộ nhớ và pin. Nếu +ứng dụng của bạn đang nhận các truyền phát này thì hãy tận dụng N Developer Preview để + chuyển sang JobScheduler và các API liên quan khác thay thế.

+ +

+ Hãy xem tài liệu Tối ưu hóa + Chạy ngầm để biết thêm chi tiết. +

+ + +

Tiết kiệm dữ liệu

+ +
+ + +

+ Hình 4. Tính năng Tiết kiệm dữ liệu trong mục Settings. +

+
+ +

Trong vòng đời của một thiết bị di động thì chi phí gói cước dữ liệu di động về cơ bản +sẽ cao hơn giá thành của chính thiết bị đó. Đối với nhiều người dùng, dữ liệu di động là một +tài nguyên đắt đỏ họ muốn sử dụng tiết kiệm.

+ +

Android N đã đưa vào chế độ Tiết kiệm dữ liệu, một dịch vụ hệ thống mới giúp giảm +sử dụng dữ liệu di động, cho dù là chuyển vùng, gần đến kỳ thanh toán cước, +hoặc trên một gói dữ liệu trả trước khiêm tốn. Tiết kiệm dữ liệu cho người dùng kiểm soát cách thức ứng dụng +sử dụng dữ liệu di động và cho phép nhà phát triển cung cấp dịch vụ hiệu quả hơn khi Tiết kiệm +dữ liệu được bật.

+ +

Khi người dùng bật Tiết kiệm dữ liệu trong Settings và thiết bị đang +sử dụng một mạng có đo lưu lượng thì hệ thống sẽ chặn việc sử dụng dữ liệu chạy ngầm và truyền tín hiệu cho ứng dụng +để sử dụng ít dữ liệu hơn ở tiền cảnh bất cứ khi nào có thể — chẳng hạn như bằng cách giới hạn +bit rate để truyền phát, giảm chất lượng hình ảnh, trì hoãn tạo trước bộ đệm để tối ưu, +v.v. Người dùng có thể lập danh sách các ứng dụng cụ thể được phép sử dụng +dữ liệu có tính lưu lượng được chạy ngầm ngay cả khi Tiết kiệm dữ liệu được bật.

+ +

Android N mở rộng lớp {@link android.net.ConnectivityManager} để cung cấp cho các ứng dụng một +cách thức truy xuất +các tùy chọn Tiết kiệm dữ liệu của người dùngtheo dõi +các thay đổi của tùy chọn. Mọi ứng dụng cần kiểm tra xem người dùng đó đã bật Tiết kiệm +Dữ liệu hay chưa và cố gắng giới hạn sử dụng dữ liệu chạy ở tiền cảnh và chạy ngầm.

+ + +

API cho ô Cài đặt nhanh

+ + +
+ + +

+ Hình 5. Các ô Cài đặt nhanh trong vùng hiển thị thông báo. +

+ + +

Cài đặt nhanh là một cách phổ biến và đơn giản để hiển thị các cài đặt và hành động quan trọng, +trực tiếp từ khu vực thông báo. Trong Android N, chúng tôi đã mở rộng phạm vi của +Cài đặt nhanh để khiến nó trở nên hữu ích và thuận tiện hơn nữa.

+ +

Chúng tôi đã thêm không gian cho các ô Cài đặt nhanh mà người dùng có thể +truy cập trên toàn bộ một vùng hiển thị được phân trang bằng cách vuốt sang trái hoặc phải. Chúng tôi cũng +cho người dùng kiểm soát những ô Cài đặt nhanh nào sẽ xuất hiện và vị trí xuất hiện +của chúng — người dùng chỉ cần kéo và thả để thêm hoặc di chuyển các ô.

+ +

Đối với nhà phát triển, Android N cũng bổ sung một API mới cho phép định nghĩa các ô + Cài đặt nhanh của riêng bạn giúp người dùng dễ dàng truy cập tới các điều khiển và hành động quan trọng trong ứng dụng của bạn.

+ +

+ Các ô Cài đặt nhanh được dành riêng cho các điều khiển hoặc hành động + khẩn cấp hoặc thường xuyên được sử dụng, không nên dùng làm lối tắt để + khởi chạy một ứng dụng. +

+ +

+ Một khi đã định nghĩa các ô của mình bạn có thể làm nổi chúng lên trước người dùng để họ có thể thêm + các ô này vào Cài đặt nhanh bằng cách chỉ cần kéo và thả. +

+ +

+ Để biết thêm thông tin về việc tạo một ô ứng dụng, hãy xem + android.service.quicksettings.Tile trong tài liệu Tham khảo API có thể tải xuống. +

+ + + +

Chặn số

+ +

Android N đã hỗ trợ chặn số điện thoại trong nền tảng này và cung cấp một + API khuôn khổ cho phép các nhà cung cấp dịch vụ duy trì một danh sách số bị chặn. +Ứng dụng SMS mặc định, ứng dụng gọi điện mặc định và các ứng dụng của nhà cung cấp có thể đọc và +ghi vào danh sách số bị chặn. Các ứng dụng khác không thể truy cập vào danh sách này.

+ +

Thông qua việc đưa chặn số thành một tính năng tiêu chuẩn của nền tảng, Android sẽ cung cấp +cách thức thống nhất để các ứng dụng hỗ trợ chặn số trên một loạt các +thiết bị. Những lợi ích mà ứng dụng có thể tận dụng gồm:

+ +
    +
  • Số bị chặn cuộc gọi cũng sẽ bị chặn tin nhắn văn bản +
  • Số bị chặn có thể được duy trì qua các lần thiết lập lại và qua nhiều thiết bị thông qua tính năng Sao lưu & +Khôi phục +
  • Nhiều ứng dụng có thể sử dụng cùng một danh sách số bị chặn +
+ +

Ngoài ra, việc tích hợp ứng dụng của nhà mạng thông qua Android cũng đồng nghĩa là các nhà mạng có thể +đọc danh sách số bị chặn trên thiết bị và thực hiện chặn số từ phía nhà cung cấp dịch vụ +cho người dùng để ngăn các cuộc gọi và tin nhắn văn bản không mong muốn tiếp cận người dùng +thông qua bất kỳ phương tiện nào, ví dụ như điểm cuối VOIP hoặc điện thoại chuyển cuộc gọi.

+ +

+ Để biết thêm thông tin, hãy xem android.provider.BlockedNumberContract + trong tài liệu Tham khảo + API có thể tải xuống. +

+ +

Sàng lọc cuộc gọi

+ +

+ Android N cho phép ứng dụng gọi điện mặc định sàng lọc các cuộc gọi đến. Ứng dụng + gọi điện thực hiện điều này bằng cách thực thi CallScreeningService mới, + cho phép ứng dụng gọi điện thực hiện một số hành động dựa trên + {@link android.telecom.Call.Details Call.Details} của cuộc gọi đến như: +

+ +
    +
  • Từ chối cuộc gọi đến +
  • Không cho phép cuộc gọi lưu trong nhật ký cuộc gọi +
  • Không hiển thị thông báo về cuộc gọi cho người dùng +
+ +

+ Để biết thêm thông tin, hãy xem android.telecom.CallScreeningService + trong tài liệu Tham khảo + API có thể tải xuống. +

+ + +

Hỗ trợ đa bản địa, thêm nhiều ngôn ngữ

+ + +

Android N cho phép người dùng chọn đa bản địa trong Settings, +để hỗ trợ tốt hơn cho các trường hợp song ngữ. Các ứng dụng có thể sử dụng +một API mới để truy xuất các bản địa được chọn của người dùng và sau đó mang đến +trải nghiệm người dùng tinh tế hơn cho người dùng đa bản địa — như hiển thị các kết quả tìm kiếm bằng +nhiều ngôn ngữ và không yêu cầu dịch các trang web sang ngôn ngữ mà +người dùng đã biết.

+ +

Ngoài hỗ trợ đa bản địa, Android N cũng mở rộng danh sách các ngôn ngữ +khả dụng đối với người dùng. Nền tảng này cung cấp hơn 25 biến thể cho các ngôn ngữ +được sử dụng phổ biến như Tiếng Anh, Tây Ban Nha, Pháp và Ả-rập. Nó cũng bổ sung hỗ trợ +một phần cho hơn 100 ngôn ngữ mới.

+ +

Các ứng dụng có thể truy xuất danh sách bộ bản địa theo người dùng bằng cách gọi LocaleList.GetDefault(). Để hỗ trợ số lượng bản địa mở rộng, Android N đang thay đổi cách thức +phân giải tài nguyên. Hãy đảm bảo bạn kiểm tra và xác minh rằng ứng dụng của mình +đang hoạt động như mong muốn theo lô-gic phân giải tài nguyên mới này.

+ +

Để tìm hiểu về hành vi phân giải tài nguyên mới và các thực hành tốt nhất bạn nên +thực hiện theo, hãy xem mục Hỗ trợ đa ngôn ngữ.

+ +

API ICU4J trong Android

+ +

+ Android N đã cung cấp một tập nhỏ các API ICU4J trong khuôn khổ Android thuộc + gói android.icu. Việc chuyển nhập sang rất dễ dàng và hầu hết chỉ liên quan đến + việc đổi từ không gian tên com.java.icu thành + android.icu. Nếu bạn đang sử dụng gói ICU4J trong ứng dụng + của mình thì việc chuyển đổi sang các API android.icu được cung cấp trong khuôn khổ + Android có thể giúp làm giảm đáng kể kích thước của tệp APK. +

+ +

+ Để tìm hiểu thêm về API ICU4J trên Android, hãy xem Hỗ trợ ICU4J. +

+ + + +

API OpenGL™ ES 3.2

+ +

Android N bổ sung các giao diện khuôn khổ và hỗ trợ nền tảng cho OpenGL ES 3.2, bao gồm:

+ +
    +
  • Mọi phần mở rộng trong Gói Tiện ích mở rộng Android (AEP) ngoại trừ EXT_texture_sRGB_decode +
  • Bộ đệm khung hình dấu chấm động cho HDR và tạo bóng trì hoãn. +
  • Các lệnh vẽ BaseVertex cho phép chia gói và truyền phát hiệu quả hơn. +
  • Kiểm soát truy cập bộ đệm mạnh mẽ để giảm phí tổn quản lý của WebGL. +
+ +

API khuôn khổ cho OpenGL ES 3.2 trên Android N được cung cấp với lớp +GLES32. Khi sử dụng OpenGL ES 3.2, hãy đảm bảo khai báo +yêu cầu trong tệp bản kê khai của bạn bằng thẻ <uses-feature> và +thuộc tính android:glEsVersion.

+ +

Để biết thông tin về sử dụng OpenGL ES, bao gồm cách kiểm tra phiên bản + OpenGL ES được hỗ trợ của thiết bị tại thời gian chạy, hãy xem mục Hướng dẫn API OpenGL ES.

+ + +

Ghi lại trên Android TV

+ +

Android N bổ sung khả năng ghi và phát lại nội dung từ các dịch vụ +nguồn vào của Android TV thông qua các API ghi lại. Được xây dựng dựa trên các API +chuyển dịch thời gian sẵn có, các dịch vụ nguồn vào TV có thể kiểm soát dữ liệu của kênh nào được phép ghi lại, cách thức +lưu trữ các phiên được ghi lại cũng như quản lý tương tác của người dùng với nội dung ghi lại.

+ +

Để biết thêm thông tin, hãy xem API ghi lại của Android TV.

+ + +

Android cho Công việc

+ +

Android cho Công việc bổ sung nhiều tính năng mới và các API cho thiết bị chạy Android N. +Dưới đây là một số điểm nổi bật — để xem danh sách đầy đủ các cập nhật của Android N +liên quan đến Android cho Công việc, vui lòng xem Các thay đổi của Android cho Công việc.

+ +

Thử thách bảo mật cấu hình công việc

+ +

+ Người sở hữu cấu hình có thể chỉ định một thử thách bảo mật riêng cho các ứng dụng đang chạy trong + cấu hình công việc. Thử thách công việc được hiển thị khi người dùng cố gắng mở + bất kỳ ứng dụng công việc nào. Hoàn tất thành công thử thách bảo mật sẽ mở khóa + cấu hình công việc và giải mã nó nếu cần. Đối với người sở hữu cấu hình, + ACTION_SET_NEW_PASSWORD sẽ yêu cầu người dùng đặt một thử thách + công việc và ACTION_SET_NEW_PARENT_PROFILE_PASSWORD sẽ yêu cầu + người dùng đặt khóa thiết bị. +

+ +

+ Người sở hữu cấu hình có thể đặt các chính sách mật khẩu riêng biệt cho thử thách công việc + (như độ dài mã PIN cần thiết hoặc có thể sử dụng dấu vân tay + để mở khóa cấu hình hay không) bằng setPasswordQuality(), + setPasswordMinimumLength() và các phương thức liên quan. Người sở hữu + cấu hình cũng có thể cài khóa thiết bị bằng thực thể DevicePolicyManager + được trả về bởi phương thức getParentProfileInstance() mới. + Ngoài ra, người sở hữu cấu hình có thể tùy chỉnh màn hình xác thực thông tin cho + thử thách công việc bằng các phương thức setOrganizationColor() và + setOrganizationName() mới. +

+

Tắt công việc

+ +

Trên một thiết bị có cấu hình công việc, người dùng có thể bật hoặc tắt chế độ công việc. Khi chế độ công việc được +tắt người dùng được quản lý sẽ tạm thời bị tắt, khiến vô hiệu hóa các ứng dụng +cấu hình công việc, đồng bộ chạy ngầm và các thông báo. Điều này bao gồm cả ứng dụng +của người sở hữu cấu hình. Khi chế độ công việc bị tắt, hệ thống sẽ hiển thị biểu tượng +trạng thái liên tục để nhắc người dùng đó rằng họ không thể khởi chạy các ứng dụng công việc. Trình khởi chạy +sẽ chỉ báo rằng các ứng dụng và widget công việc không khả dụng.

+ +

VPN luôn bật

+ +

Người sở hữu thiết bị và người sở hữu cấu hình có thể đảm bảo rằng những ứng dụng công việc luôn kết nối +thông qua một VPN chỉ định. Hệ thống sẽ tự động khởi động VPN đó sau khi +thiết bị khởi động.

+ +

+ Các phương thức DevicePolicyManager mới gồm + setAlwaysOnVpnPackage() và + getAlwaysOnVpnPackage(). +

+ +

Do các dịch vụ VPN có thể được gắn kết trực tiếp bởi hệ thống mà không cần tương tác +của ứng dụng, các máy khách VPN cần xử lý các điểm bắt đầu cho VPN luôn bật. Giống +trước đây, các dịch vụ được chỉ định tới hệ thống bằng một bộ lọc ý định phù hợp với +hành động android.net.VpnService.

+ +

+ Người dùng cũng có thể đặt thủ công các máy khách VPN luôn bật có cài đặt các phương thức + VPNService trong người dùng chính bằng + Settings>More>Vpn. +

+ +

Cải tiến trợ năng

+ +

Android N nay đã hỗ trợ Cài đặt Khả năng nhìn trực tiếp trên màn hình Chào mừng khi thiết lập +thiết bị mới. Điều này giúp người dùng rất dễ dàng khám phá và cấu hình +các tính năng trợ năng trên thiết bị của họ, bao gồm cử chỉ phóng đại, cỡ +phông chữ, kích thước hiển thị và TalkBack.

+ +

Với các tính năng trợ năng được bố trí ngày càng dễ thấy hơn, khi được bật +khả năng người dùng sẽ thử ứng dụng của bạn sẽ cao hơn. Hãy đảm bảo bạn kiểm thử ứng dụng của mình +trước với các cài đặt này được bật. Bạn có thể bật chúng trong Settings > +Accessibility.

+ +

Ngoài ra, trong Android N, các dịch vụ trợ năng đã có thể trợ giúp người dùng bị các tổn thương +vận động chạm vào màn hình. API mới cho phép xây dựng các dịch vụ với những +tính năng như theo dõi chuyển động của khuôn mặt, theo dõi chuyển động của mắt, quét điểm, v.v. nhằm +đáp ứng nhu cầu những người dùng này.

+ +

Để biết thêm thông tin, hãy xem android.accessibilityservice.GestureDescription + trong tài liệu Tham khảo API có thể tải xuống.

+ + +

Khởi động Trực tiếp

+ +

Khởi động Trực tiếp cải thiện thời gian khởi động của thiết bị và cho phép các ứng dụng +đã đăng ký có chức năng hạn chế ngay cả sau khi khởi động lại ngoài dự kiến. +Ví dụ, nếu một thiết bị được mã hóa khởi động lại khi người dùng đang ngủ thì +báo thức, tin nhắn và các cuộc gọi đến đã đăng ký có thể tiếp tục thông báo +cho người dùng như thường lệ. Điều này cũng có nghĩa là các dịch vụ trợ năng cũng sẽ + khả dụng ngay sau khi khởi động xong.

+ +

Khởi động Trực tiếp sử dụng mã hóa theo tệp trong Android N +để bật các chính sách mã hóa chi tiết cho cả dữ liệu của hệ thống và ứng dụng. +Hệ thống sẽ sử dụng một bộ lưu trữ mã hóa thiết bị cho dữ liệu hệ thống được chọn và dữ liệu ứng dụng +đã đăng ký công khai. Theo mặc định, một bộ lưu trữ mã hóa thông tin xác thực sẽ được sử dụng cho mọi + dữ liệu hệ thống, dữ liệu người dùng, ứng dụng và dữ liệu của ứng dụng khác.

+ +

Trong quá trình khởi động, hệ thống sẽ khởi động vào chế độ hạn chế và chỉ có quyền truy cập tới +dữ liệu mã hóa thiết bị mà thôi, và không có quyền truy cập thông thường tới ứng dụng hoặc dữ liệu. +Nếu bạn có các thành phần muốn chạy trong chế độ này thì bạn có thể đăng ký +chúng bằng cách đặt cờ trong bản kê khai. Sau khi khởi động, hệ thống sẽ kích hoạt +các thành phần đã đăng ký bằng cách truyền phát ý định LOCKED_BOOT_COMPLETED +. Hệ thống sẽ đảm bảo cho dữ liệu mã hóa thiết bị đã đăng ký sẽ khả dụng +trước khi mở khóa. Mọi dữ liệu khác sẽ không khả dụng cho tới khi Người dùng xác nhận thông tin xác thực trên màn hình khóa + của họ để giải mã nó.

+ +Để biết thêm thông tin, hãy xem Khởi động Trực tiếp.

+

+ + +

Chứng thực khóa

+ +

Các bộ lưu trữ khóa dựa trên phần cứng cung cấp một phương thức an toàn hơn rất nhiều để tạo, lưu trữ, +và sử dụng các khóa mật mã trên thiết bị Android. Chúng bảo vệ các khóa trước +nhân Linux, trước các lỗ hổng bảo mật tiềm tàng của Android và trước việc trích xuất +từ các máy bị giành quyền điều khiển và bị can thiệp vào các tệp hệ thống (máy bị root).

+ +

Android N đã đưa ra tính năng Chứng thực khóa để sử dụng các bộ lưu trữ khóa dựa trên phần cứng một cách + dễ dàng và bảo mật hơn. Các ứng dụng và dịch vụ không thuộc thiết bị có thể sử dụng Chứng thực +khóa để xác định chắc chắn xem một cặp khóa RSA hoặc EC có +dựa trên phần cứng hay không, các đặc điểm của cặp khóa đó là gì và + các ràng buộc nào được áp dụng cho việc sử dụng và tính hợp lệ của cặp khóa đó.

+ +

Các ứng dụng và dịch vụ không thuộc thiết bị có thể yêu cầu thông tin về một cặp khóa +thông qua chứng chỉ chứng thực X.509. Chứng chỉ này phải được ký bởi một khóa +chứng thực hợp lệ. Khóa chứng thực là một khóa ký ECDSA, được +đưa vào bộ lưu trữ khóa dựa trên phần cứng của thiết bị tại nhà máy. +Do đó, một chứng chỉ chứng thực được ký bởi khóa +chứng thực hợp lệ sẽ xác nhận sự tồn tại của bộ lưu trữ khóa dựa trên phần cứng, kèm theo + chi tiết về các cặp khóa trong bộ lưu trữ khóa đó.

+ +

Để chắc chắn thiết bị đang sử dụng ảnh +Android bảo mật, chính thức từ nhà máy, Chứng thực khóa yêu cầu bootloader + của thiết bị cung cấp thông tin sau cho Môi trường Thực thi + An toàn (TEE):

+ + + +

Để biết thêm thông tin về tính năng bộ lưu trữ khóa dựa trên phần cứng, +hãy xem hướng dẫn Bộ lưu trữ khóa dựa trên phần cứng.

+ +

Ngoài Chứng thực khóa, Android N cũng giới thiệu + các khóa dựa vào vân tay mà không được thu hồi khi đăng ký vân tay.

+ +

Cấu hình Bảo mật mạng

+ +

Trong Android N, các ứng dụng có thể tùy biến hành vi của các kết nối +bảo mật (HTTPS, TLS) của chúng một cách an toàn mà không cần chỉnh sửa mã nhờ sử dụng khai báo +Cấu hình Bảo mật mạng thay vì sử dụng các API lập trình truyền thống +dễ xảy ra lỗi (vd: X509TrustManager).

+ +

Các tính năng được hỗ trợ:

+
    +
  • Nguồn tin cậy tùy chỉnh. Cho phép một ứng dụng tùy chỉnh +Nhà cung cấp chứng chỉ (CA) nào sẽ được tin cậy cho các kết nối bảo mật của ứng dụng. Ví +dụ, tin cậy các chứng chỉ tự ký cụ thể hoặc một bộ giới hạn các CA công khai. +
  • +
  • Chỉ khống chế khi gỡ lỗi. Cho phép nhà phát triển ứng dụng an toàn gỡ lỗi +các kết nối bảo mật của ứng dụng mà không tạo thêm rủi ro cho phần cơ sở +đã cài đặt. +
  • +
  • Không sử dụng truyền gửi văn bản chưa mã hóa. Cho phép một ứng dụng tự bảo vệ mình khỏi việc +vô tình sử dụng truyền gửi văn bản chưa mã hóa cleartext.
  • +
  • Ghim chứng chỉ. Một tính năng nâng cao cho phép một ứng dụng + giới hạn các khóa máy chủ nào là an toàn đối với các kết nối bảo mật.
  • +
+ +

Để biết thêm thông tin, hãy xem Cấu hình Bảo mật + mạng.

+ +

Nhà cung cấp Chứng chỉ An toàn mặc định

+ +

Theo mặc định, các ứng dụng nhắm mục tiêu Android N chỉ tin cậy các chứng chỉ do hệ thống cấp +và không còn tin cậy các Nhà cung cấp chứng chỉ (CA) do người dùng thêm vào. Các ứng dụng nhắm mục tiêu Android +N muốn tin cậy các CA do người dùng thêm vào nên sử dụng +Cấu hình Bảo mật mạng để +chỉ định cách thức tin cậy các CA của người dùng.

+ +

Lược đồ chữ ký số v2 cho tệp APK

+ +

Lớp PackageManager nay đã hỗ trợ xác thực ứng dụng bằng Lược đồ chữ ký số v2 +APK. Lược đồ chữ ký số v2 APK là một lược đồ chữ ký số trên toàn bộ tệp +làm tăng đáng kể tốc độ xác thực và tăng cường sự bảo đảm + toàn vẹn bằng cách phát hiện các thay đổi trái phép đối với các tệp APK.

+ +

Để bảo đảm tương thích ngược, một tệp APK phải được ký bằng lược đồ +chữ ký số v1 (Lược đồ chữ ký số JAR) trước khi được ký bằng lược đồ chữ ký số v2. +Với lược đồ chữ ký số v2, quá trình xác thực sẽ thất bại nếu bạn ký tệp APK bằng một + chứng chỉ khác sau khi ký bằng lược đồ v2.

+ +

Hỗ trợ cho lược đồ chữ ký số v2 cho tệp AKP sẽ có sau trong N Developer +Preview.

+ +

Truy cập thư mục theo phạm vi

+ +

Trong Android N, ứng dụng có thể sử dụng các API mới để yêu cầu truy cập vào các thư mục bộ nhớ lưu trữ +ngoài riêng, bao gồm các thư mục trên phương tiện có thể tháo ra như thẻ +SD. Các API mới đã tối giản cách thức ứng dụng của bạn truy cập các thư mục lưu trữ ngoài +tiêu chuẩn như thư mục Pictures. Các ứng dụng +như ứng dụng quản lý ảnh có thể sử dụng các API này thay vì sử dụng +READ_EXTERNAL_STORAGE để cấp quyền truy cập tới mọi thư mục +lưu trữ, hoặc Khuôn khổ Truy cập Lưu trữ để giúp người dùng di chuyển tới +thư mục đó.

+ +

Ngoài ra, các API mới này cũng đơn giản hóa các bước mà người dùng thực hiện để cấp quyền truy cập +bộ nhớ lưu trữ ngoài cho ứng dụng của bạn. Khi bạn sử dụng các API mới, hệ thống sẽ sử dụng một UI cấp quyền +đơn giản cung cấp các thông tin chi tiết rõ ràng về thư mục nào ứng dụng đang +yêu cầu quyền truy cập.

+ +

Để biết thêm thông tin, hãy xem tài liệu cho nhà phát triển +Truy cập +Thư mục theo Phạm vi.

+ + + + + + diff --git a/docs/html-intl/intl/vi/preview/behavior-changes.jd b/docs/html-intl/intl/vi/preview/behavior-changes.jd new file mode 100644 index 000000000000..2c287504190c --- /dev/null +++ b/docs/html-intl/intl/vi/preview/behavior-changes.jd @@ -0,0 +1,480 @@ +page.title=Các thay đổi Hành vi +page.keywords=preview,sdk,compatibility +meta.tags="preview", "compatibility" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-changes_2x.png +@jd:body + + + + + +

+ Với các tính năng và khả năng mới, Android N + cũng có một số các thay đổi hành vi của hệ thống và API. Tài liệu + này nêu bật một số các thay đổi quan trọng mà bạn cần biết và cân nhắc cho + ứng dụng của mình. +

+ +

+ Nếu bạn đã từng phát hành ứng dụng cho Android, hãy lưu ý rằng các thay đổi + trong nền tảng này có thể tác động đến ứng dụng của bạn. +

+ + +

Cải thiện Hiệu năng

+ +

+ Android N có chứa các thay đổi hành vi của hệ thống nhằm cải thiện thời lượng + pin của thiết bị, sử dụng RAM và hiệu năng ứng dụng. Các thay đổi này có thể tác động đến + tính khả dụng của tài nguyên và các thông báo hệ thống đối tới ứng dụng. Bạn + nên tìm hiểu các thay đổi này và đánh giá xem ứng dụng cần phải điều chỉnh như thế nào đối với + các thay đổi. +

+ +

Chế độ Ngủ sâu

+ +

+ Được đưa vào Android 6.0 (Mức API 23), Chế độ Ngủ sâu cải thiện thời lượng pin bằng cách + trì hoãn các hoạt động của CPU và mạng khi người dùng không cắm sạc, + không di chuyển và tắt màn hình thiết bị. Android N + thêm các cải tiến cho Chế độ Ngủ sâu bằng cách sử dụng một tập con các hạn chế của CPU và mạng + khi thiết bị không được cắm sạc với màn hình bị tắt, nhưng không nhất thiết + phải để một chỗ, ví dụ như một thiết bị cầm tay di chuyển trong túi của người dùng. +

+ + + +

+ Hình 1. Minh họa cách thức Chế độ Ngủ sâu áp dụng ở cấp đầu tiên của + các hạn chế hoạt động hệ thống nhằm cải thiện thời lượng pin. +

+ +

+ Khi một thiết bị dùng nguồn điện từ pin và màn hình bị tắt trong một khoảng thời gian + nhất định, thiết bị sẽ chuyển vào Chế độ Ngủ sâu và áp dụng tập con đầu tiên của các hạn chế: Nó + sẽ ngắt truy cập mạng của ứng dụng và trì hoãn các tác vụ và các đồng bộ. Nếu thiết bị + được đặt một chỗ trong một khoảng thời gian nhất định sau khi vào Chế độ Ngủ sâu thì hệ thống sẽ áp dụng + các hạn chế còn lại của Chế độ Ngủ sâu thành {@link android.os.PowerManager.WakeLock}, báo thức +{@link android.app.AlarmManager}, GPS, quét Wi-Fi. Cho dù + một số hoặc tất cả các hạn chế của Chế độ Ngủ sâu có được áp dụng hay không thì hệ thống sẽ đánh thức + thiết bị trong các khoảng thời gian bảo trì ngắn, trong đó các ứng dụng được phép + truy cập mạng và có thể thực thi mọi tác vụ/đồng bộ bị trì hoãn. +

+ + + +

+ Hình 2. Minh họa cách Chế độ Ngủ sâu áp dụng cấp thứ hai của + các hạn chế hoạt động hệ thống sau khi thiết bị được đặt một chỗ trong một khoảng thời gian nhất định. +

+ +

+ Lưu ý rằng việc bật màn hình hoặc cắm sạc sẽ đưa thiết bị thoát Chế độ Ngủ sâu và + loại bỏ các hạn chế xử lý này. Hành vi bổ sung này không + ảnh hưởng đến các khuyến nghị và các thực hành tốt nhất khi thích ứng cho ứng dụng của bạn với phiên bản + Chế độ Ngủ sâu được đưa vào Android 6.0 (API mức 23) trước đó, như mô tả trong + + Tối ưu hóa Chế độ Ngủ sâu và Chế độ Chờ của Ứng dụng. Bạn nên tiếp tục + làm theo các khuyến nghị đó, ví dụ như sử dụng Google Cloud Messaging (GCM) để + gửi và nhận tin nhắn, và hãy tiến hành áp dụng các bản cập nhật để nhận + hành vi Chế độ Ngủ sâu bổ sung. +

+ + +

Dự án Svelte: Tối ưu hóa Chạy ngầm

+ +

+ Android N gỡ bỏ ba truyền phát không biểu thị để giúp tối ưu hóa cả + việc sử dụng bộ nhớ lẫn tiêu thụ điện năng. Thay đổi này là điều cần thiết bởi các truyền phát + không biểu thị thường xuyên khởi động các ứng dụng đã được đăng ký để lắng nghe chúng dưới + nền. Gỡ bỏ các truyền phát này có thể đem lại lợi ích lớn đối với hiệu năng + của thiết bị và trải nghiệm người dùng. +

+ +

+ Các thiết bị di động thường xuyên gặp phải những thay đổi về kết nối, chẳng hạn như khi di chuyển + giữa Wi-Fi và dữ liệu di động. Hiện tại, các ứng dụng có thể theo dõi những thay đổi về + kết nối bằng cách đăng ký một bộ thu truyền phát cho {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} không biểu thị trong bản kê khai + của chúng. Vì nhiều ứng dụng đăng ký để nhận truyền phát này do đó một hoạt động chuyển mạng + duy nhất cũng có thể khiến tất cả các ứng dụng thức dậy và xử lý truyền phát đó ngay + lập tức. +

+ +

+ Tương tự, các ứng dụng có thể đăng ký nhận truyền phát {@link + android.hardware.Camera#ACTION_NEW_PICTURE} và {@link + android.hardware.Camera#ACTION_NEW_VIDEO} không biểu thị từ các ứng dụng khác, ví dụ như +ứng dụng Camera. Khi một người dùng chụp ảnh với ứng dụng Camera thì những ứng dụng này sẽ thức dậy + để xử lý truyền phát đó. +

+ +

+ Để loại bỏ các vấn đề này, Android N áp dụng các cách tối ưu hóa + sau: +

+ +
    +
  • Ứng dụng nhắm mục tiêu Android N sẽ không nhận các truyền phát {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION}, ngay cả khi chúng + có các mục nhập của trong bản kê khai yêu cầu thông báo về các sự kiện này. Những ứng dụng đang chạy + ở tiền cảnh vẫn có thể lắng nghe {@code CONNECTIVITY_CHANGE} qua + luồng chính của chúng nếu yêu cầu thông báo bằng {@link + android.content.BroadcastReceiver}. +
  • + +
  • Ứng dụng không thể gửi hoặc nhận các truyền phát {@link + android.hardware.Camera#ACTION_NEW_PICTURE} hoặc {@link + android.hardware.Camera#ACTION_NEW_VIDEO}. Cách tối ưu này + tác động đến mọi ứng dụng, không chỉ các ứng dụng nhắm mục tiêu Android N. +
  • +
+ +

+ Các lần phát hành Android sau này có thể loại bỏ thêm các truyền phát không biểu thị, cũng + như các dịch vụ chạy ngầm không còn liên kết. Vì lý do này, bạn nên tránh dùng hoặc + gỡ bỏ các phụ thuộc trên các bộ thu được khai báo trong bản kê khai đối với các truyền phát không biểu thị, + cũng như các dịch vụ chạy ngầm. +

+ +

+ Khuôn khổ Android cung cấp một số giải pháp để giảm thiểu sự cần thiết đối với + các truyền phát không biểu thị hoặc các dịch vụ chạy ngầm này. Ví dụ, API {@link + android.app.job.JobScheduler} cung cấp một cơ chế lên lịch hiệu quả + cho các hoạt động mạng khi đáp ứng các điều kiện được chỉ định, ví dụ như kết nối tới một + mạng không đo lưu lượng. Bạn còn có thể sử dụng {@link + android.app.job.JobScheduler} để phản ứng lại các thay đổi đối với trình cung cấp nội dung. +

+ +

+ Để biết thêm thông tin về thay đổi hành vi này và cách thích ứng ứng dụng của bạn, + hãy xem Tối ưu hóa + Chạy ngầm. +

+ + +

Thay đổi Quyền

+ +

+ Android N có các thay đổi đối với quyền có thể tác động đến ứng dụng của bạn, + bao gồm các quyền tài khoản người dùng và một quyền mới cho phép ghi vào + bộ nhớ ngoài. Sau đây là phần tóm tắt các quyền đã thay đổi trong + bản xem trước: +

+ +
    +
  • {@code GET_ACCOUNTS} (Bị loại bỏ) +

    + Quyền GET_ACCOUNTS nay đã bị loại bỏ. Hệ thống sẽ bỏ qua quyền + này đối với các ứng dụng nhắm mục tiêu Android N. +

    +
  • + +
+ + + +

Cải thiện Trợ năng

+ +

+ Android N có các thay đổi nhằm nâng cao khả năng sử dụng + của nền tảng cho những người dùng có thị lực kém hoặc khiếm thị. Nhìn chung, các thay đổi này sẽ không + yêu cầu thay đổi mã nguồn trong ứng dụng của bạn. Tuy nhiên, bạn cần xem lại + các tính năng này và kiểm thử chúng với ứng dụng của mình để đánh giá các tác động tiềm tàng đối với trải nghiệm + người dùng. +

+ + +

Thu phóng Màn hình

+ +

+ Android N cho phép người dùng đặt Display size để phóng to + hoặc thu nhỏ tất cả các phần tử trên màn hình, nhờ đó cải thiện trợ năng của thiết bị + cho những người dùng có thị lực kém. Người dùng không thể thu phóng màn hình vượt quá chiều rộng màn hình + tối thiểu + sw320dp. Đây là chiều rộng của Nexus 4, một máy điện thoại phổ biến có kích cỡ trung bình. +

+ +
+ +
+ +
+
+ +
+ +
+

+ Hình 3. Màn hình bên phải hiển thị tác động của + việc tăng kích cỡ Hiển thị của một thiết bị đang chạy ảnh hệ thống Android N. +

+ + +

+ Khi mật độ của thiết bị thay đổi, hệ thống sẽ thông báo cho các ứng dụng đang chạy theo + những cách sau: +

+ +
    +
  • Nếu một ứng dụng nhắm mục tiêu mức API 23 hoặc thấp hơn thì hệ thống sẽ tự động tắt + tất cả các tiến trình chạy ngầm của ứng dụng đó. Điều này có nghĩa là nếu một người dùng rời khỏi + ứng dụng đó để mở màn hình Settings và thay đổi + Display size thì hệ thống sẽ tắt ứng dụng giống + như trong trường hợp thiết bị thiếu bộ nhớ. Nếu ứng dụng đó có bất kỳ tiến trình nào + chạy ở tiền cảnh thì hệ thống sẽ thông báo cho các tiến trình đó về thay đổi cấu hình như + mô tả trong Xử lý + Thay đổi Thời gian chạy, giống như hướng của thiết bị vừa thay đổi. +
  • + +
  • Nếu ứng dụng nhắm mục tiêu Android N thì mọi tiến trình của nó + (chạy ở tiền cảnh và chạy ngầm) đều được thông báo về thay đổi cấu hình như + mô tả trong Xử lý + Thay đổi Thời gian chạy. +
  • +
+ +

+ Hầu hết các ứng dụng không cần thực hiện bất kỳ thay đổi nào để hỗ trợ tính năng này, miễn là + các ứng dụng đó tuân theo các thực hành tốt nhất của Android. Những điều cụ thể cần kiểm tra: +

+ +
    +
  • Kiểm thử ứng dụng của bạn trên một thiết bị có chiều rộng màn hình sw320dp + và đảm bảo nó hoạt động đúng. +
  • + +
  • Khi cấu hình của thiết bị thay đổi, hãy cập nhật mọi thông tin được lưu trữ trong bộ đệm + phụ thuộc vào mật độ, ví dụ như các ảnh bitmap được lưu đệm hoặc các tài nguyên được tải từ + mạng. Hãy kiểm tra các thay đổi cấu hình khi ứng dụng khôi phục từ trạng thái + tạm dừng. +

    + Lưu ý: Nếu bạn lưu trữ trong bộ đệm các dữ liệu phụ thuộc vào cấu hình thì nên + thêm siêu dữ liệu liên quan như kích cỡ + màn hình phù hợp hoặc mật độ điểm ảnh cho dữ liệu đó. Việc lưu siêu dữ liệu này cho phép bạn + quyết định liệu bạn có cần phải làm mới dữ liệu được lưu trữ đệm sau khi một cấu hình + thay đổi. +

    +
  • + +
  • Tránh chỉ định các kích thước theo đơn vị px vì chúng không thay đổi tỉ lệ theo + mật độ màn hình. Thay vào đó, hãy chỉ định các kích thước bằng các đơn vị điểm ảnh + độc lập với mật độ (dp). +
  • +
+ +

Cài đặt Khả năng nhìn trong Trình Thiết lập

+ +

+ Android N có Cài đặt Khả năng nhìn trên màn hình Chào mừng, nơi người dùng có thể + thiết lập các cài đặt trợ năng sau đây trên một thiết bị mới: + Magnification gesture, Font size, + Display sizeTalkBack. Thay đổi này + sẽ tăng khả năng thấy được các khiếm khuyết liên quan đến những cài đặt màn hình khác nhau. Để + đánh giá tác động của tính năng này, bạn có thể kiểm thử ứng dụng của mình với các + cài đặt sau được bật. Bạn có thể tìm các cài đặt này trong Settings > + Accessibility. +

+ +

Liên kết Ứng dụng NDK với Thư viện Nền tảng

+ +

+ Android N có các thay đổi đối với không gian tên để ngăn việc tải các API không công khai. + Nếu bạn sử dụng NDK, bạn chỉ nên sử dụng các API công khai từ nền tảng + Android. Sử dụng các API không công khai trong bản phát hành chính thức tiếp theo của Android + có thể khiến ứng dụng bị treo. +

+ +

+ Để cảnh báo cho bạn việc sử dụng các API không công khai, các ứng dụng chạy trên thiết bị + Android N sẽ tạo ra một lỗi trong phần xuất ra của logcat khi một ứng dụng gọi một API không công khai. + Lỗi này cũng được hiển thị trên màn hình thiết bị dưới dạng thông báo để hỗ trợ + nâng cao nhận biết đối với tình huống này. Bạn nên xem lại mã của ứng dụng để + gỡ bỏ phần sử dụng các API nền tảng không công khai và kiểm thử kỹ lưỡng ứng dụng bằng + một thiết bị hoặc bộ giả lập của bản xem trước. +

+ +

+ Nếu ứng dụng của bạn phụ thuộc vào các thư viện của nền tảng, hãy xem tài liệu NDK để biết + các cách khắc phục cơ bản nhằm thay thế các API không công khai bằng các API công khai tương ứng. + Bạn cũng có thể liên kết với các thư viện của nền tảng mà không nhận biết ứng dụng, + đặc biệt nếu ứng dụng của bạn sử dụng thư viện thuộc một phần của nền tảng (như + libpng), nhưng không thuộc NDK. Trong trường hợp đó, hãy đảm bảo rằng + tệp APK của bạn có chứa tất cả các tệp .so bạn dự định liên kết với. +

+ +

+ Cẩn trọng: Một số thư viện của bên thứ ba có thể liên kết với các API + không công khai. Nếu ứng dụng của bạn sử dụng các thư viện này thì ứng dụng của bạn có thể gặp lỗi sụp đổ khi đang chạy + trong lần phát hành Android chính thức kế tiếp. +

+ +

+ Các ứng dụng không nên phụ thuộc vào hoặc sử dụng các thư viện gốc không kèm theo trong + NDK bởi vì chúng có thể thay đổi hoặc bị gỡ bỏ khỏi khi phát hành bản Android khác + thay cho bản cũ. Việc chuyển từ OpenSSL sang BoringSSL là một ví dụ về sự thay đổi đó. + Ngoài ra, các thiết bị khác nhau có thể cung cấp các mức độ tương thích khác nhau bởi + không có yêu cầu nào về khả năng tương thích cho các thư viện nền tảng không đi kèm với + NDK. Nếu bạn buộc phải sử dụng các thư viện không thuộc NDK trên các thiết bị cũ, hãy thực hiện + quá trình tải phụ thuộc vào mức Android API. +

+ +

+ Nhằm giúp bạn chẩn đoán các loại vấn đề này, sau đây là một số lỗi Java và NDK + ví dụ bạn có thể gặp phải khi cố dựng ứng dụng với Android N: +

+ +

Ví dụ lỗi Java:

+
+java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
+    is not accessible for the namespace "classloader-namespace"
+
+ +

Ví dụ lỗi NDK:

+
+dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
+
+ + +

+ Sau đây là một số cách khắc phục đối với ứng dụng gặp phải các kiểu lỗi này: +

+ +
    +
  • Việc sử dụng getJavaVM và getJNIEnv trong libandroid_runtime.so có thể được thay + bằng các hàm JNI chuẩn: +
    +AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
    +AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
    +JavaVM::AttachCurrentThread from <jni.h>.
    +
    +
  • + +
  • Việc sử dụng ký hiệu {@code property_get} trong {@code libcutils.so} có thể được + thay bằng phương thức {@code __system_property_get} công khai thay thế. + Để làm điều này, hãy dùng {@code __system_property_get} với câu lệnh include sau: +
    +#include <sys/system_properties.h>
    +
    +
  • + +
  • Việc sử dụng ký hiệu {@code SSL_ctrl} trong {@code libcrypto.so} nên được + thay bằng một ký hiệu cục bộ của ứng dụng. Ví dụ, bạn nên liên kết tĩnh + {@code libcyrpto.a} trong tệp {@code .so} hoặc thêm tham chiếu + {@code libcrypto.so} động của riêng mình từ BoringSSL hoặc OpenSSL trong ứng dụng của bạn. +
  • +
+ +

Android cho Công việc

+

+ Android N có các thay đổi cho ứng dụng nhắm mục tiêu Android cho Công việc, bao gồm + các thay đổi đối với cài đặt chứng chỉ, đặt lại mật khẩu, quản lý người dùng + thứ hai và truy cập các mã định danh của thiết bị. Nếu bạn đang dựng các ứng dụng dành cho + các môi trường Android cho Công việc thì bạn nên xem lại các thay đổi này và chỉnh sửa + ứng dụng của mình cho phù hợp. +

+ +
    +
  • Bạn phải cài đặt một trình cài đặt chứng chỉ ủy thác trước khi DPC có thể đặt + nó. Đối với cả ứng dụng người sở hữu cấu hình và ứng dụng người sở hữu thiết bị nhắm mục tiêu SDK N, bạn cần + cài đặt trình cài đặt chứng chỉ ủy thác trước khi trình kiểm soát + chính sách của thiết bị (DPC) gọi + DevicePolicyManager.setCertInstallerPackage(). Nếu trình cài đặt + chưa được cài thì hệ thống sẽ đưa ra một + IllegalArgumentException. +
  • + +
  • Giờ đây các hạn chế đặt lại mật khẩu cho người quản lý thiết bị sẽ áp dụng với người sở hữu + cấu hình. Người quản lý thiết bị không thể sử dụng + DevicePolicyManager.resetPassword() được nữa để xóa mật khẩu hoặc thay đổi + các mật khẩu đã đặt. Người quản lý thiết bị vẫn có thể đặt một mật khẩu nhưng chỉ + khi thiết bị không có mật khẩu, mã PIN hoặc mẫu hình. +
  • + +
  • Người sở hữu thiết bị hoặc cấu hình có thể quản lý các tài khoản ngay cả khi các hạn chế được + đặt. Người sở hữu thiết bị và người sở hữu cấu hình có thể gọi các API Quản lý tài khoản + ngay cả khi các hạn chế người dùng DISALLOW_MODIFY_ACCOUNTS đã có sẵn. +
  • + +
  • Người sở hữu thiết bị có thể quản lý những người dùng thứ cấp dễ dàng hơn. Khi một thiết bị + đang chạy trong chế độ người sở hữu thiết bị, hạn chế DISALLOW_ADD_USER + sẽ được đặt tự động. Điều này ngăn người dùng tạo các người dùng + thứ cấp không được quản lý. Ngoài ra, các phương thức CreateUser() và + createAndInitial() đã bị loại bỏ; phương thức +DevicePolicyManager.createAndManageUser() mới sẽ thay thế chúng. +
  • + +
  • Người sở hữu thiết bị có thể truy cập các mã định danh của thiết bị. Một người sở hữu thiết bị có thể truy cập + địa chỉ MAC của Wi-Fi của một thiết bị, bằng phương thức + DevicePolicyManagewr.getWifiMacAddress(). Nếu Wi-Fi chưa từng + được bật trên thiết bị đó thì phương thức này sẽ trả về một giá trị {@code null}. +
  • +
+ +

+ Để biết thêm thông tin về các thay đổi đối với Android cho Công việc trong Android N, hãy xem + Cập nhật của Android cho Công việc. +

+ +

Các điểm quan trọng khác

+ +
    +
  • Khi một ứng dụng đang chạy trên Android N nhưng nhắm mục tiêu mức API thấp hơn, +và người dùng thay đổi kích cỡ hiển thị thì tiến trình của ứng dụng sẽ bị tắt. Ứng dụng +phải có khả năng xử lý tình huống này một cách tinh tế. Nếu không, ứng dụng sẽ bị lỗi sụp đổ +khi người dùng khôi phục nó từ mục Gần đây. + +

    +Bạn cần kiểm thử ứng dụng để đảm bảo +rằng hành vi này không xảy ra. +Bạn có thể thực hiện điều đó bằng cách gây ra một lỗi sụp đổ giống vậy +khi tắt ứng dụng một cách thủ công qua DDMS. +

    + +

    +Các ứng dụng nhắm mục tiêu N và cao hơn sẽ không bị tắt tự động khi có các thay đổi về mật độ; +tuy nhiên, chúng có thể phản hồi khó khăn đối với các thay đổi cấu hình. +

    +
  • + +
  • +Các ứng dụng trên Android N cần có khả năng xử lý các thay đổi cấu hình một cách tinh tế, +và không bị lỗi sụp đổ trong các lần khởi động tiếp theo. Bạn có thể kiểm tra hành vi ứng dụng +bằng cách thay đổi kích cỡ phông chữ (Setting > +Display > Font size), và sau đó khôi phục +ứng dụng từ mục Gần đây. +
  • +
+ diff --git a/docs/html-intl/intl/vi/preview/download.jd b/docs/html-intl/intl/vi/preview/download.jd new file mode 100644 index 000000000000..f6aa7ccc67e9 --- /dev/null +++ b/docs/html-intl/intl/vi/preview/download.jd @@ -0,0 +1,541 @@ +page.title=Kiểm thử trên Thiết bị +meta.tags="preview", "nexus","system image" +page.tags="preview", "androidn" +page.image=images/cards/card-n-downloads_2x.png + +@jd:body + +
+ + + + +
+ + + +

+ Để chạy và kiểm thử ứng dụng của bạn trên nền tảng mới, bạn cần phải thiết lập môi trường thời gian chạy Android N +. Bạn có thể thực hiện điều đó bằng một trong các cách sau: +

+ +
    +
  • Cài đặt Android N trên một thiết bị phần cứng được hỗ trợ, hoặc
  • +
  • Thiết lập một bộ giả lập Android chạy Android N
  • +
+ +

+ Nếu bạn muốn có một môi trường để kiểm thử khả năng tương thích cơ bản của ứng dụng của bạn trên + nền tảng mới này, tất cả những gì bạn cần là APK hiện tại của bạn và một thiết bị phần cứng hoặc + bộ giả lập. Bạn không nhất thiết phải cập nhật môi trường phát triển đầy đủ + để thực hiện kiểm thử cơ bản. +

+ +

+ Nếu bạn muốn sửa đổi ứng dụng của mình để nhắm mục tiêu đến Android N hoặc sử dụng các API Android N mới, + bạn cần thiết lập một môi trường phát triển được cập nhật để hỗ trợ + Android N. Thiết lập để Phát triển dành cho + Android N có các chi tiết. +

+ + +

Thiết lập thiết bị phần cứng

+ +

+ Bản N Developer Preview cung cấp các cập nhật hệ thống cho một loạt các thiết bị phần cứng + mà bạn có thể sử dụng để kiểm thử ứng dụng của bạn, từ điện thoại tới máy tính bảng và TV. +

+ +

+ Nếu bạn có quyền truy cập vào một thiết bị được hỗ trợ, bạn có thể cập nhật nó thành bản dựng theo mốc của Preview dành cho + Nhà phát triển bằng một trong những cách sau: +

+ +
    +
  • Đăng ký cập nhật hệ thống tự động qua vô tuyến cho thiết bị thông qua + Chương trình Android Beta. Sau khi đăng ký, thiết bị của bạn sẽ nhận được + qua sóng vô tuyến các cập nhật định kỳ về tất cả bản dựng theo mốc trong bản N Developer Preview. Cách tiếp cận này + được khuyến khích bởi nó cho phép bạn chuyển tiếp liền mạch từ môi trường hiện tại của bạn + qua nhiều bản phát hành khác nhau của N Developer Preview.
  • +
  • Tải xuống ảnh hệ thống của Developer Preview và flash thiết bị. + Các cập nhật qua vô tuyến không được cung cấp tự động cho các thiết bị mà bạn flash thủ công, nhưng + bạn có thể đăng ký Chương trình Android Beta cho các thiết bị đó để nhận cập nhật qua vô tuyến.
  • +
+ +

Đăng ký cập nhật tự động qua vô tuyến cho thiết bị

+ +

+ Nếu bạn có quyền truy cập vào một thiết bị được hỗ trợ (xem danh sách trong bảng + Tải xuống), bạn có thể nhận được cập nhật qua sóng vô tuyến để xem trước các phiên bản của Android + bằng cách đăng ký Chương trình Android Beta cho thiết bị. Các cập nhật này được + tự động tải xuống và sẽ cập nhật thiết bị của bạn giống như các bản cập nhật + hệ thống chính thức. +

+ +

+ Bạn có thể hủy đăng ký thiết bị bất cứ lúc nào. Thiết bị sẽ nhận được bản cập nhật qua vô tuyến + của phiên bản Android sản xuất mới nhất khả dụng cho thiết bị đó + (ví dụ, Android 6.0 Marshmallow). Việc cập nhật yêu cầu phải thiết lập lại thiết bị + hoàn toàn, vì vậy dữ liệu người dùng trên thiết bị sẽ được gỡ bỏ. Hãy đảm bảo sao lưu + dữ liệu quan trọng trước khi hủy đăng ký thiết bị. +

+ +

+ Để biết thêm thông tin và đăng ký thiết bị của bạn, xem + trang web Chương trình Android Beta. +

+ +

Lưu ý: + Việc hủy đăng ký yêu cầu phải cài đặt lại toàn bộ thiết bị. Trước hết hãy sao lưu + các dữ liệu quan trọng. +

+ +

Flash thiết bị thủ công

+ +

+ Bất cứ lúc nào bạn cũng có thể tải xuống ảnh hệ thống mới nhất của Developer Preview và + flash thủ công nó vào thiết bị của bạn. Xem bảng dưới đây để tải xuống ảnh hệ thống + cho thiết bị kiểm thử của bạn. Việc flash thủ công thiết bị sẽ hữu ích nếu bạn cần + kiểm soát chính xác môi trường kiểm thử hoặc cần phải cài đặt lại thường xuyên, + chẳng hạn như cho kiểm thử tự động. +

+ +

+ Việc cài đặt ảnh hệ thống trên thiết bị sẽ gỡ bỏ tất cả dữ liệu khỏi + thiết bị, vì vậy trước hết bạn nên sao lưu dữ liệu của mình. +

+ +

+ Sau khi sao lưu dữ liệu thiết bị và tải xuống ảnh hệ thống bên dưới + khớp với thiết bị của bạn, hãy làm theo hướng dẫn tại developers.google.com/android + để flash ảnh này vào thiết bị của bạn. +

+ +

+ Các ảnh hệ thống được flash thủ công không + tự động nhận cập nhật qua vô tuyến cho các bản dựng theo mốc sau này của + Developer Preview. Hãy đảm bảo giữ cho môi trường của bạn được cập nhật và flash một + ảnh hệ thống mới tại mỗi mốc của Developer Preview. +

+ +

+ Nếu bạn quyết định muốn nhận cập nhật qua vô tuyến sau khi đã flash thủ công thiết bị, + tất cả những gì bạn cần làm là đăng ký Chương trình Android + Beta cho thiết bị. Bạn có thể đăng ký thiết bị bất cứ lúc nào để nhận được + bản cập nhật qua vô tuyến tiếp theo của Preview. +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Thiết bịTải xuống / Tổng kiểm
Nexus 5X
"bullhead"
bullhead-npc56p-preview-6c877a3d.tgz
+ MD5: b5cf874021023b398f5b983b24913f5d
+ SHA-1: 6c877a3d9fae7ec8a1678448e325b77b7a7b143a +
Nexus 6
"shamu"
shamu-npc56p-preview-54b13c67.tgz
+ MD5: af183638cf34e0eb944a1957d7696f60
+ SHA-1: 54b13c6703d369cc79a8fd8728fe4103c6343973 +
Nexus 6P
"angler"
angler-npc56p-preview-85ffc1b1.tgz
+ MD5: bc4934ea7bd325753eee1606d3725a24
+ SHA-1: 85ffc1b1be402b1b96f9ba10929e86bba6c6c588 +
Nexus 9
"volantis"
volantis-npc56p-preview-0e8ec8ef.tgz
+ MD5: c901334c6158351e945f188167ae56f4
+ SHA-1: 0e8ec8ef98c7a8d4f58d15f90afc5176303efca4 +
Nexus 9G
"volantisg"
volantisg-npc56p-preview-1bafdbfb.tgz
+ MD5: 7bb95bebc478d7257cccb4652899d1b4
+ SHA-1: 1bafdbfb502e979a9fe4c257a379c4c7af8a3ae6 +
Nexus Player
"fugu"
fugu-npc56r-preview-7027d5b6.tgz
+ MD5: f5d3d8f75836ccfe4c70e8162e498be4
+ SHA-1: 7027d5b662bceda4c80a91a0a14ef0e5a7ba795b +
Pixel C
"ryu"
ryu-npc56p-preview-335a86a4.tgz
+ MD5: 4e21fb183bbbf467bee91598d587fd2e
+ SHA-1: 335a86a435ee51f18464de343ad2e071c38f0e92 +
General Mobile 4G (Android One)
"seed"
seed_l8150-npc56p-preview-82472ebc.tgz
+ MD5: 983e083bc7cd0c4a2d39d6ebaa20202a
+ SHA-1: 82472ebc9a6054a103f53cb400a1351913c95127 +
+ +

Gỡ cài đặt Preview khỏi thiết bị

+ +

+ Nếu bạn muốn gỡ cài đặt preview khỏi thiết bị, bạn có thể thực hiện điều đó bằng một trong + những cách sau:

+
    +
  • Lấy thông số kỹ thuật của ảnh hệ thống nguyên gốc và sau đó flash thủ công + nó cho thiết bị. +
      +
    • Đối với các thiết bị Nexus và Pixel C, xem + trang Ảnh Cài đặt Gốc + cho Thiết bị Nexus để tìm bản tải xuống.
    • +
    • Đối với các thiết bị khác, vui lòng liên hệ trực tiếp với nhà sản xuất +thiết bị. Hoặc, nếu thiết bị được hỗ trợ + trong Chương trình Android Beta, bạn có thể đăng ký + chương trình cho thiết bị và sau đó hủy đăng ký thiết bị (xem bên dưới).
    • +
    +
  • +
  • Hủy đăng ký thiết bị khỏi Chương trình Android Beta. Nếu + thiết bị được đăng ký Chương trình Android Beta + , không quan trọng là thiết bị nào, bạn có thể dễ dàng hủy đăng ký thiết bị khỏi chương trình này. +

    + Thiết bị sẽ nhận được bản cập nhật qua vô tuyến của phiên bản Android sản xuất + mới nhất có sẵn cho thiết bị đó (ví dụ, Android 6.0 Marshmallow). + Bản cập nhật yêu cầu thiết lập lại toàn bộ thiết bị, vì vậy dữ liệu người dùng trên thiết bị sẽ được + gỡ bỏ. Hãy đảm bảo rằng bạn đã sao lưu dữ liệu quan trọng trước khi + hủy đăng ký thiết bị. +

    +
  • +
+ +

Lưu ý: + Việc gỡ cài đặt ảnh hệ thống của Developer Preview trước khi + kết thúc chương trình yêu cầu phải thiết lập lại toàn bộ thiết bị và gỡ bỏ tất cả dữ liệu người dùng + trên thiết bị. +

+ + +

Thiết lập bộ giả lập

+ +

Để sử dụng Bộ Giả Lập Android chạy Android N Preview, bạn cần +tải xuống Android N Preview SDK và tạo một thiết bị ảo cho +bộ giả lập.

+ +

Đầu tiên, tải xuống Android N Preview SDK như sau (nếu bạn +đã có nó trong khi thiết lập +để phát triển dành cho Android N, bạn có thể bỏ qua phần này): + +

    +
  1. Trong Android Studio, Mở hộp thoại Settings + (File > Settings trên Windows/Linux, hoặc + Android Studio > Preferences trên Mac). Trong bảng điều khiển + bên trái, chọn Appearance & Behavior > + System Settings > Android SDK. + +
  2. Nhấp vào tab SDK Platforms, rồi chọn hộp kiểm + Android N Preview.
  3. + +
  4. Nhấp vào tab SDK Tools, rồi chọn + Android SDK Build Tools, Android SDK + Platform-Tools, và các hộp kiểm Android SDK Tools +. +
  5. + +
  6. Nhấp vào OK và chấp nhận thỏa thuận + giấy phép cho bất kỳ gói nào sẽ được cài đặt. +
  7. +
+ +

Giờ đây bạn sẽ có Android SDK Built-Tools 24.0 0 rc1, +Platform-Tools 24.0.0 rc1, và SDK Tools +25.0.9. Nếu bạn không cập nhật Các Công cụ SDK lên 25.0.9, bạn sẽ không +thể chạy ảnh hệ thống x86_64 cho Android N.

+ + +

Bây giờ, hãy tạo một thiết bị ảo với ảnh hệ thống Android N:

+ +
    +
  1. Mở Trình quản lý AVD bằng cách chọn Tools > Android > + AVD Manager.
  2. +
  3. Nhấp vào Create Virtual Device.
  4. +
  5. Chọn một thiết bị chẳng hạn như Nexus 5X, Nexus 6P, Nexus 9, hoặc Android TV, + rồi nhấp vào Next.
  6. +
  7. Chọn ảnh hệ thống N (với + x86 ABI), rồi nhấp vào Next. + (Hiện chỉ có ảnh hệ thống x86 được hỗ trợ với Bộ giả lập Android +dành cho Preview Android N.) +
  8. Hoàn thành các bước cấu hình AVD còn lại và nhấp vào + Finish.
  9. +
+ +

Giờ đây bạn có thể khởi chạy Bộ giả lập Android với AVD Preview Android N.

+ +

+Để có trải nghiệm tốt nhất trong Bộ giả lập Android, hãy cài đặt +Android Studio 2.1 Preview, có hỗ trợ Bộ giả lập Android 2.0 Beta +với hiệu suất nhanh hơn nhiều so với Bộ giả lập trong +Android Studio 1.5.

+ +

Lưu ý: + Nếu bạn hiện đang sử dụng Android Studio 2.0 Beta, một vấn đề đã được biết đến + sẽ ngăn cản bạn tạo AVD bằng ảnh hệ thống của N Preview, vì vậy + hiện bạn cần sử dụng preview của Android Studio 2.1 để tạo các AVD. +

+ +

Để biết thêm thông tin về tạo thiết bị ảo, hãy xem Quản lý Thiết bị ảo. +

+ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html-intl/intl/vi/preview/features/background-optimization.jd b/docs/html-intl/intl/vi/preview/features/background-optimization.jd new file mode 100644 index 000000000000..3fdb8d72250b --- /dev/null +++ b/docs/html-intl/intl/vi/preview/features/background-optimization.jd @@ -0,0 +1,388 @@ +page.title=Tối ưu hóa Chạy ngầm +page.metaDescription=Các hạn chế mới đối với truyền phát không biểu thị. +page.keywords="android N", "implicit broadcasts", "job scheduler" +@jd:body + + + +

+ Các tiến trình chạy ngầm có thể tiêu tốn bộ nhớ và pin. Ví dụ, một + truyền phát không biểu thị có thể bắt đầu nhiều tiến trình chạy ngầm đã đăng ký + để theo dõi chúng, ngay cả khi các tiến trình đó có thể không làm việc nhiều. Điều này có thể có + ảnh hưởng lớn đến cả hiệu suất của thiết bị lẫn trải nghiệm của người dùng. +

+ +

+ Để loại bỏ vấn đề này, N Developer Preview áp dụng các hạn chế + sau: +

+ +
    +
  • Các ứng dụng nhắm đến Preview không nhận được truyền phát {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} nếu chúng + đăng ký nhận truyền phát trong bản kê khai của chúng. Các ứng dụng đang chạy ở tiền cảnh + vẫn có thể theo dõi {@code CONNECTIVITY_CHANGE} trên luồng chính của chúng bằng cách + đăng ký{@link android.content.BroadcastReceiver} với {@link + android.content.Context#registerReceiver Context.registerReceiver()}. +
  • + +
  • Ứng dụng không thể gửi hoặc nhận các truyền phát {@link + android.hardware.Camera#ACTION_NEW_PICTURE} hoặc {@link + android.hardware.Camera#ACTION_NEW_VIDEO}. Việc tối ưu này + tác động đến mọi ứng dụng, không chỉ các ứng dụng nhắm đến Preview. +
  • +
+ +

+ Khuôn khổ Android cung cấp một số giải pháp để giảm thiểu sự cần thiết đối với + các truyền phát không biểu thị. Ví dụ, {@link android.app.job.JobScheduler} + và + {@code GcmNetworkManager} cung cấp một cơ chế lên lịch hiệu quả + cho các hoạt động mạng khi đáp ứng các điều kiện được chỉ định, ví dụ như kết nối tới mạng + không đo lưu lượng. Bây giờ bạn cũng có thể sử dụng {@link android.app.job.JobScheduler} + để phản ứng lại với các thay đổi đối với các trình cung cấp nội dung. Các đối tượng {@link android.app.job.JobInfo} + gói gọn các tham số {@link android.app.job.JobScheduler} + dùng để lên lịch tác vụ của bạn. Khi đáp ứng được các điều kiện của tác vụ, hệ thống + sẽ thực thi tác vụ này trên {@link android.app.job.JobService} của ứng dụng của bạn. +

+ +

+ Trong tài liệu này, chúng ta sẽ tìm hiểu cách sử dụng các phương thức thay thế, chẳng hạn như + {@link android.app.job.JobScheduler}, để thích ứng ứng dụng của bạn với các hạn chế + mới này. +

+ +

+ Các hạn chế về CONNECTIVITY_ACTION +

+ +

+ Các ứng dụng nhắm đến N Developer Preview không nhận được truyền phát {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} nếu chúng + đăng ký nhận truyền phát trong bản kê khai của chúng, và các tiến trình phụ thuộc vào truyền phát này + sẽ không khởi động. Điều này cũng đặt ra một vấn đề cho ứng dụng + về việc theo dõi thay đổi mạng hoặc thực hiện các hoạt động mạng hàng loạt khi + thiết bị kết nối với một mạng không đo lưu lượng. Một số giải pháp để tránh khỏi hạn chế này + đã tồn tại trong khuôn khổ Android, nhưng chọn được một giải pháp phù hợp + phụ thuộc vào những gì bạn muốn ứng dụng của bạn hoàn thành. +

+ +

+ Lưu ý: Một{@link android.content.BroadcastReceiver} có đăng ký + {@link android.content.Context#registerReceiver Context.registerReceiver()} + tiếp tục nhận các truyền phát này trong khi ứng dụng đang ở tiền cảnh. +

+ +

+ Lên lịch Tác vụ Mạng trên Kết nối Không đo lưu lượng +

+ +

+ Khi sử dụng lớp{@link android.app.job.JobInfo.Builder JobInfo.Builder} + để xây dựng đối tượng {@link android.app.job.JobInfo} của bạn, hãy áp dụng phương thức {@link + android.app.job.JobInfo.Builder#setRequiredNetworkType + setRequiredNetworkType()} và chuyển {@link android.app.job.JobInfo + JobInfo.NETWORK_TYPE_UNMETERED} dưới dạng một tham số tác vụ. Đoạn mã mẫu sau + lên lịch một dịch vụ để chạy khi thiết bị kết nối với một mạng + không đo lưu lượng và đang sạc: +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+      (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo job = new JobInfo.Builder(
+    MY_BACKGROUND_JOB,
+    new ComponentName(context, MyJobService.class))
+      .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
+      .setRequiresCharging(true)
+      .build();
+  js.schedule(job);
+}
+
+ +

+ Khi các điều kiện cho tác vụ của bạn đã được đáp ứng, ứng dụng của bạn sẽ nhận được lệnh gọi lại để chạy + phương thức{@link android.app.job.JobService#onStartJob onStartJob()}trong + {@code JobService.class} được chỉ định. Để xem thêm các ví dụ về triển khai {@link + android.app.job.JobScheduler} , hãy xem ứng dụng mẫu JobScheduler. +

+ +

+ Các ứng dụng sử dụng dịch vụ GMSCore, và nhắm đến Android 5.0 (API mức 21) + hoặc thấp hơn, có thể sử dụng + {@code GcmNetworkManager} và quy định {@code Task.NETWORK_STATE_UNMETERED}. +

+ +

+ Theo dõi Kết nối Mạng Trong khi Ứng dụng đang Chạy +

+ +

+ Các ứng dụng đang chạy ở tiền cảnh vẫn có thể theo dõi {@code + CONNECTIVITY_CHANGE} bằng một{@link + android.content.BroadcastReceiver} đã đăng ký. Tuy nhiên, API {@link + android.net.ConnectivityManager} cung cấp phương thức yêu cầu lệnh gọi lại hiệu quả hơn + chỉ khi đáp ứng được các điều kiện được chỉ định. +

+ +

+ Các đối tượng {@link android.net.NetworkRequest} định nghĩa các tham số của + lệnh gọi lại mạng xét về {@link android.net.NetworkCapabilities}. Bạn + tạo các đối tượng {@link android.net.NetworkRequest} bằng lớp {@link + android.net.NetworkRequest.Builder NetworkRequest.Builder}. {@link + android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, + android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} + rồi chuyển đối tượng{@link android.net.NetworkRequest} sang hệ thống. Khi + đáp ứng được các điều kiện mạng, ứng dụng nhận lệnh gọi lại để thực thi phương thức + {@link android.net.ConnectivityManager.NetworkCallback#onAvailable + onAvailable()} như được định nghĩa trong lớp {@link + android.net.ConnectivityManager.NetworkCallback} của nó. +

+ +

+ Ứng dụng tiếp tục nhận lệnh gọi lại cho đến khi ứng dụng tồn tại hoặc nó gọi + {@link android.net.ConnectivityManager#unregisterNetworkCallback + unregisterNetworkCallback()}. +

+ +

+ Các hạn chế về NEW_PICTURE và NEW_VIDEO +

+ +

+ Trong N Developer Preview, ứng dụng không thể gửi hoặc nhận các truyền phát {@link + android.hardware.Camera#ACTION_NEW_PICTURE} hoặc {@link + android.hardware.Camera#ACTION_NEW_VIDEO}. Hạn chế này giúp + loại bỏ các tác động về hiệu suất và trải nghiệm của người dùng khi một số ứng dụng phải + thức dậy để xử lý một ảnh hoặc video mới. N Developer Preview + mở rộng {@link android.app.job.JobInfo} và {@link + android.app.job.JobParameters} để cung cấp một giải pháp thay thế. +

+ +

+ Các phương thức JobInfo Mới +

+ +

+ Để kích hoạt tác vụ khi thay đổi URI nội dung, N Developer Preview sẽ mở rộng + API{@link android.app.job.JobInfo} bằng các phương thức sau: +

+ +
+
+ {@code JobInfo.TriggerContentUri()} +
+ +
+ Gói gọn các tham số yêu cầu để kích hoạt tác vụ khi thay đổi URI nội dung. +
+ +
+ {@code JobInfo.Builder.addTriggerContentUri()} +
+ +
+ Chuyển một đối tượng {@code TriggerContentUri} đến {@link + android.app.job.JobInfo}. Một {@link android.database.ContentObserver} + sẽ theo dõi URI nội dung được gói gọn. Nếu có nhiều đối tượng {@code + TriggerContentUri} được liên kết với một tác vụ, hệ thống sẽ cung cấp + lệnh gọi lại ngay cả khi hệ thống báo cáo có sự thay đổi chỉ ở trong một trong những URI nội dung. +
+ +
+ Thêm cờ {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} để + kích hoạt tác vụ nếu bất kỳ kế nhiệm nào của URI đã cho thay đổi. Cờ này + tương ứng với tham số {@code notifyForDescendants} đã chuyển đến {@link + android.content.ContentResolver#registerContentObserver + registerContentObserver()}. +
+
+ +

+ Lưu ý: {@code TriggerContentUri()} không thể được sử dụng + kết hợp với {@link android.app.job.JobInfo.Builder#setPeriodic + setPeriodic()} hoặc {@link android.app.job.JobInfo.Builder#setPersisted + setPersisted()}. Để tiếp tục theo dõi các thay đổi nội dung, hãy lên lịch một + {@link android.app.job.JobInfo} mới trước khi {@link + android.app.job.JobService} của ứng dụng hoàn thành xử lý lệnh gọi lại gần đây nhất. +

+ +

+ Đoạn mã mẫu sau lên lịch kích hoạt một tác vụ khi hệ thống báo cáo + có sự thay đổi về URI nội dung, {@code MEDIA_URI}: +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+          (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo.Builder builder = new JobInfo.Builder(
+          MY_BACKGROUND_JOB,
+          new ComponentName(context, MediaContentJob.class));
+  builder.addTriggerContentUri(
+          new JobInfo.TriggerContentUri(MEDIA_URI,
+          JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
+  js.schedule(builder.build());
+}
+
+

+ Khi hệ thống báo cáo có sự thay đổi trong (các) URI nội dung được chỉ định, ứng dụng của bạn + sẽ nhận được lệnh gọi lại và một đối tượng {@link android.app.job.JobParameters} được chuyển sang + phương thức {@link android.app.job.JobService#onStartJob onStartJob()} + trong {@code MediaContentJob.class}. +

+ +

+ Các phương thức JobParameter Mới +

+ +

+ N Developer Preview cũng mở rộng {@link android.app.job.JobParameters} để + cho phép ứng dụng của bạn nhận thông tin hữu ích về những gì thẩm quyền nội dung + và các URI đã kích hoạt tác vụ: +

+ +
+
+ {@code Uri[] getTriggeredContentUris()} +
+ +
+ Trả về mảng URI đã kích hoạt tác vụ đó. Kết quả trả về có thể bằng {@code + null} nếu không có URI nào kích hoạt tác vụ (ví dụ như, tác vụ đã được + kích hoạt do thời hạn hoặc lý do khác), hoặc số các URI + bị thay đổi nhiều hơn 50. +
+ +
+ {@code String[] getTriggeredContentAuthorities()} +
+ +
+ Trả về mảng xâu thẩm quyền nội dung đã kích hoạt tác vụ đó. + Nếu mảng được trả về không phải {@code null}, hãy dùng {@code getTriggeredContentUris()} + để truy xuất chi tiết về URI nào đã thay đổi. +
+
+ +

+ Mã mẫu sau sẽ ghi đè lên phương thức {@link + android.app.job.JobService#onStartJob JobService.onStartJob()} và + và ghi lại các thẩm quyền nội dung và URI đã kích hoạt tác vụ. +

+ +
+@Override
+public boolean onStartJob(JobParameters params) {
+  StringBuilder sb = new StringBuilder();
+  sb.append("Media content has changed:\n");
+  if (params.getTriggeredContentAuthorities() != null) {
+      sb.append("Authorities: ");
+      boolean first = true;
+      for (String auth :
+          params.getTriggeredContentAuthorities()) {
+          if (first) {
+              first = false;
+          } else {
+             sb.append(", ");
+          }
+           sb.append(auth);
+      }
+      if (params.getTriggeredContentUris() != null) {
+          for (Uri uri : params.getTriggeredContentUris()) {
+              sb.append("\n");
+              sb.append(uri);
+          }
+      }
+  } else {
+      sb.append("(No content)");
+  }
+  Log.i(TAG, sb.toString());
+  return true;
+}
+
+ +

+ Tối ưu hóa thêm Ứng dụng của bạn +

+ +

+ Tối ưu hóa ứng dụng của bạn để chạy trên các thiết bị có bộ nhớ ít, hoặc đang trong điều kiện + bộ nhớ ít có thể cải thiện hiệu suất và trải nghiệm của người dùng. Loại bỏ + các thành phần phụ thuộc trên các dịch vụ chạy ngầm và bộ thu truyền phát không biểu thị đã đăng ký tĩnh + có thể giúp ứng dụng của bạn chạy tốt hơn trên các thiết bị như vậy. Mặc dù + N Developer Preview thực hiện các bước để giảm bớt một vài trong số các vấn đề này, nhưng chúng tôi + khuyến nghị bạn nên tối ưu ứng dụng của bạn để chạy hoàn toàn không cần sử dụng + các tiến trình chạy ngầm này. +

+ +

+ N Developer Preview giới thiệu một số lệnh Android Debug Bridge (ADB) bổ sung mà + bạn có thể sử dụng để kiểm thử hành vi của ứng dụng bằng các tiến trình chạy ngầm đã bị vô hiệu hóa đó: +

+ +
    +
  • Để mô phỏng các điều kiện trong đó các truyền phát không biểu thị và dịch vụ chạy ngầm + không có sẵn, hãy nhập lệnh sau: +
  • + +
  • +
    +{@code $ adb shell cmd appops set RUN_IN_BACKGROUND ignore}
    +
    +
  • + +
  • Để kích hoạt lại các truyền phát không biểu thị và dịch vụ chạy ngầm, hãy nhập + lệnh sau: +
  • + +
  • +
    +{@code $ adb shell cmd appops set RUN_IN_BACKGROUND allow}
    +
    +
  • +
\ No newline at end of file diff --git a/docs/html-intl/intl/vi/preview/features/direct-boot.jd b/docs/html-intl/intl/vi/preview/features/direct-boot.jd new file mode 100644 index 000000000000..b844a0fc5fa6 --- /dev/null +++ b/docs/html-intl/intl/vi/preview/features/direct-boot.jd @@ -0,0 +1,180 @@ +page.title=Khởi động Trực tiếp +page.keywords=preview,sdk,direct boot +page.tags=androidn + +@jd:body + + + +

Android N chạy trong chế độ Khởi động Trực tiếp an toàn +khi thiết bị đã được bật nguồn nhưng người dùng chưa mở khóa +thiết bị. Để hỗ trợ chế độ này, hệ thống cung cấp hai vị trí lưu trữ dữ liệu:

+ +
    +
  • Lưu trữ mã hóa thông tin xác thực, là vị trí lưu trữ mặc định +và chỉ khả dụng sau khi người dùng đã mở khóa thiết bị.
  • +
  • Lưu trữ mã hóa thiết bị, là vị trí lưu trữ khả dụng cho cả +chế độ Khởi động Trực tiếp và sau khi người dùng đã mở khóa thiết bị.
  • +
+ +

Theo mặc định, các ứng dụng không chạy trong quá trình chế độ Khởi động Trực tiếp. +Nếu ứng dụng của bạn cần thực hiện hành động trong chế độ Khởi động Trực tiếp thì bạn có thể đăng ký +các thành phần ứng dụng cần chạy trong chế độ này. Một số trường hợp sử dụng phổ biến +cho các ứng dụng cần chạy trong chế độ Khởi động Trực tiếp gồm:

+ +
    +
  • Ứng dụng có thông báo theo lịch, như ứng dụng +đồng hồ báo thức.
  • +
  • Ứng dụng cung cấp các thông báo quan trọng cho người dùng như ứng dụng SMS.
  • +
  • Ứng dụng cung cấp các dịch vụ trợ năng như Talkback.
  • +
+ +

Nếu ứng dụng của bạn cần truy cập dữ liệu khi đang chạy trong chế độ Khởi động Trực tiếp thì hãy sử dụng +lưu trữ mã hóa thiết bị. Bộ nhớ lưu trữ được mã hóa của thiết bị có chứa dữ liệu +được mã hóa bằng một khóa chỉ khả dụng sau khi thiết bị đã thực hiện một +lần khởi động được xác thực thành công.

+ +

Đối với dữ liệu cần được mã hóa bằng một khóa liên kết tới thông tin xác thực +của người dùng như mã PIN hoặc mật khẩu thì hãy sử dụng bộ nhớ lưu trữ mã hóa thông tin xác thực. +Bộ nhớ lưu trữ mã hóa thông tin xác thực chỉ khả dụng sau khi người dùng đã mở khóa +thành công thiết bị, tính đến khi người dùng khởi động lại thiết bị một lần nữa. Nếu +người dùng mở màn hình khóa sau khi mở khóa thiết bị thì thao tác này không khóa +bộ nhớ mã hóa thông tin xác thực.

+ +

Yêu cầu Truy cập để Chạy trong quá trình Khởi động Trực tiếp

+ +

Các ứng dụng phải đăng ký các thành phần của chúng với hệ thống trước khi chúng +có thể chạy trong chế độ Khởi động Trực tiếp hoặc truy cập bộ nhớ lưu trữ +mã hóa thiết bị. Ứng dụng đăng ký với hệ thống bằng cách đánh dấu các thành phần là +nhận biết mã hóa. Để đánh dấu các thành phần của bạn là nhận biết mã hóa, hãy đặt thuộc tính +android:encryptionAware thành true trong bản kê khai.

+ +

Các thành phần nhận biết mã hóa có thể đăng ký để nhận một thông điệp truyền phát +LOCKED_BOOT_COMPLETED từ +hệ thống khi thiết bị được khởi động lại. Lúc này, bộ nhớ lưu trữ +mã hóa thiết bị sẽ khả dụng và thành phần của bạn có thể thực thi các tác vụ cần được +chạy trong chế độ Khởi động Trực tiếp, như kích hoạt báo thức đã đặt.

+ +

Đoạn mã sau là một ví dụ về cách đăng ký một +{@link android.content.BroadcastReceiver} là nhận biết mã hóa và thêm một +bộ lọc ý định cho LOCKED_BOOT_COMPLETED trong bản kê khai của ứng dụng:

+ +
+<receiever
+  android:encryptionAware="true" >
+  ...
+  <intent-filter>
+    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+  </intent-filter>
+</receiver>
+
+ +

Khi người dùng đã mở khóa thiết bị thì mọi thành phần có thể truy cập +cả bộ nhớ lưu trữ mã hóa thiết bị lẫn bộ nhớ lưu trữ mã hóa thông tin xác thực.

+ +

Truy cập Bộ nhớ Lưu trữ Mã hóa của Thiết bị

+ +

Để truy cập bộ nhớ lưu trữ mã hóa thiết bị, hãy tạo một thực thể +{@link android.content.Context} thứ hai bằng cách gọi +Context.createDeviceEncryptedStorageContext(). Tất cả các lệnh gọi +API bộ nhớ lưu trữ đều sử dụng bối cảnh này để truy cập bộ nhớ lưu trữ mã hóa thiết bị. +Ví dụ sau sẽ truy cập bộ nhớ lưu trữ mã hóa của thiết bị và mở một tệp +dữ liệu ứng dụng có sẵn:

+ +
+Context directBootContext = Context.createDeviceEncryptedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+
+ +

Chỉ sử dụng bộ nhớ lưu trữ mã hóa của thiết bị +cho thông tin phải truy cập được trong chế độ Khởi động Trực tiếp. +Không sử dụng bộ nhớ lưu trữ mã hóa của thiết bị làm bộ lưu trữ mã hóa cho mục đích chung. +Đối với thông tin cá nhân của người dùng, hoặc dữ liệu được mã hóa không cần thiết +trong chế độ Khởi động Trực tiếp thì hãy sử dụng bộ nhớ lưu trữ mã hóa thông tin xác thực.

+ +

Nhận thông báo Mở khóa của Người dùng

+ +

Một khi người dùng mở khóa thiết bị sau khi khởi động lại, ứng dụng của bạn có thể chuyển sang +truy cập bộ nhớ lưu trữ mã hóa thông tin xác thực và sử dụng các dịch vụ thông thường của hệ thống +phụ thuộc vào thông tin xác thực người dùng.

+ +

Để nhận thông báo khi người dùng mở khóa thiết bị sau khi khởi động lại, +hãy đăng ký một {@link android.content.BroadcastReceiver} từ một thành phần đang chạy +để lắng nghe thông báo ACTION_USER_UNLOCKED. Hoặc bạn có thể +nhận thông báo có sẵn {@link android.content.Intent#ACTION_BOOT_COMPLETED +ACTION_BOOT_COMPLETED} lúc này sẽ chỉ báo thiết bị đã khởi động xong và +người dùng đã mở khóa thiết bị.

+ +

Bạn có thể truy vấn trực tiếp để biết người dùng đã mở khóa thiết bị hay chưa bằng cách gọi +UserManager.isUserUnlocked().

+ +

Chuyển nhập Dữ liệu Có sẵn

+ +

Nếu người dùng cập nhật thiết bị của họ để sử dụng chế độ Khởi động Trực tiếp thì bạn có thể có dữ liệu +hiện hữu cần được chuyển nhập sang bộ nhớ lưu trữ mã hóa của thiết bị. Sử dụng +Context.migrateSharedPreferencesFrom() và +Context.migrateDatabaseFrom() để chuyển nhập dữ liệu về tùy chọn và cơ sở dữ liệu +giữa bộ nhớ lưu trữ mã hóa thông tin xác thực và bộ nhớ lưu trữ mã hóa thiết bị.

+ +

Hãy phán đoán hợp lý nhất khi quyết định dữ liệu nào nên chuyển nhập từ bộ nhớ lưu trữ mã hóa +thông tin xác thực sang bộ nhớ lưu trữ mã hóa thiết bị. Bạn không nên di chuyển +thông tin cá nhân của người dùng như mật khẩu hoặc các mã thông báo cấp quyền sang +bộ nhớ lưu trữ mã hóa thiết bị. Trong một số trường hợp, bạn có thể cần quản lý +các bộ dữ liệu riêng biệt trong hai bộ lưu trữ mã hóa.

+ +

Kiểm thử Ứng dụng Nhận biết Mã hóa của bạn

+ +

Kiểm thử ứng dụng nhận biết mã hóa bằng cách sử dụng chế độ Khởi động Trực tiếp mới. Có +hai cách để kích hoạt Khởi động Trực tiếp.

+ +

Cẩn trọng: Kích hoạt Khởi động Trực tiếp +sẽ xóa sạch mọi dữ liệu người dùng trên thiết bị.

+ +

Trên các thiết bị được hỗ trợ có Android N được cài đặt, kích hoạt +Khởi động Trực tiếp bằng cách thực hiện một trong các thao tác sau:

+ +
    +
  • Trên thiết bị, bật Developer options nếu chưa hãy bật bằng cách +vào Settings > About phone và nhấn vào Build number +bảy lần. Khi màn hình tùy chọn cho nhà phát triển khả dụng, hãy vào +Settings > Developer options và chọn +Convert to file encryption.
  • +
  • Sử dụng các lệnh shell adb sau để kích hoạt chế độ Khởi động Trực tiếp: +
    +$ adb reboot-bootloader
    +$ fastboot --wipe-and-use-fbe
    +
    +
  • +
+ +

Cũng có một chế độ Khởi động Trực tiếp giả lập trong trường hợp bạn cần chuyển đổi +các chế độ trên thiết bị thử nghiệm. Chỉ nên sử dụng chế độ Giả lập trong quá trình +phát triển và có thể làm mất dữ liệu. Để kích hoạt chế độ Khởi động Trực tiếp giả lập, +hãy đặt mẫu hình khóa cho thiết bị, chọn "No thanks" nếu được yêu cầu + bật màn hình khởi động bảo mật khi đặt một mẫu hình khóa và sau đó sử dụng +lệnh shell adb sau:

+ +
+$ adb shell sm set-emulate-fbe true
+
+ +

Hãy sử dụng lệnh sau để tắt chế độ Khởi động Trực tiếp giả lập:

+ +
+$ adb shell sm set-emulate-fbe false
+
+ +

Sử dụng các lệnh này có thể khiến cho thiết bị khởi động lại.

diff --git a/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd b/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd new file mode 100644 index 000000000000..96316e989bfc --- /dev/null +++ b/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd @@ -0,0 +1,158 @@ +page.title=API Khuôn khổ Android ICU4J + +@jd:body + + + +

+ ICU4J là bộ thư viện Java mã nguồn mở được sử dụng rộng rãi để cung cấp hỗ trợ Unicode + và toàn cầu hóa cho các ứng dụng phần mềm. Android N + cung cấp một tập nhỏ các API ICU4J trong khuôn khổ Android cho các nhà phát triển ứng dụng + sử dụng trong gói {@code android.icu}. Các API này sử dụng + dữ liệu bản địa hóa có trong thiết bị. Do đó, bạn có thể giảm kích thước tệp APK + bằng cách không biên dịch các thư viện ICU4J vào tệp APK; thay vào đó bạn có thể + gọi chúng trong khuôn khổ một cách đơn giản. (Trong trường hợp này, bạn có thể muốn cung cấp + nhiều phiên bản + tệp APK để những người dùng chạy phiên bản Android thấp hơn Android N + có thể tải phiên bản ứng dụng có chứa các thư viện ICU4J.) +

+ +

+ Tài liệu này sẽ bắt đầu bằng việc cung cấp thông tin cơ bản về các mức Android API + tối thiểu cần để hỗ trợ các thư viện này. Sau đó tài liệu sẽ giải thích những gì + bạn cần để hiểu được công việc triển khai ICU4J liên quan cụ thể đến Android. Cuối cùng, + tài liệu sẽ cho bạn biết cách sử dụng các API ICU4J trong khuôn khổ Android. +

+ +

Liên quan đến ICU4J

+ +

+ Android N cung cấp một tập nhỏ các API ICU4J thông qua + gói android.icu thay vì gói com.ibm.icu. +Khuôn khổ Android có thể chọn không + cung cấp các API ICU4J vì nhiều lý do; ví dụ, Android N không cung cấp + một số API bị loại bỏ hoặc những API chưa được đội ngũ ICU công bố là + bản ổn định. Vì nhóm ICU sẽ loại bỏ các API này trong tương lai do đó Android cũng sẽ đánh dấu + chúng là bị loại bỏ nhưng vẫn tiếp tục thêm vào. +

+ +

Bảng 1. Các phiên bản ICU và CLDR được sử dụng + trong Android N.

+ + + + + + + + + + + +
Mức Android APIPhiên bản ICUPhiên bản CLDR
Android N5628
+ +

Sau đây là một vài lưu ý quan trọng:

+ +
    +
  • Các API khuôn khổ Android ICU4J không có tất cả các API của ICU4J.
  • +
  • Các nhà phát triển NDK cần biết rằng ICU4C Android không được hỗ trợ.
  • +
  • Các API trong khuôn khổ Android không thay thế hỗ trợ của Android cho +việc bản địa hóa bằng +các tài nguyên.
  • +
+ +

Chuyển nhập sang gói android.icu từ com.ibm.icu

+ +

+ Nếu bạn đã sử dụng các API ICU4J trong ứng dụng và + các API android.icu đáp ứng yêu cầu của bạn thì việc chuyển nhập sang + các API của khuôn khổ đòi hỏi bạn phải thay đổi thành phần nhập vào của Java + từ com.ibm.icu sang android.icu. Khi đó bạn có thể + xóa các tệp ICU4J của bạn khỏi tệp APK. +

+ +

+ Lưu ý: Các API khuôn khổ ICU4J sử dụng không gian tên {@code android.icu} + thay vì {@code com.ibm.icu}. Điều này là để tránh xung đột + không gian tên trong các tệp APK có chứa các thư viện {@code com.ibm.icu} của riêng chúng. +

+ +

+ Chuyển nhập sang các API android.icu từ các API Android SDK khác +

+ +

+ Một số lớp trong gói javaandroid có + các lớp tương ứng với các lớp trong ICU4J. Tuy nhiên, ICU4J thường cung cấp hỗ trợ + rộng hơn cho các tiêu chuẩn và ngôn ngữ. +

+

Sau đây là một số ví dụ để giúp bạn bắt đầu:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LớpThay thế
java.lang.Character android.icu.lang.UCharacter
java.text.BreakIterator android.icu.text.BreakIterator
java.text.DecimalFormat android.icu.text.DecimalFormat
java.util.Calendar +android.icu.util.Calendar
android.text.BidiFormatter + android.icu.text.Bidi +
android.text.format.DateFormat + android.icu.text.DateFormat +
android.text.format.DateUtils android.icu.text.DateFormat +android.icu.text.RelativeDateTimeFormatter +
+ +

Cấp phép

+ +

+ ICU4J được phát hành theo giấy phép ICU. Hãy xem Hướng dẫn sử dụng + ICU để biết thêm chi tiết. +

diff --git a/docs/html-intl/intl/vi/preview/features/multi-window.jd b/docs/html-intl/intl/vi/preview/features/multi-window.jd new file mode 100644 index 000000000000..485bc284786f --- /dev/null +++ b/docs/html-intl/intl/vi/preview/features/multi-window.jd @@ -0,0 +1,582 @@ +page.title=Hỗ trợ đa cửa sổ +page.metaDescription=Hỗ trợ mới trong Android N để hiển thị nhiều hơn một ứng dụng cùng lúc. +page.keywords="multi-window", "android N", "split screen", "free-form" + +@jd:body + + + +

+ Android N thêm hỗ trợ cho hiển thị đồng thời nhiều hơn một ứng dụng + vào cùng một thời điểm. Trên thiết bị cầm tay, hai ứng dụng có thể chạy song song hoặc + trên dưới nhau trong chế độ chia màn hình. Trên thiết bị TV, ứng dụng có thể + sử dụng chế độ ảnh trong ảnh để tiếp tục phát lại video trong khi người dùng + đang tương tác với ứng dụng khác. +

+ +

+ Nếu bạn dựng ứng dụng của bạn bằng N Preview SDK, bạn có thể cấu hình cách ứng dụng của bạn + xử lý hiển thị đa cửa sổ. Ví dụ, bạn có thể quy định + các kích thước tối thiểu cho phép của hoạt động của bạn. Bạn cũng có thể vô hiệu hóa hiển thị đa cửa sổ cho + ứng dụng của bạn, đảm bảo rằng hệ thống chỉ hiển thị ứng dụng của bạn trong chế độ + toàn màn hình. +

+ +

Tổng quan

+ +

+ Android N cho phép một vài ứng dụng chia sẻ màn hình ngay lập tức. Ví + dụ, người dùng có thể chia đôi màn hình ra, xem một trang web ở bên trái màn hình + trong khi đang tạo email ở bên phải màn hình. Trải nghiệm này của người dùng phụ thuộc vào + thiết bị: +

+ +
    +
  • Thiết bị cầm tay đang chạy Android N có chế độ + chia màn hình. Trong chế độ này, hệ thống sẽ lấp đầy màn hình bằng hai ứng dụng + song song nhau hoặc trên dưới. Người dùng có thể kéo đường chia + phân tách hai ứng dụng để hiển thị một ứng dụng rộng hơn và ứng dụng còn lại nhỏ đi. +
  • + +
  • Trên Trình phát Nexus đang chạy Android N, các ứng dụng có thể tự đặt chúng + vào trong chế độ ảnh trong ảnh, cho phép + các ứng dụng này tiếp tục hiển thị nội dung khi người dùng duyệt web hoặc tương tác với + ứng dụng khác. +
  • + +
  • Các nhà sản xuất thiết bị có kích cỡ lớn hơn có thể chọn kích hoạt chế độ + hình dạng tự do, trong đó người dùng có thể tự do thay đổi kích thước mỗi hoạt động. Nếu + nhà sản xuất đã kích hoạt tính năng này, ngoài + chế độ chia màn hình, thiết bị sẽ còn có chế độ hình dạng tự do. +
  • +
+ + +

+ Hình 1. Hai ứng dụng chạy trong chế độ chia màn hình. +

+ +

+ Người dùng có thể chuyển vào trong chế độ đa cửa sổ bằng các cách sau: +

+ +
    +
  • Nếu người dùng mở màn hình Overview + và thực hiện nhấn giữ + tiêu đề của hoạt động, họ có thể kéo hoạt động đó đến phần được tô sáng của + màn hình để đặt hoạt động đó vào trong chế độ đa cửa sổ. +
  • + +
  • Nếu người dùng thực hiện nhấn giữ nút Overview, thiết bị sẽ đặt + hoạt động hiện tại vào trong chế độ đa cửa sổ, và mở màn hình Overview để + cho phép người dùng chọn một hoạt động khác để chia sẻ màn hình. +
  • +
+ +

+ Người dùng có thể kéo và + thả từ một hoạt động sang một hoạt động khác trong khi các hoạt động này vẫn đang chia sẻ + cùng một màn hình. (Trước đó, người dùng chỉ có thể kéo và thả dữ liệu trong một hoạt động + đơn lẻ.) +

+ +

Vòng đời đa cửa sổ

+ +

+ Chế độ đa cửa sổ không thay đổi vòng đời + của hoạt động. +

+ +

+ Trong chế độ đa cửa sổ, chỉ hoạt động mà người dùng đã tương tác gần đây nhất + mới hoạt động trong khoảng thời gian xác định. Hoạt động này được cân nhắc ở trên cùng. + Tất cả các hoạt động khác sẽ ở trong tình trạng tạm dừng, ngay cả khi chúng vẫn hiển thị. + Tuy nhiên, hệ thống sẽ cấp mức ưu tiên cao hơn cho hoạt động bị tạm dừng nhưng vẫn hiển thị này + so với các hoạt động không hiển thị. Nếu người dùng tương tác với một trong những + hoạt động bị tạm dừng, hoạt động đó sẽ được tiếp tục, và hoạt động trên cùng trước đó + sẽ bị tạm dừng. +

+ +

+ Lưu ý: Trong chế độ đa cửa sổ, một ứng dụng có thể trong trạng thái + tạm dừng và vẫn hiển thị với người dùng. Ứng dụng có thể cần tiếp tục + các hoạt động của nó thậm chí trong khi đamg bị tạm dừng. Ví dụ, một ứng dụng phát video đang ở trong + chế độ tạm dừng nhưng vẫn hiển thị thì sẽ tiếp tục hiển thị video của nó. Vì lý do + này, chúng tôi đề nghị các hoạt động phát video không tạm dừng + video trong trình xử lý{@link android.app.Activity#onPause onPause()}. + Thay vào đó, các ứng dụng nên tạm dừng video trong {@link android.app.Activity#onStop + onStop()}, và tiếp tục phát lại trong {@link android.app.Activity#onStart + onStart()}. +

+ +

+ Khi người dùng đặt một ứng dụng vào trong chế độ đa cửa sổ, hệ thống sẽ thông báo về + hoạt động thay đổi cấu hình đó, như được quy định trong Xử lý Thay đổi + Thời gian chạy. Về cơ bản, thay đổi này có ngụ ý về vòng đời hoạt động tương tự + vì khi hệ thống thông báo cho ứng dụng rằng thiết bị đã chuyển + từ chế độ hướng dọc sang chế độ ngang, ngoại trừ trường hợp các kích thước của thiết bị + đã được thay đổi thay vì chỉ bị hoán đổi. Như đã thảo luận trong phần Xử lý Thay đổi + Thời gian chạy, hoạt động của bạn có thể tự xử lý thay đổi cấu hình này, hoặc nó + có thể cho phép hệ thống hủy hoạt động này và tạo lại nó với + các kích thước mới. +

+ +

+ Nếu người dùng thay đổi kích thước của một cửa sổ và làm nó rộng hơn ở bất kỳ kích thước nào, + hệ thống sẽ thay đổi kích thước của hoạt động để khớp với hành động của người dùng và phát hành các thay đổi thời gian chạy + nếu cần. Nếu ứng dụng bị trễ lại trong khi vẽ các vùng mới được hiển thị, + hệ thống sẽ tạm thời lấp đầy các vùng đó bằng một màu được quy định bởi thuộc tính {@link + android.R.attr#windowBackground windowBackground} hoặc bằng thuộc tính kiểu + windowBackgroundFallback mặc định. +

+ +

Cấu hình Ứng dụng của bạn cho Chế độ Đa cửa sổ

+ +

+ Nếu ứng dụng của bạn nhắm đến Android N, bạn có thể cấu hình cách thức và + liệu các hoạt động của ứng dụng có hỗ trợ hiển thị đa cửa sổ không. Bạn có thể đặt + các thuộc tính trong bản kê khai của bạn để kiểm soát cả kích cỡ và bố trí. + Cài đặt thuộc tính của hoạt động gốc sẽ áp dụng cho tất cả các hoạt động + nằm trong ngăn xếp hoạt động của nó. +

+ +

+ Lưu ý: Nếu bạn dựng một ứng dụng đa hướng bằng phiên bản + SDK thấp hơn Android N, và người dùng sử dụng ứng dụng đó trong + chế độ đa cửa sổ, hệ thống sẽ bắt buộc thay đổi kích thước của ứng dụng đó. Hệ thống sẽ hiển thị một + hộp hội thoại cảnh báo người dùng rằng ứng dụng này có thể có hành vi không như kỳ vọng. Hệ thống + không thay đổi kích cỡ của ứng dụng có hướng cố định; nếu + người dùng cố mở một ứng dụng có hướng cố định dưới chế độ đa cửa sổ, + ứng dụng này sẽ chiếm toàn bộ màn hình. +

+ +

android:resizeableActivity

+

+ Đặt thuộc tính này trong <activity> của bản kê khai của bạn hoặc node + <application> để kích hoạt hoặc vô hiệu hóa hiển thị + đa cửa sổ: +

+ +
+android:resizeableActivity=["true" | "false"]
+
+ +

+ Nếu thuộc tính này được đặt thành true, hoạt động có thể được khởi chạy trong + chế độ chia màn hình và hình dạng tự do. Nếu thuộc tính này được đặt thành false, + hoạt động sẽ không hỗ trợ chế độ đa cửa sổ. Nếu giá trị này là false, và + người dùng cố khởi chạy hoạt động trong chế độ đa cửa sổ, hoạt động đó sẽ + chiếm toàn màn hình. +

+ +

+ Nếu ứng dụng của bạn nhắm đến Android N, nhưng bạn chưa quy định giá trị + cho thuộc tính này, giá trị của thuộc tính sẽ mặc định đặt là true. +

+ +

android:supportsPictureInPicture

+ +

+ Đặt thuộc tính này trong node <activity> của bản kê khai của bạn để + cho biết liệu hoạt động này có hỗ trợ hiển thị ảnh trong ảnh hay không. Thuộc tính + này được bỏ qua nếu android:resizeableActivity là false. +

+ +
+android:supportsPictureInPicture=["true" | "false"]
+
+ +

Thuộc tính bố trí

+ +

+ Với Android N, phần tử bản kê khai <layout> + có hỗ trợ một số thuộc tính sẽ ảnh hưởng đến cách hoạt động có hành vi như thế nào trong + chế độ đa cửa sổ: +

+ +
+
+ android:defaultWidth +
+ +
+ Chiều rộng mặc định của hoạt động khi được khởi chạy trong chế độ hình dạng tự do. +
+ +
+ android:defaultHeight +
+ +
+ Chiều cao mặc định của hoạt động khi được khởi chạy trong chế độ hình dạng tự do. +
+ +
+ android:gravity +
+ +
+ Vị trí ban đầu của hoạt động khi được khởi chạy trong chế độ hình dạng tự do. Xem tham chiếu + {@link android.view.Gravity} về các giá trị phù hợp. +
+ +
+ android:minimalSize +
+ +
+ Chiều cao và chiều rộng tối thiểu cho hoạt động trong cả chế độ chia màn hình + và chế độ hình dạng tự do. Nếu người dùng di chuyển thanh phân chia trong chế độ chia màn hình + để làm cho hoạt động nhỏ hơn mức tối thiểu quy định, hệ thống sẽ cắt xén + hoạt động đó thành kích cỡ mà người dùng yêu cầu. +
+
+ +

+ Ví dụ, đoạn mã sau đây sẽ cho biết cách quy định kích thước và vị trí mặc định + của một hoạt động và kích thước tối thiểu của nó, khi hoạt động được hiển thị trong + chế độ hình dạng tự do: +

+ +
+<activity android:name=".MyActivity">
+    <layout android:defaultHeight="500dp"
+          android:defaultWidth="600dp"
+          android:gravity="top|end"
+          android:minimalSize="450dp" />
+</activity>
+
+ +

Chạy Ứng dụng của bạn trong Chế độ Đa cửa sổ

+ +

+ Android N có tính năng mới để hỗ trợ các ứng dụng có thể chạy + trong chế độ đa cửa sổ. +

+ +

Các tính năng bị vô hiệu hóa trong Chế độ Đa cửa sổ

+ +

+ Một số tính năng bị vô hiệu hóa hoặc bỏ qua khi một thiết bị đang ở chế độ + đa cửa sổ bởi các tính năng này không có ý nghĩa đối với một hoạt động có thể đang chia sẻ + màn hình thiết bị với các hoạt động hoặc ứng dụng khác. Các tính năng đó bao gồm: + +

    +
  • Ví dụ, một vài tùy chọn tùy chỉnh System UI + sẽ bị vô hiệu hóa, ứng dụng không thể ẩn thanh trạng thái + nếu chúng đang chạy trong chế độ toàn màn hình. +
  • + +
  • Hệ thống sẽ bỏ qua các thay đổi đối với thuộc tính android:screenOrientation. +
  • +
+ +

Thông báo và truy vấn thay đổi đa cửa sổ

+ +

+ Các phương thức mới sau đây đã được thêm vào lớp {@link android.app.Activity} + để hỗ trợ hiển thị đa cửa sổ. Để biết chi tiết về mỗi phương thức, xem + Tham chiếu N Preview SDK. +

+ +
+
+ Activity.inMultiWindow() +
+ +
+ Lệnh gọi để tìm hiểu xem hoạt động có đang ở chế độ đa cửa sổ hay không. +
+ +
+ Activity.inPictureInPicture() +
+ +
+ Lệnh gọi để tìm hiểu xem hoạt động có đang ở chế độ ảnh trong ảnh hay không. + +

+ Lưu ý: Chế độ Ảnh trong ảnh là trường hợp đặc biệt + của chế độ đa cửa sổ. Nếu myActivity.inPictureInPicture() + trả về là true, thì myActivity.inMultiWindow() cũng trả về là + true. +

+
+ +
+ Activity.onMultiWindowChanged() +
+ +
+ Hệ thống sẽ gọi phương thức này bất cứ khi nào hoạt động đi vào trong hay ra ngoài + chế độ đa cửa sổ. Hệ thống sẽ chuyển cho phương thức giá trị true nếu + hoạt động đang đi vào chế độ đa cửa sổ, và false nếu hoạt động + đang rời chế độ đa cửa sổ. +
+ +
+ Activity.onPictureInPictureChanged() +
+ +
+ Hệ thống sẽ gọi phương thức này bất cứ khi nào hoạt động đi vào trong hay ra ngoài + chế độ ảnh trong ảnh. Hệ thống sẽ chuyển cho phương thức một giá trị true nếu + hoạt động đang đi vào chế độ ảnh trong ảnh, và false nếu hoạt động + đang rời chế độ ảnh trong ảnh. +
+
+ +

+ Cũng có các phiên bản {@link android.app.Fragment} của từng phương thức + này, ví dụ như Fragment.inMultiWindow(). +

+ +

Vào chế độ ảnh trong ảnh

+ +

+ Để đặt một hoạt động vào trong chế độ ảnh trong ảnh, hãy gọi phương thức mới + Activity.enterPictureInPicture(). Phương thức này sẽ không có ảnh hưởng nếu + thiết bị không hỗ trợ chế độ ảnh trong ảnh. Để biết thêm thông tin, + hãy xem tài liệu Ảnh trong ảnh. +

+ +

Khởi chạy Hoạt động Mới trong Chế độ Đa cửa sổ

+ +

+ Khi bạn khởi chạy một hoạt động mới, bạn có thể gợi ý cho hệ thống rằng hoạt động + mới sẽ được hiển thị liền kề hoạt động hiện tại, nếu có thể. Để thực hiện điều + này, hãy dùng cờ + Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT. Việc chuyển + cờ này yêu cầu hành vi sau: +

+ +
    +
  • Nếu thiết bị đang ở chế độ chia màn hình, hệ thống sẽ cố tạo ra + hoạt động mới bên cạnh hoạt động đã khởi chạy nó, vì vậy hai hoạt động này + sẽ chia sẻ cùng một màn hình. Hệ thống không được đảm bảo có thể làm được điều này, nhưng nó + làm cho các hoạt động ở liền kề nhau nếu có thể. +
  • + +
  • Nếu thiết bị không ở chế độ chia màn hình, cờ này sẽ không có tác dụng. +
  • +
+ +

+ Nếu thiết bị đang ở chế độ hình dạng tự do và bạn đang khởi chạy một hoạt động mới, bạn có thể + quy định kích thước của hoạt động mới và vị trí màn hình bằng cách gọi + ActivityOptions.setLaunchBounds(). Phương thức này sẽ không có ảnh hưởng nếu + thiết bị không ở chế độ đa cửa sổ. +

+ +

+ Lưu ý: Nếu bạn khởi chạy một hoạt động trong một ngăn xếp tác vụ, hoạt động + này sẽ thay thế hoạt động trên màn hình, kế thừa tất cả các thuộc tính đa cửa sổ + của nó. Nếu bạn muốn khởi chạy hoạt động mới dưới dạng một cửa sổ + riêng trong chế độ đa cửa sổ, bạn phải khởi chạy nó trong một ngăn xếp tác vụ mới. +

+ +

Hỗ trợ kéo và thả

+ +

+ Người dùng có thể kéo và + thả dữ liệu từ một hoạt động này sang một hoạt động khác trong khi các hoạt động này vẫn đang + chia sẻ cùng một màn hình. (Trước đó, người dùng chỉ có thể kéo và thả dữ liệu trong một + hoạt động đơn lẻ.) Vì lý do này, bạn có thể muốn thêm tính năng kéo và thả + vào ứng dụng của bạn nếu ứng dụng của bạn hiện không hỗ trợ tính năng này. +

+ +

+ N Preview SDK mở rộng gói android.view + để hỗ trợ kéo và thả giữa các ứng dụng. Để biết chi tiết về các lớp và phương thức + sau, hãy xem Tham chiếu N + Preview SDK. +

+ +
+
+ android.view.DropPermissions +
+ +
+ Đối tượng mã thông báo chịu trách nhiệm về việc quy định các quyền cấp cho ứng dụng + nhận được thao tác thả. +
+ +
+ View.startDragAndDrop() +
+ +
+ Bí danh mới cho {@link android.view.View#startDrag View.startDrag()}. Để + kích hoạt kéo và thả giữa các hoạt động, hãy chuyển cờ mới + View.DRAG_FLAG_GLOBAL. Nếu bạn cần cấp quyền URI cho + hoạt động của đối tượng nhận, hãy chuyển các cờ mới + View.DRAG_FLAG_GLOBAL_URI_READ hoặc + View.DRAG_FLAG_GLOBAL_URI_WRITE, nếu phù hợp. +
+ +
+ View.cancelDragAndDrop() +
+ +
+ Hủy thao tác kéo hiện đang diễn ra. Chỉ có thể được gọi bằng + ứng dụng đã khởi nguồn thao tác kéo đó. +
+ +
+ View.updateDragShadow() +
+ +
+ Thay thế bóng kéo cho thao tác kéo hiện đang diễn ra. Chỉ có thể + được gọi bằng ứng dụng đã khởi nguồn thao tác kéo đó. +
+ +
+ Activity.requestDropPermissions() +
+ +
+ Yêu cầu các quyền cho URI nội dung đã chuyển với {@link + android.content.ClipData} có chứa trong {@link android.view.DragEvent}. +
+
+ +

Kiểm thử Hỗ trợ Đa cửa sổ của Ứng dụng của bạn

+ +

+ Dù cho bạn có cập nhật ứng dụng của mình lên Android N hay không, bạn cũng nên + xác minh cách thiết bị có hành vi như thế nào trong chế độ đa cửa sổ trong trường hợp người dùng cố khởi chạy nó + ở chế độ đa cửa sổ trên thiết bị chạy Android N. +

+ +

Cấu hình Thiết bị Kiểm thử

+ +

+ Nếu bạn cài đặt Android N trên thiết bị, chế độ chia màn hình + sẽ được tự động hỗ trợ. +

+ +

Nếu ứng dụng của bạn không được dựng bằng N Preview SDK

+ +

+ Nếu bạn dựng ứng dụng của mình bằng N Preview SDK, và người dùng cố sử dụng ứng dụng này + trong chế độ đa cửa sổ, hệ thống sẽ bắt buộc thay đổi kích thước của ứng dụng đó trừ khi ứng dụng này + khai báo hướng cố định. +

+ +

+ Nếu ứng dụng không khai báo hướng cố định, bạn nên khởi chạy ứng dụng của bạn + trên thiết bị đang chạy Android N và cố đặt ứng dụng vào trong + chế độ chia màn hình. Xác minh rằng trải nghiệm người dùng là + chấp nhận được khi ứng dụng bị bắt buộc thay đổi kích cỡ. +

+ +

+ Nếu ứng dụng khai báo hướng cố định, bạn nên cố đặt ứng dụng vào trong + chế độ đa cửa sổ. Xác minh xem khi bạn làm như vậy, ứng dụng vẫn giữ + ở chế độ toàn màn hình. +

+ +

Nếu bạn hỗ trợ chế độ đa cửa sổ

+ +

+ Nếu bạn dựng ứng dụng của bạn bằng N Preview SDK và chưa vô hiệu hóa + hỗ trợ đa cửa sổ, hãy xác minh hành vi sau dưới chế độ chia màn hình + và chế độ hình dạng tự do. +

+ +
    +
  • Khởi chạy ứng dụng trong chế độ toàn màn hình, rồi chuyển sang chế độ đa cửa sổ bằng cách + nhấn giữ nút Overview. Xác minh rằng ứng dụng đã chuyển đổi đúng cách. +
  • + +
  • Khởi chạy ứng dụng trực tiếp trong chế độ đa cửa sổ, và xác thực rằng ứng dụng này + khởi chạy đúng cách. Bạn có thể khởi chạy ứng dụng trong chế độ đa cửa sổ bằng cách nhấn vào nút + Overview, rồi nhấn giữ vào thanh tiều đề của ứng dụng của bạn và kéo nó + đến một trong những vùng được tô sáng trên màn hình. +
  • + +
  • Thay đổi kích thước ứng dụng của bạn trong chế độ chia màn hình bằng cách kéo đường phân chia. + Xác minh rằng ứng dụng thay đổi kích thước mà không bị lỗi, và các phần tử UI cần thiết + vẫn hiển thị. +
  • + +
  • Nếu bạn đã quy định các kích cỡ tối thiểu cho ứng dụng của bạn, hãy cố thay đổi kích thước của ứng dụng + sao cho nhỏ hơn các kích thước đã quy định đó. Xác minh rằng bạn không thể thay đổi kích cỡ của ứng dụng để + nhỏ hơn kích cỡ tối thiểu đã quy định. +
  • + +
  • Thông qua tất cả các bài kiểm thử, hãy xác minh rằng hiệu năng của ứng dụng của bạn là có thể chấp nhận được. Ví + dụ, xác minh rằng sẽ không bị trễ quá lâu để cập nhật UI sau khi + ứng dụng bị thay đổi kích thước. +
  • +
+ +

Danh sách kiểm thử

+ +

+ Để xác minh hiệu năng ứng dụng của bạn trong chế độ đa cửa sổ, hãy thử các thao tác + sau. Bạn nên thử các thao tác này trong cả chế độ chia màn hình và + chế độ đa cửa sổ, trừ khi có lưu ý khác. +

+ +
    +
  • Vào và rời chế độ đa cửa sổ. +
  • + +
  • Hãy chuyển từ ứng dụng của bạn sang ứng dụng khác, và xác minh rằng ứng dụng có hành vi + đúng cách trong khi nó hiển thị nhưng không hoạt động. Ví dụ nếu ứng dụng của bạn đang + phát video, hãy xác minh rằng video tiếp tục phát trong khi người dùng đang + tương tác với một ứng dụng khác. +
  • + +
  • Trong chế độ chia màn hình, hãy thử di chuyển thanh phân chia để làm cho ứng dụng của bạn + rộng hơn và nhỏ hơn. Thử các thao tác này trong cả cấu hình song song và + trên dưới. Xác minh rằng ứng dụng không bị treo, + các chức năng thiết yếu vẫn hiển thị, và thao tác thay đổi kích cỡ không quá + lâu. +
  • + +
  • Thực hiện một vài thao tác thay đổi kích cỡ nối tiếp nhau thật nhanh. Xác minh rằng ứng dụng + của bạn không bị lỗi hoặc bị rò rỉ bộ nhớ. Để biết thông tin về kiểm tra việc sử dụng bộ nhớ của + ứng dụng, xem + Kiểm tra Sử dụng RAM của bạn. +
  • + +
  • Sử dụng ứng dụng của bạn như thông thường trong một số cấu hình cửa sổ khác nhau, và + xác minh rằng ứng dụng có hành vi bình thường. Xác minh rằng có thể đọc được các chữ và + các phần tử UI không quá nhỏ để tương tác với chúng. +
  • +
+ +

Nếu bạn đã vô hiệu hóa hỗ trợ đa cửa sổ

+ +

+ Nếu bạn đã vô hiệu hóa hỗ trợ đa cửa sổ bằng cách đặt + android:resizableActivity="false", bạn nên khởi chạy ứng dụng của mình trên + thiết bị chạy Android N và cố đặt ứng dụng này vào trong + cả chế độ hình dạng tự do và chế độ chia màn hình. Xác minh xem khi bạn làm như vậy, ứng dụng vẫn giữ + ở chế độ toàn màn hình. +

diff --git a/docs/html-intl/intl/vi/preview/features/multilingual-support.jd b/docs/html-intl/intl/vi/preview/features/multilingual-support.jd new file mode 100644 index 000000000000..21252f8e10cd --- /dev/null +++ b/docs/html-intl/intl/vi/preview/features/multilingual-support.jd @@ -0,0 +1,214 @@ +page.title=Ngôn ngữ và Bản địa +@jd:body + + + +

Android N cung cấp hỗ trợ cải tiến cho người dùng sử dụng nhiều ngôn ngữ, +cho phép họ chọn nhiều bản địa trong phần cài đặt. Android N +cung cấp khả năng này bằng cách mở rộng số lượng lớn các bản địa được hỗ trợ +và thay đổi cách hệ thống phân giải tài nguyên. Phương thức phân giải tài nguyên +mới hoạt động mạnh mẽ hơn và được thiết kế để tương thích với các tệp APK có sẵn. Tuy nhiên +bạn cần kiểm tra thêm để phát hiện mọi hành vi không mong muốn. Ví dụ, bạn +cần kiểm thử để đảm bảo rằng ứng dụng của mình sẽ thiết lập mặc định cho ngôn ngữ mong muốn. Ngoài ra, +nếu ứng dụng của bạn hỗ trợ đa ngôn ngữ thì bạn cần đảm bảo rằng việc hỗ trợ này hoạt động như +dự kiến. Cuối cùng, bạn cần cố gắng đảm bảo rằng ứng dụng sẽ xử lý tinh tế +những ngôn ngữ mà bạn không có ý định thiết kế ứng dụng để hỗ trợ.

+ +

Tài liệu này sẽ bắt đầu bằng việc giải thích về chiến lược phân giải tài nguyên trong phiên bản trước +Android N. Tiếp theo, tài liệu sẽ mô tả chiến lược phân giải tài nguyên +được cải tiến của Android N. Cuối cùng, tài liệu sẽ giải thích cách sử dụng +số lượng các bản địa được mở rộng để hỗ trợ thêm nhiều người dùng đa ngữ.

+ +

Thử thách phân giải tài nguyên ngôn ngữ

+ +

Trước Android N, không phải lúc nào Android cũng có thể so khớp +thành công ứng dụng với các bản địa của hệ thống. Ví dụ, giả sử ngôn ngữ mặc định của ứng dụng của bạn + là Tiếng Anh (Mỹ) nhưng ứng dụng cũng có các xâu văn bản Tiếng Tây Ban Nha được bản địa hóa trong các tệp tài nguyên {@code es_ES} +.

+

Khi mã nguồn Java tham chiếu đến các xâu đó thì nó sẽ phân giải các ngôn ngữ của xâu như +sau:

+
    +
  • Nếu một thiết bị được đặt thành {@code es_MX} (Tiếng Tây Ban Nha-Mêxicô) thì Android sẽ tải +xâu từ các tệp tài nguyên {@code es_ES}.
  • +
  • Nếu thiết bị được đặt thành {@code en_AU} thì Android sẽ trả về {@code +en_US}. Hệ thống cũng sẽ đặt mặc định thành {@code en_US} nếu người dùng chọn một +ngôn ngữ mà ứng dụng không hỗ trợ chút nào, ví dụ như Tiếng Pháp.
  • +
+ + +

Các vấn đề phân giải này phát sinh bởi vì hệ thống sẽ gỡ mã quốc gia + khỏi bản địa nếu nó không tìm thấy sự trùng khớp tuyệt đối. Ví dụ:

+

+Bảng 1. Phân giải tài nguyên không có trùng khớp bản địa tuyệt đối. +

+ + + + + + + + + + + + + +
Cài đặt Người dùngTài nguyên Ứng dụngPhân giải tài nguyên
fr_CH +mặc định (en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+Thử fr_CH => Không được
+Thử fr => Không được
+Sử dụng mặc định (en) +
+ + +

Trong ví dụ này, hệ thống hiển thị các xâu Tiếng Anh mà không +xác định được liệu người dùng có biết Tiếng Anh hay không. Đây là hành vi khá phổ biến +ngày nay. Android N cần phải giảm bớt đáng kể tần suất +của những kết quả như vậy.

+ +

Các cải tiến đối với Chiến lược phân giải tài nguyên

+

Android N mang đến cách thức phân giải tài nguyên mạnh mẽ hơn, và +tìm các giải pháp thay thế hiệu quả hơn một cách tự động. Tuy nhiên, để tăng tốc việc phân giải và nâng cao +khả năng bảo trì, bạn cần lưu trữ các tài nguyên trong những nhánh ngôn ngữ mẹ phổ biến nhất. + Ví dụ, nếu trước đây lưu tài nguyên Tiếng Tây Ban Nha trong thư mục {@code es-US} + thì hãy chuyển chúng vào trong thư mục {@code es-419}, nơi chứa Tiếng Tây Ban Nha Mỹ La-tinh. + Tương tự, nếu bạn có các xâu tài nguyên trong một thư mục có tên {@code en-GB} thì hãy đổi tên + thư mục đó thành {@code en-001} (Tiếng Anh quốc tế) bởi vì nhánh mẹ +phổ biến nhất cho chuỗi en-GB là {@code en-001}. + Các ví dụ sau sẽ giải thích tại sao các thực hành này sẽ nâng cao hiệu năng và +độ ổn định của việc phân giải tài nguyên.

+ +

Các ví dụ về phân giải tài nguyên

+ +

Với Android N, trường hợp được mô tả trong Bảng 1 được phân giải +theo cách khác:

+ +

+Bảng 2. Một chiến lược phân giải cải tiến khi không có +trùng khớp bản địa tuyệt đối.

+ + + + + + + + + + + + +
Cài đặt Người dùngTài nguyên Ứng dụngPhân giải tài nguyên
    +
  1. fr_CH
  2. +
+
+mặc định (en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+Thử fr_CH => Không được
+Thử fr => Không được
+Thử nhánh con của fr => fr_FR
+Sử dụng fr_FR +
+ + +

Bây giờ thì người dùng sẽ nhận được tài nguyên Tiếng Pháp thay vì Tiếng Anh. Ví dụ này cũng cho thấy + lý do bạn nên lưu trữ các xâu Tiếng Pháp trong {@code fr} thay vì {@code fr_FR} + cho Android N. Phương pháp ở đây là ghép nhánh ngôn ngữ mẹ gần nhất, + giúp cho việc phân giải nhanh hơn và dễ dự đoán hơn.

+ +

Ngoài lôgic phân giải được cải tiến này, Android giờ đây cung cấp thêm nhiều +ngôn ngữ cho người dùng lựa chọn. Chúng ta hãy thử lại ví dụ trên với Tiếng Ý + được xác định là một ngôn ngữ người dùng bổ sung nhưng không được ứng dụng hỗ trợ cho Tiếng Pháp.

+ +

+Bảng 3. Phân giải tài nguyên khi ứng dụng chỉ khớp +với cài đặt bản địa được ưu tiên thứ hai của người dùng.

+ + + + + + + + + + + + + + +
Cài đặt Người dùngTài nguyên Ứng dụngPhân giải tài nguyên
    +
  1. fr_CH
  2. +
  3. it_CH
  4. +
+
+mặc định (en)
+de_DE
+es_ES
+it_IT
+
+Thử fr_CH => Không được
+Thử fr => Không được
+Thử nhánh con của fr => Không được
+Thử it_CH => Không được
+Thử it => Không được
+Thử nhánh con của it => it_IT
+Sử dụng it_IT +
+

Người dùng vẫn nhận được ngôn ngữ họ biết mặc dù ứng dụng không +hỗ trợ Tiếng Pháp.

+ + +

Thiết kế ứng dụng để hỗ trợ các bản địa bổ sung

+

API LocaleList

+ +

Android N bổ sung thêm một API {@code LocaleList.GetDefault()} + mới cho phép các ứng dụng truy vấn trực tiếp danh sách các ngôn ngữ mà người dùng đã chỉ định. API này +cho phép bạn tạo hành vi ứng dụng +phức tạp hơn và hiển thị nội dung được tối ưu hóa tốt hơn. Ví dụ, Tìm kiếm + có thể hiển thị các kết quả bằng nhiều ngôn ngữ dựa trên cài đặt của người dùng. Các ứng dụng trình duyệt + có thể tránh đề nghị dịch trang web sang một ngôn ngữ mà người dùng đó đã biết, + và các ứng dụng bàn phím có thể tự động bật tất cả các bố trí phù hợp.

+ +

Bộ định dạng

+ +

Tính tới Android 6.0 (API mức 23), Android 6.0 chỉ hỗ trợ một hoặc hai bản địa +cho nhiều ngôn ngữ phổ biến +(en, es, ar, fr, ru). Bởi vì chỉ có một vài biến thể của từng ngôn ngữ, +các ứng dụng không gặp vấn đề gì với việc lưu trữ một số chữ số và ngày tháng dưới dạng xâu được chèn trực tiếp khi viết mã +trong các tệp tài nguyên. Tuy nhiên, với tập hợp mở rộng các bản địa được hỗ trợ bởi Android, +có thể có +nhiều khác biệt lớn về các định dạng ngày tháng, thời gian, tiền tệ và thông tin +tương tự ngay cả trong một bản địa. Chèn trực tiếp các định dạng có thể khiến +người dùng cuối bối rối. Do đó, khi phát triển cho Android N +hãy đảm bảo sử dụng các bộ định dạng thay vì các xâu chữ số và ngày tháng được chèn trực tiếp khi viết mã.

+ +

Một ví dụ điển hình là Tiếng Ả-rập với được Android N hỗ trợ mở rộng từ +một {@code ar_EG} tới 27 bản địa Tiếng Ả-rập. Các bản địa này có thể chia sẻ hầu hết các tài nguyên, +nhưng một số bản địa ưu tiên chữ số ASCII trong khi những bản địa khác lại ưu tiên con số truyền thống. Ví dụ, +khi bạn muốn soạn một câu có biến bằng số, như +"Choose a 4 digit pin" thì bạn hãy sử dụng bộ định dạng như sau:

+ +
 format(locale, "Choose a %d-digit PIN", 4)
diff --git a/docs/html-intl/intl/vi/preview/features/notification-updates.jd b/docs/html-intl/intl/vi/preview/features/notification-updates.jd new file mode 100644 index 000000000000..d80cf6c08f5e --- /dev/null +++ b/docs/html-intl/intl/vi/preview/features/notification-updates.jd @@ -0,0 +1,328 @@ +page.title=Thông báo +page.tags=notifications +helpoutsWidget=true +page.image=/preview/images/notifications-card.png + +trainingnavtop=true + +@jd:body + +
+
+ + +

Tài liệu này gồm có

+
    +
  1. Trả lời Trực tiếp
  2. +
  3. Thông báo Gộp
  4. +
  5. Dạng xem Tùy chỉnh
  6. +
+ +
+
+ +

Android N giới thiệu một số API mới cho phép ứng dụng đăng +các thông báo có khả năng hiển thị và tương tác cao.

+ +

Android N mở rộng API thông báo {@link android.support.v4.app.RemoteInput} +hiện có để hỗ trợ trả lời giữa dòng trên thiết bị cầm tay. Tính năng này cho phép người dùng + phản hồi nhanh chóng từ khu vực hiển thị thông báo mà không cần truy cập ứng dụng của bạn.

+ +

+ Android N cũng cho phép bạn gộp các thông báo tương tự nhau để + xuất hiện dưới dạng một thông báo đơn lẻ. Để điều này có thể xảy ra, Android N sử dụng phương thức {@link + android.support.v4.app.NotificationCompat.Builder#setGroup + NotificationCompat.Builder.setGroup()} hiện có. Người dùng có thể mở rộng mỗi + thông báo, và thực hiện các hành động như trả lời và bỏ qua trên mỗi + thông báo, từng thông báo một từ khu vực hiển thị thông báo. +

+ +

Cuối cùng, Android N cũng thêm các API mới cho phép bạn tận dụng các trang trí +của hệ thống trong các dạng xem thông báo tùy chỉnh của ứng dụng của bạn. Các API này giúp +đảm bảo rằng dạng xem thông báo có chung một cách trình bày nhất quán +với các mẫu tiêu chuẩn.

+ +

Tài liệu này nêu bật một số các thay đổi chính mà bạn cần cân nhắc + khi sử dụng các tính năng thông báo mới trong ứng dụng của mình.

+ +

Trả lời Trực tiếp

+ +

Với tính năng Trả lời Trực tiếp trong Android N, người dùng có thể +phản hồi lại tin nhắn văn bản hoặc cập nhật danh sách tác vụ trực tiếp trong giao diện +của thông báo. Trên thiết bị cầm tay, hành động trả lời giữa dòng xuất hiện dưới dạng một nút bổ sung + được gắn kèm với thông báo đó. Khi người dùng trả lời qua bàn phím, hệ thống sẽ đính kèm + phản hồi bằng văn bản với ý định + bạn đã quy định cho hành động thông báo và gửi ý định đến ứng dụng cầm tay + của bạn. + + + +

+ Hình 1. Android N thêm nút hành động Reply +. +

+ +

Thêm các hành động trả lời giữa dòng

+ +

Để tạo một hành động thông báo hỗ trợ trả lời trực tiếp: +

+ +
    +
  1. Tạo thực thể{@link android.support.v4.app.RemoteInput.Builder} + mà bạn có thể thêm vào hành động +thông báo của bạn. Hàm dựng của lớp này sẽ chấp nhận xâu mà hệ thống sử dụng làm khóa + cho nhập liệu văn bản. Sau đó, ứng dụng cầm tay của bạn sử dụng khóa đó để truy xuất văn bản + nhập liệu. + +
    +// Key for the string that's delivered in the action's intent
    +private static final String KEY_TEXT_REPLY = "key_text_reply";
    +String replyLabel = getResources().getString(R.string.reply_label);
    +RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
    +        .setLabel(replyLabel)
    +        .build();
    +
    +
  2. +
  3. Đính kèm đối tượng {@link android.support.v4.app.RemoteInput} + với một hành động bằng cách sử dụng addRemoteInput(). + +
    +// Create the reply action and add the remote input
    +Notification.Action action =
    +        new Notification.Action.Builder(R.drawable.ic_reply_icon,
    +                getString(R.string.label), replyPendingIntent)
    +                .addRemoteInput(remoteInput)
    +                .build();
    +
    +
  4. + +
  5. Áp dụng hành động cho thông báo và phát hành thông báo. + +
    +// Build the notification and add the action
    +Notification notification =
    +        new Notification.Builder(mContext)
    +                .setSmallIcon(R.drawable.ic_message)
    +                .setContentTitle(getString(R.string.title))
    +                .setContentText(getString(R.string.content))
    +                .addAction(action))
    +                .build();
    +
    +// Issue the notification
    +NotificationManager notificationManager =
    +        NotificationManager.from(mContext);
    +notificationManager.notify(notificationId, notification);
    +
    +
    +
  6. + +
+ + +

Hệ thống sẽ nhắc người dùng nhập liệu một phản hồi khi chúng kích hoạt +hành động thông báo.

+ + +

+ Hình 2. Người dùng nhập liệu văn bản từ khu vực hiển thị thông báo. +

+ +

Truy xuất mục nhập của người dùng từ trả lời giữa dòng

+ +

Để nhận mục nhập của người dùng từ giao diện thông báo đến hoạt động bạn +đã khai báo trong ý định của hành động trả lời:

+
    +
  1. Gọi {@link android.support.v4.app.RemoteInput#getResultsFromIntent + getResultsFromIntent()} bằng cách chuyển ý định của hành động thông báo dưới dạng + tham số đầu vào. Phương thức này trả về {@link android.os.Bundle} + có chứa phản hồi văn bản. +
  2. + +
    +Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
    +
    + +
  3. Truy vấn gói bằng cách sử dụng khóa kết quả (đã cung cấp cho hàm dựng {@link + android.support.v4.app.RemoteInput.Builder}). +
  4. +
+ +

Đoạn mã sau minh họa cách thức một phương thức truy xuất văn bản đầu vào +từ một gói:

+ +
+// Obtain the intent that started this activity by calling
+// Activity.getIntent() and pass it into this method to
+// get the associated string.
+
+private CharSequence getMessageText(Intent intent) {
+    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+    if (remoteInput != null) {
+            return remoteInput.getCharSequence(KEY_TEXT_REPLY);
+            }
+    return null;
+ }
+
+ +

Ứng dụng có thể áp dụng lô-gic để quyết định hành động nào nên lấy trên văn bản +được truy xuất. +Đối với các ứng dụng tương tác (chẳng hạn như trò chuyện), hãy cung cấp thêm ngữ cảnh trong chính thông báo + (ví dụ như nhiều dòng lịch sử trò chuyện, gồm có các tin nhắn của riêng người dùng) + để người dùng có thể phản hồi phù hợp. +Khi người dùng phản hồi qua {@link android.support.v4.app.RemoteInput}, + hãy bao gồm văn bản trong lịch sử trả lời bằng phương thức {@code setRemoteInputHistory()} +.

+ +

Thông báo Gộp

+ +

Android N cung cấp cho các nhà phát triển một cách mới để hiển thị + hàng đợi thông báo: thông báo gộp. Cách hiển thị này tương tự với tính năng + Ngăn xếp + Thông báo có trong Android Wear. Ví dụ, nếu ứng dụng của bạn tạo thông báo + cho tin nhắn nhận được, khi có nhiều hơn một tin nhắn nhận được, hãy gói + các thông báo lại với nhau thành một nhóm đơn lẻ. Bạn có thể + sử dụng phương thức {@link android.support.v4.app.NotificationCompat.Builder#setGroup +Builder.setGroup()} hiện có để gói các thông báo tương tự.

+ +

+ Nhóm thông báo sẽ quy định phân cấp trên các thông báo bao gồm nó. + Ở trên cùng của phân cấp là thông báo mẹ hiển thị tóm tắt + thông tin cho nhóm đó. Người dùng có thể mở rộng + nhóm thông báo tăng dần lên, và hệ thống sẽ hiển thị thêm thông tin khi + người dùng truy sâu hơn. Khi người dùng mở rộng gói này, hệ thống sẽ lộ ra thêm + thông tin cho tất cả các thông báo con của gói, khi người dùng + mở rộng một trong những thông báo đó, hệ thống sẽ lộ ra toàn bộ nội dung của nó. +

+ + +

+ Hình 3. Người dùng có thể mở rộng nhóm + thông báo tăng dần lên. +

+ +

Để tìm hiểu cách thêm thông báo vào một nhóm, xem +Thêm +Mỗi Thông báo vào một Nhóm.

+ + +

Thực hành tốt nhất cho thông báo gộp

+

Mục này sẽ cung cấp hướng dẫn về việc khi nào sử dụng nhóm thông báo thay vì + các thông báo{@link android.app.Notification.InboxStyle InboxStyle} +có sẵn trong các phiên bản cũ hơn của +nền tảng Android.

+ +

Khi nào nên sử dụng thông báo gộp

+ +

Bạn nên sử dụng các nhóm thông báo chỉ khi tất cả các điều kiện sau là +đúng đối với trường hợp sử dụng của bạn:

+ +
    +
  • Thông báo con là loại thông báo đầy đủ và có thể được hiển thị + riêng rẽ mà không cần tóm tắt nhóm.
  • +
  • Sẽ có lợi khi làm nổi lên các thông báo con một cách riêng rẽ. Ví +dụ: +
  • +
      +
    • Các thông báo này có thể hành động được, bằng các hành động cụ thể cho mỗi thông báo con.
    • +
    • Có nhiều thông tin hơn đối với thông báo con mà người dùng sẽ muốn đọc.
    • +
    +
+ +

Các ví dụ về các trường hợp sử dụng tốt nhóm thông báo bao gồm: ứng dụng nhắn tin +hiển thị danh sách các tin nhắn đến, hoặc ứng dụng email hiển thị danh sách +các email đã nhận được.

+ +

+Ví dụ về các trường hợp trong đó một thông báo đơn lẻ được ưu tiên + bao gồm tin nhắn riêng từ một người đơn lẻ, hoặc biểu diễn danh sách + các mục văn bản một hàng. Bạn có thể sử dụng +({@link android.app.Notification.InboxStyle InboxStyle} hoặc +{@link android.app.Notification.BigTextStyle BigTextStyle}) để hoàn thành +việc này. +

+ +

Hiển thị Thông báo gộp

+ +

+ Ứng dụng sẽ luôn đăng tóm tắt nhóm, ngay cả khi nhóm chỉ chứa + một thông báo con duy nhất. Hệ thống này sẽ ngăn chặn tóm tắt và hiển thị trực tiếp + thông báo con nếu nó chỉ chứa một thông báo duy nhất. Điều này đảm bảo + rằng hệ thống có thể cung cấp một trải nghiệm nhất quán khi người dùng trượt nhanh khỏi + thông báo con của nhóm. +

+ +

+ Lưu ý: Phiên bản Android N này không + ngăn chặn tóm tắt cho nhóm thông báo có chứa một thông báo con duy nhất. Chức năng + này sẽ được thêm vào trong phiên bản sau của Android N. +

+ +

Thông báo lướt nhanh

+ +

Trong khi hệ thống thường hiển thị các thông báo con dưới dạng một nhóm, bạn có thể đặt + chúng tạm thời hiển thị dưới dạng + + thông báo cảnh báo. Tính năng này đặc biệt hữu ích bởi vì nó cho phép + truy cập ngay lập tức thông báo con gần đây nhất và các hành động liên kết với thông báo con đó. +

+ + +

Tính tương thích ngược

+ +

+ Cả nhóm thông báo và đầu vào từ xa đều là một phần của API {@link + android.app.Notification} vì Android 5.0 (API mức 21) hỗ trợ + các thiết bị Android Wear. Nếu bạn đã dựng các thông báo bằng các API này, + hành động duy nhất bạn cần phải thực hiện là xác minh rằng ứng dụng có hành vi tương ứng + với các hướng dẫn đã mô tả ở trên, và cân nhắc việc triển khai {@code + setRemoteInputHistory()}. +

+ +

+ Để hỗ trợ tính tương thích ngược, các API giống vậy sẽ được cung cấp cho + lớp {@link android.support.v4.app.NotificationCompat} + của thư viện hỗ trợ, cho phép bạn dựng các thông báo hoạt động trên các phiên bản + Android cũ hơn. Trên máy tính bảng và thiết bị cầm tay, người dùng chỉ nhìn thấy thông báo tóm tắt, + vì vậy ứng dụng vẫn có kiểu hòm thư hoặc thông báo tương tự + biểu diễn cho toàn bộ nội dung thông tin của nhóm. Vì các thiết bị Android + Wear cho phép người dùng xem các thông báo con thậm chí trên + các mức nền tảng thấp hơn, bạn nên dựng các thông báo con dù cho mức API + là mức nào. +

+ +

Dạng xem Tùy chỉnh

+

Bắt đầu từ Android N, bạn có thể tùy chỉnh dạng xem và +vẫn có các trang trí hệ thống như tiêu đề thông báo, hành động, và +các bố trí mở rộng được.

+ +

Để kích hoạt khả năng này, Android N thêm các API sau để tạo kiểu cho dạng xem tùy chỉnh + của bạn:

+ +
+
+{@code DecoratedCustomViewStyle()}
+
Thông báo kiểu khác với thông báo +media.
+
+{@code DecoratedMediaCustomViewStyle()}
+
Thông báo media tạo kiểu.
+
+ +

Để sử dụng API mới này, hãy gọi phương thức {@code setStyle()}, chuyển nó sang +kiểu dạng xem tùy chỉnh mong muốn.

+ +

Đoạn mã này cho biết cách dựng đối tượng thông báo tùy chỉnh bằng phương thức +{@code DecoratedCustomViewStyle()}.

+ +
+Notification noti = new Notification.Builder()
+           .setSmallIcon(R.drawable.ic_stat_player)
+           .setLargeIcon(albumArtBitmap))
+           .setCustomContentView(contentView);
+           .setStyle(new Notification.DecoratedCustomViewStyle())
+           .build();
+
+
diff --git a/docs/html-intl/intl/vi/preview/features/picture-in-picture.jd b/docs/html-intl/intl/vi/preview/features/picture-in-picture.jd new file mode 100644 index 000000000000..4b3cb400f72e --- /dev/null +++ b/docs/html-intl/intl/vi/preview/features/picture-in-picture.jd @@ -0,0 +1,186 @@ +page.title=Ảnh trong ảnh +page.keywords=preview,sdk,PIP,Picture-in-picture +page.tags=androidn + +@jd:body + + + +

Trong Android N, người dùng Android TV đã có thể xem video +trong một cửa sổ được ghim vào một góc màn hình khi điều hướng bên trong +các ứng dụng. Chế độ Ảnh trong ảnh (PIP) cho phép ứng dụng chạy một hoạt động +video trong cửa sổ được ghim trong khi một hoạt động khác tiếp tục chạy +ngầm. Cửa sổ PIP cho phép người dùng thực hiện nhiều việc khi đang sử dụng ứng dụng của bạn, +giúp cho người dùng năng suất hơn.

+ +

Ứng dụng của bạn có thể quyết định khi nào thì kích hoạt chế độ PIP. Sau đây là một vài ví dụ về +thời điểm chuyển vào chế độ PIP:

+ +
    +
  • Ứng dụng của bạn có thể chuyển một video vào chế độ PIP khi người dùng điều hướng +rời khỏi video đó để duyệt nội dung khác.
  • +
  • Ứng dụng của bạn có thể chuyển một video sang chế độ PIP khi người dùng xem đoạn cuối + của một tập nội dung. Màn hình chính sẽ hiển thị thông tin quảng cáo +hoặc tóm tắt về tập tiếp theo trong loạt video đó.
  • +
  • Ứng dụng của bạn có thể mang lại cho người dùng một cách để xếp hàng các nội dung bổ sung khi +họ đang xem một video. Video đó sẽ tiếp tục được phát trong chế độ PIP trong khi màn hình +chính hiển thị hoạt động chọn nội dung.
  • +
+ +

Cửa sổ PIP có kích thước 240x135 dp và được hiển thị trên lớp trên cùng ở một trong +bốn góc của màn hình được hệ thống chọn. Người dùng có thể gọi ra một menu PIP +, cho phép họ bật tắt cửa sổ PIP lên toàn màn hình hoặc đóng cửa sổ +PIP bằng cách bấm giữ nút Home trên điều khiển từ xa. Nếu một video +khác bắt đầu phát trên màn hình chính, cửa sổ PIP sẽ tự động +được đóng. Người dùng cũng có thể đóng cửa sổ PIP thông qua nút Recents.

+ + +

Hình 1. Một video Ảnh trong ảnh +được hiển thị ở góc màn hình khi người dùng duyệt nội dung +trên màn hình chính.

+ +

PIP sử dụng các API đa cửa sổ có trong Android N để +tạo cửa sổ video nằm chồng được ghim. Để thêm chế độ PIP vào ứng dụng bạn cần +đăng ký các hoạt động hỗ trợ PIP, chuyển hoạt động của bạn sang chế độ PIP khi +cần và đảm bảo cho các phần tử UI sẽ bị ẩn đi và phát lại video vẫn tiếp tục khi +hoạt động đó ở trong chế độ PIP.

+ +

Khai báo Hoạt động hỗ trợ Ảnh trong ảnh

+ +

Theo mặc định, hệ thống không tự động hỗ trợ PIP cho các ứng dụng. +Nếu bạn muốn hỗ trợ chế độ PIP trong ứng dụng của mình, hãy đăng ký hoạt động +video trong bản kê khai bằng cách đặt +android:supportsPictureInPicture và +android:resizeableActivity thành true. Ngoài ra, hãy chỉ định +hoạt động của bạn xử lý các thay đổi cấu hình bố trí để hoạt động đó +không khởi chạy lại khi có các thay đổi về bố trí trong quá trình chuyển tiếp chế độ PIP.

+ +
+<activity android:name="VideoActivity"
+    android:resizeableActivity="true"
+    android:supportsPictureInPicture="true"
+    android:configChanges=
+        "screenSize|smallestScreenSize|screenLayout|orientation"
+    ...
+
+ +

Khi đăng ký hoạt động của bạn, hãy nhớ rằng trong chế độ PIP, hoạt động +của bạn sẽ được hiển thị trong một cửa sổ nhỏ nằm chồng trên màn hình TV. Các hoạt động +phát lại video với UI tối giản sẽ đem đến trải nghiệm người dùng tốt nhất. Các hoạt động +có chứa những phần tử UI nhỏ có thể không đem lại trải nghiệm người dùng đạt yêu cầu +khi được chuyển sang chế độ PIP bởi người dùng không thể thấy các chi tiết của phần tử UI +trong cửa sổ PIP.

+ +

Chuyển Hoạt động sang Ảnh trong ảnh

+ +Khi bạn cần chuyển hoạt động của mình sang chế độ PIP, hãy gọi +Activity.enterPictureInPicture(). Ví dụ sau sẽ chuyển +sang chế độ PIP khi người dùng chọn một nút PIP riêng trên thanh điều khiển +media:

+ +
+@Override
+public void onActionClicked(Action action) {
+    if (action.getId() == R.id.lb_control_picture_in_picture) {
+        getActivity().enterPictureInPicture();
+        return;
+    }
+    ...
+
+ +

Thêm một nút PIP vào thanh điều khiển media của bạn sẽ cho phép người dùng dễ dàng chuyển +sang chế độ PIP khi điều khiển phát lại video.

+ + +

Hình 1. Một nút Ảnh trong ảnh +trên thanh điều khiển media.

+ +

Android N có một lớp +PlaybackControlsRow.PictureInPictureAction mới định nghĩa +các hành động ở chế độ PIP trên thanh điều khiển và sử dụng biểu tượng PIP.

+ +

Xử lý UI trong chế độ Ảnh trong ảnh

+ +

Khi hoạt động của bạn vào trong chế độ PIP thì hoạt động đó chỉ nên hiển thị phát lại +video. Hãy xóa các phần tử UI trước khi hoạt động của bạn vào chế độ PIP, +và khôi phục các phần tử này khi hoạt động quay lại chế độ toàn màn hình. +Ghi đè phương thức Activity.onPictureInPictureChanged() hoặc +Fragment.onPictureInPictureChanged() và bật hoặc +tắt các phần tử UI khi cần thiết, ví dụ:

+ +
+@Override
+public void onPictureInPictureChanged(boolean inPictureInPicture) {
+    if (inPictureInPicture) {
+        // Hide the controls in picture-in-picture mode.
+        ...
+    } else {
+        // Restore the playback UI based on the playback status.
+        ...
+    }
+}
+
+ +

Tiếp tục phát lại video ở chế độ +Ảnh trong ảnh

+ +

Khi hoạt động của bạn chuyển sang chế độ PIP thì hệ thống sẽ coi hoạt động đó đang ở trong +trạng thái tạm dừng và sẽ gọi phương thức onPause() của hoạt động. Việc phát lại +video không nên được tạm dừng và cần được tiếp tục phát nếu hoạt động +bị tạm dừng do chế độ PIP. Hãy kiểm tra chế độ PIP trong phương thức +onPause() của hoạt động và xử lý việc phát lại cho phù hợp, ví +dụ:

+ +
+@Override
+public void onPause() {
+    // If called due to PIP, do not pause playback
+    if (inPictureInPicture()) {
+        // Continue playback
+        ...
+    }
+    // If paused but not in PIP, pause playback if necessary
+    ...
+}
+
+ +

Khi hoạt động của bạn chuyển ra khỏi chế độ PIP để quay trở về chế độ toàn màn hình thì +hệ thống sẽ tiếp tục hoạt động của bạn và gọi phương thức onResume().

+ +

Thực hành Tốt nhất

+ +

PIP được dành cho các hoạt động phát lại video toàn màn hình. Khi chuyển +hoạt động của bạn vào chế độ PIP, hãy tránh hiển thị bất kỳ nội dung nào ngoài video. +Theo dõi khi hoạt động của bạn vào chế độ PIP và ẩn đi các phần tử UI, như mô tả +trong Xử lý UI trong chế độ Ảnh trong ảnh.

+ +

Vì cửa sổ PIP được hiển thị dưới dạng cửa sổ nổi ở góc +màn hình do đó bạn cần tránh hiển thị các thông tin quan trọng trong màn hình chính +ở bất kỳ vùng nào có thể bị che khuất bởi cửa sổ PIP.

+ +

Theo mặc định, khi một hoạt động đang ở trong chế độ PIP thì nó sẽ không nhận tiêu điểm nhập vào. Để +tiếp nhận các sự kiện nhập vào khi ở chế độ PIP, hãy sử dụng +MediaSession.setMediaButtonReceiver().

diff --git a/docs/html-intl/intl/vi/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/vi/preview/features/scoped-folder-access.jd new file mode 100644 index 000000000000..d6db0ece657a --- /dev/null +++ b/docs/html-intl/intl/vi/preview/features/scoped-folder-access.jd @@ -0,0 +1,124 @@ +page.title=Truy cập Thư mục theo Phạm vi +page.keywords=preview,sdk,scoped directory access +page.tags=androidn + +@jd:body + + + +

Các ứng dụng như ứng dụng ảnh thường chỉ cần truy cập đến các thư mục đã quy định trong +bộ nhớ ngoài như thư mục Pictures. Các phương pháp + hiện tại để truy cập bộ nhớ lưu trữ ngoài vẫn chưa được thiết kế để dễ dàng cho phép +truy cập thư mục đích cho những kiểu ứng dụng này. Ví dụ:

+ +
    +
  • Việc yêu cầu {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} +hoặc {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} trong bản kê khai của bạn +sẽ cho phép truy cập đến tất cả các thư mục công khai trên bộ nhớ lưu trữ ngoài, mà có thể +cấp nhiều quyền truy cập hơn những gì ứng dụng của bạn cần.
  • +
  • Sử dụng +Khuôn khổ + Truy cập Kho lưu trữ thường khiến người dùng chọn thư mục +thông qua UI hệ thống. Đây là điều không cần thiết nếu ứng dụng của bạn luôn truy cập cùng +một thư mục bên ngoài.
  • +
+ +

Android N cung cấp một API mới được đơn giản hóa để truy cập +các thư mục lưu trữ bên ngoài thường dùng.

+ +

Truy cập một Thư mục lưu trữ bên ngoài

+ +

Sử dụng lớp StorageManager để lấy thực thể +StorageVolume phù hợp. Sau đó tạo một ý định bằng cách gọi phương thức +StorageVolume.createAccessIntent() của thực thể đó. +Sử dụng ý định này để truy cập các thư mục lưu trữ bên ngoài. Để lấy danh sách +tất cả các ổ đĩa, bao gồm các ổ đĩa media có thể tháo lắp, hãy sử dụng +StorageManager.getVolumesList().

+ +

Đoạn mã sau là một ví dụ về cách mở thư mục +Pictures trong bộ nhớ lưu trữ chính được chia sẻ:

+ +
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

Hệ thống sẽ cố gắng cấp quyền truy cập tới thư mục bên ngoài và nếu +cần sẽ xác nhận quyền truy cập với người dùng bằng một UI được đơn giản hóa:

+ + +

Hình 1. Một ứng dụng yêu cầu +truy cập tới thư mục Pictures.

+ +

Nếu người dùng cấp quyền truy cập, hệ thống sẽ gọi phương thức ghi đè +onActivityResult() của bạn với mã kết quả là +Activity.RESULT_OK và dữ liệu ý định có chứa URI. Hãy sử dụng +URI được cung cấp để truy cập thông tin thư mục, giống như sử dụng các URI +được trả về bởi +Khuôn khổ + Truy cập Kho lưu trữ.

+ +

Nếu người dùng không cấp quyền truy cập, hệ thống sẽ gọi phương thức ghi đè +onActivityResult() của bạn với mã kết quả là +Activity.RESULT_CANCELED và dữ liệu ý định có giá trị null.

+ +

Lưu ý: Lấy quyền truy cập tới một thư mục bên ngoài được chỉ định +cũng sẽ cấp quyền truy cập tới các thư mục con thuộc thư mục đó.

+ +

Truy cập một Thư mục trên phương tiện tháo lắp được

+ +

Để sử dụng Truy cập Thư mục theo Phạm vi nhằm truy cập các thư mục trên phương tiện có thể tháo lắp, +trước hết, hãy thêm một {@link android.content.BroadcastReceiver} để lắng nghe +thông báo {@link android.os.Environment#MEDIA_MOUNTED}, ví dụ:

+ +
+<receiver
+    android:name=".MediaMountedReceiver"
+    android:enabled="true"
+    android:exported="true" >
+    <intent-filter>
+        <action android:name="android.intent.action.MEDIA_MOUNTED" />
+        <data android:scheme="file" />
+    </intent-filter>
+</receiver>
+
+ +

Khi người dùng kết nối một phương tiện có thể tháo lắp như thẻ SD thì hệ thống sẽ gửi một thông báo +{@link android.os.Environment#MEDIA_MOUNTED}. Thông báo này +sẽ cung cấp một đối tượng StorageVolume trong dữ liệu ý định mà bạn có thể +sử dụng để truy cập các thư mục trên phương tiện có thể tháo lắp đó. Ví dụ sau +sẽ truy cập thư mục Pictures trên phương tiện có thể tháo lắp:

+ +
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+    mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

Thực hành Tốt nhất

+ +

Khi có thể, hãy duy trì URI truy cập thư mục bên ngoài để bạn không phải +lặp lại yêu cầu người dùng cấp quyền truy cập. Khi người dùng đã cấp quyền truy cập, hãy gọi +getContentResolver().takePersistableUriPermssion() với +URI truy cập thư mục. Hệ thống sẽ duy trì URI và các yêu cầu +truy cập sau này sẽ trả về RESULT_OK và không hiển thị UI xác nhận cho +người dùng nữa.

+ +

Nếu người dùng từ chối quyền truy cập đến một thư mục bên ngoài thì đừng +yêu cầu truy cập lại ngay lập tức. Lặp đi lặp lại yêu cầu truy cập sẽ dẫn đến trải nghiệm +người dùng không tốt.

diff --git a/docs/html-intl/intl/vi/preview/features/security-config.jd b/docs/html-intl/intl/vi/preview/features/security-config.jd new file mode 100644 index 000000000000..8d8bf34ff737 --- /dev/null +++ b/docs/html-intl/intl/vi/preview/features/security-config.jd @@ -0,0 +1,744 @@ +page.title=Cấu hình Bảo mật mạng +page.keywords=preview,security,network + +@jd:body + + + + +

+ Android N có tính năng Cấu hình Bảo mật mạng + cho phép ứng dụng tùy chỉnh các cài đặt bảo mật mạng trong một tệp + cấu hình khai báo an toàn mà không cần sửa đổi mã nguồn ứng dụng. Các cài đặt này có thể + được cấu hình cho các miền cụ thể và cho một ứng dụng cụ thể. Các khả năng + chính của tính năng này như sau: +

+ +
    +
  • + Nguồn tin cậy tùy chỉnh: Tùy chính các Nhà cung cấp chứng chỉ (CA) + nào được tin cậy cho các kết nối bảo mật của một ứng dụng. Ví + dụ, tin cậy các chứng chỉ tự ký đặc biệt hoặc hạn chế + bộ CA công khai mà ứng dụng tin cậy. +
  • + +
  • + Chỉ khống chế khi gỡ lỗi: Gỡ lỗi các kết nối bảo mật một cách an toàn trong một ứng dụng + mà không thêm rủi ro cho cơ sở cài đặt. +
  • + +
  • + Không sử dụng truyền gửi văn bản chưa mã hóa: Bảo vệ các ứng dụng khỏi việc + vô tình sử dụng truyền gửi văn bản chưa mã hóa. +
  • + +
  • + Ghim chứng chỉ: Giới hạn kết nối bảo mật của ứng dụng + trong các chứng chỉ đặc biệt. +
  • +
+ + +

Thêm một Tệp Cấu hình Bảo mật mạng

+ +

+ Tính năng Cấu hình Bảo mật mạng sử dụng một tệp XML làm nơi bạn sẽ chỉ định + các cài đặt cho ứng dụng của mình. Bạn phải bổ sung một mục nhập trong bản kê khai của + ứng dụng để trỏ đến tệp này. Đoạn mã sau của một bản kê khai + minh họa cách tạo mục nhập này: +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+...
+<app ...>
+    <meta-data android:name="android.security.net.config"
+               android:resource="@xml/network_security_config" />
+    ...
+</app>
+
+ +

Tùy chỉnh các CA đáng tin cậy

+ +

+ Một ứng dụng có thể muốn tin cậy một bộ các CA tùy chỉnh thay vì mặc định + của nền tảng. Những lý do phổ biến nhất cho điều này là: +

+ +
    +
  • Kết nối tới một máy chủ có nhà cung cấp chứng chỉ riêng (tự ký, + được cấp bởi một CA nội bộ của công ty, v.v.). +
  • + +
  • Giới hạn bộ CA chỉ trong các CA mà bạn tin cậy thay vì mọi + CA được cài đặt trước. +
  • + +
  • Tin cậy các CA bổ sung không được kèm theo trong hệ thống. +
  • +
+ +

+ Theo mặc định, các kết nối bảo mật (vd: TLS, HTTPS) từ mọi ứng dụng sẽ tin cậy + các CA của hệ thống được cài đặt trước và các ứng dụng nhắm mục tiêu mức API 23 + (Android M) và thấp hơn theo mặc định cũng tin cậy kho lưu trữ CA được người dùng bổ sung. Một + ứng dụng có thể tùy chỉnh các kết nối của riêng nó bằng cách sử dụng {@code base-config} (dành cho + tùy chỉnh trên phạm vi ứng dụng) hoặc {@code domain-config} (tùy chỉnh + cho mỗi miền). +

+ + +

Cấu hình một CA tùy chỉnh

+ +

+ Giả sử bạn muốn kết nối tới máy chủ của mình có sử dụng các chứng chỉ + SSL tự ký hoặc tới một máy chủ có chứng chỉ SSL được cấp bởi một CA không công khai + mà bạn tin cậy, chẳng hạn như CA nội bộ của công ty. +

+ +

+ res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ Thêm chứng chỉ CA tự ký hoặc không công khai theo định dạng PEM hoặc DER vào + {@code res/raw/my_ca}. +

+ + +

Giới hạn bộ CA đáng tin cậy

+ +

+ Một ứng dụng không muốn tin cậy mọi CA được hệ thống tin cậy có thể + chỉ định bộ CA hạn chế của riêng nó để tin cậy. Điều này sẽ bảo vệ + ứng dụng khỏi các chứng chỉ lừa đảo được cấp bởi bất kỳ CA nào khác. +

+ +

+ Cấu hình để giới hạn bộ CA đáng tin cậy cũng giống như Tin cậy một CA tùy chỉnh cho một miền cụ thể ngoại trừ + việc nhiều CA được cung cấp trong tài nguyên. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">secure.example.com</domain>
+        <domain includeSubdomains="true">cdn.example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/trusted_roots"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ Thêm các CA đáng tin cậy theo định dạng PEM hoặc DER vào {@code res/raw/trusted_roots}. + Lưu ý rằng nếu sử dụng định dạng PEM thì tệp chỉ được chứa dữ liệu PEM + và không có thêm dữ liệu văn bản. Bạn cũng có thể cung cấp nhiều + phần tử <certificates> + thay vì một phần tử. +

+ + +

+ Tin cậy các CA bổ sung +

+ +

+ Một ứng dụng có thể muốn tin cậy các CA bổ sung không được hệ thống tin cậy, + điều này có thể do hệ thống chưa thêm CA đó hoặc một CA không + đáp ứng các yêu cầu để đưa vào hệ thống Android. Một + ứng dụng có thể thực hiện điều này bằng cách chỉ định nhiều nguồn chứng chỉ cho một + cấu hình. +

+

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="@raw/extracas"/>
+            <certificates src="system"/>
+        </trust-anchors>
+    </base-config>
+</network-security-config>
+
+

+ + +

Cấu hình các CA để gỡ lỗi

+ +

+ Khi gỡ lỗi một ứng dụng kết nối qua HTTPS thì bạn có thể muốn + kết nối tới một máy chủ phát triển cục bộ không có chứng chỉ + SSL dành cho máy chủ thương mại của bạn. Để hỗ trợ cho trường hợp này mà không cần + chỉnh sửa mã nguồn ứng dụng của bạn thì bạn có thể chỉ định các CA chỉ dùng cho gỡ lỗi + mà chỉ được tin cậy khi +android:debuggable + là {@code true} bằng cách sử dụng {@code debug-overrides}. Thông thường các IDE và công cụ + dựng sẽ đặt cờ này tự động đối với các bản dựng không dùng để phát hành. +

+ +

+ Làm như vậy an toàn hơn so với mã điều kiện thông thường bởi, là điều kiện + bảo mật tiên quyết, các cửa hàng ứng dụng không chấp nhận các ứng dụng được đánh dấu + là hỗ trợ gỡ lỗi. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="@raw/debug_cas"/>
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+

+ + +

Không sử dụng truyền gửi văn bản chưa mã hóa

+ +

+ Các ứng dụng có ý định kết nối tới các điểm đích chỉ sử dụng các kết nối + bảo mật có thể bỏ hỗ trợ truyền gửi văn bản không mã hóa (bằng giao thức + HTTP không mã hóa thay vì HTTPS) tới các đích đó. Tùy chọn này giúp ngăn + các hồi quy tiềm tàng trong ứng dụng do thay đổi trong các URL được cung cấp bởi các nguồn + bên ngoài như các máy chủ phụ trợ. + Hãy xem {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted + NetworkSecurityPolicy.isCleartextTrafficPermitted()} để biết thêm chi tiết. +

+ +

+ Ví dụ, một ứng dụng có thể đảm bảo rằng mọi kết nối tới {@code + secure.example.com} luôn được thực hiện qua HTTPS để bảo vệ việc truyền gửi dữ liệu nhạy cảm + khỏi các mạng có hại. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config usesCleartextTraffic="false">
+        <domain includeSubdomains="true">secure.example.com</domain>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Ghim chứng chỉ

+ +

+ Thông thường thì một ứng dụng sẽ tin cậy mọi CA được cài đặt sẵn. Nếu bất kỳ CA nào trong số này sẽ + phát hành một chứng chỉ lừa đảo thì ứng dụng sẽ gặp phải rủi ro từ một cuộc tấn công + MiTM. Một số ứng dụng chọn cách giới hạn bộ chứng chỉ được chúng chấp nhận + bằng cách giới hạn bộ CA được ứng dụng tin cậy hoặc bằng cách ghim chứng chỉ. +

+ +

+ Ghim chứng chỉ được thực hiện bằng cách cung cấp một bộ chứng chỉ theo mã hash của + khóa công khai (SubjectPublicKeyInfo của chứng chỉ X.509). Một chuỗi + chứng chỉ khi đó chỉ hợp lệ nếu như chuỗi chứng chỉ có chứa ít nhất một trong + các khóa công khai được ghim. +

+ +

+ Lưu ý rằng khi sử dụng ghim chứng chỉ bạn phải luôn kèm thêm một khóa + dự phòng để nếu bạn bị buộc phải chuyển sang các khóa mới hoặc thay đổi các CA (khi + ghim vào một chứng chỉ CA hoặc một chứng chỉ trung gian của CA đó) thì + kết nối của ứng dụng sẽ không bị ảnh hưởng. Nếu không bạn phải đưa ra một + bản cập nhật cho ứng dụng để khôi phục khả năng kết nối. +

+ +

+ Ngoài ra, có thể đặt thời gian hết hạn cho các ghim, sau thời gian đó + sẽ không tiến hành ghim được. Điều này giúp phòng ngừa các vấn đề về kết nối trong + ứng dụng chưa được cập nhật. Tuy nhiên, việc đặt thời gian hết hạn + trên các ghim này có thể khiến ghim bị bỏ qua. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <pin-set expiration="2018-01-01">
+            <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+            <!-- backup pin -->
+            <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Hành vi Kế thừa cấu hình

+ +

+ Các giá trị chưa được đặt trong một cấu hình cụ thể sẽ được kế thừa. Hành vi này cho phép tạo ra các cấu hình phức tạp + hơn trong khi vẫn giữ cho tệp cấu hình có thể đọc được. +

+ +

+ Nếu một giá trị không được đặt trong một mục nhập cụ thể thì giá trị thuộc mục nhập + bao quát hơn tiếp theo sẽ được sử dụng. Các giá trị chưa được đặt trong {@code domain-config} sẽ được + lấy từ phần tử cha {@code domain-config} nếu như được lồng, hoặc từ {@code + base-config} nếu không được lồng. Các giá trị chưa được đặt trong {@code base-config} sẽ sử dụng + các giá trị mặc định của nền tảng. +

+ +

+ Ví dụ: hãy xem xét trường hợp tất cả các kết nối tới miền con của {@code + example.com} phải sử dụng một bộ CA tùy chỉnh. Ngoài ra, truyền gửi văn bản không mã hóa tới + các miền này được cho phép trừ khi kết nối tới {@code + secure.example.com}. Bằng cách lồng cấu hình cho {@code + secure.example.com} bên trong cấu hình cho {@code example.com} thì + {@code trust-anchors} không cần phải được sao lặp. +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+        <domain-config cleartextTrafficPermitted="false">
+            <domain includeSubdomains="true">secure.example.com</domain>
+        </domain-config>
+    </domain-config>
+</network-security-config>
+
+

+ + +

Định dạng Tệp cấu hình

+ +

+ Tính năng Cấu hình Bảo mật mạng sử dụng một định dạng tệp XML. + Cấu trúc chung của tệp này được thể hiện trong đoạn mẫu mã nguồn sau: +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </base-config>
+
+    <domain-config>
+        <domain>android.com</domain>
+        ...
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+        <pin-set>
+            <pin digest="...">...</pin>
+            ...
+        </pin-set>
+    </domain-config>
+    ...
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+ +

+ Các phần sau sẽ mô tả cú pháp và các chi tiết khác của định dạng + tệp này. +

+ +

+ <network-security-config> +

+ +
+
+ có thể chứa: +
+ +
+ 0 hoặc 1 của <base-config>
+ Bất kỳ số nào của <domain-config>
+ 0 hoặc 1 của <debug-overrides> +
+
+ +

+ <base-config> +

+ +
+
+ cú pháp: +
+
+ +
+<base-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</base-config>
+
+
+
+ có thể chứa: +
+ +
+ <trust-anchors> +
+ +
+ mô tả: +
+ +
+ Cấu hình mặc định được sử dụng bởi mọi kết nối có đích đến không được + bao gồm bởi một domain-config. + +

+ Bất kỳ giá trị nào chưa được đặt sẽ sử dụng các giá trị mặc định của nền tảng. Cấu hình + mặc định cho các ứng dụng nhắm mục tiêu API mức 24 trở lên: +

+ +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+    </trust-anchors>
+</base-config>
+
+Cấu hình mặc định cho các ứng dụng nhắm mục tiêu API mức 23 trở xuống: +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+        <certificates src="user" />
+    </trust-anchors>
+</base-config>
+
+ +
+
+ +

<domain-config>

+
+
cú pháp:
+
+
<domain-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</domain-config>
+
+ +
Có thể chứa:
+ +
+1 hoặc nhiều <domain> +
0 hoặc 1 <trust-anchors> +
0 hoặc 1 <pin-set> +
Bất kỳ số nào của <domain-config> được lồng
+ +
Mô tả
+
Cấu hình được sử dụng cho các kết nối tới các điểm đích cụ thể theo như định nghĩa bởi các phần tử {@code domain}. + +

Lưu ý rằng nếu nhiều phần tử {@code domain-config} chứa một điểm đích thì cấu hình có quy tắc miền trùng khớp +cụ thể nhất (dài nhất) sẽ được sử dụng.

+
+ + +

<domain>

+ +
+
+ cú pháp: +
+ +
+
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+
+
+ +
+ Thuộc tính: +
+ +
+
+
+ {@code includeSubdomains} +
+ +
+ Nếu {@code "true"} thì quy tắc miền này sẽ trùng với miền đó và tất cả + các miền con, bao gồm các miền con của miền con, nếu không quy tắc đó chỉ + áp dụng cho các trùng khớp tuyệt đối. +
+
+
+ +
+ Mô tả: +
+
+ +

<debug-overrides>

+ +
+
+ cú pháp: +
+ +
+
+<debug-overrides>
+    ...
+</debug-overrides>
+
+
+ +
+ Có thể chứa: +
+ +
+ 0 hoặc 1 <trust-anchors> +
+ +
+ Mô tả: +
+ +
+ Ghi đè được thực hiện khi android:debuggable + là {@code "true"} thì thường là trường hợp dành cho các bản dựng không phát hành + được tạo ra bởi các IDE hoặc công cụ dựng. Các nguồn tin cậy được chỉ định trong {@code + debug-overrides} được thêm vào tất cả các cấu hình khác và ghim + chứng chỉ không được thực hiện khi chuỗi chứng chỉ của máy chủ sử dụng một trong + các nguồn tin cậy chỉ dành cho gỡ lỗi này. Nếu android:debuggable + là {@code "false"} thì phần này bị bỏ qua hoàn toàn. +
+
+ +

<trust-anchors>

+
+
+ cú pháp: +
+ +
+
+<trust-anchors>
+...
+</trust-anchors>
+
+
+ +
+ Có thể chứa: +
+ +
+ Bất kỳ số nào của <certificates> +
+ +
+ Mô tả: +
+ +
+ Đặt nguồn tin cậy cho các kết nối bảo mật: +
+
+ + +

<certificates>

+
+
cú pháp:
+
<certificates src=["system" | "user" | "raw resource"]
+              overridePins=["true" | "false"] />
+
+
mô tả:
+
Bộ các chứng chỉ X.509 cho các phần tử {@code trust-anchors}.
+ +
thuộc tính:
+
+
{@code src}
+
+Nguồn của các chứng chỉ CA, có thể là một +
    +
  • id nguồn thô trỏ tới một tệp có chứa các chứng chỉ X.509. + Các chứng chỉ phải được mã hóa theo định dạng DER hoặc PEM. Trong trường hợp của các chứng chỉ +PEM thì tệp đó không được chứa dữ liệu không phải PEM khác như + các chú thích. +
  • + +
  • {@code "system"} cho các chứng chỉ CA hệ thống được cài đặt sẵn +
  • + +
  • {@code "user"} cho các chứng chỉ CA do người dùng thêm vào +
  • +
+
+ +
{@code overridePins}
+
+

+ Xác định xem liệu các CA từ nguồn này có bỏ qua việc ghim chứng chỉ hay không. Nếu {@code + "true"} thì các chuỗi chứng chỉ mà xâu qua một trong các CA từ nguồn + này thì khi đó ghim sẽ không được thực hiện. Đây có thể là điều có ích cho các CA gỡ lỗi + hoặc để hỗ trợ cho người dùng tấn công MiTM hoạt động truyền gửi bảo mật của ứng dụng. +

+ +

+ Mặc định là {@code "false"} trừ khi được chỉ định trong một phần tử {@code debug-overrides} +, khi đó mặc định là {@code "true"}. +

+
+
+
+ + +

<pin-set>

+ +
+
+ cú pháp: +
+ +
+
+<pin-set expiration="date">
+...
+</pin-set>
+
+
+ +
+ Có thể chứa: +
+ +
+ Bất kỳ số nào của <pin> +
+ +
+ Mô tả: +
+ +
+ Một bộ các ghim khóa công khai. Để một kết nối bảo mật được tin cậy, một trong các + khóa công khai trong chuỗi tin cậy phải nằm trong bộ các ghim này. Xem + <pin> để biết định dạng của các ghim. +
+ +
+ Thuộc tính: +
+ +
+
+
+ {@code expiration} +
+ +
+ Ngày tháng, theo định dạng {@code yyyy-MM-dd}, vào và sau thời điểm các ghim + hết hạn và do đó vô hiệu hóa ghim. Nếu thuộc tính này chưa được đặt thì khi đó các + ghim không hết hạn. +

+ Việc hết hạn giúp phòng ngừa các vấn đề về khả năng kết nối trong ứng dụng làm cho không + nhận được các bản cập nhật cho bộ ghim, chẳng hạn như do người dùng + vô hiệu hóa các bản cập nhật ứng dụng. +

+
+
+
+
+ +

<pin>

+
+
+ cú pháp: +
+ +
+
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+    SubjectPublicKeyInfo (SPKI)</pin>
+
+
+ +
+ Thuộc tính: +
+ +
+
+
+ {@code digest} +
+ +
+ Thuật toán băm được sử dụng để tạo ghim. Hiện tại, chỉ có + {@code "SHA-256"} được hỗ trợ. +
+
+
+
diff --git a/docs/html-intl/intl/vi/preview/features/tv-recording-api.jd b/docs/html-intl/intl/vi/preview/features/tv-recording-api.jd new file mode 100644 index 000000000000..be91c291ed8a --- /dev/null +++ b/docs/html-intl/intl/vi/preview/features/tv-recording-api.jd @@ -0,0 +1,120 @@ +page.title=Ghi lại TV +page.keywords=preview,sdk,tv,recording +page.tags=androidn + +@jd:body + + + +

Các dịch vụ nguồn vào TV cho phép người dùng tạm dừng và tiếp tục phát lại kênh thông qua +các API chuyển dịch thời gian. Android N mở rộng thêm chuyển dịch thời gian +bằng cách cho phép người dùng lưu nhiều chương trình được ghi lại.

+ +

Người dùng có thể tạo lịch ghi lại trước hoặc tiến hành ghi lại khi họ xem +một chương trình. Khi hệ thống đã lưu bản ghi lại, người dùng có thể duyệt, quản lý +và phát lại bản ghi đó bằng ứng dụng TV của hệ thống.

+ +

Nếu bạn muốn cung cấp tính năng ghi lại cho dịch vụ nguồn vào TV, +bạn phải báo cho hệ thống biết ứng dụng của bạn hỗ trợ ghi lại, triển khai +khả năng ghi chương trình, xử lý và thông báo bất kỳ lỗi nào xuất hiện +trong quá trình ghi lại và quản lý các chương trình được ghi lại.

+ +

Chỉ báo Hỗ trợ ghi lại

+ +

Để thông báo cho hệ thống biết dịch vụ nguồn vào TV của bạn hỗ trợ ghi lại, hãy thực hiện +các bước sau:

+ +
    +
  1. Trong phương thức TvInputService.onCreate() của bạn, hãy tạo một đối tượng +TvInputInfo mới sử dụng lớp TvInputInfo.Builder +.
  2. +
  3. Khi tạo đối tượng TvInputInfo mới, hãy gọi +setCanRecord(true) trước khi gọi build() để +chỉ báo dịch vụ của bạn hỗ trợ ghi lại.
  4. +
  5. Đăng ký đối tượng TvInputInfo với hệ thống bằng cách gọi +TvInputService.updateTvInputInfo().
  6. +
+ +

Ghi lại một chương trình

+ +

Sau khi dịch vụ nguồn vào TV của bạn đăng ký để hỗ trợ tính năng +ghi lại, hệ thống sẽ gọi phương thức +TvInputService.onCreateRecordingSession() của bạn khi cần truy cập +phần triển khai ghi lại của ứng dụng. Triển khai lớp con +TvInputService.RecordingSession của bạn và trả nó về +khi hàm gọi lại onCreateRecordingSession() +được gọi. Lớp con này chịu trách nhiệm chuyển sang dữ liệu kênh phù hợp, +ghi lại dữ liệu được yêu cầu và thông báo trạng thái ghi lại và các lỗi cho +hệ thống.

+ +

Khi hệ thống gọi RecordingSession.onTune(), chuyển vào một +URI của kênh, chỉnh vào kênh mà URI đó chỉ định. Thông báo cho hệ thống biết +ứng dụng của bạn đã chỉnh vào kênh mong muốn bằng cách gọi notifyTuned(), +hoặc nếu ứng dụng không thể chỉnh vào kênh phù hợp, hãy gọi +notifyError().

+ +

Tiếp theo hệ thống sẽ gọi hàm gọi lại RecordingSession.onStartRecording() +. Ứng dụng của bạn phải bắt đầu ghi lại ngay lập tức. Khi hệ thống gọi +hàm gọi lại này, hệ thống có thể cung cấp một URI có chứa thông tin về chương trình +sắp được ghi lại. Khi kết thúc việc ghi lại, bạn cần sao chép dữ liệu +này vào bảng dữ liệu RecordedPrograms.

+ +

Cuối cùng, hệ thống sẽ gọi RecordingSession.onStopRecording(). +Lúc này, ứng dụng của bạn phải dừng ghi lại ngay lập tức. Bạn cũng cần +tạo một mục nhập trong bảng RecordedPrograms. Mục này cần +có URI dữ liệu của chương trình được ghi lại trong +cột RecordedPrograms.COLUMN_RECORDING_DATA_URI, và bất kỳ thông tin +về chương trình mà hệ thống đã cung cấp trong lần gọi đầu tiên tới +onStartRecording().

+ +

Để biết thêm thông tin về cách truy cập bảng RecordedPrograms +hãy xem Quản lý các chương trình được ghi lại.

+ +

Xử lý lỗi ghi lại

+ +

Nếu xảy ra lỗi trong quá trình ghi lại, làm cho dữ liệu ghi lại không sử dụng được thì +hãy thông báo cho hệ thống bằng cách gọi RecordingSession.notifyError(). +Tương tự, bạn có thể gọi notifyError() sau khi một chương trình ghi lại +được tạo để cho phép hệ thống biết được ứng dụng của bạn không còn tiếp tục ghi các chương trình.

+ +

Nếu xảy ra lỗi trong quá trình ghi lại, nhưng có khả năng là một phần dữ liệu +ghi lại có thể được sử dụng để người dùng phát lại thì hãy gọi +RecordingSession.notifyRecordingStopped() để cho phép hệ thống +sử dụng một phần chương trình đó.

+ +

Quản lý các chương trình được ghi lại

+ +

Hệ thống lưu giữ thông tin cho mọi chương trình được ghi lại từ tất cả +các ứng dụng kênh truyền hình hỗ trợ ghi lại trong bảng trình cung cấp nội dungTvContract.RecordedPrograms +. Có thể truy cập thông tin này qua URI nội dung +RecordedPrograms.Uri. Hãy sử dụng các API trình cung cấp nội dung để +đọc, thêm và xóa các mục trong bảng này.

+ +

Để biết thêm thông tin về thao tác với dữ liệu trình cung cấp nội dung, hãy xem + +Nội dung Cơ bản về Trình cung cấp Nội dung.

+ +

Thực hành Tốt nhất

+ +

Các thiết bị TV có thể có bộ nhớ lưu trữ hạn chế do đó phán đoán hợp lý nhất khi +phân bổ bộ nhớ lưu trữ để lưu các chương trình được ghi lại. Sử dụng +RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) khi +không có đủ dung lượng trống để lưu một chương trình được ghi lại.

+ +

Khi người dùng khởi tạo quá trình ghi lại, bạn cần tiến hành ghi lại dữ liệu nhanh nhất +có thể. Để hỗ trợ công việc này, hãy hoàn thành tất cả các tác vụ tốn thời gian trước đó, +như truy cập và phân bổ không gian lưu trữ khi hệ thống gọi hàm gọi lại +onCreateRecordingSession(). Làm như vậy sẽ cho phép bạn tiến hành +việc ghi lại ngay lập tức khi hàm gọi lại onStartRecording() +được gọi.

diff --git a/docs/html-intl/intl/vi/preview/index.jd b/docs/html-intl/intl/vi/preview/index.jd new file mode 100644 index 000000000000..25289e0d57f4 --- /dev/null +++ b/docs/html-intl/intl/vi/preview/index.jd @@ -0,0 +1,120 @@ +page.title=Android N Developer Preview +page.tags="preview","developer" +meta.tags="preview", "android" +fullpage=true +forcelocalnav=true +header.hide=1 +footer.hide=1 +@jd:body + + + +
+
+
+ +
+

Android N Developer Preview

+

+ Hãy chuẩn bị sẵn sàng cho Android N! + Kiểm thử ứng dụng của bạn trên Nexus và các thiết bị khác. Hỗ trợ các hành vi + hệ thống mới nhằm tiết kiệm năng lượng và bộ nhớ. + Mở rộng ứng dụng của bạn bằng UI đa cửa sổ, + thông báo trả lời trực tiếp và nhiều tính năng khác. +

+ + + + Bắt đầu + +
+
+ +
+
+
+
+
+
+
+ + + + + +
+

Tài nguyên

+
+ Các thông tin cần thiết để trợ giúp bạn chuẩn bị cho ứng dụng sẵn sàng chạy trên Android N. +
+ +
+ +
+
+ diff --git a/docs/html-intl/intl/vi/preview/j8-jack.jd b/docs/html-intl/intl/vi/preview/j8-jack.jd new file mode 100644 index 000000000000..8ab6c4830485 --- /dev/null +++ b/docs/html-intl/intl/vi/preview/j8-jack.jd @@ -0,0 +1,183 @@ +page.title=Tính năng của Ngôn ngữ Java 8 +page.keywords="android N", "Java 8", "Jack" +@jd:body + + + +

Android N cung cấp hỗ trợ cho các tính năng của ngôn ngữ Java 8 + mà bạn có thể sử dụng khi phát triển các ứng dụng nhắm mục tiêu Android N. + Trang này mô tả các tính năng ngôn ngữ mới được hỗ trợ trong Bản xem trước + Android N, cách thiết lập dự án đúng để sử dụng chúng và các vấn đề + đã biết mà bạn có thể gặp phải. +

+ +

Để bắt đầu sử dụng các tính năng này, bạn cần tải xuống và cài đặt Android +Studio 2.1 (bản xem trước) và SDK của Bản xem trước Android N gồm có Jack toolchain +cần thiết và Bổ trợ Android được cập nhật cho Gradle. Nếu bạn chưa +cài đặt SDK Bản xem trước Android N, hãy xem Thiết lập để Phát triển dành cho Android N.

+ + + +

+ Lưu ý: Sử dụng các tính năng mới của ngôn ngữ Java 8 không phải là một + yêu cầu để phát triển các ứng dụng nhắm mục tiêu nền tảng Android N. Nếu bạn + không muốn viết mã với các tính năng của ngôn ngữ Java 8 thì bạn có đặt các giá trị + mã nguồn và tương thích mục tiêu thành Java 7. Tuy nhiên, bạn vẫn + phải biên dịch với JDK 8 để dựng cho nền tảng Android N. +

+ +

+ Các tính năng và API của Ngôn ngữ Java 8 được hỗ trợ +

+ +

+ Hiện thời, Android không hỗ trợ tất cả các tính năng của ngôn ngữ Java 8. Tuy nhiên, + các tính năng sau sẽ sử dụng được khi phát triển ứng dụng nhắm mục tiêu + Bản xem trước Android N: +

+ + + + +

+ Ngoài ra, các API tính năng của ngôn ngữ Java 8 cũng được hỗ trợ: +

+ +
    +
  • Các API phản chiếu và liên quan đến ngôn ngữ: +
  • + +
  • +
      +
    • {@code java.lang.FunctionalInterface} +
    • + +
    • {@code java.lang.annotation.Repeatable} +
    • + +
    • {@code java.lang.reflect.Method.isDefault()} +
    • + +
    • và các API Phản chiếu liên quan tới các chú giải lặp lại, như +{@code AnnotatedElement.getAnnotationsByType(Class)} +
    • +
    +
  • +
  • Các API tiện ích: +
  • + +
  • +
      +
    • {@code java.util.function} +
    • +
    +
  • +
+ +

+ Lưu ý: Android N kế thừa việc triển khai các + biểu thức lambda trên các lớp ẩn danh. Phương pháp này cho phép chúng + tương thích ngược và có thể chạy trên các phiên bản Android cũ hơn. Để kiểm thử + các biểu thức lambda trên các phiên bản cũ hơn, hãy nhớ vào tệp {@code + build.gradle} và đặt {@code compileSdkVersion} và {@code + targetSdkVersion} thành 23 hoặc thấp hơn. +

+ +

+ Kích hoạt các tính năng của Java 8 và Jack Toolchain +

+ +

+ Để sử dụng các tính năng mới của ngôn ngữ Java 8 bạn cũng cần sử dụng + Jack toolchain mới. Toolchain Android + mới sẽ biên dịch mã nguồn của ngôn ngữ Java sang mã bytecode + dex đọc được của Android, có định dạng thư viện {@code .jack} riêng của nó và cung cấp hầu hết các tính năng + toolchain dưới dạng một phần của công cụ riêng lẻ: đóng gói lại, thu gọn, làm rối mã và + multidex. +

+ +

Sau đây là phần so sánh hai toolchain được sử dụng để dựng các tệp DEX Android:

+
    +
  • Javac toolchain cũ:
    + javac ({@code .java} --> {@code .class}) --> dx ({@code + .class} --> {@code .dex}) +
  • + +
  • Jack toolchain mới:
    + Jack ({@code .java} --> {@code .jack} --> {@code .dex}) +
  • +
+ +

+ Cấu hình Gradle +

+ +

+ Để kích hoạt các tính năng ngôn ngữ Java 8 và Jack cho dự án của bạn, hãy nhập + nội dung sau vào tệp {@code build.gradle} theo mô-đun: +

+ +
+android {
+  ...
+  defaultConfig {
+    ...
+    jackOptions {
+      enabled true
+    }
+  }
+  compileOptions {
+    sourceCompatibility JavaVersion.VERSION_1_8
+    targetCompatibility JavaVersion.VERSION_1_8
+  }
+}
+
+ +

+ Vấn đề đã biết +

+ +

+ Instant Run, được giới thiệu trong Android Studio 2.0 (Beta), hiện không hoạt động + với Jack và sẽ bị vô hiệu hóa khi sử dụng toolchain mới. +

+ +

Bởi vì Jack không tạo ra các tệp lớp trung gian khi biên dịch một +ứng dụng, các công cụ phụ thuộc vào những tệp này hiện thời không hoạt động với Jack. Một số +ví dụ về các công cụ này là:

+ +
    +
  • Bộ dò Lint hoạt động trên các tệp lớp +
  • + +
  • Các công cụ và thư viện đòi hỏi các tệp lớp của ứng dụng (như JaCoCo + và Mockito)
  • +
+ +

Vui lòng thông báo lỗi nếu bạn phát hiện các vấn đề khác khi sử dụng Jack.

\ No newline at end of file diff --git a/docs/html-intl/intl/vi/preview/overview.jd b/docs/html-intl/intl/vi/preview/overview.jd new file mode 100644 index 000000000000..0df55e348927 --- /dev/null +++ b/docs/html-intl/intl/vi/preview/overview.jd @@ -0,0 +1,440 @@ +page.title=Tổng quan về Chương trình +page.metaDescription=Hãy chuẩn bị ứng dụng sẵn sàng cho phiên bản Android tiếp theo. +page.image=images/cards/card-n-overview_2x.png +meta.tags="preview", "developer", "android" +page.tags="preview", "developer", "android" + +@jd:body + + +

+ Chào mừng bạn đến với Android N Developer Preview, một chương trình + cung cấp cho bạn mọi thứ cần thiết để kiểm thử và tối ưu hóa các ứng dụng cho phiên bản + Android tiếp theo. Đây là chương trình miễn phí và bạn có thể bắt đầu ngay bằng cách + tải xuống các công cụ của N Developer Preview. +

+ + + + + + + +
+
+
+
+
+ Thiết bị phần cứng và ảnh của bộ giả lập +
+ +

+ Chạy và kiểm thử ứng dụng của bạn trên một loạt các thiết bị hoặc trên bộ giả lập. + +

+
+ +
+
+ Mã nền tảng mới nhất +
+ +

+ Chúng tôi sẽ cung cấp các bản cập nhật hàng tháng trong thời gian của Preview vì vậy bạn sẽ được kiểm tra các thay đổi nền tảng mới nhất. +

+
+ +
+
+ Ưu tiên các vấn đề của nhà phát triển +
+ +

+ Trong một vài tuần đầu, chúng tôi sẽ dành ưu tiên cho các vấn đề + được nhà phát triển báo cáo, vì vậy hãy kiểm thử và gửi phản hồi sớm nhất có thể. +

+
+ +
+ +
+ + +
+
+ Các hành vi và khả năng mới +
+ +

+ Tiến hành công việc sớm để hỗ trợ các hành vi mới của nền tảng và phát triển với các tính năng mới. +

+
+ +
+
+ Cập nhật qua OTA +
+ +

+ Các bản cập nhật liền mạch qua sóng vô tuyến cho bất kỳ thiết bị nào được hỗ trợ thông qua + Chương trình Android Beta. Không cần phải flash. +

+
+ +
+
+ Phản hồi và hỗ trợ +
+ +

+ Báo cáo các vấn đề và gửi phản hồi về cho chúng tôi thông qua + bộ theo dõi vấn đề của chúng tôi. Kết nối với các nhà phát triển + khác trong + Cộng đồng Nhà phát triển N. +

+
+
+
+
+ + + +

Tiến trình thời gian và các bản cập nhật

+ + +

+ N Developer Preview sẽ kéo dài từ 9 tháng 3 năm 2016 đến khi phát hành công chúng + bản Android N cuối cùng cho AOSP và OEM, dự kiến trong Q3 2016. +

+ +

+ Tại các mốc phát triển chính chúng tôi sẽ cung cấp các bản cập nhật cho môi trường phát triển và + kiểm thử của bạn. Nói chung, bạn có thể nhận một bản cập nhật hàng tháng (khoảng cách + 4 đến 6 tuần). Các mốc được liệt kê dưới đây. +

+ +
    +
  • Preview 1 (phát hành lần đầu, alpha)
  • +
  • Preview 2 (bản cập nhật tăng dần, beta)
  • +
  • Preview 3 (bản cập nhật tăng dần, beta)
  • +
  • Preview 4 (các API cuối cùng và SDK chính thức, phát hành Play)
  • +
  • Preview 5 (các ảnh hệ thống gần hoàn thiện để kiểm thử cuối cùng)
  • +
  • Phát hành bản cuối cho AOSP và hệ sinh thái
  • +
+ +

+ Mỗi bản cập nhật sẽ có các công cụ SDK, ảnh hệ thống xem trước, bộ giả lập, tài liệu + tham khảo và những khác biệt về API. +

+ +

+ Ba phiên bản Preview đầu tiên sẽ cung cấp một môi trường + kiểm thử và phát triển sớm để giúp bạn xác định + các vấn đề tương thích trong ứng dụng hiện tại và lập kế hoạch di chuyển hoặc trang bị hoạt động + cần thiết để nhắm tới nền tảng mới. Đây là giai đoạn ưu tiên để bạn + gửi phản hồi cho chúng tôi về các tính năng, khả năng tương thích của API và tệp + — đối với mọi vấn đề đó, vui lòng sử dụng bộ theo dõi + vấn đề. Sẽ có một số thay đổi với API giữa các bản cập nhật này. +

+ +

+ Tại Preview 4 và 5 bạn sẽ được sử dụng các +API và SDK N cuối cùng để phát triển, và cả các ảnh hệ thống gần hoàn thiện + để kiểm thử các hành vi, tính năng của hệ thống. Android N sẽ cung cấp một mức + API chuẩn vào thời điểm này. Bạn có thể tiến hành kiểm thử khả năng tương thích cuối cùng đối với các ứng dụng + cũ và tinh chỉnh mã nguồn mới có sử dụng các API hoặc tính năng mới của N. +

+ +

+ Ngoài ra, bắt đầu từ Preview 4 bạn có thể phát hành ứng dụng lên + các thiết bị chạy Android N ở cấp API chính thức, chẳng hạn như + thiết bị người dùng được chọn cho chương trình Android Beta. Bạn có thể + phát hành ứng dụng lên kênh alpha và beta của Google Play trước do đó bạn có thể kiểm thử + ứng dụng của mình với người dùng Android Beta trước khi phân phối rộng rãi trên + cửa hàng. +

+ +

+ Khi bạn kiểm thử và phát triển trên Android N, chúng tôi khuyến cáo bạn duy trì + môi trường phát triển được cập nhật khi các cập nhật Preview được + phát hành. Để giúp cho quá trình này thuận tiện hơn, bạn có thể đăng ký các thiết bị kiểm thử của mình vào + chương trình Android Beta và lấy các bản cập nhật qua sóng vô tuyến (OTA) tại + mỗi mốc. Ngoài ra, các ảnh xem trước cũng có sẵn để bạn + tải xuống và flash thủ công. +

+ +

+ Chúng tôi sẽ thông báo cho bạn khi các cập nhật Preview xuất hiện thông qua Blog Nhà phát triển Android, cũng + như thông qua trang này và Cộng đồng + Nhà phát triển Android N. +

+ + +

Có gì trong N Developer Preview?

+ +

+ N Developer Preview có tất cả mọi thứ bạn cần để kiểm thử ứng dụng + sẵn có của bạn trên nhiều loại kích cỡ màn hình, công nghệ mạng, chipset CPU/GPU + và kiến trúc phần cứng. +

+ +

Bộ công cụ SDK

+ +

Bạn có thể tải xuống các thành phần này thông qua Trình quản lý SDK trong Android Studio:

+ +
    +
  • N Developer Preview SDK và công cụ +
  • Ảnh hệ thống cho bộ giả lập (32-bit và 64-bit) của N Developer Preview +
  • Ảnh hệ thống cho bộ giả lập cho Android TV (32-bit) của N Developer Preview +
  • Các thư viện hỗ trợ của N Developer Preview (dành cho các mẫu ứng dụng mới) +
+ +

+ Chúng tôi sẽ cung cấp các bản cập nhật cho các công cụ phát triển này theo từng mốc khi cần thiết. +

+ +

Ảnh hệ thống cho phần cứng

+ +

+ N Developer Preview bao gồm các ảnh hệ thống cho Nexus và phần cứng khác mà bạn có thể sử dụng khi + kiểm thử và phát triển trên các thiết bị vật lý. Hãy xem trang Ảnh cho Thiết bị để có danh sách đầy đủ + các ảnh cho phần cứng. +

+ +

+ Chúng tôi sẽ cung cấp các ảnh hệ thống cập nhật cho những thiết bị này tại mỗi mốc. Bạn + có thể tải xuống và flash các ảnh hệ thống cập nhật vào các thiết bị kiểm thử + một cách thủ công nhiều lần theo nhu cầu. Điều này đặc biệt hữu ích đối với các môi trường + kiểm thử tự động, trong đó bạn có thể cần flash lại thiết bị nhiều + lần. +

+ +

Lưu ý: + Các thiết bị được flash thủ công sẽ không nhận các bản cập nhật qua OTA giống như trong + preview của năm ngoái. Năm nay bạn có thể nhận qua OTA bằng cách đăng ký các thiết bị trong + Chương trình Android Beta — hãy xem chi tiết trong phần tiếp theo. +

+ +

Các bản cập nhật OTA thông qua Chương trình Android Beta

+ +

+ Tính năng mới cho Android N là một chương trình cập nhật qua sóng vô tuyến (OTA) sẽ tự động + phát hành các cập nhật Preview mới nhất của Android N trực tiếp tới thiết bị đã đăng ký + trong chương trình. Đây là chương trình miễn phí và mở đối với bất cứ ai có một + thiết bị được hỗ trợ đã đăng ký với tài khoản Google của họ. +

+ +

+ Để đăng ký vào chương trình, hãy truy cập trang Chương trình + Android Beta. Bạn sẽ thấy + tất cả các thiết bị đã đăng ký với tài khoản của bạn có đủ điều kiện để đăng ký + Android Beta. +

+ +
    +
  1. Hãy chọn các thiết bị bạn muốn nhận bản cập nhật Android N +
  2. Nhấp vào Đăng ký, đọc và đồng ý với các điều khoản dịch vụ và sau đó nhấp OK +
+ +

+ Một khi đã đăng ký, thiết bị của bạn sẽ sớm nhận được một bản cập nhật. Trong hầu hết trường hợp, + bạn sẽ không cần thực hiện thiết lập lại toàn bộ dữ liệu để chuyển sang Android N. Tuy nhiên, + chúng tôi khuyến cáo bạn sao lưu bất kỳ dữ liệu nào bạn không muốn bị mất trước khi + đăng ký thiết bị. +

+ +

+ Khi các bản cập nhật được phát hành tới thiết bị của bạn, chúng tôi khuyến cáo bạn tải xuống và + cài đặt sớm nhất có thể. Bạn sẽ muốn cập nhật các + thay đổi mới nhất về UI, hành vi, API và các tính năng của hệ thống. +

+ +

+ Khi kết thúc Developer Preview, các thiết bị đăng ký của bạn sẽ + nhận một bản cập nhật của bản phát hành Android N chính thức. +

+ +

+ Bạn có thể hủy đăng ký các thiết bị của mình trong chương trình Android Beta bất kỳ lúc nào thông qua + trang Android Beta. Trước khi hủy đăng ký, hãy chắc chắn sao lưu dự phòng dữ liệu của bạn trên + thiết bị đó. +

+ +

Lưu ý: + Khi bạn hủy đăng ký, thiết bị của bạn sẽ được khôi phục cài đặt gốc + về phiên bản mới nhất + của Android 6.0 Marshmallow (không nhất thiết là phiên bản bạn từng + được cài đặt trước khi đăng ký thiết bị). Để đảm bảo cài đặt mới hoàn toàn, + dữ liệu của bạn sẽ bị xóa khỏi thiết bị, bao gồm danh bạ, tin nhắn, + ảnh, v.v... +

+ +

Tài liệu và mã mẫu

+ +

+ Các nguồn tài liệu này có trên trang Developer Preview để + trợ giúp bạn tìm hiểu về Android N: +

+ +
    +
  • Thiết lập để Phát triển dành cho +Android N có + các hướng dẫn từng bước để bắt đầu.
  • +
  • Các thay đổi + Hành vi chỉ ra cho bạn các phần chính yếu để kiểm thử.
  • +
  • Tổng quan về các API mới, bao gồm một phần Tổng quan về API, bản tải xuống được + Tham khảo + API và các hướng dẫn chi tiết cho nhà phát triển đối với các tính năng quan trọng như + hỗ trợ đa cửa sổ, thông báo gộp, hỗ trợ đa bản địa và các tính năng khác. +
  • Mã mẫu trong đó + minh họa cách hỗ trợ các quyền và tính năng mới. +
  • Ghi chú phát hành + cho phiên bản hiện hành của N Developer Preview, bao gồm các ghi chú về thay đổi và + các báo cáo về sự khác biệt. +
+ +

Tham khảo API có thể tải xuống

+ +

+ Trong các cập nhật preview có sớm bạn có thể tải xuống + Tham khảo API + mới nhất cho nền tảng Android N dưới dạng tệp lưu trữ zip riêng biệt. Bản tải xuống + tham khảo này cũng có một báo cáo về các khác biệt để giúp bạn nhận biết các thay đổi API từ + API 23 và bản cập nhật trước đó. +

+ +

+ Khi các API Android N hoàn thiện và được chỉ định một mức API chính thức, + chúng tôi sẽ cung cấp tham khảo API cho bạn trực tuyến tại https://developer.android.com. +

+ +

+ Tài nguyên Hỗ trợ +

+ +

+ Khi bạn kiểm thử và phát triển trên N Developer Preview, xin vui lòng sử dụng các kênh sau + để thông báo các vấn đề và gửi phản hồi. +

+ +
    +
  • Bộ theo dõi Vấn đề N Developer Preview + kênh phản hồi chính của bạn. Bạn có thể thông báo lỗi, các vấn đề về + hiệu năng và phản hồi chung thông qua bộ theo dõi vấn đề. Bạn cũng có thể kiểm tra +các vấn đề đã biết và + tìm các bước khắc phục. Chúng tôi sẽ cập nhật thông tin cho bạn về vấn đề của bạn khi nó đã được phân loại và gửi tới + nhóm kỹ thuật Android xem xét.
  • +
  • Cộng đồng Nhà phát triển Android N là + một cộng đồng Google+ nơi bạn có thể kết nối với các nhà phát triển khác đang thử nghiệm + Android N. Bạn có thể chia sẻ các phát hiện hoặc ý tưởng hoặc tìm câu trả lời cho các + thắc mắc về Android N. Chúng tôi sẽ điều hành cộng đồng này và cung cấp các câu trả lời và + hướng dẫn khi cần thiết.
  • +
+ +

Nhắm mục tiêu, API xem trước và phát hành

+ +

+ N Developer Preview sẽ cung cấp một hệ thống và thư viện + Android chỉ dành cho phát triển mà không có mức API tiêu chuẩn. Nếu bạn muốn + bỏ các hành vi về khả năng tương thích để kiểm thử ứng dụng của mình (đặc biệt + khuyến cáo), bạn có thể nhắm mục tiêu phiên bản xem trước của Android N bằng cách thiết lập + targetSdkVersion + của ứng dụng thành “N”. +

+ +

+ Android N Developer Preview cung cấp các API xem trước + — các API này không phải bản chính thức cho đến khi SDK cuối cùng được phát hành, + hiện được dự kiến phát hành vào quý ba năm 2016. Điều này có nghĩa là có thể + có các thay đổi API nhỏ sau này, đặc biệt trong + các tuần đầu của chương trình. Chúng tôi sẽ cung cấp bản tóm tắt các thay đổi cho bạn theo + mỗi bản cập nhật của Android N Developer Preview. +

+ +

+ Lưu ý: Mặc dù các API xem trước có thể thay đổi nhưng + các hành vi hệ thống cơ bản vẫn ổn định và sẵn sàng để kiểm thử + ngay. +

+ +

+ Google Play không cho phép phát hành các ứng dụng nhắm mục tiêu tới N Developer + Preview. Khi có bản SDK cuối cùng của Android N bạn sẽ có thể + nhắm mục tiêu mức API Android N chính thức và phát hành ứng dụng của mình lên Google + Play thông qua các kênh phát hành alpha và beta. Trong thời gian này, nếu bạn muốn + phân phối một ứng dụng nhắm mục tiêu Android N cho người kiểm thử thì bạn có thể thực hiện phân phối qua email hoặc + bằng cách tải trực tiếp trên trang web của bạn. +

+ +

+ Khi Android N được phát hành hoàn chỉnh cho AOSP và OEM, dự kiến vào Q3 2016, + bạn có thể phát hành ứng dụng của mình nhắm mục tiêu Android N lên kênh + phát hành công chúng trong Google Play. +

+ + +

Cách thức bắt đầu

+ +

+ Để bắt đầu kiểm thử ứng dụng của bạn với Android N: +

+ +
    +
  1. Xem lại Tổng quan về API + và Các thay đổi Hành vi để + biết được có những gì mới và nó sẽ tác động đến ứng dụng của bạn như thế nào. Đặc biệt, + hãy tìm hiểu về các tính năng thông báo mới và + hỗ trợ đa cửa sổ.
  2. +
  3. Thiết lập môi trường của bạn bằng cách làm theo các hướng dẫn để Preview SDK + và cấu hình các thiết bị kiểm thử.
  4. +
  5. Làm theo các hướng dẫn + flash để flash ảnh hệ thống Android N mới nhất cho thiết bị của bạn.
  6. +
  7. Xem lại Tham khảo API + và các ví dụ về Android N để hiểu + sâu hơn về các tính năng API mới cũng như cách sử dụng chúng trong ứng dụng của bạn. +
  8. Tham gia Cộng đồng + Nhà phát triển Android N để nhận được thông tin mới nhất và kết nối với các + nhà phát triển khác đang thử nghiệm với nền tảng mới.
  9. +
+ +

+ Cảm ơn bạn đã tham gia chương trình Android N Developer Preview! +

diff --git a/docs/html-intl/intl/vi/preview/samples.jd b/docs/html-intl/intl/vi/preview/samples.jd new file mode 100644 index 000000000000..aa1a8c65d229 --- /dev/null +++ b/docs/html-intl/intl/vi/preview/samples.jd @@ -0,0 +1,85 @@ +page.title=Samples +page.tags="preview", "samples", "android" +page.image=images/cards/card-n-samples_2x.png +@jd:body + +

+ Các mã mẫu sau được dành cho Android N. Để + tải xuống mã mẫu cho Android Studio, hãy chọn tùy chọn trong menu File > Import + Samples. +

+ +

+ Chú ý:Các dự án có thể tải xuống này được thiết kế + để sử dụng với Gradle và Android Studio. +

+ + +

Dùng thử đa cửa sổ

+ +

+ Ví dụ này minh họa cách tận dụng giao diện người dùng + đa cửa sổ với ứng dụng của bạn. +

+

+ + Tải mã trên GitHub +

+ +
+

Thông báo đang Hoạt động

+ +

+ Đây là ví dụ đã có sẵn, minh họa một dịch vụ đơn giản để gửi + thông báo bằng cách sử dụng NotificationCompat. Mỗi cuộc hội thoại chưa đọc từ một người dùng + sẽ được gửi dưới dạng một thông báo riêng. +

+

+ Ví dụ này đã được cập nhật để tận dụng các tính năng thông báo mới + có trong Android N. +

+

+ + Tải mã trên GitHub +

+ +
+

Dịch vụ Nhắn tin

+ +

+ Đây là một ví dụ đã có sẵn, minh họa cách sử dụng + NotificationManager để cho biết có bao nhiêu thông báo một ứng dụng hiện + đang hiển thị. +

+

+ Ví dụ này đã được cập nhật để tận dụng các tính năng thông báo mới + có trong Android N. +

+

+ + Tải mã trên GitHub +

+ +
+

Khởi động Trực tiếp

+ +

+ Ví dụ này minh họa cách lưu trữ và truy cập dữ liệu trên bộ lưu trữ + mã hóa thiết bị, luôn khả dụng khi thiết bị được khởi động. +

+

+ + Tải mã trên GitHub +

+ +
+

Truy cập Thư mục theo Phạm vi

+ +

+ Ví dụ này minh họa cách đọc và ghi dữ liệu từ các thư mục + cụ thể trong khi cần ít quyền hơn. +

+

+ + Tải mã trên GitHub +

\ No newline at end of file diff --git a/docs/html-intl/intl/vi/preview/setup-sdk.jd b/docs/html-intl/intl/vi/preview/setup-sdk.jd new file mode 100644 index 000000000000..fca53310e2c8 --- /dev/null +++ b/docs/html-intl/intl/vi/preview/setup-sdk.jd @@ -0,0 +1,226 @@ +page.title=Thiết lập Preview +meta.keywords="preview", "android" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-sdk_2x.png + +@jd:body + + + + +

Để phát triển các ứng dụng cho Android N Preview bạn cần thực hiện một số cập nhật +đối với môi trường phát triển của mình như mô tả trên trang này.

+ +

Để đơn thuần thử khả năng tương thích của ứng dụng trên +ảnh hệ thống Android N, hãy làm theo hướng dẫn Kiểm thử trên một Thiết bị Android N.

+ + + + +

Tải Android Studio 2.1 (bản xem trước)

+ +

Nền tảng Android N bổ sung hỗ trợ cho các tính năng của ngôn ngữ Java 8, +yêu cầu phải có một trình biên dịch mới có tên là Jack. Phiên bản Jack mới nhất +hiện chỉ được hỗ trợ trong Android Studio 2.1. Do đó, nếu bạn muốn +sử dụng các tính năng của ngôn ngữ Java 8 thì bạn cần sử dụng Android Studio 2.1 để +dựng ứng dụng. Nếu không, bạn không cần sử dụng trình biên dịch Jack nhưng bạn +vẫn cần cập nhật lên JDK 8 để biên dịch cho nền tảng Android N, +như mô tả dưới đây. +

+ + + +

Android Studio 2.1 hiện đang có dưới dạng bản xem trước trong kênh +phát hành Canary. Nếu bạn đã +có Android Studio và không muốn cập nhật lên kênh canary thì bạn có thể +tải xuống Android Studio 2.1 dưới dạng bản cài đặt riêng và sử dụng +để phát triển với Android N để không làm ảnh hưởng đến môi trường Android Studio +chính của bạn.

+ +

Để tải xuống Android Studio 2.1 dưới dạng bản cài đặt riêng, hãy thực hiện +các bước sau (hoặc nếu bạn muốn nhận Android Studio 2.1 dưới dạng bản cập nhật cho +bản cài đặt có sẵn thì hãy chuyển đến bước 4):

+ +
    +
  1. Chỉnh sửa tên của + bản cài đặt Android Studio có sẵn và thêm số phiên bản. Làm như vậy + để khi bạn cài đặt, phiên bản mới sẽ không ghi đè lên phiên bản có sẵn.
  2. +
  3. Tải xuống tệp ZIP phù hợp cho hệ điều hành của bạn từ + trang tải xuống của kênh canary. +
  4. +
  5. Giải nén gói đó và chuyển các thành phần của Android Studio 2.1 tới + vị trí phù hợp cho các ứng dụng của bạn trên hệ thống rồi khởi chạy nó.
  6. +
  7. Mở hộp thoại Settings + (File > Settings trên Windows/Linux, hoặc + Android Studio > Preferences trên Mac). Trong khung + bên trái, chọnAppearance & Behavior > System Settings > + Updates. +
  8. +
  9. Trên khung Updates, chọn hộp kiểm Automatically + check updates for và chọn + Canary Channel từ danh sách thả xuống. +
  10. +
+ +

Hãy để cửa sổ cài đặt này mở cho bước tiếp theo.

+ + +

Tải N Preview SDK

+ +

Để bắt đầu phát triển với các API Android N, bạn cần cài đặt + Android N Preview SDK trong Android Studio như sau:

+ +
    +
  1. Vẫn tại khung Updates (bước 4 bên trên), + hãy chọn hộp kiểm Automatically + check updates for Android SDK và chọn + Preview Channel từ danh sách thả xuống. +
  2. +
  3. Nhấp vào Check Now.
  4. + +
  5. Trong khung bên trái, chọn Appearance & Behavior > + System Settings > Android SDK. + +
  6. Nhấp vào tab SDK Platforms, rồi chọn hộp kiểm + Android N Preview.
  7. + +
  8. Nhấp vào tab SDK Tools, rồi chọn + Android SDK Build Tools, Android SDK + Platform-Tools, và các hộp kiểm Android SDK Tools +. +
  9. + +
  10. Nhấp vào OK, sau đó đồng ý với các thỏa thuận + cấp phép cho các gói cần được cài đặt. +
  11. +
+ +

Tải tài liệu tham khảo cho N Preview

+ +

+ Thông tin chi tiết về các API Android N có trong tài liệu tham khảo của + Bản xem trước N mà bạn có thể tải xuống từ bảng sau. + Gói này có một bản ngoại tuyến được rút gọn của trang web + cho nhà phát triển Android và có một bản tham khảo API được cập nhật cho API Android N, một + báo cáo về sự khác biệt API. +

+ + + + + + + + + + +
Tài liệuTổng kiểm
+ n-preview-1-docs.zip + MD5: 4ab33ccbe698f46f125cc5b807cf9c2f
+ SHA-1: 6a3880b3ccd19614daae5a4d0698ea6ae11c20a5 +
+ + + +

Tải JDK và JRE của Java 8

+ +

Để biên dịch ứng dụng của bạn cho nền tảng Android N, bạn cần sử dụng +Bộ công cụ phát triển Java 8 (JDK 8) và để sử dụng một số công cụ với Android +Studio 2.1 thì bạn cần cài đặt Java 8 Runtime Environment (JRE). Vì vậy, nếu +bạn không có phiên bản mới nhất của mỗi bộ thì hãy tải xuống JDK 8 và JRE 8 +ngay.

+ +

Sau đó đặt phiên bản JDK trong Android Studio như sau:

+ +
    +
  1. Mở một dự án Android trong Android Studio, sau đó mở + hộp thoại Project Structure bằng cách chọn File > + Project Structure. (Bằng cách khác, bạn có thể đặt mặc định + cho mọi dự án bằng cách chọn File > Other Settings > + Default Project Structure.) +
  2. +
  3. Trong khung bên trái của hộp thoại, hãy nhấp SDK Location. +
  4. +
  5. Trong ô JDK Location, hãy nhập vị trí của + Java 8 JDK (nhấp vào nút bên phải + để duyệt tìm tệp của bạn), sau đó nhấp OK. +
  6. +
+ + + + +

Cập nhật hoặc Tạo một dự án

+ +

+ Dự án của bạn phải được cấu hình phù hợp để sử dụng các API Android N. +

+ +

Nếu bạn dự định sử dụng các tính năng của ngôn ngữ Java 8 thì bạn cũng nên đọc mục +Các tính năng của Ngôn ngữ Java 8 +để biết thêm thông tin về các tính năng của Java 8 được hỗ trợ và +cách cấu hình dự án với trình biên dịch Jack.

+ + +

Cập nhật một dự án có sẵn

+ +

Mở tệp + build.gradle cho mô-đun của bạn và cập nhật các giá trị như + sau: +

+ +
+android {
+  compileSdkVersion 'android-N'
+  buildToolsVersion '24.0.0-rc1'
+  ...
+
+  defaultConfig {
+     minSdkVersion 'N'
+     targetSdkVersion 'N'
+     ...
+  }
+  ...
+}
+ + +

Tạo một dự án mới

+ + +

Để tạo một dự án mới để phát triển với Android N Preview SDK:

+ +
    +
  1. Nhấp vào File > New Project. và thực hiện theo các bước đến khi + bạn đến trang Target Android Devices. +
  2. +
  3. Trong trang này, hãy chọn tùy chọn Phone and Tablet.
  4. +
  5. Dưới tùy chọn Phone and Tablet, trong danh sách tùy chọn Minimum + SDK hãy chọn + N: Android API 23, N Preview (Preview).
  6. +
+ + +

Các bước tiếp theo

+ + + diff --git a/docs/html-intl/intl/zh-cn/preview/api-overview.jd b/docs/html-intl/intl/zh-cn/preview/api-overview.jd new file mode 100644 index 000000000000..d63412545de0 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/api-overview.jd @@ -0,0 +1,676 @@ +page.title=Android N for Developers +meta.tags="预览版", "androidn" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-apis_2x.png +@jd:body + + + + + + + + +

Android N 仍处于活动的开发状态,但现在您可以将其作为 N Developer Preview 的一部分进行试用。以下部分重点介绍面向开发者的部分新功能。 + +

+ +

+ 请务必查阅行为变更以了解平台变更可能影响您的应用的领域,看看开发者指南,了解有关关键功能的更多信息,并下载 API 参考以获取新 API 的详细信息。 + + + +

+ +

多窗口支持

+ + +

在 Android N 中,我们为该平台引入了一个新的而且非常需要的多任务处理功能 — 多窗口支持。 +

+ +

现在,用户可以一次在屏幕上打开两个应用。

+
    +
  • 在运行 Android N 的手机和平板电脑上,用户可以并排运行两个应用,或者处于分屏模式时一个应用位于另一个应用之上。用户可以通过拖动两个应用之间的分隔线来调整应用。 + + +
  • + +
  • 在 Android TV 设备上,应用可以将自身置于画中画模式,从而让它们可以在用户浏览或与其他应用交互时继续显示内容。如需了解详细信息,请参阅下文。 + +
  • +
+ +
+ +

+ 图 1. 在分屏模式下运行的应用。 +

+
+ +

多窗口支持为您提供新的吸引用户方式,特别是在平板电脑和其他更大屏幕的设备上。您甚至可以在您的应用中启用拖放,从而使用户可以方便地将内容拖放到您的应用或从其中拖出内容—这是一个非常好的增强用户体验的方式。 + + +

+ +

向您的应用添加多窗口支持并配置多窗口显示的处理方式非常简单。例如,您可以指定您的 Activity 允许的最小尺寸,从而防止用户将 Activity 调整到该尺寸以下。您还可以为应用禁用多窗口显示,这可确保系统将仅以全屏模式显示应用。 + + + +

+ +

+ 如需了解详细信息,请参阅多窗口支持开发者文档。 + +

+ +

通知增强功能

+ +

在 Android N 中,我们重新设计了通知,使其更易于使用并且速度更快。部分变更包括: +

+ +
    +
  • + 模板更新:我们正在更新通知模板,新强调了英雄形象和化身。开发者将能够充分利用新模板,只需进行少量的代码调整。 + + +
  • + +
  • + 绑定的通知:系统可以将消息组合在一起(例如,按消息主题)并显示组。用户可以适当地进行 Dismiss 或 Archive 等操作。如果您已实现 Android Wear 的通知,那么您已经很熟悉此模型。 + + + + +
  • + +
  • + 直接回复:对于实时通信应用,Android 系统支持内联回复,以便用户可以直接在通知界面中快速回复短信。 + + +
  • + +
  • + 自定义视图:两个新的 API 让您在通知中使用自定义视图时可以充分利用系统装饰元素,如通知标题和操作。 + + +
  • +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +

+ 图 2. 绑定的通知和直接回复。 +

+ +

如需了解如何实现新功能的信息,请参阅通知指南。 + +

+ + + +

配置文件指导的 JIT/AOT 编译

+ +

在 Android N 中,我们添加了 Just in Time (JIT) 编译器,对 ART 进行代码分析,让它可以在应用运行时持续提升 Android 应用的性能。JIT 编译器对 Android 运行组件当前的 Ahead of Time (AOT) 编译器进行了补充,有助于提升运行时性能,节省存储空间,加快应用更新和系统更新速度。 + + + +

+ +

配置文件指导的编译让 Android 运行组件能够根据应用的实际使用以及设备上的情况管理每个应用的 AOT/JIT 编译。例如,Android 运行组件维护每个应用的热方法的配置文件,并且可以预编译和缓存这些方法以实现最佳性能。对于应用的其他部分,在实际使用之前不会进行编译。 + + + +

+ +

除提升应用的关键部分的性能外,配置文件指导的编译还有助于减少整个 RAM 占用,包括关联的二进制文件。此功能对于低内存设备非常尤其重要。 + +

+ +

Android 运行组件在管理配置文件指导的编译时,可最大程度降低对设备电池的影响。仅当设备处于空闲状态和充电时才进行编译,从而可以通过提前执行该工作节约时间和省电。 + +

+ +

快速的应用安装路径

+ +

Android 运行组件的 JIT 编译器最实际的好处之一是应用安装和系统更新的速度。即使在 Android 6.0 中需要几分钟进行优化和安装的大型应用,现在只需几秒钟就可以完成安装。系统更新也变得更快,因为省去了优化步骤。 + + +

+ +

外出瞌睡模式...

+ +

Android 6.0 推出了瞌睡模式,即设备处于空闲状态时,通过推迟应用的 CPU 和网络活动以实现省电目的的系统模式,例如,设备放在桌上或抽屉里时。 + +

+ +

现在,在 Android N 中,瞌睡模式又前进了一步,在外出时也可以省电。只要屏幕关闭了一段时间,且设备未插入电源,瞌睡模式就会对应用使用熟悉的 CPU 和网络限制。这意味着用户即使将设备放入口袋里也可以省电。 + + + +

+ + + +

+ 图 3. 瞌睡模式现在应用限制以延长电池寿命,即使设备未处于静止状态。 + +

+ + +

屏幕关闭片刻后,设备在使用电池时,瞌睡模式将限制网络访问,同时延迟作业和同步。在短暂的维护时间范围后,其允许应用访问网络,并执行延迟的作业/同步。打开屏幕或将设备插入电源会使设备退出瞌睡模式。 + + + +

+ +

当设备再次处于静止状态时,屏幕关闭且使用电池一段时间,瞌睡模式针对 {@link +android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} 警报和 GPS/Wi-Fi 扫描应用完整 CPU 和网络限制。 + +

+ +

无论设备是否处于运动状态,将应用调整到瞌睡模式的最佳做法均相同,因此,如果您已更新应用以妥善处理瞌睡模式,则一切就绪。如果不是,请立即开始将应用调整到瞌睡模式。 + + +

+ +

Project Svelte:后台优化

+ +

Project Svelte 在持续改善,以最大程度减少生态系统中一系列 Android 设备中系统和应用使用的 RAM。在 Android N 中,Project Svelte 注重优化在后台中运行应用的方式。 + +

+ +

后台处理是大多数应用的一个重要部分。处理得当,可让您实现非常棒的用户体验 — 即时、快速和情境感知。如果处理不得当,后台处理会毫无必要地消耗 RAM(和电池),同时影响其他应用的系统性能。 + + +

+ +

自 Android 5.0 发布以来,{@link android.app.job.JobScheduler} 已成为执行后台工作的首选方式,其工作方式有利于用户。应用可以在安排作业的同时允许系统基于内存、电源和连接情况进行优化。JobScheduler 可实现控制和简洁性,我们想要所有应用都使用它。 + + + +

+ +

+ 另一个非常好的选择是 + GCMNetworkManager(Google Play 服务的一部分),其在旧版 Android 中提供类似的作业安排和兼容性。 + + +

+ +

我们在继续扩展 JobScheduler 和 +GCMNetworkManager,以符合多个用例 — 例如,在 Android N 中,现在,您可以基于内容提供程序中的更改安排后台工作。同时,我们开始弃用一些较旧的模式,这些模式会降低系统性能,特别是低内存设备的系统性能。 + + + +

+ +

在 Android N 中,我们删除了三个常用隐式广播 — + {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}、{@link + android.hardware.Camera#ACTION_NEW_PICTURE} 和 {@link + android.hardware.Camera#ACTION_NEW_VIDEO} — 因为这些广播可能会一次唤醒多个应用的后台进程,同时会耗尽内存和电池。如果您的应用收到这些广播,请充分利用 N Developer Preview 以迁移到 JobScheduler 和相关的 API。 + + +

+ +

+ 如需了解详情,请查看后台优化文档。 + +

+ + +

Data Saver

+ +
+ + +

+ 图 4. 设置中的 Data Saver +

+
+ +

在移动设备的整个生命周期,蜂窝数据计划的成本通常会超出设备本身的成本。对于许多用户而言,蜂窝数据是他们想要节省的昂贵资源。 + +

+ +

Android N 推出了 Data Saver 模式,这是一项新的系统服务,有助于减少应用使用的蜂窝数据,无论是在漫游,账单周期即将结束,还是使用少量的预付费数据包。Data Saver 让用户可以控制应用使用蜂窝数据的方式,同时让开发者打开 Data Saver 时可以提供更多有效的服务。 + + + +

+ +

用户在 Settings 中启用 Data Saver 且设备位于按流量计费的网络上时,系统屏蔽后台数据使用,同时指示应用在前台尽可能使用较少的数据 — 例如,通过限制用于流媒体服务的比特率、降低图片质量、延迟最佳的预缓冲等方法来实现。用户可以将特定应用加入白名单以允许后台按流量的数据使用,即使在打开 Data Saver 时也是如此。 + + + + +

+ +

Android N 扩展了 {@link android.net.ConnectivityManager},以便为应用检索用户的 Data Saver 首选项监控首选项变更提供一种方式。所有应用均应检查用户是否已启用 Data Saver 并努力限制前台和后台数据的使用。 + + + +

+ + +

快速设置图块 API

+ + +
+ + +

+ 图 5. 通知栏中的快速设置图块。 +

+ + +

“快速设置”通常用于直接从通知栏显示关键设置和操作,非常简单。在 Android N 中,我们已扩展“快速设置”的范围,使其更加有用更方便。 + +

+ +

我们为额外的“快速设置”图块添加了更多空间,用户可以通过向左或向右滑动跨分页的显示区域访问它们。我们还让用户可以控制显示哪些“快速设置”图块以及显示的位置 — 用户可以通过拖放图块来添加或移动图块。 + + +

+ +

对于开发者,Android N 还添加了一个新的 API,从而让您可以定义自己的“快速设置”图块,使用户可以轻松访问您应用中的关键控件和操作。 +

+ +

+ 对于急需或频繁使用的控件和操作,保留“快速设置”图块,且不应将其用作启动应用的快捷方式。 + + +

+ +

+ 定义图块后,您可以将它们显示给用户,用户可通过拖放将图块添加到“快速设置”。 + +

+ +

+ 如需创建应用图块的更多信息,请参阅可下载的 API 参考中的 android.service.quicksettings.Tile。 + +

+ + + +

号码屏蔽

+ +

Android N 现在支持在平台中进行号码屏蔽,提供框架 API,让服务提供商可以维护屏蔽的号码列表。默认短信应用、默认手机应用和提供商应用可以对屏蔽的号码列表进行读取和写入操作。其他应用则无法访问此列表。 + + +

+ +

通过使号码屏蔽成为平台的标准功能,Android 为应用提供一致的方式来支持广泛的设备上的号码屏蔽。应用可以利用的其他优势包括: + +

+ +
    +
  • 还会屏蔽已屏蔽的来电号码发出的短信 +
  • 通过 Backup & Restore(备份和还原)功能可以跨重置和设备保留屏蔽的号码 + +
  • 多个应用可以使用相同的屏蔽号码列表 +
+ +

此外,通过 Android 的运营商应用集成表示运营商可以读取设备上屏蔽的号码列表,并为用户执行服务端屏蔽,以阻止不需要的来电和短信通过任何介质(如 VOIP 端点或转接电话)到达用户。 + + +

+ +

+ 如需了解详细信息,请参阅可下载的 API 参考中的 android.provider.BlockedNumberContract。 + + +

+ +

来电过滤

+ +

+ Android N 允许默认的手机应用过滤来电。手机应用执行此操作的方式是实现新的 CallScreeningService,该方法允许手机应用基于来电的 {@link android.telecom.Call.Details Call.Details} 执行大量操作,例如: + + + +

+ +
    +
  • 拒绝来电 +
  • 不允许来电到达呼叫日志 +
  • 不向用户显示来电通知 +
+ +

+ 如需了解详细信息,请参阅可下载的 API 参考中的 android.telecom.CallScreeningService。 + + +

+ + +

多区域设置支持、多语言

+ + +

Android N 现在允许用户在设置中选择多个区域设置,以更好地支持双语用例。应用可以使用新的 API 获取用户选择的区域设置,然后为多区域设置用户提供更成熟的用户体验 — 如以多个语言显示搜索结果,并且不会以用户了解的语言翻译网页。 + + + + +

+ +

除多区域设置支持外,Android N 还扩展了用户可用的语言范围。它针对常用语言提供超过 25 种的变体,如英语、西班牙语、法语和阿拉伯语。它还针对 100 多种新语言添加了部分支持。 + + +

+ +

应用可以通过调用 LocaleList.GetDefault() 获取用户设置的区域设置列表。为支持扩展的区域设置数量,Android N 正在改变其解析资源的方式。请务必使用新的资源解析逻辑测试和验证您的应用是否能如期运行。 + +

+ +

如需有关新资源解析行为和应遵循的最佳做法的更多信息,请参阅多语言支持。 +

+ +

Android 中的 ICU4J API

+ +

+ Android N 目前在 Android 框架(位于 android.icu 软件包下)中提供 ICU4J API 的子集。迁移很简单,主要是需要从 com.java.icu 命名空间更改为 android.icu。如果您已在您的应用中使用 ICU4J 捆绑包,切换到 Android 框架中提供的 android.icu API 可以大量节省 APK 大小。 + + + + + +

+ +

+ 如果要了解有关 Android ICU4J API 的更多信息,请参阅 ICU4J 支持。 +

+ + + +

OpenGL™ ES 3.2 API

+ +

Android N 添加了框架接口和对 OpenGL ES 3.2 的平台支持,包括:

+ +
    +
  • 来自 Android 扩展包 (AEP) 的所有扩展(EXT_texture_sRGB_decode 除外)。 +
  • 针对 HDR 的浮点帧缓冲和延迟着色。 +
  • BaseVertex 绘图调用可实现更好的批处理和流媒体服务。 +
  • 强大的缓冲区访问控制可减少 WebGL 开销。 +
+ +

Android N 上适用于 OpenGL ES 3.2 的框架 API 与 GLES32 类一起提供。使用 OpenGL ES 3.2 时,请务必通过 <uses-feature> 标记和 android:glEsVersion 属性在您的清单文件中声明要求。 + + +

+ +

如需了解有关使用 OpenGL ES 的信息,包括如何在运行时检查设备支持的 OpenGL ES 版本,请参阅 OpenGL ES API 指南。 +

+ + +

Android TV 录制

+ +

Android N 通过新的录制 API 添加了从 Android TV 输入服务录制和播放内容的功能。构建在现有时移 API 之上,TV 输入服务可以控制能够录制的渠道数据、保存录制的会话的方式,同时可通过录制的内容管理用户交互。 + + +

+ +

如需了解详细信息,请参阅 Android TV 录制 API

+ + +

Android for Work

+ +

Android for Work 针对运行 Android N 的设备添加了许多新功能和 API。部分重要内容如下— 有关与 Android N 相关的 Android for Work 更新的完整列表,请参阅 Android for Work 变更。 + +

+ +

托管配置文件安全性挑战

+ +

+ 配置文件所有者可以指定为托管配置文件中运行的应用指定单独的安全性挑战。当用户尝试打开任何工作应用时将显示工作挑战。成功完成安全性挑战可解锁托管配置文件并将其解密(如果需要)。对于配置文件所有者,ACTION_SET_NEW_PASSWORD 提示用户设置工作挑战,ACTION_SET_NEW_PARENT_PROFILE_PASSWORD 提示用户设置设备锁。 + + + + + + +

+ +

+ 配置文件所有者可以使用 setPasswordQuality()setPasswordMinimumLength() 和相关方法针对工作挑战设置不同的密码策略(例如,PIN 必须多长,或是否可以使用指纹解锁配置文件)。配置文件所有者还可以使用新的 getParentProfileInstance() 方法返回的 DevicePolicyManager 实例设置设备锁定。此外,配置文件所有者可以使用新的 setOrganizationColor()setOrganizationName() 方法针对工作挑战自定义凭据屏幕。 + + + + + + + + +

+

关闭工作

+ +

在具有托管配置文件的设备上,用户可以切换工作模式。工作模式关闭时,管理的用户临时关闭,其禁用托管配置文件应用、后台同步和通知。这包括配置文件所有者应用。关闭工作模式时,系统显示永久状态图标,以提醒用户他们无法启动工作应用。启动器指示该工作应用和小组件无法访问。 + + + + +

+ +

Always on VPN

+ +

设备所有者和配置文件所有者可以确保工作应用始终通过指定的 VPN 连接。系统在设备启动后自动启动该 VPN。 + +

+ +

+ 新的 DevicePolicyManager 方法为 setAlwaysOnVpnPackage()getAlwaysOnVpnPackage()。 + + +

+ +

由于 VPN 服务无需应用交互即可由系统直接绑定,因此,VPN 客户端必须针对 Always on VPN 处理新的入口点。和以前一样,由与操作匹配的 Intent 过滤器将服务指示给系统。android.net.VpnService。 + + +

+ +

+ 用户还可以使用 Settings>More>Vpn 在主要用户中手动设置实现 VPNService 方法的 Always on VPN 客户端。 + + +

+ +

辅助工具增强功能

+ +

Android N 现在针对新的设备设置直接在欢迎屏幕上提供“Vision Settings”。这使用户可以更容易发现和配置他们设备上的辅助工具功能,包括放大手势、字体大小、显示屏尺寸和 TalkBack。 + + +

+ +

随着这些辅助工具功能更为突出,在启用这些功能后,您的用户更可能试用您的应用。请务必提前启用这些设置测试您的应用。您可以通过 Settings > Accessibility 启用它们。 + + +

+ +

还是在 Android N 中,辅助工具服务现在可以帮助具有动作障碍的用户触摸屏幕。全新的 API 允许使用人脸追踪、眼球追踪、点扫描等功能构建服务,以满足这些用户的需求。 + + +

+ +

如需了解详细信息,请参阅可下载的 API 参考 中的 android.accessibilityservice.GestureDescription +

+ + +

直接启动

+ +

直接启动可以缩短设备启动时间,让注册的应用具有有限的功能,即使在意外重启后。例如,如果当用户睡觉时加密的设备重启,那么注册的警报、消息和来电现在可以和往常一样继续通知用户。这也意味着重启后辅助工具服务会立即可用。 + + + + +

+ +

在 Android N 中,直接启动充分利用基于文件的加密,以针对系统和应用数据启用细化的加密策略。为系统和应用数据。系统针对选定的系统数据和显式注册的应用数据使用设备加密的存储。默认情况下,凭据加密的存储可用于所有其他系统数据、用户数据、应用及应用数据。 + + + +

+ +

启动时,系统在受限的模式中启动,仅访问设备加密的数据,不会对应用或数据进行常规访问。如果您有想要在此模式下运行的组件,您可以通过在清单文件中设置标记注册它们。重启后,系统通过广播 LOCKED_BOOT_COMPLETED Intent 激活注册的组件。系统确保注册的设备加密的应用数据在解锁前可用。所有其他数据在用户确认锁定屏幕凭据进行解密前均不可用。 + + + + + + +

+ +如需了解详细信息,请参阅直接启动

+

+ + +

密钥认证

+ +

使用硬件支持的密钥库,可更安全地在 Android 设备上创建、存储和使用加密密钥。它们可保护密钥免受 Linux 内核、潜在的 Android 漏洞的攻击,也可防止从已取得 root 权限的设备提取密钥。 + + +

+ +

为了让硬件支持的密钥库使用起来更简单和更安全,Android N 引入了密钥认证。应用和关闭的设备可使用密钥认证以坚决地确定 RSA 或 EC 密钥对是否受硬件支持、密钥对的属性如何,以及其使用和有效性有何限制。 + + + +

+ +

应用和关闭的设备服务可以通过 X.509 认证证书(必须由有效的认证密钥签署)请求有关密钥对的信息。认证密钥是一个 ECDSA 签署密钥,其在出厂时被注入设备的硬件支持的密钥库。因此,有效的认证密钥签署的认证证书可确认硬件支持的密钥库是否存在,以及该密钥库中密钥对的详细信息。 + + + + + +

+ +

为确保设备使用安全的官方 Android 出厂映像,密钥认证要求设备 bootloader可信执行环境 (TEE) 提供以下信息: + + +

+ +
    +
  • 设备上安装的操作系统版本和补丁级别
  • +
  • 验证的启动公钥和锁定状态。
  • +
+ +

如需了解有关硬件支持的密钥库功能的详细信息,请参阅硬件支持的密钥库指南。 +

+ +

除密钥认证外,Android N 还推出了指纹绑定密钥,在指纹注册时不会撤销。 +

+ +

网络安全性配置

+ +

在 Android N 中,通过使用说明性网络安全性配置(而不是使用传统的易出错的编程 API(例如,X509TrustManager)),应用可以安全地自定义其安全(HTTPS、TLS)连接的行为,无需任何代码修改。 + + +

+ +

支持的功能:

+
    +
  • 自定义信任锚。让应用可以针对其安全连接自定义哪些证书颁发机构 (CA) 受信任。例如,信任特定的自签署证书或受限的公共 CA 集。 + + +
  • +
  • 仅调试重写。让应用开发者可以安全调试其应用的安全连接,而不会增加安装基础的风险。 + + +
  • +
  • 明文流量退出。让应用可以防止自身意外使用明文流量。 +
  • +
  • 固定证书。这是一项高级功能,让应用可以针对安全连接限制哪些服务器密钥受信任。 +
  • +
+ +

如需了解详细信息,请参阅网络安全性配置。 +

+ +

默认受信任的证书颁发机构

+ +

默认情况下,针对 Android N 的应用仅信任系统提供的证书,且不再信任用户添加的证书颁发机构 (CA)。如果针对 Android N 的应用希望信任用户添加的 CA,则应使用网络安全性配置以指定信任用户 CA 的方式。 + + + +

+ +

APK signature scheme v2

+ +

PackageManager 类现在支持使用 APK signature scheme v2 验证应用。APK signature scheme v2 是一个整个文件签名架构,通过检测对 APK 文件进行的任何未经授权更改,可大幅提高验证速度,同时也可加强完整性保证。 + + +

+ +

为保持向后兼容,在使用 v2 签名架构签署之前,APK 必须先使用 v1 签名架构(JAR 签名架构)签署。对于 v2 签名架构,如果在使用 v2 架构签署后使用额外的证书签署 APK,验证将失败。 + + +

+ +

APK signature scheme v2 支持稍后将在 N Developer Preview中推出。 +

+ +

作用域目录访问

+ +

在 Android N 中,应用可以使用新的 API 请求访问特定的外部存储目录,包括可移动媒体上的目录,如 SD 卡。新 API 大大简化了应用访问标准外部存储目录的方式,如 Pictures 目录。应用(如照片应用)可以使用这些 API(而不是使用 READ_EXTERNAL_STORAGE),其授予所有存储目录的访问权限或存储访问框架,从而让用户可以导航到目录。 + + + + + + +

+ +

此外,新的 API 简化了用户向应用授予外部存储访问权限的步骤。当您使用新的 API 时,系统使用一个简单的权限 UI,其清楚地详细介绍应用正在请求访问的目录。 + + +

+ +

如需了解详细信息,请参阅作用域目录访问开发者文档。 + +

+ + + + + + diff --git a/docs/html-intl/intl/zh-cn/preview/behavior-changes.jd b/docs/html-intl/intl/zh-cn/preview/behavior-changes.jd new file mode 100644 index 000000000000..3c4b2e1e7338 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/behavior-changes.jd @@ -0,0 +1,480 @@ +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)引入了打盹模式,当用户设备未插接电源、处于静止状态且屏幕关闭时,该模式会推迟 CPU 和网络活动,从而延长电池寿命。而 Android N 则通过在设备未插接电源且屏幕关闭状态下、但不一定要处于静止状态(例如用户外出时把手持式设备装在口袋里)时应用部分 CPU 和网络限制,进一步增强了打盹模式。 + + + + + +

+ + + +

+ 图 1. 打盹模式如何应用第一级系统活动限制以延长电池寿命的图示。 + +

+ +

+ 当设备处于充电状态且屏幕已关闭一定时间后,设备会进入打盹模式并应用第一部分限制:关闭应用网络访问、推迟作业和同步。如果进入打盹模式后设备处于静止状态达到一定时间,系统则会对 {@link android.os.PowerManager.WakeLock}、{@link android.app.AlarmManager} 闹铃、GPS 和 Wi-Fi 扫描应用余下的打盹限制。无论是应用部分还是全部打盹限制,系统都会唤醒设备以提供简短的维护时间窗口,在此窗口期间,应用程序可以访问网络并执行任何被推迟的作业/同步。 + + + + + + + + +

+ + + +

+ 图 2. 打盹模式如何在设备处于静止状态达到一定时间后应用第二级系统活动限制的图示。 + +

+ +

+ 请注意,激活屏幕或插接设备电源时,系统将退出打盹模式并取消这些处理限制。此项新增的行为不会影响有关使您的应用适应 Android 6.0(API 级别 23)中所推出的旧版本打盹模式的建议和最佳实践,如打盹和应用待机优化中所讨论。您仍应遵循这些建议(例如使用 Google Cloud Messaging (GCM) 发送和接收消息)并开始安排更新计划以适应新增的打盹行为。 + + + + + + + + +

+ + +

Project Svelte:后台优化

+ +

+ 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 N 开发的应用不会收到 {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} 广播,即使它们已有清单条目来请求接受这些事件的通知。在前台运行的应用如果使用 {@link + android.content.BroadcastReceiver} 请求接收通知,则仍可以在主线程中侦听 {@code CONNECTIVITY_CHANGE}。 + + + +
  • + +
  • 应用无法发送或接收 {@link + android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link + android.hardware.Camera#ACTION_NEW_VIDEO} 广播。此项优化会影响所有应用,而不仅仅是面向 Android N 的应用。 + +
  • +
+ +

+ 未来的 Android 版本还可能会弃用其他隐式广播以及未绑定的后台服务。有鉴于此,您应避免依赖在清单文件中声明的接收器来侦听隐式广播或删除此依赖关系,以及避免或删除对后台服务的依赖关系。 + + + +

+ +

+ Android 框架提供多种解决方案来降低这些隐式广播或后台服务的必要性。例如,{@link + android.app.job.JobScheduler} API 提供了一个稳健可靠的机制来安排满足指定条件(例如连入不按流量计费的网络)时所执行的网络操作。您甚至可以使用 {@link + android.app.job.JobScheduler} 来响应内容提供程序所发生的变更。 + + + +

+ +

+ 如需了解有关此行为变更及如何改写应用的详细信息,请参阅后台优化。 + + +

+ + +

权限更改

+ +

+ Android N 做了一些权限更改,包括用户帐户权限和向外部存储设备写入信息的新权限,这些更改可能会影响您的应用。下面概要列出了预览版中已发生更改的权限。 + + + +

+ +
    +
  • {@code GET_ACCOUNTS}(已弃用) +

    + GET_ACCOUNTS 权限现已弃用。对于面向 Android N 的应用,系统将忽略此权限。 + +

    +
  • + +
+ + + +

辅助工具改进

+ +

+ 为提高平台对于视力不佳或视力受损用户的可用性,Android N 做出了一些更改。这些更改一般并不要求更改您的应用代码,不过您应仔细检查并使用您的应用测试这些功能,以评估它们对用户体验的潜在影响。 + + + + +

+ + +

屏幕缩放

+ +

+ Android N 支持用户设置显示尺寸,以放大或缩小屏幕上的所有元素,从而提升设备对视力不佳用户的可访问性。用户无法将屏幕缩放至低于最小屏幕宽度 + sw320dp,该宽度是 Nexus 4 的宽度,也是常规中等大小手机的宽度。 + + + +

+ +
+ +
+ +
+
+ +
+ +
+

+ 图 3. 右侧屏幕显示的是一台运行 Android N 系统映像的设备增大显示尺寸后的效果。 + +

+ + +

+ 当设备密度发生更改时,系统会以如下方式通知正在运行的应用: + +

+ +
    +
  • 如果是面向 API 级别 23 或更低版本系统的应用,则系统会自动终止其所有后台进程。这意味着如果用户切换离开此类应用,转而打开 Settings 屏幕并更改 Display size 设置,则系统会像处理内存不足的情况一样终止该应用。如果应用具有任何前台进程,则系统会如处理运行时变更中所述将配置变更通知给这些进程,就像对待设备屏幕方向变更一样。 + + + + + + + +
  • + +
  • 如果是面向 Android N 的应用,则其所有进程(前台和后台)都会收到有关配置变更的通知,如处理运行时变更中所述。 + + + +
  • +
+ +

+ 大多数应用并不需要进行任何更改即可支持此功能,不过前提是这些应用遵循 Android 最佳实践。具体要检查的事项: + +

+ +
    +
  • 在屏幕宽度为 sw320dp 的设备上测试您的应用,并确保其充分运行。 + +
  • + +
  • 当设备配置发生变更时,更新任何与密度相关的缓存信息,例如缓存位图或从网络加载的资源。当应用从暂停状态恢复运行时,检查配置变更。 + + + +

    + 注:如果您要缓存与配置相关的数据,则最好也包括相关元数据,例如该数据对应的屏幕尺寸或像素密度。保存这些元数据便于您在配置变更后决定是否需要刷新缓存数据。 + + + + +

    +
  • + +
  • 避免用像素单位指定尺寸,因为像素不会随屏幕密度缩放。应改为使用与密度无关像素 (dp) 单位指定尺寸。 + + +
  • +
+ +

设置向导中的视觉设置

+ +

+ Android N 在“Welcome”屏幕中加入了“Vision Settings”,用户可以在新设备上设置以下辅助工具设置:Magnification gestureFont sizeDisplay sizeTalkBack。此项变更增强了与不同屏幕设置相关的错误的可见性。要评估此功能的影响,您应在启用这些设置的状态下测试应用。您可以在 Settings > + Accessibility 中找到这些设置。 + + + + + + +

+ +

NDK 应用链接至平台库

+ +

+ Android N 做了一些命名空间更改,以阻止加载非公开 API。如果您使用 NDK,则只能使用 Android 平台提供的公开 API。在下一个官方发布的 Android 版本上使用非公开 API 会导致应用崩溃。 + + + +

+ +

+ 为提醒您使用了非公开 API,在 Android N + 设备上运行的应用会在有应用调用非公开 API 时在日志消息输出中生成一个错误。此错误还会作为消息显示在设备屏幕上,以帮助增强您对此情况的认识。您应检查应用代码以删除使用非公开平台 API,并使用预览版设备或模拟器全面测试应用。 + + + + +

+ +

+ 如果您的应用依赖平台库,则请参见 NDK 文档,了解使用公开 API 等效项替换普通私有 API 的典型修复。您还可以链接至平台库,而无需实现此应用,如果应用使用的库是平台的一部分(例如 libpng),但不属于 NDK,则更可如此。此情况下,请确保您的 APK 包含您打算链接到的所有 .so 文件。 + + + + + +

+ +

+ 注意:有些第三方库可能会链接至非公开 API。如果您的应用使用这些库,那么当您的应用在下一个官方发布的 Android 版本上运行时可能会出现崩溃现象。 + + +

+ +

+ 应用不应依赖或使用不属于 NDK 的原生库,因为这些库可能会发生更改或从一个 Android 版本迁移至另一版本。例如,从 OpenSSL 切换至 BoringSSL 即属于此类更改。此外,不同的设备可能提供不同级别的兼容性,因为不属于 NDK 中的平台库没有兼容性要求。如果您必须在较旧设备上访问非 NDK 库,则请依据 Android API 级别进行加载。 + + + + + + +

+ +

+ 为帮助您诊断此类问题,下面列举了一些在您试图使用 Android N 开发应用时可能遇到的 Java 和 NDK 错误: + +

+ +

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 ...
+
+ + +

+ 以下是遇到这类错误的应用的一些典型修复: +

+ +
    +
  • 可以使用标准 JNI 函数来替代使用 libandroid_runtime.so 中的 getJavaVM 和 getJNIEnv: + +
    +AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
    +AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
    +JavaVM::AttachCurrentThread from <jni.h>.
    +
    +
  • + +
  • 可以使用公开备选项 {@code __system_property_get} 来替代使用 {@code libcutils.so} 中的 {@code property_get} 符号。如需这样做,请使用 {@code __system_property_get} 及以下 include 函数: + + +
    +#include <sys/system_properties.h>
    +
    +
  • + +
  • 应使用应用本地版本来替代使用 {@code libcrypto.so} 中的 {@code SSL_ctrl} 符号。例如,您应在 {@code .so} 文件中静态链接 {@code libcyrpto.a},或者在应用中包含您自己的来自 BoringSSL 或 OpenSSL 的动态 {@code libcrypto.so}。 + + + +
  • +
+ +

Android for Work

+

+ Android N 包含一些针对面向 Android for Work 的应用的变更,包括对证书安装、密码重置、二级用户管理、设备标识符访问权限的变更。如果您是要针对 Android for Work 环境开发应用,则应仔细检查这些变更并相应地修改您的应用。 + + + + +

+ +
    +
  • 您必须先安装授权证书安装程序,然后 DPC 才能对其进行设置。对于面向 N SDK 的配置文件和设备所有者应用,您应在设备策略控制器 (DPC) 调用 DevicePolicyManager.setCertInstallerPackage() 之前安装授权证书安装程序。如果尚未安装此安装程序,则系统会引发 IllegalArgumentException。 + + + + + + +
  • + +
  • 针对设备管理员的重置密码限制现在也适用于配置文件所有者。设备管理员无法再使用 + DevicePolicyManager.resetPassword() 来清除或更改已经设置的密码。不过,设备管理员仍可以设置密码,但只能在设备没有密码、PIN 或图案时这样做。 + + + +
  • + +
  • 即使设置了限制,设备所有者和配置文件所有者仍可以管理帐户。而且,即使具有 DISALLOW_MODIFY_ACCOUNTS 用户限制,设备所有者和配置文件所有者仍可调用 Account Management API。 + + +
  • + +
  • 设备所有者可以更轻松地管理二级用户。当设备在设备所有者模式下运行时,系统将自动设置 DISALLOW_ADD_USER 限制。这样可以防止用户创建非托管二级用户。此外,CreateUser() 和 + createAndInitial() 方法已弃用,取而代之的是 DevicePolicyManager.createAndManageUser() 方法。 + + + + +
  • + +
  • 设备所有者可以访问设备标识符。设备所有者可以使用 + DevicePolicyManagewr.getWifiMacAddress() 访问设备的 Wi-Fi MAC 地址。如果设备上从未启用 Wi-Fi,则此方法将返回一个 {@code null} 值。 + + +
  • +
+ +

+ 如需了解有关 Android N 中针对 Android for Work 所做变更的详细信息,请参阅 + Android for Work 更新。 +

+ +

其他重要说明

+ +
    +
  • 如果一个应用在 Android N 上运行,但却是针对更低 API 级别开发的,那么在用户更改显示尺寸时,系统将终止此应用进程。因此,应用必须能够正常处理此情景。否则,当用户从最近使用记录中恢复运行应用时,应用将会出现崩溃现象。 + + + + +

    +您应测试应用以确保不会发生此行为。要进行此测试,您可以通过 DDMS 手动终止应用,以造成相同的崩溃现象。 + + + +

    + +

    +在密度发生更改时,系统不会自动终止面向 N 及更高版本的应用;不过,这些应用仍可能对配置变更做出不良响应。 + +

    +
  • + +
  • +Android N 上的应用应能够正常处理配置变更,并且在后续启动时不会出现崩溃现象。您可以通过更改字体大小 (Setting > +Display > Font size) 并随后从最近使用记录中恢复运行应用,来验证应用行为。 + + + +
  • +
+ diff --git a/docs/html-intl/intl/zh-cn/preview/download.jd b/docs/html-intl/intl/zh-cn/preview/download.jd new file mode 100644 index 000000000000..fcee4174c538 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/download.jd @@ -0,0 +1,541 @@ +page.title=在设备上测试 +meta.tags="Preview", "nexus", "系统映像" +page.tags="preview", "androidn" +page.image=images/cards/card-n-downloads_2x.png + +@jd:body + +
+ + + + +
+ + + +

+ 要在新平台上运行和测试您的应用,您需要设置 Android N +运行组件环境。您可以通过以下任一方式完成此设置: +

+ +
    +
  • 在受支持的硬件设备上安装 Android N,或者
  • +
  • 设置运行 Android N 的 Android 模拟器
  • +
+ +

+ 如果您需要一个环境用于完成应用在新平台上的基本兼容性测试,则只需现有 APK 和一台硬件设备或模拟器。执行基本测试不一定需要更新整个部署环境。 + + + +

+ +

+ 如果您想针对 Android N 或为了使用新的 Android N API 而修改您的应用,则需要一个已更新为支持 Android N 的部署环境并对其进行设置。设置以开发 Android N 应用介绍了详细信息。 + + + +

+ + +

设置硬件设备

+ +

+ N Developer Preview 提供适用于各种硬件设备(手机、平板、电视等)的系统更新,您可以使用这些设备测试自己的应用。 + +

+ +

+ 如果您可以访问受支持的设备,则可通过以下方式之一将其更新到 Developer Preview 里程碑构建版本: + +

+ +
    +
  • 通过 +Android Beta 计划注册设备以获取自动 OTA 系统更新。注册后,您的设备即会收到 N Developer Preview 中所有里程碑构建版本的定期无线 (OTA) 更新。建议采用此方法,因为它允许您通过各种版本的 N Developer Preview 从您当前的环境实现无缝转换。 + + +
  • +
  • 下载 Developer Preview 系统映像并刷写设备。系统不会为手动刷写的设备自动提供 OTA 更新,不过您可以将这些设备注册参加 Android Beta 计划以获取 OTA 更新。 + +
  • +
+ +

注册设备以获取自动 OTA 更新

+ +

+ 如果您可以访问受支持的设备(参见“下载”表格中的列表),则可以通过将该设备注册参加 +Android Beta 计划,获取 Android Preview 的无线更新。系统将自动下载这些更新并如正式系统更新一样更新您的设备。 + + + +

+ +

+ 您可以随时取消注册设备。取消注册后,设备将收到其可用的最新生产版本的 Android 系统(例如 Android 6.0 Marshmallow)的 OTA 更新。该更新要求完全重置设备,因此设备上的用户数据将被删除。在取消注册设备之前,务必先备份重要数据。 + + + + +

+ +

+ 如需了解详细信息并注册您的设备,请参阅 +Android Beta 计划网站。 +

+ +

注:取消注册要求完全重置设备。务必先备份重要数据。 + + +

+ +

手动刷写设备

+ +

+ 您可以随时下载最新的 Developer Preview 系统映像并将其手动刷入设备。请参阅下表下载适合您的测试设备的系统映像。如果您需要精确控制测试环境,或者需要经常重新安装系统,比如为了进行自动测试而重新安装,则手动刷写设备比较有用。 + + + + +

+ +

+ 在设备上安装系统映像会删除设备中的所有数据,因此务必先备份数据。 + +

+ +

+ 备份设备数据并下载下面与设备匹配的系统映像后,请按照 developers.google.com/android +中的说明将映像刷入设备中。 + +

+ +

+ 手动刷入的系统映像不会自动接收更高 Developer Preview 里程碑构建版本的 OTA 更新。请确保您的环境处于最新状态,并在每次有新的 Developer Preview 里程碑构建版本发布时刷入新的系统映像。 + + + +

+ +

+ 如果在手动刷写设备后您确定需要获取 OTA 更新,则只需将设备注册参加 +Android Beta 计划即可。您可以随时注册设备以通过无线下载方式接收下一次的 Preview 更新。 + + +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
设备下载/校验和
Nexus 5X
"bullhead"
bullhead-npc56p-preview-6c877a3d.tgz
+ MD5: b5cf874021023b398f5b983b24913f5d
+ SHA-1: 6c877a3d9fae7ec8a1678448e325b77b7a7b143a +
Nexus 6
"shamu"
shamu-npc56p-preview-54b13c67.tgz
+ MD5: af183638cf34e0eb944a1957d7696f60
+ SHA-1: 54b13c6703d369cc79a8fd8728fe4103c6343973 +
Nexus 6P
"angler"
angler-npc56p-preview-85ffc1b1.tgz
+ MD5: bc4934ea7bd325753eee1606d3725a24
+ SHA-1: 85ffc1b1be402b1b96f9ba10929e86bba6c6c588 +
Nexus 9
"volantis"
volantis-npc56p-preview-0e8ec8ef.tgz
+ MD5: c901334c6158351e945f188167ae56f4
+ SHA-1: 0e8ec8ef98c7a8d4f58d15f90afc5176303efca4 +
Nexus 9G
"volantisg"
volantisg-npc56p-preview-1bafdbfb.tgz
+ MD5: 7bb95bebc478d7257cccb4652899d1b4
+ SHA-1: 1bafdbfb502e979a9fe4c257a379c4c7af8a3ae6 +
Nexus Player
"fugu"
fugu-npc56r-preview-7027d5b6.tgz
+ MD5: f5d3d8f75836ccfe4c70e8162e498be4
+ SHA-1: 7027d5b662bceda4c80a91a0a14ef0e5a7ba795b +
Pixel C
"ryu"
ryu-npc56p-preview-335a86a4.tgz
+ MD5: 4e21fb183bbbf467bee91598d587fd2e
+ SHA-1: 335a86a435ee51f18464de343ad2e071c38f0e92 +
General Mobile 4G (Android One)
"seed"
seed_l8150-npc56p-preview-82472ebc.tgz
+ MD5: 983e083bc7cd0c4a2d39d6ebaa20202a
+ SHA-1: 82472ebc9a6054a103f53cb400a1351913c95127 +
+ +

从设备卸载 Preview

+ +

+ 如果您想从设备卸载 Preview,可以通过以下方式之一来完成: +

+
    +
  • 获取出厂规格系统映像,然后手动将其刷入设备中。 + +
      +
    • 对于 Nexus 设备和 Pixel C 设备,请参阅适用于 Nexus 设备的出厂映像页面进行下载。 + +
    • +
    • 对于其他设备,请直接联系设备制造商,或者,如果设备是 Android Beta 计划支持的设备,则您可以将设备注册参加该计划,然后取消注册(见下文)。 + + +
    • +
    +
  • +
  • 从 Android Beta 计划取消注册设备。如果设备已注册参加 Android Beta + 计划,则只需从计划中取消注册该设备即可,与是何种设备无关。 + +

    + 取消注册后,设备将收到其可用的最新生产版本的 Android 系统(例如 Android 6.0 Marshmallow)的 OTA 更新。该更新要求完全重置设备,因此设备上的用户数据将被删除。在取消注册设备之前,务必先备份重要数据。 + + + + +

    +
  • +
+ +

注:如果要在计划结束之前卸载 Developer Preview 系统映像,则需要完全重置设备并删除设备上的所有用户数据。 + + + +

+ + +

设置模拟器

+ +

要使用 Android 模拟器运行 Android N Preview,需要下载 +Android N Preview SDK,并为模拟器创建一个虚拟设备。 +

+ +

首先,按照如下操作下载 Android N Preview SDK(如果您在设置以开发 Android N 应用过程中即已获得此 SDK,则可跳过这部分): + + + +

    +
  1. 在 Android Studio 中,打开“Settings”对话框 +(Windows/Linux:File > Settings;Mac:Android Studio > Preferences)。在左侧面板中,选择 Appearance & Behavior > + System Settings > Android SDK。 + + + +
  2. 点击 SDK Platforms 选项卡,然后选中 + Android N Preview 复选框。
  3. + +
  4. 点击 SDK Tools 选项卡,然后选中 + Android SDK Build ToolsAndroid SDK + Platform-ToolsAndroid SDK Tools 复选框。 + +
  5. + +
  6. 点击 OK 并接受要安装的任何软件包的许可协议。 + +
  7. +
+ +

现在,您应该有 Android SDK Built-Tools 24.0 0 rc1Platform-Tools 24.0.0 rc1SDK Tools +25.0.9。如果您尚未将 SDK Tools 更新至 25.0.9,则将无法运行 Android N 的 x86_64 系统映像。 + +

+ + +

现在,使用 Android N 系统映像创建虚拟设备:

+ +
    +
  1. 通过选择 Tools > Android > + AVD Manager 打开 AVD Manager。
  2. +
  3. 点击 Create Virtual Device
  4. +
  5. 选择设备,例如 Nexus 5X、Nexus 6P、Nexus 9 或 Android TV,然后点击 Next。 +
  6. +
  7. 选择 N 系统映像(带 +x86 ABI),然后点击 Next。(适用于 Android N Preview 的 Android 模拟器当前仅支持 x86 系统映像。) + + +
  8. 完成余下 AVD 配置并点击 + Finish
  9. +
+ +

现在,您可以使用 Android N Preview AVD 启动 Android 模拟器。

+ +

+要获得 Android 模拟器最佳运行体验,请安装 Android Studio 2.1 Preview,该版本支持 Android Emulator 2.0 Beta,与 +Android Studio 1.5 中的模拟器相比,其运行速度快得多。 + +

+ +

注:如果您当前使用的是 Android Studio 2.0 Beta,则有一个已知问题会阻止您使用 N Preview 系统映像创建 AVD,此时您需要使用 Android Studio 2.1 Preview 创建 AVD。 + + + +

+ +

如需了解有关创建虚拟设备的详细信息,请参阅管理虚拟设备。 +

+ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd b/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd new file mode 100644 index 000000000000..7a12ecf567eb --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd @@ -0,0 +1,388 @@ +page.title=后台优化 +page.metaDescription=隐式广播的新限制。 +page.keywords="android N", "implicit broadcasts", "job scheduler" +@jd:body + + + +

+ 后台进程非常耗费内存和电池。例如,隐式广播可以启动许多已注册侦听它的后台进程,即使这些进程可能没有执行许多工作。 + +这会严重影响设备性能和用户体验。 + +

+ +

+ 为减缓这个问题,N Developer Preview 应用了以下限制: + +

+ +
    +
  • 面向 Preview 的应用不会收到 {@link +android.net.ConnectivityManager#CONNECTIVITY_ACTION} 广播,即使它们在清单文件中注册接收这些广播。 +在前台运行的应用如果使用 {@link +android.content.Context#registerReceiver Context.registerReceiver()} 注册 {@link android.content.BroadcastReceiver},则仍可在主线程上侦听 {@code CONNECTIVITY_CHANGE}。 + + +
  • + +
  • 应用无法发送或接收 {@link +android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link +android.hardware.Camera#ACTION_NEW_VIDEO} 广播。此项优化会影响所有应用,而不仅仅是面向 Preview 的应用。 + +
  • +
+ +

+ Android 框架提供多个解决方案来缓解对这些隐式广播的需求。 +例如,{@link android.app.job.JobScheduler} +和 +{@code GcmNetworkManager} 提供了一个稳健可靠的机制来安排满足指定条件(例如连入无限流量网络)时所执行的网络操作。 + +现在,您还可以使用 {@link android.app.job.JobScheduler} +来响应内容提供程序所发生的变更。{@link android.app.job.JobInfo} +对象封装了 {@link android.app.job.JobScheduler} +用来安排您的作业的参数。如果符合作业条件,系统将在应用的 {@link android.app.job.JobService} 上执行此作业。 + +

+ +

+ 在本文档中,我们将学习如何使用备用方法(如 {@link android.app.job.JobScheduler})调整您的应用以符合这些新限制。 + + +

+ +

+ 对 CONNECTIVITY_ACTION 的限制 +

+ +

+ 面向 N Developer Preview 的应用不会收到 {@link +android.net.ConnectivityManager#CONNECTIVITY_ACTION} 广播,即使它们在清单文件中注册接收这些广播亦是如此,依赖此广播的流程也不会启动。 + +这可能会给需要侦听网络变化或者需要在设备接入无限流量网络时执行批量网络活动的应用造成问题。 + +Android 框架中已存在多个可绕过此限制的解决方案,但需要根据您想要应用实现的目标来选择正确的解决方案。 + + +

+ +

+ :当应用位于前台时,通过 +{@link android.content.Context#registerReceiver Context.registerReceiver()} +中注册的 {@link android.content.BroadcastReceiver} 将继续接收这些广播。 +

+ +

+ 安排连入无限流量连接时的网络作业 +

+ +

+ 使用 {@link android.app.job.JobInfo.Builder JobInfo.Builder} 类构建 +{@link android.app.job.JobInfo} 对象时,应用 {@link +android.app.job.JobInfo.Builder#setRequiredNetworkType +setRequiredNetworkType()} 方法,并将 {@link android.app.job.JobInfo +JobInfo.NETWORK_TYPE_UNMETERED} 作为作业参数传递。以下代码示例展示如何安排当设备接入无限流量网络且正在充电时要运行的服务: + + +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+      (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo job = new JobInfo.Builder(
+    MY_BACKGROUND_JOB,
+    new ComponentName(context, MyJobService.class))
+      .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
+      .setRequiresCharging(true)
+      .build();
+  js.schedule(job);
+}
+
+ +

+ 当符合作业条件时,应用会收到回调以运行指定 {@code JobService.class} 中的 {@link android.app.job.JobService#onStartJob onStartJob()} 方法。 + +如需查看 {@link + android.app.job.JobScheduler} 实现的更多示例,请参阅 JobScheduler 示例应用。 +

+ +

+ 使用 GMSCore 服务且面向 Android 5.0(API 级别 21)或更低版本系统的应用可以使用 +{@code GcmNetworkManager} 并指定 {@code Task.NETWORK_STATE_UNMETERED}。 + +

+ +

+ 在应用运行时监控网络连接 +

+ +

+ 在前台运行的应用仍可以通过注册的 {@link +android.content.BroadcastReceiver} 侦听 {@code +CONNECTIVITY_CHANGE}。不过,{@link +android.net.ConnectivityManager} API 提供了一个更稳健可靠的方法,可以仅在符合指定的网络条件时才请求回调。 + +

+ +

+ {@link android.net.NetworkRequest} 对象根据 {@link android.net.NetworkCapabilities} 定义网络回调的参数。 +使用 {@link +android.net.NetworkRequest.Builder NetworkRequest.Builder} 类创建 {@link android.net.NetworkRequest} 对象。然后,{@link +android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, +android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} +将 {@link android.net.NetworkRequest} 对象传递给系统。 +当符合网络条件时,应用会收到回调以执行在其 {@link +android.net.ConnectivityManager.NetworkCallback} 类中定义的 +{@link android.net.ConnectivityManager.NetworkCallback#onAvailable +onAvailable()} 方法。 + +

+ +

+ 应用继续接收回调,直至应用退出或调用 +{@link android.net.ConnectivityManager#unregisterNetworkCallback +unregisterNetworkCallback()}。 +

+ +

+ 对 NEW_PICTURE 和 NEW_VIDEO 的限制 +

+ +

+ 在 N Developer Preview 中,应用无法发送或接收 {@link +android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link +android.hardware.Camera#ACTION_NEW_VIDEO} 广播。此限制有助于缓解必须唤醒多个应用以处理新图像或视频时对性能和用户体验造成的影响。 + +N Developer Preview 扩展了 {@link android.app.job.JobInfo} 和 {@link +android.app.job.JobParameters} 以提供备用解决方案。 + +

+ +

+ 新的 JobInfo 方法 +

+ +

+ 为了针对内容 URI 变化触发作业,N Developer Preview 使用以下方法扩展了 {@link android.app.job.JobInfo} API。 + +

+ +
+
+ {@code JobInfo.TriggerContentUri()} +
+ +
+ 封装针对内容 URI 变化触发作业所需的参数。 +
+ +
+ {@code JobInfo.Builder.addTriggerContentUri()} +
+ +
+ 将 {@code TriggerContentUri} 对象传递给 {@link +android.app.job.JobInfo}。{@link android.database.ContentObserver} +监控已封装的内容 URI。如果存在多个与某个作业关联的 {@code +TriggerContentUri} 对象,则系统会提供一个回调,即使其报告仅一个内容 URI 发生变化。 + +
+ +
+ 如果给定 URI 的任何子级发生变化,则添加 {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} 标志以触发作业。 +此标志对应于传递给 {@link +android.content.ContentResolver#registerContentObserver registerContentObserver()} 的 +{@code notifyForDescendants} 参数。 + +
+
+ +

+ 注: {@code TriggerContentUri()} 无法与 {@link android.app.job.JobInfo.Builder#setPeriodic +setPeriodic()} 或 {@link android.app.job.JobInfo.Builder#setPersisted +setPersisted()} 结合使用。 +若要持续监控内容变化,则可在应用的 {@link +android.app.job.JobService} 完成处理最新的回调前安排新的 +{@link android.app.job.JobInfo}。 +

+ +

+ 以下示例代码展示如何安排当系统报告内容 URI {@code MEDIA_URI} 所发生变化时要触发的作业: + +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+          (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo.Builder builder = new JobInfo.Builder(
+          MY_BACKGROUND_JOB,
+          new ComponentName(context, MediaContentJob.class));
+  builder.addTriggerContentUri(
+          new JobInfo.TriggerContentUri(MEDIA_URI,
+          JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
+  js.schedule(builder.build());
+}
+
+

+ 当系统报告指定内容 URI 所发生变化时,应用将收到一个回调,并向 {@code MediaContentJob.class} 中的 {@link android.app.job.JobService#onStartJob onStartJob()} +方法传递一个 {@link android.app.job.JobParameters} 对象。 + + +

+ +

+ 新的 JobParameter 方法 +

+ +

+ N Developer Preview 也扩展了{@link android.app.job.JobParameters},以允许应用接收有关哪些内容权限和 URI 已触发作业的有用信息: + + +

+ +
+
+ {@code Uri[] getTriggeredContentUris()} +
+ +
+ 返回已触发作业的 URI 数组。如果没有任何 URI 触发作业(例如,作业是因截止期限或其他一些原因触发的),或者已更改的 URI 数量超过 50,该数组将为 {@code +null}。 + + +
+ +
+ {@code String[] getTriggeredContentAuthorities()} +
+ +
+ 返回已触发作业的内容权限的字符串数组。 + 如果返回的数组不是 {@code null},请使用 {@code getTriggeredContentUris()} +检索有关哪些 URI 已更改的详细信息。 +
+
+ +

+ 以下示例代码重写 {@link +android.app.job.JobService#onStartJob JobService.onStartJob()} 方法并记录已触发作业的内容权限和 URI: + +

+ +
+@Override
+public boolean onStartJob(JobParameters params) {
+  StringBuilder sb = new StringBuilder();
+  sb.append("Media content has changed:\n");
+  if (params.getTriggeredContentAuthorities() != null) {
+      sb.append("Authorities: ");
+      boolean first = true;
+      for (String auth :
+          params.getTriggeredContentAuthorities()) {
+          if (first) {
+              first = false;
+          } else {
+             sb.append(", ");
+          }
+           sb.append(auth);
+      }
+      if (params.getTriggeredContentUris() != null) {
+          for (Uri uri : params.getTriggeredContentUris()) {
+              sb.append("\n");
+              sb.append(uri);
+          }
+      }
+  } else {
+      sb.append("(No content)");
+  }
+  Log.i(TAG, sb.toString());
+  return true;
+}
+
+ +

+ 进一步优化您的应用 +

+ +

+ 优化您的应用以在低内存设备上或在低内存条件下运行,这样可以提升性能和用户体验。 +删除后台服务依赖关系和静态注册的隐式广播接收器可帮助您的应用在此类设备上运行得更好。 + +尽管 N Developer Preview 采取了措施以减少部分问题,但建议您优化自己的应用,使其能够在完全不使用这些后台进程的情况下运行。 + + + +

+ +

+ N Developer Preview 推出了一些附加 Android Debug Bridge (ADB) 命令,您可以使用这些命令测试在禁用这些后台进程情况下的应用行为: + +

+ +
    +
  • 要模拟隐式广播和后台服务不可用的条件,请输入以下命令: + +
  • + +
  • +
    +{@code $ adb shell cmd appops set RUN_IN_BACKGROUND ignore}
    +
    +
  • + +
  • 要重新启用隐式广播和后台服务,请输入以下命令: + +
  • + +
  • +
    +{@code $ adb shell cmd appops set RUN_IN_BACKGROUND allow}
    +
    +
  • +
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd b/docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd new file mode 100644 index 000000000000..176896add50f --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd @@ -0,0 +1,180 @@ +page.title=直接启动 +page.keywords=preview,sdk,direct boot +page.tags=androidn + +@jd:body + + + +

当设备已开机但用户尚未解锁设备时,Android N 将在安全的 直接启动 模式下运行。 + +为支持此操作,系统为数据提供两个存储位置:

+ +
    +
  • 凭据加密存储,这是默认存储位置,仅在用户解锁设备后可用。 +
  • +
  • 设备加密存储,该存储位置在“直接启动”模式下和用户解锁设备后均可使用。 +
  • +
+ +

默认情况下,应用不会在“直接启动”模式下运行。如果您的应用需要在“直接启动”模式下进行操作,您可以注册在此模式期间应运行的应用组件。 + +对于需要在“直接启动”模式下运行的应用,常见的一些用例包括: +

+ +
    +
  • 已安排通知的应用,如闹铃应用。 +
  • +
  • 提供重要用户通知的应用,如短信应用。
  • +
  • 提供辅助工具服务的应用,如 Talkback。
  • +
+ +

如果您的应用在“直接启动”模式下运行时需要访问数据,则使用设备加密存储。 +设备加密存储包含使用密钥加密的数据,仅在设备已成功执行验证启动后密钥才可用。 + +

+ +

对于应使用与用户凭据(如 PIN 或密码)关联的密钥加密的数据,请使用凭据加密存储。凭据加密存储仅在用户已成功解锁设备后可用,直到用户再次重启设备。 + + +如果用户在解锁设备后启用锁定屏幕,则不会锁定凭据加密存储。 + +

+ +

请求在直接启动时运行

+ +

应用必须先向系统注册其组件,然后才能在“直接启动”模式下运行或访问设备加密存储。 + +应用通过将组件标记为 +加密感知在系统中进行注册。若要将您的组件标记为加密感知,请在清单文件中将 android:encryptionAware 属性设为 true。 +

+ +

当设备重启后,加密感知组件可以注册接收来自系统的 LOCKED_BOOT_COMPLETED 广播消息。 + +此时设备加密存储可用,您的组件可以在“直接启动”模式下执行需要运行的任务,例如触发已设定的闹铃。 + +

+ +

以下代码段展示如何将 +{@link android.content.BroadcastReceiver} 注册为加密感知并在应用清单文件中为 LOCKED_BOOT_COMPLETED 添加 Intent 过滤器: +

+ +
+<receiever
+  android:encryptionAware="true" >
+  ...
+  <intent-filter>
+    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+  </intent-filter>
+</receiver>
+
+ +

在用户解锁设备后,所有组件均可访问设备加密存储以及凭据加密存储。 +

+ +

访问设备加密存储

+ +

要访问设备加密存储,请通过调用 +Context.createDeviceEncryptedStorageContext() 创建另一个 +{@link android.content.Context} 实例。使用此上下文执行的所有存储 API 调用均访问设备加密存储。 +以下示例访问设备加密存储并打开现有应用数据文件: + +

+ +
+Context directBootContext = Context.createDeviceEncryptedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+
+ +

仅针对在“直接启动”模式下必须可访问的信息使用设备加密存储。请勿将设备加密存储用作通用加密存储。对于专有用户信息,或在“直接启动”模式下不需要的加密数据,请使用凭据加密存储。 + + + +

+ +

接收用户解锁通知

+ +

重启后一旦用户解锁了设备,您的应用即可切换至访问凭据加密存储,并使用依赖用户凭据的常规系统服务。 + +

+ +

为了在重启后用户解锁设备时收到通知,请从一个正在运行的组件注册 {@link android.content.BroadcastReceiver} 以侦听 ACTION_USER_UNLOCKED 消息。 + +或者,您可以接收现有 {@link android.content.Intent#ACTION_BOOT_COMPLETED +ACTION_BOOT_COMPLETED} 消息,该消息现在表明设备已启动,且用户已解锁设备。 + +

+ +

您可以通过调用 UserManager.isUserUnlocked() 直接查询用户是否已解锁设备。 +

+ +

迁移现有数据

+ +

如果用户将其设备更新为使用“直接启动”模式,您可能需要将现有数据迁移到设备加密存储。 +使用 +Context.migrateSharedPreferencesFrom() 和 +Context.migrateDatabaseFrom() 在凭据加密存储和设备加密存储之间迁移首选项和数据库数据。 +

+ +

请运用您的最佳判断来决定从凭据加密存储向设备加密存储迁移哪些数据。 +您不应将专有用户信息(如密码或权限令牌)迁移到设备加密存储。 + +。在某些情况下,您可能需要在这两个加密存储中管理单独的数据集。 +

+ +

测试您的加密感知应用

+ +

使用新的“直接启动”模式测试您的加密感知应用。有两种方式可以启用直接启动模式: +

+ +

注意:启用“直接启动”将擦除设备上的所有用户数据。 +

+ +

在已安装 Android N 的受支持的设备上,通过执行以下操作之一启用“直接启动”: +

+ +
    +
  • 在设备上,如果您尚未启用 Developer options,则可通过转到 Settings > About phone 并点击 Build number 七次启用它。 + +当开发者选项屏幕可用后,转到 Settings > Developer options 并选择 Convert to file encryption。 + +
  • +
  • 使用以下 adb shell 命令启用“直接启动”模式: +
    +$ adb reboot-bootloader
    +$ fastboot --wipe-and-use-fbe
    +
    +
  • +
+ +

另外,还提供模拟直接启动模式,以防您需要在测试设备上切换模式。 +模拟模式应仅在开发期间使用,否则可能导致数据丢失。 +若要启用模拟直接启动模式,请在设备上设置锁定模式,如果在设置锁定模式时系统提示安全启动屏幕,则选择“No thanks”,然后使用以下 adb shell 命令: + + +

+ +
+$ adb shell sm set-emulate-fbe true
+
+ +

若要关闭模拟直接启动模式,请使用以下命令:

+ +
+$ adb shell sm set-emulate-fbe false
+
+ +

使用这些命令会导致设备重启。

diff --git a/docs/html-intl/intl/zh-cn/preview/features/icu4j-framework.jd b/docs/html-intl/intl/zh-cn/preview/features/icu4j-framework.jd new file mode 100644 index 000000000000..1dd5a74e91c2 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/features/icu4j-framework.jd @@ -0,0 +1,158 @@ +page.title=ICU4J Android 框架 API + +@jd:body + +
+
+

本文内容:

+
    +
  1. 与 ICU4J 的关系
  2. +
  3. 从 ICU4J 迁移至 android.icu API
  4. +
  5. 授权
  6. +
+ +

另请参阅

+
    +
  1. + ICU4J 的文档 +
  2. + +
  3. + ICU4J 支持的最新标准 + +
  4. +
+
+
+ +

+ ICU4J 是一个广泛使用的开源 Java 库集合,为软件应用提供 Unicode 和全球化支持。 +Android N 在 {@code android.icu} 软件包下显示 Android 框架中的 ICU4J API 子集,供应用开发者使用。 + +这些 API 使用设备上具有的本地化数据。 +因此,您可以通过不将 ICU4J 库编译到 APK 来减少 APK 占用空间;相反,您可以只在框架中调用它们。 + +(在此情况下,您可能想要提供多个版本的 APK,这样,运行比 Android N 低的 Android 版本的用户可以下载包含 ICU4J 库的应用版本。) + + + +

+ +

+ 本文档开头提供了有关支持这些库所需的最低 Android API 级别的一些基本信息。 +然后,介绍关于 Android 特定的 ICU4J 实现您需要了解的内容。 +最后,介绍如何在 Android 框架中使用 ICU4J API。 + +

+ +

与 ICU4J 的关系

+ +

+ Android N 通过 +android.icu 软件包(而非 com.ibm.icu)显示 ICU4J API 的子集。由于种种原因,Android 框架可能选择不显示 ICU4J API;例如,Android N 不显示一些已弃用的 API 或 ICU 团队尚未将其声明为“稳定”的 API。 + + + +由于 ICU 团队将来会弃用这些 API,因此,Android 也会将其标记为已弃用,但将继续包含它们。 + +

+ +

表 1. Android N 中使用的 ICU 和 CLDR 版本。 +

+ + + + + + + + + + + +
Android API 级别ICU 版本CLDR 版本
Android N5628
+ +

以下是几点注意事项:

+ +
    +
  • ICU4J Android 框架 API 不包含所有的 ICU4J API。
  • +
  • NDK 开发者应了解 Android ICU4C 不受支持。
  • +
  • Android 框架中的 API 不会取代 Android 对使用资源进行本地化的支持。 + +
  • +
+ +

从 com.ibm.icu 迁移至 android.icu 软件包

+ +

+ 如果您已在应用中使用 ICU4J API,且 +android.icu API 符合您的要求,那么要迁移至框架 API,需要将 Java 导入从 com.ibm.icu 更改为 android.icu。 + +然后,您可以从 APK 移除您自己的 ICU4J 文件的副本。 + +

+ +

+ :ICU4J 框架 API 使用 {@code android.icu} +命名空间,而不是 {@code com.ibm.icu}。这是为了避免在包含自己的 {@code com.ibm.icu} 库的 APK 中出现命名空间冲突。 + +

+ +

+ 从其他 Android SDK API 迁移至 android.icu API +

+ +

+ javaandroid 软件包中的某些类与在 ICU4J 中找到的一些类等效。 +不过,ICU4J 通常为标准和语言提供更广泛的支持。 + +

+

下面是一些入门示例:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
替代项
java.lang.Character android.icu.lang.UCharacter
java.text.BreakIterator android.icu.text.BreakIterator
java.text.DecimalFormat android.icu.text.DecimalFormat
java.util.Calendar +android.icu.util.Calendar
android.text.BidiFormatter + android.icu.text.Bidi +
android.text.format.DateFormat + android.icu.text.DateFormat +
android.text.format.DateUtils android.icu.text.DateFormat +android.icu.text.RelativeDateTimeFormatter +
+ +

授权

+ +

+ ICU4J 按照 ICU 许可发布。如需了解详情,请参阅 ICU 用户指南。 + +

diff --git a/docs/html-intl/intl/zh-cn/preview/features/multi-window.jd b/docs/html-intl/intl/zh-cn/preview/features/multi-window.jd new file mode 100644 index 000000000000..8bbd4b1de4fd --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/features/multi-window.jd @@ -0,0 +1,582 @@ +page.title=多窗口支持 +page.metaDescription=Android N 全新支持同时显示多个应用窗口。 +page.keywords="multi-window", "android N", "split screen", "free-form" + +@jd:body + + + +

+ Android N 添加了对同时显示多个应用窗口的支持。 +在手持设备上,两个应用可以在分屏模式中左右并排或上下并排显示。 +在电视设备上,应用可以使用画中画模式,在用户与另一个应用交互的同时继续播放视频。 + + +

+ +

+ 如果您使用 N Preview SDK 构建应用,则可以配置应用处理多窗口显示的方法。 +例如,您可以指定 Activity 的最小允许尺寸。 +您还可以禁用应用的多窗口显示,确保系统仅以全屏模式显示应用。 + + +

+ +

概览

+ +

+ Android N 允许多个应用同时共享屏幕。例如,用户可以分屏显示应用,在左边查看网页,同时在右边写邮件。 + +用户体验取决于设备: + +

+ +
    +
  • 运行 Android N 的手持设备具有分屏模式。 +在此模式中,系统以左右并排或上下并排的方式分屏显示两个应用。 +用户可以拖动两个应用之间的分界线,放大其中一个应用,同时缩小另一个。 + +
  • + +
  • 在运行 Android N 的 Nexus Player 上,应用能以画中画模式显示,即在用户浏览网页或与其他应用交互的同时继续显示内容。 + + + +
  • + +
  • 较大设备的制造商可选择启用自由形状模式,在该模式中,用户可以自由调整各 Activity 的尺寸。 +若制造商启用此功能,设备将同时具有自由形状模式和分屏模式。 + + +
  • +
+ + +

+ 图 1. 两个应用在分屏模式中左右并排显示。 +

+ +

+ 用户可以通过以下方式切换到多窗口模式: +

+ +
    +
  • 若用户打开 Overview 屏幕并长按 Activity 标题,则可以拖动该 Activity 至屏幕突出显示的区域,使 Activity 进入多窗口模式。 + + + +
  • + +
  • 若用户长按 Overview 按钮,设备上的当前 Activity 将进入多窗口模式,同时将打开 Overview 屏幕,用户可在该屏幕中选择要共享屏幕的另一个 Activity。 + + +
  • +
+ +

+ 用户可以在两个 Activity 共享屏幕的同时在这两个 Activity 之间拖放数据 + +(在此之前,用户只能在一个 Activity 内部拖放数据)。 + +

+ +

多窗口生命周期

+ +

+ 多窗口模式不会更改 Activity 生命周期。 + +

+ +

+ 在多窗口模式中,在指定时间只有最近与用户交互过的 Activity 为活动状态。 +该 Activity 将被视为顶级 Activity。 + 所有其他 Activity 虽然可见,但均处于暂停状态。 + 但是,这些已暂停但可见的 Activity 在系统中享有比不可见 Activity 更高的优先级。 +如果用户与其中一个暂停的 Activity 交互,该 Activity 将恢复,而之前的顶级 Activity 将暂停。 + + +

+ +

+ :在多窗口模式中,用户仍可以看到处于暂停状态的应用。 +应用在暂停状态下可能仍需要继续其操作。 +例如,处于暂停模式但可见的视频播放应用应继续显示视频。 +因此,我们建议播放视频的 Activity 不要暂停其 {@link android.app.Activity#onPause onPause()} 处理程序中的视频。 + + + 应暂停 {@link android.app.Activity#onStop + onStop()} 中的视频,并恢复 {@link android.app.Activity#onStart + onStart()} 中的视频播放。 +

+ +

+ 如处理运行时变更中所述,用户使用多窗口模式显示应用时,系统将通知 Activity 发生配置变更。 + +该变更与系统通知应用设备从纵向模式切换到横向模式时的 Activity 生命周期影响基本相同,但设备不仅仅是交换尺寸,而是会变更尺寸。 + + +如处理运行时变更中所述,您的 Activity 可以自行处理配置变更,或允许系统销毁 Activity,并以新的尺寸重新创建该 Activity。 + + + +

+ +

+ 如果用户调整窗口大小,并在任意维度放大窗口尺寸,系统将调整 Activity 以匹配用户操作,同时根据需要发布运行时变更。 + +如果应用在新公开区域的绘制滞后,系统将使用 {@link + android.R.attr#windowBackground windowBackground} 属性或默认 windowBackgroundFallback 样式属性指定的颜色暂时填充该区域。 + + +

+ +

针对多窗口模式配置应用

+ +

+ 如果您的应用面向 Android N,您可以对应用的 Activity 是否支持多窗口显示以及显示方式进行配置。 +您可以在清单文件中设置属性,以控制大小和布局。 + + 根 Activity 的属性设置适用于其任务栈中的所有 Activity。 + +

+ +

+ :如果您使用低于 Android N 版本的 SDK 构建多向应用,则用户在多窗口模式中使用应用时,系统将强制调整应用大小。 + +系统将显示对话框,提醒用户应用可能会发生异常。 +系统不会调整定向应用的大小;如果用户尝试在多窗口模式下打开定向应用,应用将全屏显示。 + + + +

+ +

android:resizeableActivity

+

+ 在清单文件的 <activity> 或 + <application> 节点中设置该属性,启用或禁用多窗口显示: + +

+ +
+android:resizeableActivity=["true" | "false"]
+
+ +

+ 如果该属性设置为 true,Activity 将能以分屏和自由形状模式启动。 +如果此属性设置为 false,Activity 将不支持多窗口模式。 +如果该值为 false,且用户尝试在多窗口模式下启动 Activity,该 Activity 将全屏显示。 + + +

+ +

+ 如果您的应用面向 Android N,但未对该属性指定值,则该属性的值默认设为 true。 + +

+ +

android:supportsPictureInPicture

+ +

+ 在清单文件的 <activity> 节点中设置该属性,指明 Activity 是否支持画中画显示。 +如果 android:resizeableActivity 为 false,将忽略该属性。 + +

+ +
+android:supportsPictureInPicture=["true" | "false"]
+
+ +

布局属性

+ +

+ 对于 Android N,<layout> 清单文件元素支持以下几种属性,这些属性影响 Activity 在多窗口模式中的行为: + + +

+ +
+
+ android:defaultWidth +
+ +
+ 以自由形状模式启动时 Activity 的默认宽度。 +
+ +
+ android:defaultHeight +
+ +
+ 以自由形状模式启动时 Activity 的默认高度。 +
+ +
+ android:gravity +
+ +
+ 以自由形状模式启动时 Activity 的初始位置。请参阅 {@link android.view.Gravity} 参考资料,了解合适的值设置。 + +
+ +
+ android:minimalSize +
+ +
+ 分屏和自由形状模式中 Activity 的最小高度和最小宽度。 +如果用户在分屏模式中移动分界线,使 Activity 尺寸低于指定的最小值,系统会将 Activity 裁剪为用户请求的尺寸。 + + +
+
+ +

+ 例如,以下节点显示了如何指定 Activity 在自由形状模式中显示时 Activity 的默认大小、位置和最小尺寸: + + +

+ +
+<activity android:name=".MyActivity">
+    <layout android:defaultHeight="500dp"
+          android:defaultWidth="600dp"
+          android:gravity="top|end"
+          android:minimalSize="450dp" />
+</activity>
+
+ +

在多窗口模式中运行应用

+ +

+ Android N 添加了新功能,以支持可在多窗口模式中运行的应用。 + +

+ +

多窗口模式中被禁用的功能

+ +

+ 在设备处于多窗口模式中时,某些功能会被禁用或忽略,因为这些功能对与其他 Activity 或应用共享设备屏幕的 Activity 而言没有意义。 + +此类功能包括: + +

    +
  • 某些系统 UI 自定义选项将被禁用;例如,在非全屏模式中,应用无法隐藏状态栏。 + + +
  • + +
  • 系统将忽略对 android:screenOrientation 属性所作的更改。 +
  • +
+ +

多窗口变更通知和查询

+ +

+ {@link android.app.Activity} 类中添加了以下新方法,以支持多窗口显示。 +有关各方法的详细信息,请参阅 N Preview SDK 参考。 + +

+ +
+
+ Activity.inMultiWindow() +
+ +
+ 调用该方法以确认 Activity 是否处于多窗口模式。 +
+ +
+ Activity.inPictureInPicture() +
+ +
+ 调用该方法以确认 Activity 是否处于画中画模式。 + +

+ :画中画模式是多窗口模式的特例。 +如果 myActivity.inPictureInPicture() 返回 true,则 myActivity.inMultiWindow() 也返回 true。 + + +

+
+ +
+ Activity.onMultiWindowChanged() +
+ +
+ Activity 进入或退出多窗口模式时系统将调用此方法。 +在 Activity 进入多窗口模式时,系统向该方法传递 true 值,在退出多窗口模式时,则传递 false 值。 + + +
+ +
+ Activity.onPictureInPictureChanged() +
+ +
+ Activity 进入或退出画中画模式时系统将调用此方法。 +在 Activity 进入画中画模式时,系统向该方法传递 true 值,在退出画中画模式时,则传递 false 值。 + + +
+
+ +

+ 每个方法还有 {@link android.app.Fragment} 版本,例如 Fragment.inMultiWindow()。 + +

+ +

进入画中画模式

+ +

+ 如需在画中画模式中启动 Activity,请调用新方法 Activity.enterPictureInPicture()。 +如果设备不支持画中画模式,则此方法无效。 +如需了解详细信息,请参阅画中画文档。 + +

+ +

在多窗口模式中启动新 Activity

+ +

+ 在启动新 Activity 时,用户可以提示系统如果可能,应将新 Activity 显示在当前 Activity 旁边。 +要执行此操作,可使用标志 Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT。 + +传递此标志将请求以下行为: + +

+ +
    +
  • 如果设备处于分屏模式,系统会尝试在启动系统的 Activity 旁创建新 Activity,这样两个 Activity 将共享屏幕。 + +系统并不一定能实现此操作,但如果可以,系统将使两个 Activity 处于相邻的位置。 + +
  • + +
  • 如果设备不处于分屏模式,则该标志无效。 +
  • +
+ +

+ 如果设备处于自由形状模式,则在启动新 Activity 时,用户可通过调用 ActivityOptions.setLaunchBounds() 指定新 Activity 的尺寸和屏幕位置。 + +如果设备不处于多窗口模式,则该方法无效。 + +

+ +

+ :如果您在任务栈中启动 Activity,该 Activity 将替换屏幕上的 Activity,并继承其所有的多窗口属性。 + +如果要在多窗口模式中以单独的窗口启动新 Activity,则必须在新的任务栈中启动此 Activity。 + +

+ +

支持拖放

+ +

+ 用户可以在两个 Activity 共享屏幕的同时在这两个 Activity 之间拖放数据 + +(在此之前,用户只能在一个 Activity 内部拖放数据)。 +因此,如果您的应用目前不支持拖放功能,您可以在其中添加此功能。 + +

+ +

+ N Preview SDK 扩展了 android.view 软件包,以支持跨应用拖放。 +有关以下类和方法的详细信息,请参阅 N Preview SDK 参考。 + + +

+ +
+
+ android.view.DropPermissions +
+ +
+ 令牌对象,负责指定对接收拖放数据的应用授予的权限。 + +
+ +
+ View.startDragAndDrop() +
+ +
+ {@link android.view.View#startDrag View.startDrag()} 的新别名。要启用跨 Activity 拖放,请传递新标志 View.DRAG_FLAG_GLOBAL。 + +如需对接收拖放数据的 Activity 授予 URI 权限,可根据情况传递新标志 View.DRAG_FLAG_GLOBAL_URI_READView.DRAG_FLAG_GLOBAL_URI_WRITE。 + + + +
+ +
+ View.cancelDragAndDrop() +
+ +
+ 取消当前正在进行的拖动操作。只能由发起拖动操作的应用调用。 + +
+ +
+ View.updateDragShadow() +
+ +
+ 替换当前正在进行的拖动操作的拖动阴影。只能由发起拖动操作的应用调用。 + +
+ +
+ Activity.requestDropPermissions() +
+ +
+ 请求使用 {@link android.view.DragEvent} 中包含的 {@link + android.content.ClipData} 传递的内容 URI 的权限。 +
+
+ +

测试应用的多窗口支持

+ +

+ 无论您是否针对 Android N 更新应用,都应验证应用在多窗口模式下的行为,以防用户尝试在运行 Android N 的设备上以多窗口模式启动应用。 + + +

+ +

配置测试设备

+ +

+ 如果在设备上安装 Android N,则将自动支持分屏模式。 + +

+ +

如果应用并非使用 N Preview SDK 构建

+ +

+ 如果您的应用不是使用 N Preview SDK 构建的,则用户尝试在多窗口模式中使用应用时,系统将强制调整应用大小,除非应用进行了定向声明。 + + +

+ +

+ 如果您的应用没有进行定向声明,则应在运行 Android N 的设备上启动应用,并尝试将应用切换到分屏模式。 + +验证并确保在强制调整应用大小时用户体验可接受。 + +

+ +

+ 如果应用进行了定向声明,则应尝试将应用切换到多窗口模式。 +验证并确保执行此操作后,应用仍保持全屏模式。 + +

+ +

如果支持多窗口模式

+ +

+ 如果您的应用是使用 N Preview SDK 构建的,且未禁用多窗口支持,则分别在分屏和自由形状模式下验证以下行为。 + + +

+ +
    +
  • 在全屏模式下启动应用,然后通过长按 Overview 按钮切换到多窗口模式。 +验证并确保应用正常切换。 +
  • + +
  • 直接在多窗口模式中启动应用,验证并确保应用正常启动。 +您可以按一下 Overview 按钮,再长按应用的标题栏,并将其拖动到屏幕上任一突出显示的区域,从而在多窗口模式中启动应用。 + + +
  • + +
  • 拖动分界线,在分屏模式中调整应用的大小。 + 验证并确保应用正常调整大小且未崩溃,并且必要的 UI 元素仍可见。 + +
  • + +
  • 如果您指定了应用的最小尺寸,请尝试将应用尺寸调整到低于最小值。 +验证并确保无法将应用尺寸调整到低于指定最小值。 + +
  • + +
  • 完成所有测试后,验证并确保应用性能可以接受。例如,验证并确保调整应用大小后更新 UI 没有长时间的滞后。 + + +
  • +
+ +

测试检查单

+ +

+ 要在多窗口模式中验证应用性能,请执行以下操作。 +除非另有说明,否则请分别在分屏和多窗口模式中执行以下操作。 + +

+ +
    +
  • 进入和退出多窗口模式。 +
  • + +
  • 从您的应用切换到另一个应用,验证并确保应用在非活动但可见的状态下正常运行。 +例如,如果您的应用在播放视频,则验证并确保在用户与另一个应用交互时视频仍在继续播放。 + + +
  • + +
  • 在分屏模式中,尝试移动分界线,放大或缩小应用。 +分别在左右和上下并排显示模式中尝试这些操作。 +验证并确保应用不会崩溃,主要功能可见,且调整操作不需要过长时间。 + + +
  • + +
  • 快速连续执行几次调整操作。验证并确保应用不会崩溃或出现内存泄漏。 +有关检查应用内存使用率的信息,请参阅查看内存使用率。 + + +
  • + +
  • 在多个不同窗口配置中正常使用应用,验证并确保应用正常运行。 +验证并确保文本可读,且 UI 元素大小正常,不影响交互。 + +
  • +
+ +

如果已禁用多窗口支持

+ +

+ 如果您通过设置 android:resizableActivity="false" 禁用了多窗口支持,则应在运行 Android N 的设备上启动应用,并尝试将应用切换到自由形状和分屏模式。 + + +验证并确保执行此操作后,应用仍保持全屏模式。 + +

diff --git a/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd b/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd new file mode 100644 index 000000000000..4c32313c2ba3 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd @@ -0,0 +1,214 @@ +page.title=语言和区域设置 +@jd:body + + + +

Android N 为多语言用户提供增强的支持,让他们可以在设置中选择多个区域设置。 +Android N 通过大幅扩展受支持的区域设置数量并更改系统解析资源的方式来提供此功能。 + +全新的解析资源方法更加稳健,并且设计为与现有 APK 兼容,但要格外细心,以发现任何异常行为。 + +例如,您应进行测试,以确保应用默认显示预期的语言。 +另外,如果应用支持多语言,您应确保此支持合乎预期。 + +最后,对于您没有将其显式设计为支持的语言,应设法确保应用能够妥善地处理它们。 +

+ +

本文档开头介绍 Android N 之前的资源解析策略。接下来介绍 Android N 改进的资源解析策略。 + +最后,介绍如何充分利用扩展的区域设置数量来支持更多的多语言用户。 +

+ +

解析语言资源所面临的挑战

+ +

在 Android N 之前,Android 并非始终能够成功匹配应用和系统区域设置。 +例如,假设应用的默认语言为“US English”,但它也在 {@code es_ES} +资源文件中对西班牙字符串进行了本地化。 +

+

如果您的 Java 代码引用字符串,那么它将按如下所示解析字符串语言: +

+
    +
  • 如果将设备设为 {@code es_MX} (Spanish-Mexico),Android 将从 {@code es_ES} 资源文件加载字符串。 +
  • +
  • 如果将设备设为 {@code en_AU},Android 则会转而使用 {@code +en_US}。如果用户选择应用根本不支持的语言(如法语),则系统也会默认显示 {@code en_US}。 +
  • +
+ + +

之所以会产生上述解析问题,是因为系统在无法找到精确匹配项时会将国家/地区代码从区域设置中去掉。 +例如:

+

+表 1. 没有精确区域设置匹配项的资源解析。 +

+ + + + + + + + + + + + + +
用户设置应用资源资源解析
fr_CH +默认值 (en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+尝试 fr_CH => 失败
+尝试 fr => 失败
+使用默认值 (en) +
+ + +

在此示例中,系统在不知道用户是否理解英语的情况下显示英语字符串。 +目前,此行为很常见。 +Android N 应该会大幅减少出现此类结果的频率。 +

+ +

对资源解析策略的改进

+

Android N 可提供更稳健的资源解析,并自动查找更好的备用方法。 +不过,为了加速解析和提升可维护性,您应以最常用的母语存储资源。 + + 例如,如果您之前将西班牙语资源存储在 {@code es-US} 目录中,请将它们移动到 {@code es-419} 目录,该目录包含拉丁美洲西班牙语。 + + 同理,如果您在名为 {@code en-GB} 的文件夹中存储有资源字符串,则将此文件夹重命名为 {@code en-001}(国际英语),因为 en-GB 字符串的最常用母语为 {@code en-001}。 + + + 以下示例介绍为什么这些做法可提升性能和资源解析的可靠性。 +

+ +

资源解析示例

+ +

使用 Android N,以不同的方式解析表 1 中所描述的案例: +

+ +

+表 2. 针对没有精确区域设置匹配项时改进的资源解析策略。 +

+ + + + + + + + + + + + +
用户设置应用资源资源解析
    +
  1. fr_CH
  2. +
+
+默认值 (en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+尝试 fr_CH => 失败
+尝试 fr => 失败
+尝试 fr 的子项 => fr_FR
+使用 fr_FR +
+ + +

现在,用户获得的是法语资源而不是英语。此示例还表明对于 Android N,您为什么应将法语字符串存储在 {@code fr}(而非 {@code fr_FR})中。此处的做法是匹配最接近的母语,从而使解析更快速且更具预见性。 + + +

+ +

除了这个改进的解析逻辑外,Android 现在还提供更多的用户语言以供选择。 +下面,我们将意大利语指定为附加用户语言,但假设应用不支持法语,再次尝试上面的示例。 +

+ +

+表 3. 应用仅与用户的次优区域设置匹配时的资源解析。 +

+ + + + + + + + + + + + + + +
用户设置应用资源资源解析
    +
  1. fr_CH
  2. +
  3. it_CH
  4. +
+
+默认值 (en)
+de_DE
+es_ES
+it_IT
+
+尝试 fr_CH => 失败
+尝试 fr => 失败
+尝试 fr 的子项 => 失败
+尝试 it_CH => 失败
+尝试 it => 失败
+尝试 it 的子项 => it_IT
+使用 it_IT +
+

用户仍会获取他们理解的语言,即使应用不支持法语。 +

+ + +

设计您的应用以支持附加区域设置

+

LocaleList API

+ +

Android N 添加了新的 API {@code LocaleList.GetDefault()},从而让应用可以直接查询用户已指定的语言列表。 +您可以使用此 API 创建更成熟的应用行为和更优化的内容显示。 + +例如,搜索可以基于用户的设置以多种语言显示结果。 +浏览器应用可避免翻译以用户理解的语言显示的页面,键盘应用可自动启用所有适用的布局。 + +

+ +

格式化程序

+ +

直到 Android 6.0(API 级别 23),Android 仅支持许多常用语言(en、es、ar、fr、ru)的一个或两个区域设置。 + +由于每种语言只有几种变体,因此,应用可以通过在资源文件中将一些数字和日期存储为硬编码字符串解决此问题。 + +不过,随着 Android 扩展了支持的区域设置集,即使在一个区域设置中,日期、时间、货币及类似信息也会存在显著差异。 + + +对您的格式进行硬编码会让最终用户困惑不已。 +因此,在针对 Android N 开发应用时请务必使用格式化程序代替硬编码数字和日期字符串。 +

+ +

阿拉伯语就是最好的例子,Android N 将对其的支持从一个 {@code ar_EG} 扩展到 27 个阿拉伯语区域设置。 +这些区域设置可以共享大多数资源,但其中一些资源首选 ASCII 数字,另一些则首选本地数字。 +例如,如果您想要创建一个具有数字变量的句子,如“Choose a 4 digit pin”,则按如下所示使用格式化程序: + +

+ +
 format(locale, "Choose a %d-digit PIN", 4)
diff --git a/docs/html-intl/intl/zh-cn/preview/features/notification-updates.jd b/docs/html-intl/intl/zh-cn/preview/features/notification-updates.jd new file mode 100644 index 000000000000..3a846489fb57 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/features/notification-updates.jd @@ -0,0 +1,328 @@ +page.title=通知 +page.tags=notifications +helpoutsWidget=true +page.image=/preview/images/notifications-card.png + +trainingnavtop=true + +@jd:body + +
+
+ + +

本文内容

+
    +
  1. 直接回复
  2. +
  3. 捆绑通知
  4. +
  5. 自定义视图
  6. +
+ +
+
+ +

Android N 引入了一些新 API,允许应用发布具有高度可见性和交互性的通知。 +

+ +

Android N 扩展了现有 {@link android.support.v4.app.RemoteInput} 通知 API,以支持手持式设备上的内联回复。 +此功能允许用户从通知栏快速进行回复,无需访问应用。 +

+ +

+ 此外,Android N 还允许捆绑类似的通知并将它们显示为一则通知。 +为了实现此功能,Android N 使用现有的 {@link + android.support.v4.app.NotificationCompat.Builder#setGroup + NotificationCompat.Builder.setGroup()} 方法。用户可以从通知栏展开各通知,并分别对每则通知进行回复和清除等操作。 + + +

+ +

最后,Android N 还添加了一些新 API,允许您在应用的自定义通知视图中使用系统装饰元素。 +这些 API 可帮助确保通知视图与标准模板的展示效果相一致。 + +

+ +

本文重点介绍您在应用中使用新通知功能时应加以考虑的一些重要变更。 +

+ +

直接回复

+ +

利用 Android N 中的直接回复功能,用户可以直接在通知界面内快速回复短信或更新任务列表。 + +在手持式设备上,可通过通知中另外附加的按钮进行内联回复操作。 +当用户通过键盘回复时,系统会将文本回复附加到您为通知操作指定的 Intent,并将 Intent 发送到手持式设备应用。 + + + + + + +

+ 图 1.Android N 添加了 Reply 操作按钮。 + +

+ +

添加内联回复操作

+ +

要创建支持直接回复的通知操作: +

+ +
    +
  1. 创建一个可添加到通知操作的 {@link android.support.v4.app.RemoteInput.Builder} 实例。 + +该类的构造函数接受系统用作文本输入密钥的字符串。 +之后,手持式设备应用使用该密钥检索输入的文本。 + + +
    +// Key for the string that's delivered in the action's intent
    +private static final String KEY_TEXT_REPLY = "key_text_reply";
    +String replyLabel = getResources().getString(R.string.reply_label);
    +RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
    +        .setLabel(replyLabel)
    +        .build();
    +
    +
  2. +
  3. 使用 addRemoteInput() 向操作附加 {@link android.support.v4.app.RemoteInput} 对象。 + + +
    +// Create the reply action and add the remote input
    +Notification.Action action =
    +        new Notification.Action.Builder(R.drawable.ic_reply_icon,
    +                getString(R.string.label), replyPendingIntent)
    +                .addRemoteInput(remoteInput)
    +                .build();
    +
    +
  4. + +
  5. 对通知应用操作并发出通知。 + +
    +// Build the notification and add the action
    +Notification notification =
    +        new Notification.Builder(mContext)
    +                .setSmallIcon(R.drawable.ic_message)
    +                .setContentTitle(getString(R.string.title))
    +                .setContentText(getString(R.string.content))
    +                .addAction(action))
    +                .build();
    +
    +// Issue the notification
    +NotificationManager notificationManager =
    +        NotificationManager.from(mContext);
    +notificationManager.notify(notificationId, notification);
    +
    +
    +
  6. + +
+ + +

在触发通知操作时系统提示用户输入回复。 +

+ + +

+ 图 2.用户从通知栏输入文本。 +

+ +

从内联回复检索用户输入

+ +

要从通知界面接收用户输入并发送到在回复操作的 Intent 中声明的 Activity: +

+
    +
  1. 通过传递通知操作的 Intent 作为输入参数,调用 {@link android.support.v4.app.RemoteInput#getResultsFromIntent + getResultsFromIntent()}。 +该方法返回含有文本回复的 {@link android.os.Bundle}。 + +
  2. + +
    +Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
    +
    + +
  3. 使用产生的密钥查询捆绑包(提供给 {@link + android.support.v4.app.RemoteInput.Builder} 构造函数)。 +
  4. +
+ +

以下代码段说明了方法如何从捆绑包检索输入文本: +

+ +
+// Obtain the intent that started this activity by calling
+// Activity.getIntent() and pass it into this method to
+// get the associated string.
+
+private CharSequence getMessageText(Intent intent) {
+    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+    if (remoteInput != null) {
+            return remoteInput.getCharSequence(KEY_TEXT_REPLY);
+            }
+    return null;
+ }
+
+ +

应用可以通过应用逻辑来决定对检索的文本采取哪些操作。对于交互式应用(例如聊天应用),在通知中提供更多上下文(例如多行聊天记录,包括用户自己的消息),以便用户作出相应回复。当用户通过 {@link android.support.v4.app.RemoteInput} 回复时,使用 {@code setRemoteInputHistory()} 方法在回复记录中加入文本。 + + + + + + +

+ +

捆绑通知

+ +

Android N 为开发者提供了表示通知队列的新方法: + 捆绑通知。这类似于 Android Wear 中的通知堆栈功能。 + +例如,如果应用为接收的消息创建通知,那么在接收到多个消息时,应用会将通知捆绑在一起成为一个群组。 + +您可以使用现有的 {@link android.support.v4.app.NotificationCompat.Builder#setGroup +Builder.setGroup()} 方法捆绑类似的通知。 +

+ +

+ 通知组对组内的通知施加层次结构。 + 层次结构的顶层是父级通知,其显示该群组的摘要信息。 +用户可以逐步展开通知组,随着用户深入展开,系统将显示更多信息。 + +当用户展开捆绑包时,系统将显示其所有子通知的更多信息;当用户展开其中一则通知时,系统显示该通知的所有内容。 + + +

+ + +

+ 图 3.用户可以逐步展开通知组。 + +

+ +

要了解如何将通知添加到组,请参阅将各通知添加到组。 + +

+ + +

捆绑通知最佳做法

+

本节提供了有关何时使用通知组而非早期版本 Android 平台中的 {@link android.app.Notification.InboxStyle InboxStyle} 通知的指南。 + + +

+ +

何时使用捆绑通知

+ +

只有在您的用例满足以下所有条件时才应使用通知组: +

+ +
    +
  • 子通知为完整通知,且可以单独显示,无需群组摘要。 +
  • +
  • 单独显示子通知更合理。例如: + +
  • +
      +
    • 子通知可操作,且每个子通知均有特定的操作。
    • +
    • 子通知中包含用户想要查看的更多信息。
    • +
    +
+ +

好的通知组用例示例包括:显示传入消息列表的短信应用,或显示收到的电子邮件列表的电子邮件应用。 + +

+ +

+适合显示单一通知的用例示例包括:从某一个人收到的单独消息,或以列表表示的单行文本项目。 + +您可以使用 {@link android.app.Notification.InboxStyle InboxStyle} 或 +{@link android.app.Notification.BigTextStyle BigTextStyle} 实现此功能。 + + +

+ +

显示捆绑通知

+ +

+ 即使组内仅含有一则子通知,应用也应发布组摘要。 +如果只含有一则通知,系统将取消摘要并直接显示子通知。 +这样可确保用户在滑动切换组内的子通知时,系统仍可以提供一致的用户体验。 + + +

+ +

+ :本版本 Android N 目前还无法在仅含一则子通知时取消通知组的摘要。 +我们将在之后版本的 Android N 中添加此功能。 + +

+ +

扫视通知

+ +

虽然系统通常以群组的方式显示子通知,但您可以进行设置,使其暂时作为浮动通知显示。 + + +该功能非常实用,因为其允许用户立即访问最近的子通知以及与其相关的操作。 + +

+ + +

后向兼容性

+ +

+ 自 Android 5.0(API 级别 21)起,{@link + android.app.Notification} API 中就添加了通知组和远程输入,以支持 Android Wear 设备。 +如果您已经使用这些 API 构建通知,则只需验证应用行为是否符合上述指南,并考虑实现 {@code + setRemoteInputHistory()}。 + + +

+ +

+ 为了支持后向兼容性,支持库的 {@link android.support.v4.app.NotificationCompat} 类中提供了相同的 API,以便您构建可在早期 Android 版本中运行的通知。 + + +在手持式设备和平板电脑上,用户只能看到摘要通知,因此应用应仍提供收件箱式或类似形式的通知显示模式,以显示群组的全部信息内容。 + +鉴于 Android Wear 设备允许用户查看所有子通知,包括更早级别平台上的通知,您应在不依赖 API 级别的基础上构建子通知。 + + + +

+ +

自定义视图

+

从 Android N 开始,您将可以自定义通知视图,同时仍可以使用系统装饰元素,例如通知标头、操作和可展开的布局。 + +

+ +

为启用该功能,Android N 添加了以下 API,以便您样式化自己的自定义视图: +

+ +
+
+{@code DecoratedCustomViewStyle()}
+
样式化除媒体通知外的其他通知。 +
+
+{@code DecoratedMediaCustomViewStyle()}
+
样式化媒体通知。
+
+ +

如需使用这些新 API,可调用 {@code setStyle()} 方法,并向其传递所需的自定义视图样式。 +

+ +

此代码段显示了如何使用 {@code DecoratedCustomViewStyle()} 方法构建自定义通知对象。 +

+ +
+Notification noti = new Notification.Builder()
+           .setSmallIcon(R.drawable.ic_stat_player)
+           .setLargeIcon(albumArtBitmap))
+           .setCustomContentView(contentView);
+           .setStyle(new Notification.DecoratedCustomViewStyle())
+           .build();
+
+
diff --git a/docs/html-intl/intl/zh-cn/preview/features/picture-in-picture.jd b/docs/html-intl/intl/zh-cn/preview/features/picture-in-picture.jd new file mode 100644 index 000000000000..cbf37110d5f9 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/features/picture-in-picture.jd @@ -0,0 +1,186 @@ +page.title=画中画 +page.keywords=preview,sdk,PIP,Picture-in-picture +page.tags=androidn + +@jd:body + + + +

在 Android N 中,Android TV 用户现在可以一边在应用中导航一边在屏幕角落的固定窗口中观看视频。 + +画中画 (PIP) 模式允许应用在固定窗口中运行视频 Activity,同时在后台继续运行另一个 Activity。 + +PIP 窗口让用户可以在使用应用的时候进行多任务处理,从而提高效率。 +

+ +

您的应用可以决定何时触发 PIP 模式。以下是一些关于何时进入 PIP 模式的示例: +

+ +
    +
  • 当用户从视频返回浏览其他内容时,应用将自动进入 PIP 模式。 +
  • +
  • 当用户快看完一集视频时,应用将视频切换到 PIP 模式。 +主屏幕显示有关该系列视频下一集的宣传或摘要信息。 +
  • +
  • 应用将允许用户在观看视频的同时添加其他内容到队列。 +视频继续在 PIP 模式中播放,同时主屏幕显示内容选择 Activity。 +
  • +
+ +

PIP 窗口为 240x135 dp,在屏幕角落的最顶层显示,由系统在四个角落中选择一个角落。 +用户可以调出 PIP 菜单,将 PIP 窗口切换为全屏,或通过按下遥控器上的主页按钮关闭 PIP 窗口。 + +如果主屏幕开始播放另一个视频,PIP 窗口将自动关闭。 + +用户还可以通过“最近使用记录”关闭 PIP 窗口。

+ + +

图 1. 用户在主屏幕上浏览内容时屏幕角落窗口播放画中画视频。 + +

+ +

PIP 利用 Android N 中提供的多窗口 API 显示固定视频层叠窗口。 +如需将 PIP 添加到应用,您需要注册支持 PIP 的 Activity,然后根据需要将 Activity 切换到 PIP 模式,并确保隐藏所有 UI 元素,且 Activity 处于 PIP 模式时视频继续播放。 + + +

+ +

声明您的 Activity 支持画中画

+ +

默认情况下,系统并不自动为应用提供 PIP 支持。如果想要应用支持 PIP,请将 +android:supportsPictureInPicture 和 +android:resizeableActivity 设置为 true,在清单文件中注册视频 Activity。 + +此外,应明确指定 Activity 处理布局配置变更,这样,在 PIP 模式过渡期间发生布局变更时,Activity 不会重新启动。 + +

+ +
+<activity android:name="VideoActivity"
+    android:resizeableActivity="true"
+    android:supportsPictureInPicture="true"
+    android:configChanges=
+        "screenSize|smallestScreenSize|screenLayout|orientation"
+    ...
+
+ +

在注册 Activity 时,请记住,在 PIP 模式中,您的 Activity 在电视屏幕上的小层叠窗口中显示。 +视频播放 Activity 结合以尽量小的 UI 可以实现最佳用户体验。 +在切换到 PIP 模式后,UI 元素较小的 Activity 带来的用户体验可能较差,因为用户在 PIP 窗口中看不到 UI 元素的详细信息。 + + +

+ +

将您的 Activity 切换到画中画模式

+ +在需要将 Activity 切换到 PIP 模式时,请调用 +Activity.enterPictureInPicture()。在下面的示例中,当用户选择媒体控制栏上的专用 PIP 按钮时,系统切换到 PIP 模式: + +

+ +
+@Override
+public void onActionClicked(Action action) {
+    if (action.getId() == R.id.lb_control_picture_in_picture) {
+        getActivity().enterPictureInPicture();
+        return;
+    }
+    ...
+
+ +

在媒体控制栏上添加 PIP 按钮可以方便用户在控制视频播放的同时切换到 PIP 模式。 +

+ + +

图 1. 媒体控制栏上的画中画按钮。 +

+ +

Android N 中包含一个新的 +PlaybackControlsRow.PictureInPictureAction 类,它可以定义控制栏 PIP 操作并使用 PIP 图标。 +

+ +

处理画中画模式中的 UI

+ +

在 Activity 进入 PIP 模式时,Activity 应仅显示视频播放。 +在 Activity 进入 PIP 模式前删除 UI 元素,当 Activity 再次全屏显示时恢复这些元素。重写 Activity.onPictureInPictureChanged() 或 +Fragment.onPictureInPictureChanged(),并根据需要启用或禁用 UI 元素,例如: + + +

+ +
+@Override
+public void onPictureInPictureChanged(boolean inPictureInPicture) {
+    if (inPictureInPicture) {
+        // Hide the controls in picture-in-picture mode.
+        ...
+    } else {
+        // Restore the playback UI based on the playback status.
+        ...
+    }
+}
+
+ +

在画中画模式中继续视频播放 +

+ +

在 Activity 切换到 PIP 模式时,系统会认为 Activity 处于暂停状态,并调用 Activity 的 onPause() 方法。 +如果 Activity 因为 PIP 模式暂停,视频播放不应暂停,而是应继续播放。 + +在 Activity 的 +onPause() 方法中检查 PIP,并对播放做相应处理,例如: +

+ +
+@Override
+public void onPause() {
+    // If called due to PIP, do not pause playback
+    if (inPictureInPicture()) {
+        // Continue playback
+        ...
+    }
+    // If paused but not in PIP, pause playback if necessary
+    ...
+}
+
+ +

当 Activity 退出 PIP 模式并回到全屏模式时,系统会恢复 Activity 并调用 onResume() 方法。 +

+ +

最佳做法

+ +

PIP 用于全屏播放视频的 Activity。在 Activity 切换到 PIP 模式时,应避免显示除视频外的其他内容。根据处理画中画模式中的 UI 中所述,在 Activity 进入 PIP 模式时进行跟踪,并隐藏 UI 元素。 + + +

+ +

由于 PIP 窗口悬浮在屏幕的角落,因此应避免在主窗口被 PIP 窗口遮挡的任何区域显示重要信息。 + +

+ +

当 Activity 处于 PIP 模式时,其默认不获取输入焦点。要在 PIP 模式中接收输入事件,请使用 +MediaSession.setMediaButtonReceiver()。 +

diff --git a/docs/html-intl/intl/zh-cn/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/zh-cn/preview/features/scoped-folder-access.jd new file mode 100644 index 000000000000..eb6db76a1247 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/features/scoped-folder-access.jd @@ -0,0 +1,124 @@ +page.title=作用域目录访问 +page.keywords=preview,sdk,scoped directory access +page.tags=androidn + +@jd:body + + + +

应用(如照片应用)通常只需要访问外部存储中的特定目录,例如 Pictures 目录。 +现有的外部存储访问方法未经专门设计,无法轻松地为这些类型的应用提供目标目录访问。 + +例如:

+ +
    +
  • 在您的清单文件中请求 {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} +或 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} 将允许访问外部存储上的所有公共目录,这可能导致访问的内容超出应用需要的内容。 + +
  • +
  • 使用存储访问框架通常会让您的用户通过一个系统 UI 选取目录,如果应用始终访问同一个外部目录,则该操作没有任何必要。 + + + +
  • +
+ +

Android N 提供简化的全新 API 以访问通用外部存储目录。 +

+ +

访问外部存储目录

+ +

使用 StorageManager 类获取适当的 +StorageVolume 实例。然后,通过调用该实例的 +StorageVolume.createAccessIntent() 方法创建一个 Intent。使用此 Intent 访问外部存储目录。 +若要获取所有可用卷的列表,包括可移动介质卷,请使用 +StorageManager.getVolumesList()。 +

+ +

以下代码段展示如何在主要共享存储中打开 +Pictures 目录:

+ +
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

系统尝试授予对外部目录的访问权限,并使用一个简化的 UI 向用户确认访问权限(如果需要): +

+ + +

图 1. 一个请求访问 Pictures 目录的应用。 +

+ +

如果用户授予访问权限,则系统会调用 +onActivityResult() 重写方法,且结果代码为 +Activity.RESULT_OK,Intent 数据包含 URI。使用提供的 URI 访问目录信息,与使用存储访问框架返回的 URI 类似。 + + + +

+ +

如果用户不授予访问权限,则系统会调用 +onActivityResult() 重写方法,且结果代码为 +Activity.RESULT_CANCELED,Intent 数据为 null。

+ +

:获得特定外部目录的访问权限也会获得该目录中子目录的访问权限。 +

+ +

访问可移动介质上的目录

+ +

若要使用作用域目录访问来访问可移动介质上的目录,首先要添加一个用于侦听 +{@link android.os.Environment#MEDIA_MOUNTED} 通知的 {@link android.content.BroadcastReceiver},例如: +

+ +
+<receiver
+    android:name=".MediaMountedReceiver"
+    android:enabled="true"
+    android:exported="true" >
+    <intent-filter>
+        <action android:name="android.intent.action.MEDIA_MOUNTED" />
+        <data android:scheme="file" />
+    </intent-filter>
+</receiver>
+
+ +

当用户装载可移动介质时,如 SD 卡,系统将发送一则 +{@link android.os.Environment#MEDIA_MOUNTED} 通知。此通知在 Intent 数据中提供一个 StorageVolume 对象,您可用它访问可移动介质上的目录。 + +以下示例访问可移动介质上的 Pictures 目录: +

+ +
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+    mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

最佳做法

+ +

请尽可能保留外部目录访问 URI,这样即不必重复要求用户授予访问权限。 +在用户授予访问权限后,使用目录访问 URI 调用 +getContentResolver().takePersistableUriPermssion()。 +系统将保留此 URI,后续的访问请求将返回 RESULT_OK,且不会向用户显示确认 UI。 + +

+ +

如果用户拒绝授予外部目录访问权限,请勿立即再次请求访问权限。 +一再不停地请求访问权限会导致非常差的用户体验。 +

diff --git a/docs/html-intl/intl/zh-cn/preview/features/security-config.jd b/docs/html-intl/intl/zh-cn/preview/features/security-config.jd new file mode 100644 index 000000000000..dc09c7837513 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/features/security-config.jd @@ -0,0 +1,744 @@ +page.title=网络安全配置 +page.keywords=preview,security,network + +@jd:body + + + + +

+ Android N 包含一个网络安全配置特性,让应用可以在一个安全的声明性配置文件中自定义其网络安全设置,而无需修改应用代码。 + +可以针对特定域和特定应用配置这些设置。 +该特性的主要功能如下所示: + +

+ +
    +
  • + 自定义信任锚:针对应用的安全连接自定义哪些证书颁发机构 (CA) 值得信赖。 +例如,信任特定的自签署证书或限制应用信任的公共 CA 集。 + + +
  • + +
  • + 仅调试重写:在应用中以安全方式调试安全连接,而不会增加安装基数的风险。 + +
  • + +
  • + Cleartext traffic 退出:防止应用意外使用 cleartext traffic。 + +
  • + +
  • + 证书固定:将应用的安全连接限制为特定的证书。 + +
  • +
+ + +

添加安全配置文件

+ +

+ 网络安全配置特性使用一个 XML 文件,您可以在该文件中指定应用的设置。 +您必须在应用的清单文件中包含一个条目来指向该文件。 +以下代码摘自一份清单文件,演示了如何创建此条目: + +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+...
+<app ...>
+    <meta-data android:name="android.security.net.config"
+               android:resource="@xml/network_security_config" />
+    ...
+</app>
+
+ +

自定义信任的 CA

+ +

+ 应用可能需要信任自定义的 CA 集,而不是平台默认值。 +出现此情况的最常见原因包括: +

+ +
    +
  • 连接到具有自定义证书颁发机构(自签署、由公司内部 CA 签发等)的主机。 + +
  • + +
  • 将 CA 集仅限于您信任的 CA,而不是每个预装 CA。 + +
  • + +
  • 信任系统中未包含的附加 CA。 +
  • +
+ +

+ 默认情况下,来自所有应用的安全(例如 TLS、HTTPS)连接均信任预装的系统 CA,而面向 API 级别 23 (Android M) 及更低级别的应用默认情况下还会信任用户添加的 CA 存储。 + +应用可以使用 {@code base-config}(针对应用范围的定制)或 {@code domain-config}(针对每个域的定制)自定义自己的连接。 + + + +

+ + +

配置自定义 CA

+ +

+ 假设您要连接到使用自签署 SSL 证书的主机,或者连接到其 SSL 证书是由您信任的非公共 CA(如公司内部 CA)签发的主机。 + + +

+ +

+ res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ 以 PEM 或 DER 格式将自签署或非公共 CA 证书添加到 +{@code res/raw/my_ca}。 +

+ + +

限制信任的 CA 集

+ +

+ 如果应用不想信任系统信任的所有 CA,则可以自行指定,缩减要信任的 CA 集。 +这样可防止应用信任任何其他 CA 签发的欺诈性证书。 + +

+ +

+ 限制信任的 CA 集的配置与针对特定域信任自定义 CA 相似,不同的是,前者要在资源中提供多个 CA。 + +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">secure.example.com</domain>
+        <domain includeSubdomains="true">cdn.example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/trusted_roots"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ 以 PEM 或 DER 格式将信任的 CA 添加到 {@code res/raw/trusted_roots}。 + 请注意,如果使用 PEM 格式,文件必须仅包含 PEM 数据,且没有额外的文本。 +您还可以提供多个 +<certificates> +元素,而不是只能提供一个元素。 +

+ + +

+ 信任附加 CA +

+ +

+ 应用可能需要信任系统不信任的附加 CA,出现此情况的原因可能是系统还未包含此 CA,或 CA 不符合添加到 Android 系统中的要求。 + +应用可以通过为一个配置指定多个证书源来实现此目的。 + + +

+

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="@raw/extracas"/>
+            <certificates src="system"/>
+        </trust-anchors>
+    </base-config>
+</network-security-config>
+
+

+ + +

配置用于调试的 CA

+ +

+ 调试通过 HTTPS 连接的应用时,您可能需要连接到没有用于生产服务器的 SSL 证书的本地开发服务器。 + +为了支持此操作,而又不对应用的代码进行任何修改, + + 您可以 通过使用 {@code debug-overrides} 指定仅在 +android:debuggable +为 {@code true} 时才信任的仅调试 CA。通常,IDE 和构建工具会自动为非发布版本设置此标志。 + +

+ +

+ 这比一般的条件代码更安全,因为出于安全考虑,应用存储不接受被标记为可调试的应用。 + + +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="@raw/debug_cas"/>
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+

+ + +

退出 Cleartext Traffic

+ +

+ 旨在连接到仅使用安全连接的目标的应用可以选择不再对这些目标提供 cleartext(使用解密的 HTTP 协议而非 HTTPS)支持。 + +此选项有助于防止应用因外部源(如后端服务器)提供的 URL 发生变化而意外回归。 + + + 请参阅 {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted +NetworkSecurityPolicy.isCleartextTrafficPermitted()} 了解更多详情。 +

+ +

+ 例如,应用可能需要确保所有与 {@code +secure.example.com} 的连接始终是通过 HTTPS 完成,以防止来自恶意网络的敏感流量。 + +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config usesCleartextTraffic="false">
+        <domain includeSubdomains="true">secure.example.com</domain>
+    </domain-config>
+</network-security-config>
+
+

+ + +

固定证书

+ +

+ 一般情况下,应用信任所有预装 CA。如果有预装 CA 要签发欺诈性证书,则应用将面临被中间人攻击 (MiTM) 的风险。 + +有些应用通过限制信任的 CA 集或通过证书固定来选择限制其接受的证书集。 + +

+ +

+ 通过按公钥的哈希值(X.509 证书的 SubjectPublicKeyInfo)提供证书集完成证书固定。 +然后,证书链仅在至少包含一个已固定的公钥时才有效。 + + +

+ +

+ 请注意,使用证书固定时,您应始终包含一个备份密钥,这样,当您需要强制切换到新密钥时,或更改 CA 时(固定到某个 CA 证书或该 CA 的中间证书时),您应用的连接性不会受到影响。 + + +否则,您必须推送应用的更新以恢复连接性。 + +

+ +

+ 此外,可以设置固定到期时间,在该时间之后不执行证书固定。 +这有助于防止尚未更新的应用出现连接问题。 +不过,设置固定到期时间可能会绕过证书固定。 + +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <pin-set expiration="2018-01-01">
+            <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+            <!-- backup pin -->
+            <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+    </domain-config>
+</network-security-config>
+
+

+ + +

配置继承行为

+ +

+ 继承未在特定配置中设置的值。此行为允许进行更复杂的配置,同时保证配置文件可读。 + +

+ +

+ 如果未在特定条目中设置值,则使用来自下一个更通用的条目中的值。 +未在 {@code domain-config} 中设置的值从父级 {@code domain-config}(如果已嵌套)或从 {@code +base-config}(如果未嵌套)中获取。 +未在 {@code base-config} 中设置的值使用平台默认值。 + +

+ +

+ 例如,考虑所有与 {@code +example.com} 的子域的连接必须使用自定义 CA 集。此外,允许使用这些域的 cleartext traffic,连接到 {@code + secure.example.com} 时除外。 +通过在 {@code example.com} 的配置中嵌套 {@code +secure.example.com} 的配置,不需要重复 {@code trust-anchors}。 + +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+        <domain-config cleartextTrafficPermitted="false">
+            <domain includeSubdomains="true">secure.example.com</domain>
+        </domain-config>
+    </domain-config>
+</network-security-config>
+
+

+ + +

配置文件格式

+ +

+ 网络安全配置特性使用 XML 文件格式。 + 文件的整体结构如以下代码示例所示: +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </base-config>
+
+    <domain-config>
+        <domain>android.com</domain>
+        ...
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+        <pin-set>
+            <pin digest="...">...</pin>
+            ...
+        </pin-set>
+    </domain-config>
+    ...
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+ +

+ 以下部分介绍语法和文件格式的其他详细信息。 + +

+ +

+ <network-security-config> +

+ +
+
+ 可包含: +
+ +
+ 0 或 1 个 <base-config>
+ 任意数量的 <domain-config>
+ 0 或 1 个 <debug-overrides> +
+
+ +

+ <base-config> +

+ +
+
+ 语法: +
+
+ +
+<base-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</base-config>
+
+
+
+ 可包含: +
+ +
+ <trust-anchors> +
+ +
+ 说明: +
+ +
+ 目标不在 domain-config 涵盖范围内的所有连接所使用的默认配置。 + + +

+ 未设置的任何值均使用平台默认值。面向上述 API 级别 24 及更高级别的应用的默认配置: + +

+ +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+    </trust-anchors>
+</base-config>
+
+面向 API 级别 23 及更低级别的应用的默认配置: +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+        <certificates src="user" />
+    </trust-anchors>
+</base-config>
+
+ +
+
+ +

<domain-config>

+
+
语法:
+
+
<domain-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</domain-config>
+
+ +
可包含:
+ +
+1 个或多个 <domain> +
0 或 1 个 <trust-anchors> +
0 或 1 个 <pin-set> +
任意数量的已嵌套 <domain-config>
+ +
说明
+
用于按照 {@code domain} 元素的定义连接到特定目标的配置。 + +

请注意,如果有多个 {@code domain-config} 元素涵盖某个目标,则使用匹配域规则最具体(最长)的配置。 +

+
+ + +

<domain>

+ +
+
+ 语法: +
+ +
+
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+
+
+ +
+ 属性: +
+ +
+
+
+ {@code includeSubdomains} +
+ +
+ 如果为 {@code "true"},则此域规则与域及所有子域(包括子域的子域)匹配,否则,该规则仅适用于精确匹配项。 + + +
+
+
+ +
+ 说明: +
+
+ +

<debug-overrides>

+ +
+
+ 语法: +
+ +
+
+<debug-overrides>
+    ...
+</debug-overrides>
+
+
+ +
+ 可包含: +
+ +
+ 0 或 1 个 <trust-anchors> +
+ +
+ 说明: +
+ +
+ 当 android:debuggable +为 {@code "true"} 时将应用的重写,IDE 和构建工具生成的非发布版本通常属于此情况。 +将在 {@code +debug-overrides} 中指定的信任锚添加到所有其他配置,并且当服务器的证书链使用其中一个仅调试信任锚时不执行证书固定。 + +如果 android:debuggable +为 {@code "false"},则完全忽略此部分。 +
+
+ +

<trust-anchors>

+
+
+ 语法: +
+ +
+
+<trust-anchors>
+...
+</trust-anchors>
+
+
+ +
+ 可包含: +
+ +
+ 任意数量的 <certificates> +
+ +
+ 说明: +
+ +
+ 用于安全连接的信任锚集 +
+
+ + +

<certificates>

+
+
语法:
+
<certificates src=["system" | "user" | "raw resource"]
+              overridePins=["true" | "false"] />
+
+
说明:
+
用于 {@code trust-anchors} 元素的 X.509 证书集。
+ +
属性:
+
+
{@code src}
+
+CA 证书的来源,可以是 +
    +
  • 指向包含 X.509 证书的文件的原始资源 id。 + 证书必须以 DER 或 PEM 格式编码。如果为 PEM 证书,则文件不得包含额外的非 PEM 数据,如注释。 + + +
  • + +
  • 用于预装系统 CA 证书的 {@code "system"} +
  • + +
  • 用于用户添加的 CA 证书的 {@code "user"} +
  • +
+
+ +
{@code overridePins}
+
+

+ 指定来自此源的 CA 是否绕过证书固定。如果为 {@code +"true"},则为穿过此源的其中一个 CA 的链颁发证书,并且不执行证书固定。 +这对于调试 CA 或支持用户对应用的安全流量进行中间人攻击 (MiTM) 非常有用。 + +

+ +

+ 默认值为 {@code "false"},除非在 {@code debug-overrides} +元素中另外指定(在这种情况下,默认值为 {@code "true"})。 +

+
+
+
+ + +

<pin-set>

+ +
+
+ 语法: +
+ +
+
+<pin-set expiration="date">
+...
+</pin-set>
+
+
+ +
+ 可包含: +
+ +
+ 任意数量的 <pin> +
+ +
+ 说明: +
+ +
+ 公钥固定 (PKP) 集。对于要信任的安全连接,信任链中必须有一个公钥位于 PKP 集中。 +有关固定形式,请参阅 +<pin>。 +
+ +
+ 属性: +
+ +
+
+
+ {@code expiration} +
+ +
+ 采用 {@code yyyy-MM-dd} 格式的日期,在该日期及之后固定过期,因而禁用固定。 +如果未设置该属性,则固定不会过期。 + +

+ 设置到期时间有助于防止不更新到其 PKP 集(例如,由于用户禁用应用更新)的应用出现连接问题。 + + +

+
+
+
+
+ +

<pin>

+
+
+ 语法: +
+ +
+
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+    SubjectPublicKeyInfo (SPKI)</pin>
+
+
+ +
+ 属性: +
+ +
+
+
+ {@code digest} +
+ +
+ 用于生成 PKP 的摘要算法。目前仅支持 +{@code "SHA-256"}。 +
+
+
+
diff --git a/docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd b/docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd new file mode 100644 index 000000000000..1b15879620a4 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd @@ -0,0 +1,120 @@ +page.title=TV 录制 +page.keywords=preview,sdk,tv,recording +page.tags=androidn + +@jd:body + + + +

TV 输入服务允许用户通过时移 API 暂停和继续频道播放。 +Android N 通过允许用户保存多个录制的会话,扩展了时移。 +

+ +

用户可以提前安排录制,或在观看节目时开始录制。 +系统保存录制后,用户即可使用系统 TV 应用浏览、管理和播放录制。 +

+ +

如果想要为 TV 输入服务提供录制功能,您必须指示系统您的应用支持录制,实现录制节目功能,处理和传达录制期间发生的所有错误,并管理录制的会话。 + + +

+ +

指示支持录制

+ +

为了通知系统您的 TV 输入服务支持录制,请执行以下步骤: +

+ +
    +
  1. TvInputService.onCreate() 方法中,使用 TvInputInfo.Builder +类创建一个新的 +TvInputInfo 对象。
  2. +
  3. 创建新的 TvInputInfo 对象时,在调用 build() 之前先调用 +setCanRecord(true),以表明您的服务支持录制。 +
  4. +
  5. 通过调用 +TvInputService.updateTvInputInfo() 在系统中注册 TvInputInfo 对象。
  6. +
+ +

录制会话

+ +

TV 输入服务注册其支持录制功能后,系统会在需要访问应用的录制实现时调用 +TvInputService.onCreateRecordingSession()。 + +实现您自己的 +TvInputService.RecordingSession 子类并在触发 onCreateRecordingSession() 回调后返回它。 + +此子类负责切换到正确的频道数据,录制请求的数据,以及向系统传达录制状态和错误。 + +

+ +

系统调用在频道 URI 中传递的 RecordingSession.onTune() 时,将调到该 URI 指定的频道。 +通过调用 notifyTuned() 通知系统应用已调到所需的频道,或者,如果应用无法调到正确的频道,请调用 notifyError()。 + + +

+ +

系统接下来调用 RecordingSession.onStartRecording() +回调。您的应用必须立即开始录制。系统调用此回调时,它可能会提供一个 URI,其中包含有关将录制的节目的信息。 + +完成录制后,您需要将此数据复制到 RecordedPrograms 数据表。 +

+ +

最后,系统调用 RecordingSession.onStopRecording()。此时,您的应用必须立即停止录制。 +您还需要在 RecordedPrograms 表中创建一个条目。 +此条目应在 +RecordedPrograms.COLUMN_RECORDING_DATA_URI 列中包含录制的会话数据 URI,以及在初始调用 +onStartRecording() 时系统提供的任何节目信息。 + +

+ +

如需了解有关如何访问 RecordedPrograms 表的更多详情,请参阅管理录制的会话。 +

+ +

处理录制错误

+ +

如果录制期间发生错误,使录制的数据无法使用,则通过调用 RecordingSession.notifyError() 通知系统。同样,您可以在创建录制会话后调用 notifyError(),以通知系统您的应用不再录制会话。 + + +

+ +

如果录制期间发生错误,但您想提供可使用的部分录制供用户播放,则调用 +RecordingSession.notifyRecordingStopped() 以使系统可以使用部分会话。 + +

+ +

管理录制的会话

+ +

系统在 TvContract.RecordedPrograms +内容提供程序表中维护来自所有支持录制的频道应用的所有已录制会话的信息。 +此信息可通过 +RecordedPrograms.Uri 内容 URI 访问。使用内容提供程序 API 读取、添加和删除此表中的条目。 +

+ +

如需了解有关使用内容提供程序数据的详细信息,请参阅内容提供程序基本知识。 + +

+ +

最佳做法

+ +

TV 设备的存储可能有限,因此请运用您的最佳判断来分配存储,以保存录制的会话。 +如果没有足够的空间存储录制的会话,请使用 +RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)。 +

+ +

当用户发起录制时,您应尽快开始录制数据。 +为便于执行此操作,请在系统调用 +onCreateRecordingSession() 回调时完成前期的所有耗时任务,如访问和分配存储空间。 +这样做让您能够在触发 onStartRecording() 回调时立即开始录制。 + +

diff --git a/docs/html-intl/intl/zh-cn/preview/index.jd b/docs/html-intl/intl/zh-cn/preview/index.jd new file mode 100644 index 000000000000..3203ce1e9fb5 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/index.jd @@ -0,0 +1,120 @@ +page.title=Android N Developer Preview +page.tags="preview","developer" +meta.tags="Preview", "android" +fullpage=true +forcelocalnav=true +header.hide=1 +footer.hide=1 +@jd:body + + + +
+
+
+ +
+

Android N Developer Preview

+

+ 为 Android N 做好准备! + 在 Nexus 和其他设备上测试您的应用。支持新系统行为以节省电量和内存。 + 使用多窗口 UI 扩展您的应用,以便能够直接答复通知及执行其他操作。 + + +

+ + + + 入门指南 + +
+
+ +
+
+
+
+
+
+
+ + + + + +
+

资源

+
+ 这些必备信息可帮助您的应用为Android N做好准备。 +
+ +
+ +
+
+ diff --git a/docs/html-intl/intl/zh-cn/preview/j8-jack.jd b/docs/html-intl/intl/zh-cn/preview/j8-jack.jd new file mode 100644 index 000000000000..94cc929eda83 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/j8-jack.jd @@ -0,0 +1,183 @@ +page.title=Java 8 语言功能 +page.keywords="android N", "Java 8", "Jack" +@jd:body + + + +

Android N 支持 Java 8 语言功能,您可以在开发面向 Android N 的应用时使用这些功能。本页面介绍了 Android N Preview中支持的新语言功能、如何正确设置项目以使用这些功能,以及您可能遇到的任何已知问题。 + + + + +

+ +

要开始使用这些功能,您需要下载并设置 Android Studio 2.1(预览版)和 Android N Preview SDK,包括所需的 Jack 工具链和更新的 Android Plugin for Gradle。如果您尚未安装 Android N Preview SDK,请参阅 Android N 开发设置。 + + +

+ + + +

+ :开发面向 Android N 平台的应用并不要求必须使用新的 Java 8 语言功能。如果您不想使用 Java 8 语言功能编写代码,您可以将项目的源和目标兼容性值保留为 Java 7,但您仍必须使用 JDK 8 进行编译,以便针对 Android N 平台进行构建。 + + + + +

+ +

+ 支持的 Java 8 语言功能和 API +

+ +

+ Android 目前仅支持部分 Java 8 语言功能。在开发面向 Android N Preview 的应用时,现已可使用以下功能: + + +

+ + + + +

+ 此外,现已可使用以下 Java 8 语言功能 API: +

+ +
    +
  • Reflection 和语言相关 API: +
  • + +
  • +
      +
    • {@code java.lang.FunctionalInterface} +
    • + +
    • {@code java.lang.annotation.Repeatable} +
    • + +
    • {@code java.lang.reflect.Method.isDefault()} +
    • + +
    • 以及与重复注解关联的 Reflection API,例如 + {@code AnnotatedElement.getAnnotationsByType(Class)} +
    • +
    +
  • +
  • Utility API: +
  • + +
  • +
      +
    • {@code java.util.function} +
    • +
    +
  • +
+ +

+ :Android N 的 Lambda 表达式的实现基于匿名类。这种方法使表达式可以向后兼容,并可以在早期版本的 Android 上执行。如需在早期版本上测试 Lambda 表达式,请进入 {@code + build.gradle} 文件,并将 {@code compileSdkVersion} 和 {@code + targetSdkVersion} 设为 23 或更小的值。 + + + +

+ +

+ 启用 Java 8 功能和 Jack 工具链 +

+ +

+ 要使用新的 Java 8 语言功能,还需使用新的 Jack 工具链。新的 Android 工具链将 Java 源语言编译成 Android 可读取的 Dalvik 可执行文件字节码,且有其自己的 {@code .jack} 库格式,在一个工具中提供了大多数工具链功能:重新打包、压缩、模糊化以及 Dalvik 可执行文件分包。 + + + + + +

+ +

以下是构建 Android Dalvik 可执行文件可用的两种工具链的对比:

+
    +
  • 旧版 javac 工具链:
    + javac ({@code .java} --> {@code .class}) --> dx ({@code + .class} --> {@code .dex}) +
  • + +
  • 新版 Jack 工具链:
    + Jack ({@code .java} --> {@code .jack} --> {@code .dex}) +
  • +
+ +

+ 配置 Gradle +

+ +

+ 如需为您的项目启用 Java 8 语言功能和 Jack,请在模块特定的 {@code build.gradle} 文件中输入以下内容: + +

+ +
+android {
+  ...
+  defaultConfig {
+    ...
+    jackOptions {
+      enabled true
+    }
+  }
+  compileOptions {
+    sourceCompatibility JavaVersion.VERSION_1_8
+    targetCompatibility JavaVersion.VERSION_1_8
+  }
+}
+
+ +

+ 已知问题 +

+ +

+ Android Studio 2.0 (Beta) 中引入的 Instant Run 目前不能用于 Jack,在使用新的工具链时将被禁用。 + +

+ +

由于 Jack 在编译应用时不生成中间类文件,依赖这些文件的工具目前不能用于 Jack。例如以下工具: + +

+ +
    +
  • 对类文件进行操作的 Lint 检测工具 +
  • + +
  • 需要应用类文件的工具和库(例如 JaCoCo + 和 Mockito)
  • +
+ +

如果您在使用 Jack 的过程中发现其他问题,请报告错误

\ No newline at end of file diff --git a/docs/html-intl/intl/zh-cn/preview/overview.jd b/docs/html-intl/intl/zh-cn/preview/overview.jd new file mode 100644 index 000000000000..5195ed74d41a --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/overview.jd @@ -0,0 +1,440 @@ +page.title=计划概览 +page.metaDescription=让您的应用做好迎接下一版本 Android 的准备。 +page.image=images/cards/card-n-overview_2x.png +meta.tags=“预览版”, “开发者”, "android" +page.tags="preview", "developer", "android" + +@jd:body + + +

+ 欢迎使用 Android N Developer Preview,此程序将为您提供针对 Android 的下一版本测试和优化应用所需的所有功能。它是免费的,您只需下载 N Developer Preview 工具即可立即使用。 + + + +

+ + + + + + + +
+
+
+
+
+ 硬件和模拟器映像 +
+ +

+ 在各种设备或模拟器上运行并测试应用。 + +

+
+ +
+
+ 最新的平台代码 +
+ +

+ 我们将在 Preview 期间每月提供更新,以便您针对最新的平台变更测试您的应用。 +

+
+ +
+
+ 优先处理开发者问题 +
+ +

+ 在最初的几周里,我们将优先处理开发者报告的问题,所以请尽快测试并提供反馈。 + +

+
+ +
+ +
+ + +
+
+ 新行为和新功能 +
+ +

+ 请尽早开始支持新平台行为并使用新功能进行开发。 +

+
+ +
+
+ 通过 OTA 推送更新 +
+ +

+ 通过 Android Beta 计划,所有支持的设备都可以实现空中下载 (OTA) 无缝更新。无需刷机。 + +

+
+ +
+
+ 反馈和支持 +
+ +

+ 使用 Issue Tracker 向我们报告问题并提供反馈。与 N 开发者社区中的其他开发者建立联系。 + + + +

+
+
+
+
+ + + +

时间表和更新

+ + +

+ N Developer Preview 从 2016 年 3 月 9 日开始使用,到向 AOSP 和 OEM 公开发布最终 Android N 时停止使用,预计将于 2016 年第三季度发布最终版本。 + +

+ +

+ 在开发阶段的各个里程碑,我们将为您的开发和测试环境提供更新。一般每月(间隔 4 到 6 周)会提供一次更新。里程碑列表如下。 + + +

+ +
    +
  • Preview 1(初始版本,alpha)
  • +
  • Preview 2(增量更新,beta)
  • +
  • Preview 3(增量更新,beta)
  • +
  • Preview 4(最终 API 和官方 SDK,在 Play 中发布)
  • +
  • Preview 5(接近最终版本系统映像,用于最终测试)
  • +
  • 向 AOSP 和生态系统发布最终版本
  • +
+ +

+ 每次的更新包括 SDK 工具、预览版系统映像、模拟器、参考文档和 API 差异。 + +

+ +

+ 前三个预览版里程碑提供早期测试和开发环境,帮助您发现当前应用中的兼容性问题,并针对新平台计划必要的迁移或功能工作。这是向我们提供功能和 API 以及文件兼容性问题反馈的优先期 — 请使用 Issue Tracker 进行反馈。在更新期间,API 可能会有变更。 + + + + + + +

+ +

+ 在预览版 4 和 5 中,您将可以使用最终版的 N API 和 SDK 进行开发,以及用于测试系统行为和功能的接近最终版的系统映像。此时 Android N 会提供标准的 API 级别。您可以对旧版应用进行最终的兼容性测试,并优化使用 N API 或功能的新代码。 + + + + +

+ +

+ 此外,从预览版 4 开始,您将可以面向运行正式 API 级别的 Android N 的设备发布应用,例如选择加入 Android Beta 计划的消费者设备。您可以先在 Google Play 的 alpha 和 beta 渠道发布应用,通过 Android Beta 消费者对应用进行测试,然后在商店大范围推广。 + + + + + +

+ +

+ 如果您在 Android N 中进行测试和开发,强烈建议您在发布预览版更新后,将开发环境更新到最新版本。为了方便更新,您可以在 Android Beta 计划中注册您的测试设备,这样就可以在每个里程碑实现空中下载 (OTA) 更新。此外,您还将获得可手动下载并刷入的系统映像。 + + + + + +

+ +

+ 当有预览版更新可用时,我们将通过 Android 开发者博客、此站点以及 Android N 开发者社区通知您。 + + +

+ + +

N Developer Preview 包含的内容

+ +

+ N Developer Preview 包括您在各种使用不同屏幕尺寸、网络技术、CPU/GPU 芯片组和硬件架构的设备中测试现有应用所需的所有功能。 + + +

+ +

SDK 工具

+ +

您可通过 Android Studio 中的 SDK 管理器下载这些组件:

+ +
    +
  • N Developer Preview SDK 和工具 +
  • N Developer Preview 模拟器系统映像(32 位和 64 位) +
  • 适用于 Android TV 的 N Developer Preview模拟器系统映像(32 位) +
  • N Developer Preview 支持库(用于新应用模板) +
+ +

+ 我们将根据需要在每个里程碑为这些开发工具提供更新。 +

+ +

硬件系统映像

+ +

+ N Developer Preview 包含 Nexus 以及可用于在物理设备上进行测试和开发的其他硬件系统映像。如需了解硬件映像的完整列表,请参阅设备映像页面。 + + +

+ +

+ 我们将在每个里程碑为这些设备提供更新的系统映像。您可以手动下载更新的系统映像,并刷入测试设备(如需要,可多次刷入)。这尤其适合需要多次重刷设备的自动化测试环境。 + + + + +

+ +

手动刷入设备将不会像在去年的预览版中一样获得 OTA 更新。今年,您可以通过在 Android Beta 计划中注册设备获得 OTA — 有关详情请参阅下文。 + + + +

+ +

通过 Android Beta 计划获得 OTA 更新

+ +

+ Android N 的一项新功能是空中下载 (OTA) 更新计划,该功能可以将 Android N 最新的预览版更新直接发送到注册该计划的设备。该计划是免费服务,只要您拥有支持的设备并将其注册到 Google 帐户,就可以使用该服务。 + + + +

+ +

+ 如需注册该计划,请访问 Android Beta 计划网站。您将可以看到您的帐户中所有可以注册 Android Beta 的设备。 + + + +

+ +
    +
  1. 选择用于接收 Android N 更新的设备 +
  2. 点击 Enroll,查看并同意服务条款,然后点击 OK。 +
+ +

+ 注册完成后,您的设备将很快收到更新。多数情况下,切换到 Android N 不需要重置所有数据,但建议您在注册设备前对重要数据进行备份,以免丢失。 + + + +

+ +

+ 在设备收到更新后,建议您尽快下载并安装更新,以便在系统 UI、行为、API 和功能中及时同步最新的变更。 + + +

+ +

+ 在 Developer Preview 结束运行时,您的注册设备将收到官方 Android N 版本的更新。 + +

+ +

+ 您可以在 Android Beta 网站上随时注销注册 Android Beta 计划的设备。在注销前,请务必备份设备上的数据。 + + +

+ +

:注销后,您的设备将恢复到最新版本 Android 6.0 Marshmallow 的出厂设置(不一定是您注册设备前安装的版本)。为确保全新安装,您设备中的数据将被擦除,包括联系人、消息和照片等。 + + + + + + +

+ +

文档和示例代码

+ +

+ Developer Preview 网站上提供的以下文档资源有助于您了解 Android N: + +

+ +
    +
  • Android N 开发设置,提供入门指南的分步说明。 + +
  • +
  • 行为变更,带您了解主要测试领域。 +
  • +
  • 新 API 文档,包括 API 概览、可下载的 API 参考资料以及有关主要功能(例如多窗口支持、受限通知、多区域设置支持等)的详细开发者指南。 + + + +
  • 示例代码,演示如何支持权限和其他新功能。 + +
  • N Developer Preview 当前版本的版本说明,包括变更说明和差异报告。 + + +
+ +

可下载的 API 参考资料

+ +

+ 在预览版更新初期,您可以下载最新的 Android N 平台 API 参考资料,作为单独的 Zip 存档。下载的参考资料还包含差异报告,可帮助您识别相对 API 23 和上一次更新 API 的变更。 + + + + +

+ +

+ 在确定最终版本 Android N API 并指定正式 API 级别后,我们将在网站 https://developer.android.com 上提供 API 参考资料。 + +

+ +

+ 支持资源 +

+ +

+ 在 N Developer Preview 中测试和开发时,请使用以下渠道报告问题和提供反馈。 + +

+ +
    +
  • N Developer Preview 的 Issue Tracker 是您的主要反馈渠道。您可通过 Issue Tracker 报告错误、性能问题和一般反馈。您还可以查阅已知问题并找到解决方法。我们将对您的问题进行分类并发送到 Android 工程团队以供审查,且会为您提供进度更新通知。 + + + + +
  • +
  • Android N 开发者社区是一个 Google+ 社区。在此社区中,您可与其他使用 Android N 的开发者建立联系。您可以分享观察结果或想法,或找到 Android N 问题的解决方法。我们将管理社区,并根据需要提供解答和指导。 + + + +
  • +
+ +

锁定目标、预览版 API 和发布

+ +

+ N Developer Preview 提供的系统和 Android 库仅面向开发,不具备标准的 API 级别。如果您想通过拒绝兼容性行为测试您的应用(强烈推荐此做法),则可将应用的 targetSdkVersion 设置为 “N”,从而锁定 Android N 的预览版。 + + + + + +

+ +

+ Android N Developer Preview 提供预览 API 功能 — 在最终版本 SDK 发布之前,这些 API 都不是正式版本。目前,最终版本 SDK 计划于 2016 年第三季度发布。这意味着一段时期内,特别是该计划的最初几周内,API 可能会出现细微更改。我们会通过 Android N Developer Preview 的每次更新为您提供变更摘要。 + + + + + +

+ +

+ :虽然预览版 API 可能会更改,但基本系统行为仍保持稳定,可以立即用于测试。 + + +

+ +

+ Google Play 禁止发布面向 N Developer Preview 的应用。当 Android N 最终版本 SDK 可用时,您可以锁定官方 Android N API 级别,并通过 alpha 和 beta 发布渠道将应用发布至 Google Play。与此同时,如果您想要向测试者推广面向 Android N 的应用,则可通过电子邮件或从您的站点直接下载来实现。 + + + + + +

+ +

+ 在向 AOSP 和 OEM 全面发布 Android N 后(计划在 2016 年第三季度发布),您将可以在 Google Play 的公开发布渠道发布面向 Android N 的应用。 + + +

+ + +

入门指南

+ +

+ 在使用 Android N 测试应用前,请执行以下操作: +

+ +
    +
  1. 查看 API 概览行为变更,大致了解新功能及其对您应用的影响。您尤其需要了解的是新的通知功能和多窗口支持。 + + + +
  2. +
  3. 根据设置 Preview SDK 和配置测试设备的说明设置您的环境。 +
  4. +
  5. 根据刷入说明,对设备刷入最新的 Android N 系统映像。 +
  6. +
  7. 查阅 API 参考资料Android N 示例,更深入地了解新 API 功能以及如何在应用中使用这些功能。 + + +
  8. 加入 Android N 开发者社区,获取最新资讯,并与使用新平台的其他开发者建立联系。 + +
  9. +
+ +

+ 感谢您加入 Android N Developer Preview 计划! +

diff --git a/docs/html-intl/intl/zh-cn/preview/samples.jd b/docs/html-intl/intl/zh-cn/preview/samples.jd new file mode 100644 index 000000000000..5e776983f570 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/samples.jd @@ -0,0 +1,85 @@ +page.title=示例 +page.tags="preview", "samples", "android" +page.image=images/cards/card-n-samples_2x.png +@jd:body + +

+ 以下是 Android N 的代码示例。要在 Android Studio 中下载示例,请选择 File > Import Samples 菜单项。 + + +

+ +

+ 注:这些可下载的项目是专为配合 Gradle 和 Android Studio 使用而设计的。 + +

+ + +

Multi-Window Playground

+ +

+ 此示例演示如何在您的应用中充分利用多窗口用户界面。 + +

+

+ +在 GitHub 中获取 +

+ +
+

活动通知

+ +

+ 这是一个已存在的示例,其显示一个使用 NotificationCompat 发送通知的简单服务。该服务将来自用户的每个未读会话以不同的通知形式发送。 + + +

+

+ 此示例已更新,以充分利用 Android N 中提供的新的通知功能。 + +

+

+ 在 GitHub 中获取 + +

+ +
+

消息传递服务

+ +

+ 这是一个已存在的示例,其演示如何使用 NotificationManager 指示应用当前显示的通知数量。 + + +

+

+ 此示例已更新,以充分利用 Android N 中提供的新的通知功能。 + +

+

+ 在 GitHub 中获取 + +

+ +
+

直接启动

+ +

+ 此示例显示如何在设备加密的存储(启动设备后始终可用)中存储和访问数据。 + +

+

+ 在 GitHub 中获取 + +

+ +
+

作用域目录访问

+ +

+ 此示例演示如何从特定目录读取和写入数据,同时需要较少的权限。 + +

+

+ 在 GitHub 中获取 + +

\ No newline at end of file diff --git a/docs/html-intl/intl/zh-cn/preview/setup-sdk.jd b/docs/html-intl/intl/zh-cn/preview/setup-sdk.jd new file mode 100644 index 000000000000..69fe250e5c65 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/preview/setup-sdk.jd @@ -0,0 +1,226 @@ +page.image=images/cards/card-n-sdk_2x.pngpage.title=设置预览版 +meta.keywords="预览版", "android" +page.tags="preview", "developer preview" + + +@jd:body + + + + +

若要开发适用于 Android N Preview 的应用,您需要对您的开发者环境进行一些更新,如本页所述。 +

+ +

若只是在 Android N 系统映像上测试应用的兼容性,请按照在 Android N 设备上进行测试指南进行操作。 +

+ + + + +

获取 Android Studio 2.1(预览版)

+ +

Android N 平台为 Java 8 语言功能添加支持,该功能需要一个名为 Jack 的新编译器。当前仅在 Android Studio 2.1 中支持最新的 Jack 版本。因此,如果您想要使用 Java 8 语言功能,则必须使用 Android Studio 2.1 构建应用。或者,您不需要使用 Jack 编译器,但仍需要更新至 JDK 8 以便使用 Android N 平台进行编译,如下所述。 + + + + + + +

+ + + +

在 Canary 发布渠道中,Android Studio 2.1 当前可以预览版的形式提供。如果您已拥有 Android Studio 且不需要更新到 Canary 发布渠道,您可通过单独安装的形式下载 Android Studio 2.1,并使用它在 Android N 中进行开发,从而使您的主要 Android Studio 环境不受影响。 + + + + +

+ +

若要以单独安装的形式下载 Android Studio 2.1,则按照以下步骤进行操作(或者如果想要收到 Android Studio 2.1 作为现有安装的更新,则跳过第 4 步): + +

+ +
    +
  1. 编辑现有 Android Studio 安装的名称并追加版本号。通过此方式,当您安装新版本时,新版本不会重写现有的版本。 + +
  2. +
  3. Canary 发布渠道下载页面为您的操作系统下载适当的 ZIP 文件。 + +
  4. +
  5. 将软件包解压缩,并将 Android Studio 2.1 内容移到您系统上相应的应用位置,然后启动它。 +
  6. +
  7. 打开 Settings 对话框(在 Windows/Linux 上打开 File > Settings,或在 Mac 上打开 Android Studio > Preferences)。在左侧面板中,选择 Appearance & Behavior > System Settings > Updates。 + + + + +
  8. +
  9. 在 Updates 面板上,选中 Automatically check updates for复选框,并从下拉列表中选择 Canary Channel。 + + +
  10. +
+ +

保持此设置窗口处于打开状态,以执行下一步。

+ + +

获取 N Preview SDK

+ +

开始使用 Android N API 进行开发时,您需要按如下所示在 Android Studio 中安装 Android N Preview SDK: +

+ +
    +
  1. 同时还查看 Updates 面板(来自上面的第 4 步),选中 Automatically check updates for Android SDK 复选框,然后从下拉列表中选择 Preview Channel。 + + + +
  2. +
  3. 点击 Check Now
  4. + +
  5. 在左侧面板中,选择 Appearance & Behavior > System Settings > Android SDK。 + + +
  6. 点击 SDK Platforms 选项卡,然后选中 Android N Preview 复选框。 +
  7. + +
  8. 点击 SDK Tools 选项卡,然后选中 Android SDK Build ToolsAndroid SDK Platform-ToolsAndroid SDK Tools 复选框。 + + + +
  9. + +
  10. 点击 OK,然后接受需要安装的所有软件包的许可协议。 + +
  11. +
+ +

获取 N Preview 参考文档

+ +

+ 有关 Android N API 的详细信息可在 N Preview 参考文档中获取,您可以从下表下载该文档。此软件包包含一个离线的删节版 Android 开发者网站,并包含更新的 API 参考(适用于 Android N API),以及一个 API 差异报告。 + + + + +

+ + + + + + + + + + +
文档校验和
+ n-preview-1-docs.zip + MD5:4ab33ccbe698f46f125cc5b807cf9c2f
+ SHA-1:6a3880b3ccd19614daae5a4d0698ea6ae11c20a5 +
+ + + +

获取 Java 8 JDK 和 JRE

+ +

若要使用 Android N 平台编译您的应用,您需要使用 Java 8 Developer Kit (JDK 8),同时为了在 Android Studio 2.1 中使用一些工具,您需要安装 Java 8 Runtime Environment (JRE 8)。因此,如果您还没有每个软件的最新版本,请立即下载 JDK 8 和 JRE 8。 + + + +

+ +

然后,按如下所示在 Android Studio 中设置 JDK 版本:

+ +
    +
  1. 在 Android Studio 中打开 Android 项目,然后通过选择 File > Project Structure 打开“Project Structure”对话框。(或者,您可以通过选择 File > Other Settings > Default Project Structure 设置所有项目的默认值。) + + + + +
  2. +
  3. 在对话框的左侧面板中,点击 SDK Location。 +
  4. +
  5. JDK Location 字段中,输入 Java 8 JDK 的位置(点击右侧的按钮可浏览您的文件),然后点击 OK。 + + +
  6. +
+ + + + +

更新或创建一个项目

+ +

+ 若要使用 Android N API,则必须正确配置您的项目。 +

+ +

如果您计划使用 Java 8 语言功能,您还应阅读 Java 8 语言功能,以更详细的了解支持的 Java 8 功能,以及如何使用 Jack 编译器配置项目。 + + +

+ + +

更新现有项目

+ +

打开模块的 build.gradle 文件,并按如下所示更新值: + + +

+ +
+android {
+  compileSdkVersion 'android-N'
+  buildToolsVersion '24.0.0-rc1'
+  ...
+
+  defaultConfig {
+     minSdkVersion 'N'
+     targetSdkVersion 'N'
+     ...
+  }
+  ...
+}
+ + +

创建新项目

+ + +

若要使用 Android N Preview SDK 创建新的开发项目:

+ +
    +
  1. 点击 File > New Project。按照步骤进行操作,直到您到达“Target Android Devices”页面。 + +
  2. +
  3. 在此页面上,选择 Phone and Tablet 选项。
  4. +
  5. Phone and Tablet 选项下,从 Minimum SDK 选项列表中,选择 N: Android API 23, N Preview (Preview)。 + +
  6. +
+ + +

后续步骤

+ + + diff --git a/docs/html-intl/intl/zh-tw/preview/api-overview.jd b/docs/html-intl/intl/zh-tw/preview/api-overview.jd new file mode 100644 index 000000000000..aeace5bdddb2 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/api-overview.jd @@ -0,0 +1,676 @@ +page.title=適用於開發人員的 Android N +meta.tags="preview", "androidn" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-apis_2x.png +@jd:body + + + + + + + + +

Android N 仍在開發中,但是您現在可以透過「N Developer Preview」來試用。下面各節重點說明適用於開發人員的一些新功能。 + +

+ +

+ 請務必查看行為變更以瞭解哪些平台變更部分會影響您的應用程式、閱讀開發人員指南以瞭解主要功能,以及下載 API 參考資料以深入瞭解新 API 的詳細資訊。 + + + +

+ +

多視窗支援

+ + +

在 Android N 中,我們將許多人要求的新多工功能引進到平台 — 多視窗支援。 +

+ +

使用者現在可以一次在螢幕上開啟兩個應用程式。

+
    +
  • 在執行 Android N 的手機與平板電腦上,使用者可以在分割畫面模式中並排或上下排列兩個應用程式。只要拖曳兩個應用程式之間的分隔線,即可調整其大小。 + + +
  • + +
  • 在 Android TV 裝置上,應用程式可以將本身放入子母畫面模式,讓它們持續顯示內容,同時使用者可以瀏覽其他應用程式或與其互動。請參閱下面內容,以瞭解更多資訊。 + +
  • +
+ +
+ +

+ 圖 1. 在分割畫面模式中執行的應用程式。 +

+
+ +

特別是平板電腦與其他螢幕較大的裝置,多視窗支援為您提供吸引使用者的新方式。您甚至可以在應用程式中啟用拖放功能,讓使用者便利地從應用程式拖放內容 — 這是增強您的使用者體驗的絕佳方式。 + + +

+ +

將多視窗支援新增到您的應用程式並設定它處理多視窗顯示的方式是很直接的作法。例如,您可以指定活動的最小可允許尺寸,避免使用者將活動的尺寸調整到低於該尺寸。您也可以停用應用程式的多視窗顯示,以確保系統只以全螢幕模式顯示您的應用程式。 + + + +

+ +

+ 如需詳細資訊,請參閱多視窗支援開發人員文件。 + +

+ +

通知增強功能

+ +

我們已重新設計 Android N 中的通知,讓它們更易於使用、速度更快。一些變更包括: +

+ +
    +
  • + 範本更新:我們已更新通知範本,在主圖影像和虛擬人偶放入的新強調。開發人員只需對程式碼進行最少的調整,即可發揮新範本的所有功能。 + + +
  • + +
  • + 整合式通知:系統可以將訊息群組到一起 (例如依訊息主題) 並顯示群組。使用者可以直接在群組上執行動作,如「關閉」或「封存」。如果您已實作 Android Wear 的通知,則已經熟悉此模式。 + + + + +
  • + +
  • + 直接回覆:對於即時通訊應用程式,Android 系統支援內嵌回覆,這樣使用者就能直接在通知介面內快速回應簡訊或文字訊息。 + + +
  • + +
  • + 自訂檢視:兩個新的 API 讓您在通知中使用自訂檢視時可利用系統的裝飾,例如通知標題與動作。 + + +
  • +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +

+ 圖 2. 整合式通知與直接回覆。 +

+ +

如果要瞭解如何實作新的功能,請參閱通知指南。 + +

+ + + +

設定檔指引 JIT/AOT 編譯

+ +

在 Android N 中,我們新增了 Just in Time (JIT) 編譯器搭配程式碼分析工具到 ART,讓 Android 應用程式在執行時能夠持續改善其效能。JIT 編譯器補充了 ART 目前的 Ahead of Time (AOT) 編譯器,協助改善執行階段效能、節省儲存空間以及加速應用程式更新和系統更新。 + + + +

+ +

設定檔指引編譯讓 ART 根據每個應用程式的實際用情形與裝置上的情況來管理其 AOT/JIT 編譯。例如,ART 會維護每個應用程式常用方法的設定檔,而且可以預先編譯和快取那些方法以獲得最佳效能。它不會編譯應用程式的其他部分,直到實際要使用這些部分時才會編譯。 + + + +

+ +

除了改善應用程式關鍵部分的效能以外,設定檔指引編譯還有助於降低應用程式的整體 RAM 使用量,包括關聯的二進位檔案。此功能對於低記憶體裝置特別重要。 + +

+ +

ART 透過對裝置電池產生最小影響的方式來管理設定檔指引編譯。它只會在裝置閒置和充電時預先編譯,這種預先工作的方式可以節省時間和電池電力。 + +

+ +

應用程式安裝的快速路徑

+ +

ART JIT 編譯器的最實質好處之一是加速應用程式安裝和系統更新。即使是在 Android 6.0 上需要數分鐘來最佳化和安裝的大型應用程式,現在只需幾秒鐘就可以安裝。系統更新也會變得更快,因為不再需要最佳化步驟。 + + +

+ +

移動時休眠...

+ +

Android 6.0 引進休眠功能,這是可節省電池電力的系統模式,它會在裝置閒置時 (例如放在桌子上或抽屜中) 延後應用程式的 CPU 與網路活動。 + +

+ +

現在 Android N 中的休眠功能更進一步進展,可在移動時節省電池電力。只要螢幕關閉一段時間且裝置拔除電源的情況下,休眠功能就會將熟悉的 CPU 與網路限制的子集套用到應用程式。這表示即使使用者將裝置放在口袋內時也可以節省電池電力。 + + + +

+ + + +

+ 圖 3. 休眠功能現在可套用限制,即使裝置沒有固定在一處時,也能改善電池使用時間。 + +

+ + +

當裝置使用電池時,在螢幕關閉短時間後,休眠功能會限制網路存取並延遲工作與同步處理。在短暫的維護時段中,應用程式可存取網路並執行延遲的工作/同步處理。裝置螢幕開啟或插上電源可讓裝置離開休眠狀態。 + + + +

+ +

當裝置再次固定不動,且螢幕關閉並使用電池一段時間後,休眠功能會在 +{@link +android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} 鬧鐘和 GPS/Wi-Fi 掃描上套用完整的 CPU 與網路限制。 +

+ +

讓應用程式適應休眠功能的最佳做法,無論裝置在移動中或固定不動都是一樣的,所以如果您已經更新應用程式使其能夠處理休眠,就完全沒問題。如果沒有,現在就讓您的應用程式適應休眠功能。 + + +

+ +

專案 Svelte:背景最佳化

+ +

專案 Svelte 一直努力在生態系統中讓各種 Android 裝置上系統與應用程式使用最少的 RAM。在 Android N 中,「專案 Svelte」專注於最佳化應用程式在背景執行的方式。 + +

+ +

背景處理是大多數應用程式的必要部分。如果正確地處理,它可讓您擁有令人驚歎的使用者體驗 — 立即、快速、內容感知。如果沒有適當處理,背景處理就會不必要地耗用 RAM (與電池電力),而且影響其他應用程式的系統效能。 + + +

+ +

自 Android 5.0 開始,{@link android.app.job.JobScheduler} 就以適合使用者的偏好方式來執行背景工作。應用程式可以排程工作,同時讓系統根據記憶體、電源和連線狀況進行最佳化。JobScheduler 提供控制權和簡潔性,我們希望所有應用程式都使用它。 + + + +

+ +

+ 另一個好用的選項是 GCMNetworkManager,它屬於 Google Play 服務的一部分,提供類似的工作排程功能,可與舊版 Android 相容。 + + + +

+ +

我們會繼續擴充 JobSchedulerGCMNetworkManager 以滿足您的更多使用案例 — 例如,在 Android N 中,現在您可以根據內容提供者中的變更來排程背景工作。同時,我們也開始取代一些會降低系統效能 (特別是低記憶體裝置) 的較舊模式。 + + + + +

+ +

在 Android N 中,我們移除了三個常用的隱含廣播 — {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}、{@link + android.hardware.Camera#ACTION_NEW_PICTURE} 和 {@link + android.hardware.Camera#ACTION_NEW_VIDEO} — 因為它們會一次喚醒多個應用程式的背景處理程序,而耗盡記憶體與電池電力。如果您的應用程式收到這些廣播,請改為使用「N Developer Preview」遷移到 JobScheduler 與相關的 API。 + + + +

+ +

+ 看看背景最佳化文件,以瞭解詳細資訊。 + +

+ + +

Data Saver

+ +
+ + +

+ 圖 4. [設定] 中的 Data Saver。 +

+
+ +

在行動裝置的使用壽命期間,行動數據方案的費用通常會超過裝置本身的費用。對於許多使用者而言,行動數據是他們想要節省的昂貴資源。 + +

+ +

Android N 引進 Data Saver 模式,這是一個新的系統服務,有助於降低應用程式的行動數據用量,無論是漫遊、接近帳單週期結束時或小量預付數據包。Data Saver 讓使用者控制應用程式如何使用行動數據,也讓開發人員在 Data Saver 開啟時提供更有效率的服務。 + + + +

+ +

當使用在 [設定] 中啟用 Data Saver 且裝置使用計量付費網路時,系統會封鎖背景數據使用量,並指示前景的應用程式盡量使用較少的數據 — 例如,限制串流的位元率、降低影像品質、延遲開放式預先快取等等。使用者可以將特定應用程式新增到允許清單,以便即使在 Data Saver 為開啟狀態時,這些應用程式仍可在背景使用計量付費的數據使用量。 + + + + +

+ +

Android N 擴充 {@link android.net.ConnectivityManager} 為應用程式提供擷取使用者的 Data Saver 喜好設定監視喜好設定變更的方法。所有應用程式應該檢視使用者是否已啟用 Data Saver 並努力限制前景與背景的數據使用量。 + + + +

+ + +

快速設定磚 API

+ + +
+ + +

+ 圖 5. 通知欄中的快速設定磚。 +

+ + +

快速設定是直接從通知欄顯示關鍵設定與動作的常用簡單方式。在 Android N 中,我們擴充了快速設定的範圍,讓它變得更實用、更便利。 + +

+ +

我們也為額外的快速設定磚增加了更多空間,使用者可以透過向左或向右撥動存取分頁顯示區域。我們也讓使用者能夠控制要顯示的快速設定磚與顯示位置 — 使用者只需拖放磚,即可新增或移除它們。 + + +

+ +

對於開發人員,Android N 也加入了新的 API,讓您定義自己的快速設定磚,以便使用者輕鬆存取您應用程式中的關鍵控制項與動作。 +

+ +

+ 快速設定磚是專為急需或常用的控制項或動作而保留的,它不應該做為啟動應用程式的捷徑。 + + +

+ +

+ 定義磚之後,您即可將它們顯示給使用者,使用者只需拖放這些磚,即可將它們新增到快速設定中。 + +

+ +

+ 如需建立應用程式磚的相關資訊,請參閱可下載之 API 參考資料中的 android.service.quicksettings.Tile。 + +

+ + + +

拒接號碼

+ +

Android N 現在在平台中支援拒接號碼,並提供一個架構 API,讓服務提供者維護一份拒接號碼清單。預設的簡訊應用程式、預設的電話應用程式與提供者應用程式可以讀取及寫入拒接號碼清單。其他應用程式無法存取該清單。 + + +

+ +

透過讓拒絕號碼成為平台上的標準功能,Android 為應用程式提供一個一致的方式,讓它們在各種裝置上都能支援拒接號碼。應用程式可以利用的其他好處包括: + +

+ +
    +
  • 如果為某個號碼設定來電拒接,也會拒收該號碼的簡訊 +
  • 透過備份與還原功能,即使經過重設或使用不同的裝置,也可持續保存 + +
  • 多個應用程式可使用同一份拒接號碼清單 +
+ +

此外,透過 Android 整合行動通訊業者應用程式,表示行動通訊業者可以讀取裝置上的拒接號碼清單並為使用者執行服務端的拒接號碼,因此停止拒接號碼的來電和簡訊透過任何媒體 (例如 VOIP 端點或來電轉接) 連絡到使用者。 + + +

+ +

+ 如需詳細資訊,請參閱可下載之 API 參考資料中的 android.provider.BlockedNumberContract。 + + +

+ +

來電過濾

+ +

+ Android N 能讓預設電話應用程式過濾來電。電話應用程式執行的方法是實作新的CallScreeningService,它可以讓電話應用程式根據來電的 {@link android.telecom.Call.Details Call.Details} 來執行數個動作,例如: + + + +

+ +
    +
  • 拒接來電 +
  • 不允許將來電記錄到通話紀錄 +
  • 不對使用者顯示來電通知 +
+ +

+ 如需詳細資訊,請參閱可下載之 API 參考資料中的 android.telecom.CallScreeningService。 + + +

+ + +

多地區設定支援,更多語言

+ + +

Android N 現在可讓使用者在 [設定] 中選取多個地區設定,以便以更好的方式支援雙語言使用案例。應用程式可以使用新的 API 取得使用者選取的地區設定,然後為多地區設定使用者提供更精細的使用者體驗 — 例如以多語言顯示搜尋結果,以及不為使用者已經熟知語言的網頁提供翻譯。 + + + + +

+ +

除了多地區設定支援,Android N 也擴充了供使用者選用的語言選項。它為每種常用語言 (例如英文、西班牙文、法文與阿拉伯文) 提供 25 種變體。它也增加了對 100 種以上新語言的支援。 + + +

+ +

應用程式呼叫 LocaleList.GetDefault() 即可取得使用者設定的地區設定清單。為了支援擴充的地區設定數目,Android N 變更了它解析資源的方式。請務必測試並確認您的應用程式使用新的資源解析邏輯時可正常運作。 + +

+ +

如果要深入瞭解新的資源解析行為與應該遵循的最佳做法,請參閱多語言支援。 +

+ +

Android 中的 ICU4J API

+ +

+ Android N 現在在 android.icu 套件下的 Android 架構中提供一個 ICU4J API 子集。遷移很容易,大部分要承擔只是從 com.java.icu 命名空間變更為 android.icu 即可。如果您已經在應用程式中使用 ICU4J 套件組合,只要切換到 Android 架構中提供的 android.icu API,即可顯著縮減 APK 的大小。 + + + + + +

+ +

+ 如果要深入瞭解 Android ICU4J API,請參閱 ICU4J 支援。 +

+ + + +

OpenGL™ ES 3.2 API

+ +

Android N 針對 OpenGL ES 3.2 新增架構介面與平台支援,包括:

+ +
    +
  • Android 延伸套件 (AEP) 中的所有延伸套件,但 EXT_texture_sRGB_decode 除外。 +
  • HDR 的浮點畫面緩衝區與延遲著色。 +
  • BaseVertex 繪圖呼叫 (可啟用更好的批次處理與串流)。 +
  • 穩定的緩衝區存取控制 (可降低 WebGL 額外負荷)。 +
+ +

Android N 上 OpenGL ES 3.2 的架構 API 提供 GLES32 類別。使用 OpenGL ES 3.2 時,請務必在宣示說明檔案中使用 <uses-feature> 標籤與 android:glEsVersion 屬性宣告需求。 + + +

+ +

如需使用 OpenGL ES (包括如何在執行階段檢查裝置支援的 OpenGL ES 版本) 的詳細資訊,請參閱 OpenGL ES API 指南。 +

+ + +

Android TV 錄製

+ +

Android N 透過新的錄製 API,新增了錄製和播放 Android TV 輸入服務內容的功能。以現有的時間位移 API 為建置基礎,TV 輸入服務可以控制要錄製哪個頻道的資料、如何儲存已錄製的時段,以及管理使用者與錄製內容的互動。 + + +

+ +

如需詳細資訊,請參閱 Android TV 錄製 API

+ + +

Android for Work

+ +

Android for Work 為執行 Android N 的裝置增加了許多新的功能與 API。一些亮點如下所示 — 如需與 Android N 相關之 Android for Work 更新的完整清單,請參閱「Android for Work 變更」。 + +

+ +

工作設定檔安全性查問

+ +

+ 設定檔擁有者可以為以工作設定檔執行之應用程式指定個別的安全性查問。當使用者嘗試開啟任何工作應用程式時會顯示工作查問。成功完成安全性查問可將工作設定檔解鎖並在必要時將它解密。對於設定檔擁有者而言,ACTION_SET_NEW_PASSWORD 會提示使用者設定工作查問,而且 ACTION_SET_NEW_PARENT_PROFILE_PASSWORD 會提示使用者設定裝置鎖定。 + + + + + + +

+ +

+ 設定檔擁有者可以使用 setPasswordQuality()setPasswordMinimumLength() 與相關方法,為工作查問設定各自的密碼原則 (例如,需要 PIN 的時間長度,或是否使用指紋來將設定檔解鎖)。設定檔使用者也可以使用新的 getParentProfileInstance() 方法傳回的 DevicePolicyManager 執行個體來設定裝置鎖定。此外,設定檔擁有者還可以使用新的 setOrganizationColor()setOrganizationName() 方法,為工作查問自訂認證畫面。 + + + + + + + + +

+

關閉工作

+ +

在具有工作設定檔的裝置上,使用者可以切換工作模式。當工作模式關閉時,受管理的使用者會暫時關機,因此而停用工作設定檔應用程式、背景同步與通知。這也包括設定檔擁有者應用程式。當工作模式關閉時,系統會顯示持續的狀態圖示,提醒使用者他們無法啟動工作應用程式。啟動器會指出工作應用程式和小工具無法存取。 + + + + +

+ +

一律開啟的 VPN

+ +

裝置擁有者和設定檔擁有者可確保工作應用程式一律透過指定的 VPN 連線。系統會自動在裝置開機時啟動該 VPN。 + +

+ +

+ 新的 DevicePolicyManager 方法是 setAlwaysOnVpnPackage()getAlwaysOnVpnPackage()。 + + +

+ +

因為系統無需透過應用程式互動即可直接連結 VPN 服務,所以 VPN 用戶端需要為「一律開啟的 VPN」處理新的進入點。正如以往,透過符合動作 android.net.VpnService 的意圖篩選器向系統指明服務。 + + +

+ +

+ 使用者也可以使用 [設定] > [更多] > [VPN] 手動設定「一律開啟的 VPN」用戶端,這些用戶端在主要使用者中實作 VPNService 方法。 + + +

+ +

協助工具增強功能

+ +

Android N 現在為新的裝置設定在歡迎畫面上直接提供「視覺設定」。這讓使用者更易於在自己的裝置上探索及設定協助工具功能,包括放大手勢、字型大小、顯示大小和 TalkBack。 + + +

+ +

將這些協助工具功能放置在更為顯眼的地方,您的使用者較可能在啟用它們的情況下試用您的應用程式。請務必儘早在啟用這些設定的情況下測試您的應用程式。您可以從 [設定] > [協助工具] 啟用它們。 + + +

+ +

此外,在 Android N 中,協助工具服務現在也可以協助行動不便的使用者觸控螢幕。新的 API 允許使用臉部追蹤、眼睛追蹤、點掃描等功能來建置服務,以滿足這些使用者的需要。 + + +

+ +

如需詳細資訊,請參閱可下載之 API 參考資料中的 android.accessibilityservice.GestureDescription。 +

+ + +

直接開機

+ +

直接開機可加速裝置啟動時間,並讓已註冊的應用程式只能使用有限的功能 (即使在未預期的重新開機之後)。例如,如果一個加密裝置在使用者睡覺時重新開機,已註冊的鬧鐘、訊息與來電現在可以持續如常通知使用者。這也表示協助工具服務在重新啟動之後可立即使用。 + + + + +

+ +

直接開機利用 Android N 中以檔案為基礎的加密,能夠為系統與應用程式資料使用更精細的加密原則。系統為特定系統資料與明確註冊的應用程式資料使用裝置加密存放區。在預設情況下,所有其他系統資料、使用者資料、應用程式與應用程式資料都會使用認證加密存放區。 + + + +

+ +

開機時,系統會以限制模式啟動,它只能存取裝置加密的資料,而無法對應用程式或資料進行一般存取。如果您有想要在這個模式下執行的元件,可以在宣示說明中設定旗標來註冊這些元件。重新啟動之後,系統會透過廣播 LOCKED_BOOT_COMPLETED 意圖來啟用已註冊的元件。系統會確保已註冊的裝置加密應用程式資料可供使用之後才會解除鎖定。所有其他資料都無法使用,直到使用者確認他們的鎖定畫面認證之後,才會將這些資料解密。 + + + + + + +

+ +如需詳細資訊,請參閱直接開機

+

+ + +

金鑰證明

+ +

硬體支援的金鑰存放區為 Android 裝置上密碼編譯金鑰的建立、儲存及使用提供更安全的方法。它們可保護金鑰不受 Linux 核心、可能的 Android 弱點和從已解鎖裝置擷取的傷害。 + + +

+ +

為了讓使用硬體支援的金鑰存放區更易於使用且更安全,Android N 引進金鑰證明。應用程式與裝置外部服務可以使用金鑰證明,毫不懷疑地判斷 RSA 或 EC 金鑰組是否有硬體支援、金鑰組的屬性是哪些以及它的用法和有效性上套用哪些限制條件。 + + + +

+ +

應用程式與裝置外部服務可以透過 X.509 證明憑證 (必須以有效的證明金鑰簽署) 來要求有關金鑰組的資訊。證明金鑰是 ECDSA 簽署金鑰,它在裝置出廠時就已內嵌到其中的硬體支援金鑰存放區。因此,以有效證明金鑰簽署的證明憑證可確認裝置上有硬體支援的金鑰存放區,以及該金鑰儲存區中包含之金鑰組的詳細資訊。 + + + + + +

+ +

為了確保裝置使用安全的官方 Android 出廠映像,金鑰證明要求裝置的開機載入器信任執行環境 (TEE) 提供下列資訊: + + +

+ +
    +
  • 裝置上安裝的作業系統版本與修補程式層級
  • +
  • Verified Boot 公開金鑰與鎖定狀態
  • +
+ +

如需硬體支援的金鑰存放區功能的詳細資訊,請參閱硬體支援的金鑰存放區指南。 +

+ +

除了金鑰證明之外,Android N 還引進連結指紋的金鑰,在註冊指紋時並不會撤銷。 +

+ +

網路安全性設定

+ +

在 Android N 中,應用程式可以安全地自訂其安全 (HTTPS、TLS) 連線的行為,無需修改任何程式碼,方法是使用宣告式的網路安全性設定,而不是使用容易出錯的傳統程式設計 API (例如 X509TrustManager)。 + + +

+ +

支援的功能:

+
    +
  • 自訂信任錨點。讓應用程式為它的安全連線自訂要信任哪個憑證授權單位 (CA)。例如,信任特定的自我簽署憑證或一組限制的公用 CA。 + + +
  • +
  • 僅偵錯覆寫。讓應用程式開發人員安全地為應用程式的安全連線進行偵錯,而不會造成已安裝應用程式之使用者的風險。 + + +
  • +
  • 退出明碼流量。讓應用程式保護自身,不被意外使用明碼流量所危害。 +
  • +
  • 憑證關聯。這個進階功能可讓應用程式為安全連線限制要信任的伺服器金鑰。 +
  • +
+ +

如需詳細資訊,請參閱網路安全性設定。 +

+ +

預設的信任憑證授權單位

+ +

根據預設,以 Android N 為目標的應用程式只信任系統提供的憑證,而不再信任使用者新增的憑證授權單位 (CA)。以 Android N 為目標且想要信任使用者新增之 CA 的應用程式,應該使用網路安全性設定來指定信任使用者 CA 的方法。 + + + +

+ +

APK 簽章配置第 2 版

+ +

PackageManager 類別現在支援使用 APK 簽章配置第 2 版來驗證應用程式。APK 簽章配置第 2 版是全檔案簽章配置,可透過偵測對 APK 檔案所做的任何未授權變更,大幅改善驗證速度並增強完整性保證。 + + +

+ +

為了維持回溯相容性,APK 必須先以第 1 版簽章配置 (JAR 簽章配置) 簽署,然後再用第 2 版簽章配置簽署。有了第 2 版簽章配置,如果以第 2 版配置簽署之後,以其他憑證簽署 APK,驗證會失敗。 + + +

+ +

「N Developer Preview」稍後將提供對 APK 簽章配置第 2 版的支援。 +

+ +

限定範圍目錄存取

+ +

在 Android N 中,應用程式可以使用新的 API 來要求存取特定外部儲存空間目錄,包括抽取式媒體 (例如 SD 卡) 上的目錄。新的 API 大幅簡化應用程式存取標準外部儲存空間目錄 (例如 Pictures 目錄) 的方法。相片應用程式之類的應用程式可以使用這些 API 而非使用 READ_EXTERNAL_STORAGE,這樣能夠授予對所有儲存空間目錄的存取權,或是使用「儲存空間存取架構」,讓使用者可以瀏覽到目錄。 + + + + + + +

+ +

此外,新的 API 也簡化了使用者授予外部儲存空間存取權給您的應用程式時所需採取的步驟。當您使用新的 API 時,系統會使用簡單的權限 UI,清楚地詳細說明應用程式要求存取的目錄。 + + +

+ +

如需詳細資訊,請參閱限定範圍目錄存取開發人員文件。 + +

+ + + + + + diff --git a/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd b/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd new file mode 100644 index 000000000000..fb1c1db83cff --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd @@ -0,0 +1,480 @@ +page.title=行為變更 +page.keywords=preview,sdk,compatibility +meta.tags="preview", "compatibility" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-changes_2x.png +@jd:body + + + + + +

+ 除了新特性和功能之外,Android N 還包括各種不同的系統與 API 行為變更。此文件將強調說明一些您應該知道且在您的應用程式中加以考量的重要變更。 + + + +

+ +

+ 如果您先前曾發佈過適用於 Android 的應用程式,請注意,您的應用程式可能會受到平台中的這類變更所影響。 + +

+ + +

效能改良

+ +

+ Android N 包含的系統行為變更旨在提升裝置的電池使用時間、改進 RAM 使用狀況與應用程式效能。這些變更會影響應用程式的系統資源可用性與系統通知。您應該檢閱這些變更並評估應用程式需要如何據以調整。 + + + + +

+ +

休眠

+ +

+ 於 Android 6.0 (API 層級 23) 引進的休眠會在使用者將裝置的電源拔除、保持靜止狀態並關閉螢幕時,延遲 CPU 與網路活動,以延長電池使用時間。Android N 會在裝置電源被到拔除並關閉螢幕,但不一定靜置不動時 (例如使用者把手持裝置放在口袋中行進時),套用 CPU 與網路限制子集,進一步增強休眠的功能。 + + + + + +

+ + + +

+ 圖 1. 休眠如何套用第一層級的系統活動限制以延長電池使用時間的示意圖。 + +

+ +

+ 當裝置以電池電力運作且螢幕已關閉一段時間時,裝置會進入休眠並套用第一組限制子集:關閉應用程式網路存取並延遲工作和同步。如果裝置進入休眠後靜置不動一段時間,系統會對 {@link android.os.PowerManager.WakeLock}、 + {@link android.app.AlarmManager} 鬧鐘、GPS 與 Wi-Fi 掃描套用其餘的休眠限制。不論是已套用某些或全部的休眠限制,系統都會喚醒裝置簡短地進行維護,應用程式能夠在該維護時段內存取網路,並能執行任何延遲的工作/同步。 + + + + + + + +

+ + + +

+ 圖 2. 休眠如何在裝置靜置不動一段時間之後套用第二層級的系統活動限制的示意圖。 + +

+ +

+ 請注意,開啟螢幕或將裝置插電,就會結束休眠並移除這些處理限制。這項額外行為不會影響配合 Android 6.0 (API 層級 23) 引進的舊版休眠改寫應用程式的建議與最佳做法,如最佳化休眠與應用程式待命中所述。像是使用 Google 雲端通訊 (GCM) 來傳送和接收訊息,以及開始規劃可適應額外休眠行為的更新等,還是應該遵循那些建議。 + + + + + + + + +

+ + +

專案 Svelte:背景最佳化

+ +

+ Android N 將三種隱含式廣播移除,有助於最佳化記憶體用量與電源耗用量。因為隱含式廣播常常會將註冊為在背景接聽此類廣播的應用程式啟動,所以此一變更有其必要。移除這些廣播對裝置效能與使用者體驗大有益處。 + + + + +

+ +

+ 行動裝置的連線能力經常變更,例如在 Wi-Fi 與行動數據之間切換。目前,應用程式可以透過在宣示說明中註冊隱含式 {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} broadcast in their + 廣播的接收器以監視連線能力變更。由於許多應用程式都註冊要接收此廣播,單一網路切換就可以喚醒所有應用程式,並立刻處理廣播。 + + + + +

+ +

+ 同樣地,應用程式可以註冊要接收來自其他應用程式 (例如,相機) 的隱含式 {@link + android.hardware.Camera#ACTION_NEW_PICTURE} 與 {@link + android.hardware.Camera#ACTION_NEW_VIDEO} 廣播。當使用者使用相機應用程式拍攝相片時,會喚醒這些應用程式來處理廣播。 + + +

+ +

+ 為減少這些問題,Android N 採用的最佳化方式如下: + +

+ +
    +
  • 目標為 Android N 的應用程式不會收到 {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} 廣播,即使其宣示說明項目要求這些事件的通知。在前景執行的應用程式如果使用 {@code CONNECTIVITY_CHANGE} 來要求通知,仍可以在主要執行緒上接聽 {@link + android.content.BroadcastReceiver}。 + + + +
  • + +
  • 應用程式無法傳送或接收 {@link + android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link + android.hardware.Camera#ACTION_NEW_VIDEO} 廣播。這種最佳化方式會影響所有應用程式,而不只是目標為 Android N 的應用程式。 + +
  • +
+ +

+ 未來發行的 Android 可能會將其他隱含式廣播與未繫結的背景服務視為過時。因此,為隱含式廣播在宣示說明中宣告的接收器相依性以及背景服務的相依性,都應該避免或加以移除。 + + + +

+ +

+ Android 架構提供數種解決方案,減少這些隱含式廣播或背景服務的需求。例如,{@link + android.app.job.JobScheduler} API 提供的健全機制可在符合指定條件 (例如,連線到非計量付費網路) 的情況下,排程網路操作。您甚至可以使用 {@link + android.app.job.JobScheduler},對內容提供者的變更採取因應動作。 + + + +

+ +

+ 如需此行為變更和如何改寫應用程式的詳細資訊,請參閱背景最佳化。 + + +

+ + +

權限變更

+ +

+ Android N 包括會影響您應用程式的權限變更,包括使用者帳戶權限和寫入外部儲存空間的新權限。以下是預覽版中已變更的權限摘要: + + + +

+ +
    +
  • {@code GET_ACCOUNTS} (已過時) +

    + GET_ACCOUNTS 權限現已過時。系統會忽略目標為 Android N 之應用程式所用的這個權限。 + +

    +
  • + +
+ + + +

協助工具改良

+ +

+ Android N 包括的變更旨在為視力不佳或視力受損的使用者改進平台可用性。這些變更一般應不需要變更您應用程式的程式碼,然而您應該檢閱這些功能並使用您的應用程式測試它們,以評估對使用者體驗的潛在影響。 + + + + +

+ + +

螢幕縮放

+ +

+ Android N 可讓使用者設定顯示器大小以放大或縮小螢幕上的所有元素,進而改善視力不佳使用者的裝置協助工具。使用者無法將螢幕縮放到超過常見中型手機的最小螢幕寬度 sw320dp (Nexus 4 的寬度)。 + + + + +

+ +
+ +
+ +
+
+ +
+ +
+

+ 圖 3. 右邊的螢幕顯示將執行 Android N 系統映像的裝置顯示大小增加的效果。 + +

+ + +

+ 當裝置密度變更時,系統會以下列方式通知執行中的應用程式: + +

+ +
    +
  • 如果應用程式的目標為 API 層級 23 或較低版本,系統會自動終止其所有背景處理程序。這表示如果使用者切換離開應用程式,以開啟 [設定] 畫面並變更 [顯示器大小] 設定,系統會在記憶體極低的情況下,以相同方式終止應用程式。如果應用程式有任何前景處理程序,系統會通知那些處理程序有設定變更,如處理執行階段變更所述,有如裝置的螢幕方向有所變更。 + + + + + + + +
  • + +
  • 如果應用程式的目標為 Android N,其所有處理程序 (前景與背景) 都會收到設定變更的通知,如處理執行階段變更所述。 + + + +
  • +
+ +

+ 大部分應用程式只要遵循 Android 最佳做法,不需要進行任何變更就能支援此功能。需檢查的特定項目如下: + +

+ +
    +
  • 在螢幕寬度為 sw320dp 的裝置上測試您的應用程式,確定它能適當執行。 + +
  • + +
  • 裝置設定變更時,就會更新任何與密度相關的快取資訊,例如快取的點陣圖或從網路載入的資源。當應用程式從暫停狀態繼續時,會檢查設定更新。 + + + +

    + 注意:如果您快取與設定相關的資料,最好包括相關中繼資料,例如該資料的適當螢幕大小或像素密度。儲存此中繼資料可讓您決定在設定變更之後,是否需要重新整理快取的資料。 + + + + +

    +
  • + +
  • 避免以不會隨螢幕密度調整的像素單位指定尺寸,請改為以密度獨立像素 (dp) 單位指定尺寸。 + + +
  • +
+ +

設定精靈中的視覺設定

+ +

+ Android N 包括在歡迎畫面的視覺化設定可讓使用者在新裝置上設定下列協助工具設定:放大手勢字型大小顯示器大小TalkBack。此變更增加和不同螢幕設定相關的錯誤能見度。您應該啟用這些設定來測試您的應用程式,以評估此功能的影響。您可以在 [設定] > [協助工具] 下找到設定。 + + + + + + + +

+ +

NDK 應用程式連結到平台程式庫

+ +

+ Android N 包括的命名空間變更可避免載入非公開 API。如果您使用 NDK,應該只能使用來自 Android 平台的公開 API。在下一版正式發行的 Android 使用非公開 API,會造成您的應用程式當機。 + + + +

+ +

+ 為了在發現使用非公開 API 時向您提出警示,當應用程式呼叫非公開 API 時,在 Android N 裝置上執行的應用程式會在 logcat 輸出產生一個錯誤,並以訊息同時顯示在裝置螢幕上,協助您更能察覺這種情況。您應該檢閱應用程式的程式碼,以移除使用的非公開平台 API,並使用預覽版裝置或模擬器全面測試您的應用程式。 + + + + + +

+ +

+ 如果您的應用程式依存於平台程式庫,請參閱 NDK 文件來取得以公開 API 同等項目取代常見私人 API 的一般修正。您可能也連結到平台程式庫,而不自知,特別是在應用程式使用的程式庫屬於該平台 (例如 libpng) 但不屬於 NDK 的時候。如為上述情況,請務必在您的 APK 包含您打算連結的所有 .so 檔案。 + + + + + +

+ +

+ 注意:有些第三方程式庫會連結到非公開 API。如果您的應用程式使用此類程式庫,在下一版正式發行的 Android 上執行時就會當機。 + + +

+ +

+ 應用程式不應依存於或使用 NDK 所未包括的原生程式庫,原因是在不同的 Android 發行版本之間會有變更或會被移除。從 OpenSSL 切換到 BoringSSL 便是此類變更的一例。此外,因為 NDK 所未包括的平台程式庫沒有相容性需求,而使不同裝置提供不同的相容性層級。如果您必須在舊型裝置上存取非 NDK 程式庫,請讓載入取決於 Android API 層級。 + + + + + + +

+ +

+ 為協助您診斷這些類型的問題,以下是您在建置要用於 Android N 的應用程式時,會遇到的一些 Java 與 NDK 錯誤範例: + +

+ +

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 ...
+
+ + +

+ 以下是發生這些類型之錯誤的應用程式可用的一些一般修正: +

+ +
    +
  • 改用標準 JNI 函式,以取代使用來自 libandroid_runtime.so 的 getJavaVM 與 getJNIEnv。 + +
    +AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
    +AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
    +JavaVM::AttachCurrentThread from <jni.h>.
    +
    +
  • + +
  • 改用公開替代項 {@code __system_property_get},以取代使用來自 {@code libcutils.so} 的 {@code property_get} 符號。如果要這樣做,請使用 {@code __system_property_get} 配合以下 include: + + +
    +#include <sys/system_properties.h>
    +
    +
  • + +
  • 應該改用應用程式本機版,以取代使用來自 {@code libcrypto.so} 的 {@code SSL_ctrl} 符號。例如,您在 {@code .so} 檔案中靜態地連結 {@code libcyrpto.a},或在您的應用程式中從 BoringSSL 或 OpenSSL 動態地包括自己的 {@code libcrypto.so}。 + + + +
  • +
+ +

Android for Work

+

+ Android N 包含對目標為 Android for Work 的應用程式所做的變更,包括對憑證安裝、密碼重設、次要使用者管理與裝置識別碼存取的變更。如果您要建置要用於 Android for Work 環境的應用程式,應該檢閱這些變更並據以修改應用程式。 + + + + +

+ +
    +
  • 您必須先安裝委派的憑證安裝程式後,DPC 才能加以設定。對於目標為 N SDK 的設定檔與裝置擁有者應用程式,您應該在裝置政策控制器 (DPC) 呼叫 DevicePolicyManager.setCertInstallerPackage() 之前,先安裝委派的憑證安裝程式。如果該安裝程式尚未安裝,系統會擲回 IllegalArgumentException。 + + + + + + +
  • + +
  • 裝置系統管理員的重設密碼限制現在適用於設定檔擁有者。裝置系統管理員無法再使用 DevicePolicyManager.resetPassword() 來清除密碼或變更已設定的密碼。裝置系統管理員仍能設定密碼,但只限裝置還沒有密碼、PIN 或模式的情況下。 + + + + +
  • + +
  • 即使已經設定限制,裝置擁有者與設定檔擁有者還是可以管理帳戶。裝置擁有者與設定檔擁有者在已採用 DISALLOW_MODIFY_ACCOUNTS 使用者限制的情況下,仍能呼叫帳戶管理 API。 + + +
  • + +
  • 裝置擁有者能輕鬆管理次要使用者。當裝置以裝置擁有者模式執行時,會自動設定 DISALLOW_ADD_USER 限制。這樣可防止使用者建立不受管理的次要使用者。此外,CreateUser()createAndInitial() 方法已經過時,改用 DevicePolicyManager.createAndManageUser() 取代。 + + + + + +
  • + +
  • 裝置擁有者可以存取裝置識別碼。裝置擁有者可以使用 DevicePolicyManagewr.getWifiMacAddress() 存取裝置的 Wi-Fi MAC 位址。如果未曾在該裝置上啟用 Wi-Fi,此方法會傳回 {@code null} 的值。 + + + +
  • +
+ +

+ 如需 Android N 中有關 Android for Work 變更的詳細資訊,請參閱 Android for Work 更新。 + +

+ +

其他重點

+ +
    +
  • 在 Android N 上執行的應用程式如以較低的 API 層級為目標,當使用者變更顯示器大小,就會終止該應用程式的處理程序。應用程式必須要能適當處理這種情況。否則,當使用者要從最近使用記錄還原時就會當機。 + + + + +

    +您必須測試應用程式,確保不會發生這種行為。測試方法是透過 DDMS 手動終止應用程式,以造成相同的當機情況。 + + + +

    + +

    +目標為 N 與更新版本的應用程式不會在密度變更時自動終止;然而,它們仍會勉強地回應設定變更。 + +

    +
  • + +
  • +Android N 上的應用程式應該要適當處理設定變更,同時不應該在後續啟動時當機。您可以變更字型大小 ([設定] > [顯示] > [字型大小]),然後從最近使用紀錄還原應用程式,以驗證應用程式行為。 + + + + +
  • +
+ diff --git a/docs/html-intl/intl/zh-tw/preview/download.jd b/docs/html-intl/intl/zh-tw/preview/download.jd new file mode 100644 index 000000000000..a98000a61bbf --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/download.jd @@ -0,0 +1,541 @@ +page.title=在裝置上測試 +meta.tags="preview", "nexus","system image" +page.tags="preview", "androidn" +page.image=images/cards/card-n-downloads_2x.png + +@jd:body + +
+ + + + +
+ + + +

+ 如果要在新的平台上執行並測試您的應用程式,您需要設定 Android N 執行階段環境。您可以透過下列其中一種方式進行: + +

+ +
    +
  • 在支援的硬體裝置上安裝 Android N,或
  • +
  • 設定執行 Android N 的 Android 模擬器
  • +
+ +

+ 如果您想要有一個在新平台上為應用程式進行基本相容性測試的環境,您只需要最新的 APK 與一個硬體裝置或模擬器。執行基本測試並不需要更新整個開發環境。 + + + +

+ +

+ 如果您想要針對 Android N 修改應用程式或使用新的 Android N API,則需要設定已更新可支援 Android N 的開發環境。設定以針對 Android N 開發中提供詳細資訊。 + + + +

+ + +

設定硬體裝置

+ +

+ 「N Developer Preview」為多種硬體裝置提供系統更新,您可以使用這些裝置 (從手機到平板電腦與電視) 來測試您的應用程式。 + +

+ +

+ 如果您使用支援的裝置,可以透過下列其中一個方式,將它更新到「Developer Preview」里程碑版本: + +

+ +
    +
  • 透過 Android Beta 計劃在自動 OTA 系統更新中註冊裝置。註冊之後,您的裝置將會定期透過隔空傳輸 (OTA) 更新方式收到「N Developer Preview」中的所有里程碑版本。建議您使用這個方法,因為它讓您透過「N Developer Preview」的多個版本,順暢地從目前的環境轉移。 + + + +
  • +
  • 下載「Developer Preview」系統映像並更新裝置。當您手動更新時,不會自動為裝置提供 OTA 更新,但是您可以在「Android Beta 計劃」中註冊這些裝置來取得 OTA 更新。 + +
  • +
+ +

在自動 OTA 更新中註冊裝置

+ +

+ 如果您使用支援的裝置 (請參閱「下載」表中的清單),可在 Android Beta 計劃中註冊該裝置,然後接收 Android 預覽版的隔空傳輸更新。這些更新會自動下載並更新您的裝置,就像官方系統更新一樣。 + + + + +

+ +

+ 您可以隨時取消註冊裝置。裝置會透過 OTA 更新方式接收提供給該裝置的最新 Android 生產版本 (例如 Android 6.0 Marshmallow)。更新要求重設整個裝置,所以裝置上的使用者資料會被移除。取消註冊裝置前,請務必備份重要資料。 + + + + +

+ +

+ 如需註冊裝置的詳細資訊,請參閱 Android Beta 計劃網站。 + +

+ +

注意:取消註冊要求重設整個裝置。請先備份重要資料。 + + +

+ +

手動更新裝置

+ +

+ 您可以隨時下載最新的「Developer Preview」系統映像並手動刷新到您的裝置。請參閱下表,下載適用於您測試裝置的系統映像。如果您需要確切控制測試環境或需要經常重新安裝 (例如自動化測試),則手動更新裝置是實用的做法。 + + + + +

+ +

+ 在裝置上安裝系統映像會移除裝置中的所有資料,因此您應該先備份您的資料。 + +

+ +

+ 備份裝置資料並下載下面符合您裝置的系統映像之後,請依照 developers.google.com/android 的指示,將映像刷新到您的裝置。 + + +

+ +

+ 手動刷新系統映像不會自動透過 OTA 更新方式收到較新的「Developer Preview」里程碑版本。請務必讓環境保持在最新狀態,使用每個「Developer Preview」里程碑的新系統映像進行刷新。 + + + +

+ +

+ 如果您決定手動更新裝置後要接收 OTA 更新,您唯一要做的事是在 Android Beta 計劃中註冊裝置。您可以隨時註冊裝置,以隔空傳輸方式接收下一個「Preview」更新。 + + + +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
裝置下載 / 總和檢查碼
Nexus 5X
"bullhead"
bullhead-npc56p-preview-6c877a3d.tgz
+ MD5:b5cf874021023b398f5b983b24913f5d
+ SHA-1:6c877a3d9fae7ec8a1678448e325b77b7a7b143a +
Nexus 6
"shamu"
shamu-npc56p-preview-54b13c67.tgz
+ MD5:af183638cf34e0eb944a1957d7696f60
+ SHA-1:54b13c6703d369cc79a8fd8728fe4103c6343973 +
Nexus 6P
"angler"
angler-npc56p-preview-85ffc1b1.tgz
+ MD5:bc4934ea7bd325753eee1606d3725a24
+ SHA-1:85ffc1b1be402b1b96f9ba10929e86bba6c6c588 +
Nexus 9
"volantis"
volantis-npc56p-preview-0e8ec8ef.tgz
+ MD5:c901334c6158351e945f188167ae56f4
+ SHA-1:0e8ec8ef98c7a8d4f58d15f90afc5176303efca4 +
Nexus 9G
"volantisg"
volantisg-npc56p-preview-1bafdbfb.tgz
+ MD5:7bb95bebc478d7257cccb4652899d1b4
+ SHA-1:1bafdbfb502e979a9fe4c257a379c4c7af8a3ae6 +
Nexus Player
"fugu"
fugu-npc56r-preview-7027d5b6.tgz
+ MD5:f5d3d8f75836ccfe4c70e8162e498be4
+ SHA-1:7027d5b662bceda4c80a91a0a14ef0e5a7ba795b +
Pixel C
"ryu"
ryu-npc56p-preview-335a86a4.tgz
+ MD5:4e21fb183bbbf467bee91598d587fd2e
+ SHA-1:335a86a435ee51f18464de343ad2e071c38f0e92 +
一般行動裝置 4G (Android One)
"seed"
seed_l8150-npc56p-preview-82472ebc.tgz
+ MD5:983e083bc7cd0c4a2d39d6ebaa20202a
+ SHA-1:82472ebc9a6054a103f53cb400a1351913c95127 +
+ +

從裝置解除安裝 Preview

+ +

+ 如果您想要從裝置解除安裝預覽版,可以透過下列其中一方式執行: +

+
    +
  • 取得出廠規格系統映像,然後手動刷新到裝置。 + +
      +
    • 對於 Nexus 裝置與 Pixel C 裝置,請查看 Nexus 裝置原廠映像檔頁面進行下載。 + +
    • +
    • 對於其他裝置,請直接聯絡裝置製造商。或者,如果是「Android Beta 計劃」中支援的裝置,則可以在這個計劃中註冊裝置,然後再取消註冊 (請參閱下面的資訊)。 + + +
    • +
    +
  • +
  • 從「Android Beta 計劃」取消註冊裝置。如果在 Android Beta 計劃中註冊裝置,則無論是什麼裝置,只需從這個計劃取消註冊即可。 + + +

    + 裝置會透過 OTA 更新方式接收提供給該裝置的最新 Android 生產版本 (例如 Android 6.0 Marshmallow)。更新要求重設整個裝置,所以裝置上的使用者資料會被移除。取消註冊裝置前,請務必備份重要資料。 + + + + +

    +
  • +
+ +

注意:在計劃結束前解除安裝「Developer Preview」系統映像需要重設整個裝置,而且會移除裝置上的所有使用者資料。 + + + +

+ + +

設定模擬器

+ +

如果要使用 Android 模擬器來執行 Android N Preview,您需要下載 Android N Preview SDK 並為模擬器建立一個虛擬裝置。 + +

+ +

首先,遵循下列方式下載 Android N Preview SDK (如果您在設定以針對 Android N 開發時已經取得該 SDK,則可以略過這個部分): + + + +

    +
  1. 在 Android Studio 中,開啟 [Settings] 對話方塊 (在Windows/Linux 上是 [File] > [Settings],在 Mac 上是 [Android Studio] > [Preferences])。在左面板中,選取 [Appearance & Behavior] > [System Settings] > [Android SDK]。 + + + + + +
  2. 按一下 [SDK Platforms] 分頁,然後選取 [Android N Preview] 核取方塊。 +
  3. + +
  4. 按一下 [SDK Tools] 分頁,然後選取 [Android SDK Build Tools]、[Android SDK Platform-Tools] 與 [Android SDK Tools] 核取方塊。 + + + +
  5. + +
  6. 按一下 [OK],接受要安裝之任何套件的授權合約。 + +
  7. +
+ +

您現在應該有 Android SDK Built-Tools 24.0 0 rc1Platform-Tools 24.0.0 rc1SDK Tools 25.0.9。如果您沒有將 SDK Tools 更新為 25.0.9,就無法執行 Android N 的 x86_64 系統映像。 + + +

+ + +

現在使用 Android N 系統映像建立一個虛擬裝置:

+ +
    +
  1. 選取 [Tools] > [Android] > [AVD Manager] 以開啟 AVD Manager。 +
  2. +
  3. 按一下 [Create Virtual Device]
  4. +
  5. 選取裝置 (例如 Nexus 5X、Nexus 6P、Nexus 9 或 Android TV),然後按一下 [Next]。 +
  6. +
  7. 選取 [N] 系統映像 (含 x86 ABI),然後按一下 [Next] (Android N Preview 的 Android 模擬器目前只支援 x86 系統映像)。 + + + +
  8. 完成其餘的 AVD 設定,然後按一下 [Finish]。 +
  9. +
+ +

您現在可以使用 Android N Preview AVD 啟動 Android 模擬器。

+ +

+為了在 Android 模擬器中獲得最佳體驗,請安裝 Android Studio 2.1 Preview,它支援 Android Emulator 2.0 Beta,效能比 Android Studio 1.5 中的模擬器快。 + + +

+ +

注意:如果您目前使用 Android Studio 2.0 Beta,它已知會出現阻止您使用 N Preview 系統映像建立 AVD 的問題,所以您目前需要使用 Android Studio 2.1 預覽版來建立 AVD。 + + + +

+ +

如需建立虛擬裝置的詳細資訊,請參閱管理虛擬裝置。 +

+ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd b/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd new file mode 100644 index 000000000000..3a85c4553f02 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd @@ -0,0 +1,388 @@ +page.title=背景最佳化 +page.metaDescription=對隱含式廣播的新限制。 +page.keywords="android N", "implicit broadcasts", "job scheduler" +@jd:body + + + +

+ 背景處理程序可能耗用大量的記憶體或電池電力。例如,隱含式廣播可能會啟動許多已註冊要接聽它的背景處理程序,即使那些處理程序可能不會執行太多工作。 + +這可能會對裝置效能與使用者體驗兩者造成實質影響。 + +

+ +

+ 為減輕此問題,N Developer Preview 套用下列限制: + +

+ +
    +
  • 目標為 Preview 的應用程式,如果在宣示說明中註冊以接收廣播,則不會收到 {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} 廣播。 +在前景執行的應用程式,只要使用 {@link + android.content.Context#registerReceiver Context.registerReceiver()} 註冊 {@link android.content.BroadcastReceiver},即可在主要執行緒中接聽 {@code CONNECTIVITY_CHANGE}。 + + +
  • + +
  • 應用程式無法傳送或接收 {@link + android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link + android.hardware.Camera#ACTION_NEW_VIDEO} 廣播。這種最佳化方式會影響所有應用程式,而不只是目標為 Preview 的應用程式。 + +
  • +
+ +

+ Android 架構提供數種解決方案來減少這些隱含式廣播的需求。 +例如,{@link android.app.job.JobScheduler} 與 + {@code GcmNetworkManager} 提供的健全機制,可在符合指定條件 (例如,連線到非計量付費網路) 的情況下排程網路操作。 + + +您甚至可以使用 {@link android.app.job.JobScheduler} 對內容提供者的變更採取因應動作。{@link android.app.job.JobInfo} 物件會封裝 {@link android.app.job.JobScheduler} 用來排程您的工作的參數。 + + +符合工作的條件時,系統會在應用程式的 {@link android.app.job.JobService} 上執行此工作。 + +

+ +

+ 在此文件中,我們將學習如何使用替代方法 (例如 + {@link android.app.job.JobScheduler}) 改寫您的應用程式以配合這些新的限制。 + +

+ +

+ CONNECTIVITY_ACTION 上的限制 +

+ +

+ 目標為 N Developer Preview 的應用程式,如果在宣示說明中註冊以接收廣播,則不會收到 {@link + android.net.ConnectivityManager#CONNECTIVITY_ACTION} 廣播,而相依於此廣播的處理程序將不會啟動。 + +這可能會在裝置連線到非計量付費網路時,對想要接聽網路變更或執行大量網路活動的應用程式造成問題。 + +Android 架構中已經有數個可以避過此限制的解決方案,但是選擇適當的方法取決於您想要應用程式完成什麼工作。 + + +

+ +

+ 注意:使用 + {@link android.content.Context#registerReceiver Context.registerReceiver()} + 註冊的 {@link android.content.BroadcastReceiver} 會在應用程式位於前景時繼續接收這些廣播。 +

+ +

+ 在非計量付費連線上排程網路工作 +

+ +

+ 使用 {@link android.app.job.JobInfo.Builder JobInfo.Builder} 類別建置 {@link android.app.job.JobInfo} 物件時,請套用 {@link + android.app.job.JobInfo.Builder#setRequiredNetworkType + setRequiredNetworkType()} 方法並傳遞 {@link android.app.job.JobInfo + JobInfo.NETWORK_TYPE_UNMETERED} 當做工作參數。 +下列程式碼範例會排程服務,讓它在裝置連線到非計量付費網路和收費時執行: + + +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+      (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo job = new JobInfo.Builder(
+    MY_BACKGROUND_JOB,
+    new ComponentName(context, MyJobService.class))
+      .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
+      .setRequiresCharging(true)
+      .build();
+  js.schedule(job);
+}
+
+ +

+ 符合您工作的條件時,您的應用程式會收到一個回呼,在指定的 {@code JobService.class} 中執行{@link android.app.job.JobService#onStartJob onStartJob()} 方法。 + +如果要檢視更多 {@link + android.app.job.JobScheduler} 實作的範例,請參閱 JobScheduler 範例應用程式。 +

+ +

+ 使用 GMSCore 服務且目標為 Android 5.0 (API 層級 21) 或更低的應用程式,可以使用 + {@code GcmNetworkManager} 並指定 {@code Task.NETWORK_STATE_UNMETERED}。 + +

+ +

+ 監視應用程式執行時的網路連線能力 +

+ +

+ 在前景執行的應用程式,只要使用註冊的 {@link + android.content.BroadcastReceiver} ,仍然可以接聽 {@code + CONNECTIVITY_CHANGE}。然而,{@link + android.net.ConnectivityManager} API 提供更建全的方法,只在符合指定的網路條件時才要求回呼。 + +

+ +

+ {@link android.net.NetworkRequest} 物件以 {@link android.net.NetworkCapabilities} 的方式定義網路回呼的參數。 +您使用 {@link + android.net.NetworkRequest.Builder NetworkRequest.Builder} 類別建立{@link android.net.NetworkRequest} 物件。接著 {@link + android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest, + android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} + 會將 {@link android.net.NetworkRequest} 物件傳遞到系統。 +符合網路條件時,應用程式會收到回呼,執行它的 {@link + android.net.ConnectivityManager.NetworkCallback} 類別中定義的 + {@link android.net.ConnectivityManager.NetworkCallback#onAvailable + onAvailable()} 方法。 + +

+ +

+ 應用程式會持續收到回呼,直到應用程式結束或呼叫 + {@link android.net.ConnectivityManager#unregisterNetworkCallback + unregisterNetworkCallback()} 才停止。 +

+ +

+ NEW_PICTURE 與 NEW_VIDEO 上的限制 +

+ +

+ 在 N Developer Preview 中,應用程式無法傳送或接收 {@link + android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link + android.hardware.Camera#ACTION_NEW_VIDEO} 廣播。在必須喚醒數個應用程式來處理新的影像或視訊時,此限制有助於降低對效能與使用者體驗的影響。 + +N Developer Preview 擴充 {@link android.app.job.JobInfo} 與 {@link + android.app.job.JobParameters} 來提供替代解決方案。 + +

+ +

+ 新的 JobInfo 方法 +

+ +

+ 為了在內容 URI 變更時觸發工作,N Developer Preview 使用下列方法擴充 {@link android.app.job.JobInfo} API: + +

+ +
+
+ {@code JobInfo.TriggerContentUri()} +
+ +
+ 封裝在內容 URI 變更時觸發工作所需的參數。 +
+ +
+ {@code JobInfo.Builder.addTriggerContentUri()} +
+ +
+ 將 {@code TriggerContentUri} 物件傳遞到 {@link + android.app.job.JobInfo}。{@link android.database.ContentObserver} 會監視封裝的內容 URI。 +如果有多個 {@code + TriggerContentUri} 物件與工作關聯,即使系統只回報其中一個內容 URI 中的變更,也會提供一個回呼。 + +
+ +
+ 新增 {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} 旗標,以在特定 URI 的任何子系變更時觸發工作。 +此旗標對應傳遞到 {@link + android.content.ContentResolver#registerContentObserver + registerContentObserver()} 的 {@code notifyForDescendants} 參數。 + +
+
+ +

+ 注意:{@code TriggerContentUri()} 無法與 {@link android.app.job.JobInfo.Builder#setPeriodic + setPeriodic()} 或 {@link android.app.job.JobInfo.Builder#setPersisted + setPersisted()} 結合使用。 +為了持續監視內容變更,請在應用程式的 {@link + android.app.job.JobService} 完成處理最近的回呼之前,排程新的 + {@link android.app.job.JobInfo}。 +

+ +

+ 下列範例程式碼會排程一個工作,在系統回報內容 URI {@code MEDIA_URI} 變更時觸發該工作: + +

+ +
+public static final int MY_BACKGROUND_JOB = 0;
+...
+public static void scheduleJob(Context context) {
+  JobScheduler js =
+          (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+  JobInfo.Builder builder = new JobInfo.Builder(
+          MY_BACKGROUND_JOB,
+          new ComponentName(context, MediaContentJob.class));
+  builder.addTriggerContentUri(
+          new JobInfo.TriggerContentUri(MEDIA_URI,
+          JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
+  js.schedule(builder.build());
+}
+
+

+ 當系統回報指定內容 URI 中有變更時,您的應用程式會收到一個回呼,而且會傳遞一個 {@link android.app.job.JobParameters} 物件到 {@code MediaContentJob.class} 中的 {@link android.app.job.JobService#onStartJob onStartJob()} 方法。 + + + +

+ +

+ 新的 JobParameter 方法 +

+ +

+ N Developer Preview 也擴充 {@link android.app.job.JobParameters} 以允許您的應用程式接收有關內容授權單位與觸發工作之 URI 的實用資訊: + + +

+ +
+
+ {@code Uri[] getTriggeredContentUris()} +
+ +
+ 傳回觸發工作之 URI 的陣列。如果沒有 URI 觸發工作 (例如,工作是因為期限到了或一些其他原因而觸發),或是變更的 URI 數目大於 50 時,這將會是 {@code + null}。 + + +
+ +
+ {@code String[] getTriggeredContentAuthorities()} +
+ +
+ 傳回觸發工作之內容授權單位的字串陣列。 + 如果傳回的陣列不是 {@code null},請使用 {@code getTriggeredContentUris()} 來擷取變更的 URI 的詳細資訊。 + +
+
+ +

+ 下列範例程式碼會覆寫 {@link + android.app.job.JobService#onStartJob JobService.onStartJob()} 方法,並記錄觸發工作的內容授權單位與 URI: + +

+ +
+@Override
+public boolean onStartJob(JobParameters params) {
+  StringBuilder sb = new StringBuilder();
+  sb.append("Media content has changed:\n");
+  if (params.getTriggeredContentAuthorities() != null) {
+      sb.append("Authorities: ");
+      boolean first = true;
+      for (String auth :
+          params.getTriggeredContentAuthorities()) {
+          if (first) {
+              first = false;
+          } else {
+             sb.append(", ");
+          }
+           sb.append(auth);
+      }
+      if (params.getTriggeredContentUris() != null) {
+          for (Uri uri : params.getTriggeredContentUris()) {
+              sb.append("\n");
+              sb.append(uri);
+          }
+      }
+  } else {
+      sb.append("(No content)");
+  }
+  Log.i(TAG, sb.toString());
+  return true;
+}
+
+ +

+ 進一步最佳化您的應用程式 +

+ +

+ 最佳化您的應用程式,讓它可以在低記憶體裝置上或低記憶體狀況下執行,這樣可以改進效能與使用者體驗。 +移除背景服務上的相依性與靜態註冊的隱含式廣播接收器,有助於讓您的應用程式在此類裝置上執行得更順暢。 + +雖然 N Developer Preview 採取一些步驟來減少一些此類問題,但是還是建議您最佳化您的應用程式,讓它完全不必使用這些背景處理程序。 + + + +

+ +

+ N Developer Preview 引進一些額外的 Android Debug Bridge (ADB) 命令,您可以使用這些命令測試在那些背景處理程序停用時的應用程式行為: + +

+ +
    +
  • 如果要模擬隱含式廣播與背景服務無法使用的情況,請輸入下列命令: + +
  • + +
  • +
    +{@code $ adb shell cmd appops set RUN_IN_BACKGROUND ignore}
    +
    +
  • + +
  • 如果要重新啟用隱含式廣播與背景服務,請輸入下列命令: + +
  • + +
  • +
    +{@code $ adb shell cmd appops set RUN_IN_BACKGROUND allow}
    +
    +
  • +
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd b/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd new file mode 100644 index 000000000000..22865c0b3292 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd @@ -0,0 +1,180 @@ +page.title=直接開機 +page.keywords=preview,sdk,direct boot +page.tags=androidn + +@jd:body + + + +

Android N 會在一個安全的 直接開機 模式下執行,這是裝置已經開啟電源但使用者尚未解鎖裝置的期間。 + +為了支援這種方式,系統為資料提供兩個儲存位置:

+ +
    +
  • 認證加密的儲存空間:這是預設的儲存位置,只有在使用者解鎖裝置之後才能使用。 +
  • +
  • 裝置加密的儲存空間:這是「直接開機」模式期間與使用者解鎖裝置之後都可以使用的儲存位置。 +
  • +
+ +

根據預設,應用程式不會在「直接開機」模式下執行。如果您的應用程式需要在「直接開機」模式期間執行動作,您可以註冊應該在此模式下執行的應用程式元件。 + +需要在「直接開機」模式下執行的一些常見應用程式使用案例包括: +

+ +
    +
  • 已排程通知的應用程式,例如鬧鐘應用程式。 +
  • +
  • 提供重要使用者通知的應用程式,例如簡訊應用程式。
  • +
  • 提供協助工具服務的應用程式,例如 Talkback。
  • +
+ +

如果您的應用程式需要在「直接開機」模式期間存取資料,請使用裝置加密的儲存空間。 +裝置加密的儲存空間包含以金鑰加密的資料,這個金錀只有在裝置執行成功的驗證開機之後才能使用。 + +

+ +

對於應該使用與使用者認證關聯之金鑰 (例如 PIN 或密碼) 加密的資料,請使用認證加密的儲存空間。認證加密的儲存空間只有在使用者成功解鎖裝置之後到使用者再次重新啟動裝置之間的時間可以使用。 + + +如果使用者在解鎖裝置之後啟用鎖定螢幕,並不會鎖定認證加密的儲存空間。 + +

+ +

要求直接開機期間的執行權限

+ +

應用程式必須先向系統註冊其元件,這些元件才能在「直接開機」模式期間執行或存取裝置加密的儲存空間。 + +向系統註冊的應用程式會將元件標記為 +加密感知。如果要將元件標記為加密感知,請將宣示說明中的 +android:encryptionAware 屬性設定為 true。

+ +

當裝置重新啟動時,加密感知元件可以註冊為從系統接收 +LOCKED_BOOT_COMPLETED 廣播訊息。 +這個時候可以使用裝置加密的儲存空間,而且您的元件可以執行在「直接開機」模式期間需要執行的工作,例如觸發排程的鬧鐘。 + +

+ +

下列程式碼片段是一個範例,示範如何在應用程式宣示說明中將 +{@link android.content.BroadcastReceiver} 註冊為加密感知以及如何為 +LOCKED_BOOT_COMPLETED 新增意圖篩選器:

+ +
+<receiever
+  android:encryptionAware="true" >
+  ...
+  <intent-filter>
+    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+  </intent-filter>
+</receiver>
+
+ +

一旦使用者將裝置解鎖,所有元件都可存取裝置加密的儲存空間與認證加密的儲存空間。 +

+ +

存取裝置加密的儲存空間

+ +

如果要存取裝置加密的儲存空間,請透過呼叫 +Context.createDeviceEncryptedStorageContext() 以建立第二個 +{@link android.content.Context} 實例。使用此內容建立的所有儲存 API 呼叫都可以存取裝置加密的儲存空間。 +下列範例會存取裝置加密的儲存空間並開啟現有的應用程式資料檔案: + +

+ +
+Context directBootContext = Context.createDeviceEncryptedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+
+ +

只針對必須在「直接開機」模式期間存取的資訊使用裝置加密的儲存空間。不要將裝置加密的儲存空間做為一般用途的加密存放區。對於私密使用者資訊或「直接開機」模式期間不需要的加密資料,請使用認證加密的儲存空間。 + + + +

+ +

接收使用者解鎖的通知

+ +

裝置重新啟動之後,一旦使用者將裝置解鎖,您的應用程式就可以切換為存取認證加密的儲存空間,並使用倚賴使用者認證的一般系統服務。 + +

+ +

如果要接收裝置重新開機後使用者解鎖裝置的通知,請從執行中元件註冊 {@link android.content.BroadcastReceiver} 以接聽 ACTION_USER_UNLOCKED 訊息。 + +或者,您可以接收現有的 {@link android.content.Intent#ACTION_BOOT_COMPLETED +ACTION_BOOT_COMPLETED} 訊息,它現在可以指出裝置已開機且使用者已解鎖裝置。 + +

+ +

您可以透過呼叫 +UserManager.isUserUnlocked(),以直接查詢使用者是否已將裝置解鎖。

+ +

遷移現有資料

+ +

如果使用者更新其裝置來使用「直接開機」模式,您可能有現有的資料必須遷移到裝置加密的儲存空間。 +使用 +Context.migrateSharedPreferencesFrom() 與 +Context.migrateDatabaseFrom(),在認證加密的儲存空間與裝置加密的儲存空間之間遷移偏好設定與資料庫資料。 +

+ +

決定要將哪些資料從認證加密的儲存空間遷移到裝置加密的儲存空間時,請使用最佳判斷。 +您不應該將私密使用者資訊 (例如密碼或授權權杖) 遷移到裝置加密的儲存空間。 + +在某些情況下,您需要在這兩種加密的存放區中管理不同的資料集。 +

+ +

測試您的加密感知應用程式

+ +

使用新的「直接開機」模式測試您的加密感知應用程式。您可以透過兩種方式啟用「直接開機」。 +

+ +

注意:啟用「直接開機」會清除裝置上的所有使用者資料。 +

+ +

在已安裝 Android N 的支援裝置上,執行下列其中一個動作來啟用「直接開機」: +

+ +
    +
  • 在裝置上,請移至 [設定] > [關於手機],然後點選 [Android 版本] 7 次以啟用 [開發人員選項] (如果尚未啟用)。 + +當開發人員選項畫面可用時,請移至 [設定] > [開發人員選項],然後選取 [轉換到檔案加密]。 + +
  • +
  • 使用下列 adb shell 命令來啟用「直接開機」模式: +
    +$ adb reboot-bootloader
    +$ fastboot --wipe-and-use-fbe
    +
    +
  • +
+ +

另外也提供模擬的「直接開機」模式,如果您需要在測試裝置上切換模式時即可利用。 +模擬模式應該只在開發期間使用,而且它可能造成資料遺失。 +如果要啟用模擬的「直接開機」模式,請在裝置上設定鎖定模式;設定鎖定模式時如果系統提示您設定安全啟動畫面,請選擇 [No thanks],然後使用下列 adb shell 命令: + + +

+ +
+$ adb shell sm set-emulate-fbe true
+
+ +

如果要關閉模擬的「直接開機」模式,請使用下列命令:

+ +
+$ adb shell sm set-emulate-fbe false
+
+ +

使用這些命令會使得裝置重新開機。

diff --git a/docs/html-intl/intl/zh-tw/preview/features/icu4j-framework.jd b/docs/html-intl/intl/zh-tw/preview/features/icu4j-framework.jd new file mode 100644 index 000000000000..77bbc4d8170c --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/features/icu4j-framework.jd @@ -0,0 +1,158 @@ +page.title=ICU4J Android 架構 API + +@jd:body + +
+
+

此文件內容:

+
    +
  1. 與 ICU4J 的關係
  2. +
  3. 從 ICU4J 遷移到 android.icu API
  4. +
  5. 授權
  6. +
+ +

另請參閱

+
    +
  1. + ICU4J 文件 +
  2. + +
  3. + ICU4J 支援的最新標準 + +
  4. +
+
+
+ +

+ ICU4J 是廣為使用的一組開放原始碼 Java 程式庫,為軟體應用程式提供 Unicode 與全球化支援。 +Android N 在 Android 架構中公開一個 ICU4J API 的子集,供應用程式開發人員在 {@code android.icu} 套件下使用。 + +這些 API 使用裝置上呈現的當地語系化資料。 +因此,您可以不用將 ICU4J 程式庫編譯到 APK 而降低 APK 的使用;相反地,您只需在架構中呼叫這些程式庫 + +(在此情況中,您可能要提供多個版本的 APK,這樣執行低於 Android N 之 Android 版本的使用者即可下載包含 ICU4J 程式庫的應用程式版本)。 + + + +

+ +

+ 此文件一開始先提供支援這些程式庫所需之最低 Android API 層級的一些基本資訊。 +接著它說明 Android 特定實作 ICU4J 的相關須知事項。 +最後,它告訴您如何在 Android 架構中使用 ICU4J API。 + +

+ +

與 ICU4J 的關係

+ +

+ Android N 透過 + android.icu 套件 (而非 com.ibm.icu) 公開一個 ICU4J API 的子集。Android 架構可能因為各種原因選擇不公開 ICU4J API;例如,Android N 沒有公開一些已過時的 API 或 ICU 團隊尚未宣布為穩定的 API。 + + + +因為 ICU 團隊將來會將 API 視為過時,所以 Android 也會將這些 API 標示為已過時但繼續包含它們。 + +

+ +

表 1. Android N 中使用的 ICU 與 CLDR 版本。 +

+ + + + + + + + + + + +
Android API 層級ICU 版本CLDR 版本
Android N5628
+ +

以下是一些必須注意的重要事項:

+ +
    +
  • ICU4J Android 架構 API 不包含所有 ICU4J API。
  • +
  • NDK 開發人員應該知道 Android ICU4C 不被支援。
  • +
  • Android 架構中的 API 沒有取代 Android 對使用資源進行當地語系化的支援。 + +
  • +
+ +

從 com.ibm.icu 遷移到 android.icu 套件

+ +

+ 如果您已經在應用程式中使用 ICU4J API,而且 + android.icu API 符合您的需求,那麼遷移到架構 API 需要您將 Java 匯入從 com.ibm.icu 變更為 android.icu。 + +接著您可以從 APK 移除您自己的 ICU4J 檔案。 + +

+ +

+ 注意:ICU4J 架構 API 使用 {@code android.icu} 命名空間而非 {@code com.ibm.icu}。 +這是為了避免包含自己的 {@code com.ibm.icu} 程式庫的 APK 中發生命名空間衝突。 + +

+ +

+ 從其他 Android SDK API 遷移到 android.icu API +

+ +

+ javaandroid 套件中的一些類別包含可在 ICU4J 中找到的同等項目。 +然而,ICU4J 通常為標準與語言提供更廣泛的支援。 + +

+

以下提供一些快速入門範例:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
類別替代項目
java.lang.Character android.icu.lang.UCharacter
java.text.BreakIterator android.icu.text.BreakIterator
java.text.DecimalFormat android.icu.text.DecimalFormat
java.util.Calendar +android.icu.util.Calendar
android.text.BidiFormatter + android.icu.text.Bidi +
android.text.format.DateFormat + android.icu.text.DateFormat +
android.text.format.DateUtils android.icu.text.DateFormat +android.icu.text.RelativeDateTimeFormatter +
+ +

授權

+ +

+ ICU4J 是根據 ICU 授權而發行。如需詳細資料,請參閱 ICU 使用者指南。 + +

diff --git a/docs/html-intl/intl/zh-tw/preview/features/multi-window.jd b/docs/html-intl/intl/zh-tw/preview/features/multi-window.jd new file mode 100644 index 000000000000..788951c8fb98 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/features/multi-window.jd @@ -0,0 +1,582 @@ +page.title=多視窗支援 +page.metaDescription=Android N 新推出支援一次顯示多個應用程式。 +page.keywords="multi-window", "android N", "split screen", "free-form" + +@jd:body + + + +

+ Android N 新增一次顯示多個應用程式的支援。 +在手持式裝置上,兩個應用程式可以在「分割畫面」模式中並排或上下排列。 +在電視裝置上,應用程式能使用「子母畫面」模式,在使用者與另一個應用程式互動時持續播放影片。 + + +

+ +

+ 如使用 N Preview SDK 建置應用程式,您可以設定應用程式處理多視窗顯示的方式。 +例如,您可以指定活動的最小可允許尺寸。 +您也可以停用應用程式的多視窗顯示,確保系統只會以全螢幕模式顯示您的應用程式。 + + +

+ +

總覽

+ +

+ Android N 允許多個應用程式同時分享螢幕。例如,使用者可以分割畫面,在左邊檢視網頁,同時在右邊撰寫電子郵件。 + +使用者體驗依裝置而異: + +

+ +
    +
  • 執行 Android N 的手持式裝置可提供分割畫面模式。 +處於此模式時,系統會以並排或上下排列的方式顯示兩個應用程式,將螢幕填滿。 +使用者可以拖曳將畫面一分為二的分隔線,加大一邊的應用程式,就會縮小另一邊。 + +
  • + +
  • 在執行 Android N 的 Nexus Player 上,當使用者瀏覽其他應用程式或與其互動時,應用程式會將本身放入子母畫面模式以持續顯示內容。 + + + +
  • + +
  • 較大型裝置的製造商可選擇啟用自由形式模式,讓使用者自由調整每個活動的大小。 +若製造商啟用此功能,裝置除了分割畫面模式外,還會提供自由形式模式。 + + +
  • +
+ + +

+ 圖 1. 在分割畫面模式中並排執行的兩個應用程式。 +

+ +

+ 使用者可以透過下列方式來切換多視窗模式: +

+ +
    +
  • 如果使用者開啟總覽畫面並長按活動標題,就可以將該標題拖曳到畫面醒目提示的部分,將活動放入多視窗模式。 + + + +
  • + +
  • 如果使用者長按「總覽」按鈕,裝置會將目前的活動放入多視窗模式,並開啟總覽畫面,讓使用者選擇要分享螢幕的另一個活動。 + + +
  • +
+ +

+ 使用者可以在活動分享螢幕時,將一個活動中的資料拖放到另一個活動。 + +(之前,使用者只能在單一活動內拖放資料)。 + +

+ +

多視窗生命週期

+ +

+ 多視窗模式不會變更活動生命週期。 + +

+ +

+ 在多視窗模式中,特定時間只有最近與使用者互動的活動才會處於使用中。 +這會視為「最上層」活動。 + 即使能看到所有其他活動,但也處於暫停狀態。 + 然而,相較於看不到的活動,系統會給予這類暫停但可看見的活動較高的優先順序。 +若使用者改與其中一個暫停的活動互動,該活動就會恢復,使先前的最上層活動變成暫停。 + + +

+ +

+ 注意:在多視窗模式中,使用者仍能見到處於暫停狀態的應用程式。 +即使處於暫停,應用程式仍需要進行其活動。 +例如,處於暫停模式但仍可以看見的影片播放應用程式,應會持續顯示其影片。 +因此,建議您在播放影片的活動 {@link android.app.Activity#onPause onPause()} 處理常式中,「不要」暫停影片。 + + + 應該改為在 {@link android.app.Activity#onStop + onStop()}, and resume playback in {@link android.app.Activity#onStart + onStart()} 中暫停影片。 +

+ +

+ 當使用者將應用程式放入多視窗模式時,系統會通知活動發生設定變更,如處理執行階段變更所指定。 + +基本上,此變更的活動生命週期和系統通知應用程式,裝置從垂直模式切換為水平模式時的生命週期相當,差別在於裝置尺寸會改變,而不只是切換。 + + +如處理執行階段變更中所述,您的活動能自行處理設定變更,或會允許系統終結活動並以新的尺寸重新建立。 + + + +

+ +

+ 如果使用者調整視窗大小並加大長或寬的尺寸,系統會根據使用者動作來調整活動大小,並視需要發出執行階段變更。 + +若應用程式在新公開的區域中繪製發生延遲,系統會暫時使用 {@link + android.R.attr#windowBackground windowBackground} 所指定的色彩或預設的 + windowBackgroundFallback 樣式屬性,填滿那些區域。 + +

+ +

針對多視窗模式設定應用程式

+ +

+ 您的應用程式若以 Android N 為目標,您可以設定應用程式的活動是否支援多視窗顯示以及支援的方式。 +您可以在宣示說明中設定屬性,同時控制大小與版面配置。 + + 根活動的屬性設定會套用到它工作堆疊內的所有活動。 + +

+ +

+ 注意:如果您使用 Android N 以下的 SDK 版本建置多螢幕方向應用程式,而且使用者會在多視窗模式中使用該應用程式,系統會強制調整應用程式大小。 + +系統會顯示對話方塊向使用者警告應用程式行為異常。 +系統「不會」調整螢幕方向固定的應用程式大小,如使用者嘗試在多視窗模式下開啟螢幕方向固定的應用程式,應用程式會佔滿整個螢幕。 + + + +

+ +

android:resizeableActivity

+

+ 在宣示說明的 <activity> 或 + <application> 節點中,設定此屬性以啟用或停用多視窗顯示: + +

+ +
+android:resizeableActivity=["true" | "false"]
+
+ +

+ 如將此屬性設定為 true,就能以分割畫面和自由形式模式來啟動活動。 +如將屬性設定為 false,活動會不支援多視窗模式。 +如果此值為 false,而使用者嘗試以多視窗模式啟動活動,該活動會佔滿整個螢幕。 + + +

+ +

+ 您的應用程式如以 Android N 為目標,但您並未指定此屬性的值,屬性的預設值為 true。 + +

+ +

android:supportsPictureInPicture

+ +

+ 在宣示說明的 <activity> 節點中,設定此屬性以指出活動是否支援子母畫面顯示: +如果 android:resizeableActivity 為 false,則會忽略此屬性。 + +

+ +
+android:supportsPictureInPicture=["true" | "false"]
+
+ +

版面配置屬性

+ +

+ 使用 Android N,<layout> 宣示說明元素支援的數個屬性會影響多視窗模式中的活動行為。 + + +

+ +
+
+ android:defaultWidth +
+ +
+ 以自由形式模式啟動活動時的預設寬度。 +
+ +
+ android:defaultHeight +
+ +
+ 以自由形式模式啟動活動時的預設高度。 +
+ +
+ android:gravity +
+ +
+ 以自由形式模式啟動活動時的初始放置位置。請參閱 + {@link android.view.Gravity} 參考資料以查看適當的值。 +
+ +
+ android:minimalSize +
+ +
+ 在分割畫面與自由形式模式中,活動的最小高度與最小寬度。 +如果使用者在分割畫面模式中移動分隔,而使活動小於指定的最小值,系統會將活動裁剪為使用者要求的大小。 + + +
+
+ +

+ 例如,在自由形式模式中顯示活動時,下列程式碼顯示如何指定活動的預設大小與位置以及它的最小大小: + + +

+ +
+<activity android:name=".MyActivity">
+    <layout android:defaultHeight="500dp"
+          android:defaultWidth="600dp"
+          android:gravity="top|end"
+          android:minimalSize="450dp" />
+</activity>
+
+ +

在多視窗模式中執行應用程式

+ +

+ Android N 提供的新功能支援在多視窗模式中執行應用程式。 + +

+ +

可在多視窗模式中停用的功能

+ +

+ 當裝置處於多視窗模式時,有些功能無法用於會與其他活動或應用程式分享裝置螢幕的活動,因此會加以停用或忽略。 + +這類功能包括: + +

    +
  • 有些系統 UI + 自訂選項會停用。例如,不以全螢幕模式執行就無法隱藏狀態列的應用程式。 + +
  • + +
  • 系統會忽略對 android:screenOrientation 屬性的變更。 +
  • +
+ +

多視窗變更通知與查詢

+ +

+ 已將下列可支援多視窗顯示的新方法新增至 {@link android.app.Activity} + 類別。如需每個方法的詳細資訊,請參閱 + N Preview SDK 參考資料。 +

+ +
+
+ Activity.inMultiWindow() +
+ +
+ 呼叫即可知道活動是否處於多視窗模式。 +
+ +
+ Activity.inPictureInPicture() +
+ +
+ 呼叫即可知道活動是否處於子母畫面模式。 + +

+ 注意:子母畫面模式為多視窗模式的特殊情況。 +如果 myActivity.inPictureInPicture() + 傳回 true,那麼 myActivity.inMultiWindow() 也會傳回 true。 + +

+
+ +
+ Activity.onMultiWindowChanged() +
+ +
+ 每當活動進入或離開多視窗模式,系統就會呼叫這個方法。 +如果活動正在進入多視窗模式,系統會將 true 的值傳遞給方法,若活動正要離開多視窗模式,則會傳遞 false。 + + +
+ +
+ Activity.onPictureInPictureChanged() +
+ +
+ 每當活動進入或離開子母畫面模式,系統就會呼叫這個方法。 +如果活動正在進入子母畫面模式,系統會將 true 的值傳遞給方法,若活動正要離開子母畫面模式,則會傳遞 false。 + + +
+
+ +

+ 上述的每一個方法也都有 {@link android.app.Fragment} 版本,例如 + Fragment.inMultiWindow()。 +

+ +

進入子母畫面模式

+ +

+ 呼叫新方法 + Activity.enterPictureInPicture(),即可將活動放入子母畫面模式。如果裝置不支援子母畫面模式,這個方法就沒有作用。 +如需詳細資訊,請參閱子母畫面文件。 + +

+ +

在多視窗模式中啟動新活動

+ +

+ 當您啟動新活動,可以提示系統應儘可能在目前活動的旁邊顯示新的活動。 +如要這樣做,請使用旗標 + Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT。 +傳遞此旗標會要求下列行為: + +

+ +
    +
  • 如果裝置處於分割畫面模式中,系統會嘗試在啟動新活動的活動旁邊建立該活動,讓兩個活動分享螢幕。 + +系統不保證一定能這樣做,但會儘可能讓活動相鄰。 + +
  • + +
  • 如果裝置未處於分割畫面模式,這個旗標就沒有作用。 +
  • +
+ +

+ 如果裝置處於自由形式模式,而您正在啟動新的活動,您可以呼叫 + ActivityOptions.setLaunchBounds(),指定新活動的尺寸與畫面位置。 +如果裝置未處於多視窗模式,這個方法就沒有作用。 + +

+ +

+ 注意:如果您在工作堆疊內啟動活動,該活動就會取代畫面上的活動,繼承它的所有多視窗屬性。 + +如果您想要在多視窗模式中,以個別的視窗啟動活動,您必須在新的工作堆疊中啟動該活動。 + +

+ +

支援拖放功能

+ +

+ 使用者可以在兩個活動分享螢幕時,將一個活動中的資料拖放到另一個活動。 + +(之前,使用者只能在單一活動內拖放資料)。 +因此,若您的應用程式目前不支援拖曳功能,建議您將該功能新增至應用程式。 + +

+ +

+ N Preview SDK 擴充 android.view + 套件,支援跨應用程式的拖放功能。如需下列類別與方法的詳細資訊,請參閱 N Preview SDK 參考資料。 + + +

+ +
+
+ android.view.DropPermissions +
+ +
+ 語彙基元物件負責指定權限,授予給放下接收者應用程式。 + +
+ +
+ View.startDragAndDrop() +
+ +
+ {@link android.view.View#startDrag View.startDrag()} 的新別名。傳遞新旗標 + View.DRAG_FLAG_GLOBAL,就可以啟用跨活動的拖放功能。 +如果您需要將 URI 權限授予接收者活動,請視需要傳遞新旗標 + View.DRAG_FLAG_GLOBAL_URI_READ 或 + View.DRAG_FLAG_GLOBAL_URI_WRITE。 + +
+ +
+ View.cancelDragAndDrop() +
+ +
+ 取消目前進行中的拖曳操作。只能由產生拖曳操作的應用程式呼叫。 + +
+ +
+ View.updateDragShadow() +
+ +
+ 取代目前所進行拖曳操作的拖曳陰影。只能由產生拖曳操作的應用程式呼叫。 + +
+ +
+ Activity.requestDropPermissions() +
+ +
+ 針對利用 {@link android.view.DragEvent} 中包含的 {@link + android.content.ClipData} 傳遞的內容 URI,要求權限。 +
+
+ +

測試應用程式的多視窗支援

+ +

+ 不論您是否針對 Android N 更新您的應用程式,都應該確認應用程式在多視窗模式中的行為為何,以免使用者試圖在執行 Android N 的裝置上以多視窗模式啟動應用程式。 + + +

+ +

設定測試裝置

+ +

+ 如果您在裝置上安裝 Android N,即自動支援分割畫面模式。 + +

+ +

應用程式若非以 N Preview SDK 建置

+ +

+ 若您並非以 N Preview SDK 建置應用程式,而且使用者會試圖在多視窗模式中使用該應用程式,除非應用程式宣告螢幕方向固定,否則系統會強制調整應用程式大小。 + + +

+ +

+ 若您的應用程式並未宣告螢幕方向固定,您應該在執行 Android N 的裝置上啟動應用程式,並嘗試將應用程式放入分割畫面模式。 + +確認強制調整應用程式大小時的使用者體驗可以接受。 + +

+ +

+ 若您的應用程式宣告螢幕方向固定,您應該嘗試將應用程式放入多視窗模式。 +確認您這樣做時,應用程式依然會處於全螢幕模式。 + +

+ +

若您支援多視窗模式

+ +

+ 如果您以 N Preview SDK 建置應用程式且未停用多視窗支援,請在分割畫面與自由形式模式下,確認下列行為: + + +

+ +
    +
  • 以全螢幕模式啟動應用程式,然後長按 [總覽] 按鈕以切換到多視窗模式。 +確認應用程式可以正確切換。 +
  • + +
  • 以多視窗模式直接啟動應用程式,並確認應用程式可以正確啟動。 +您可以按下 [總覽] 按鈕,然後長按應用程式的標題欄,再拖曳到螢幕上其中一個醒目提示的區域,即可以多視窗模式啟動應用程式。 + + +
  • + +
  • 在分割畫面模式中拖曳分隔線調整應用程式的大小。 + 確認可以調整應用程式大小而不會當機,同時可以看見必要的 UI 元素。 + +
  • + +
  • 如果您已指定應用程式的最小尺寸,請嘗試將應用程式的大小調整到低於指定的尺寸。 +確認您無法將應用程式的大小調整到小於指定的最小值。 + +
  • + +
  • 經由所有測試確認應用程式的效能可以接受。例如,確認在調整應用程式大小之後,不會遲遲不更新 UI。 + + +
  • +
+ +

測試檢查清單

+ +

+ 若要確認應用程式在多視窗模式中的效能,請嘗試下列操作。 +除非另外註明,否則您應該在分割畫面與多視窗模式中嘗試這些操作。 + +

+ +
    +
  • 進入和離開多視窗模式。 +
  • + +
  • 從您的應用程式切換到另一個應用程式,並確認當應用程式不在使用中但可看見時,能正常運作。 +例如,如果是播放影片的應用程式,請確認當使用者與另一個應用程式互動時,影片會持續播放。 + + +
  • + +
  • 在分割畫面模式中,嘗試移動分隔列以加大和縮小應用程式。 +在並排與上下排列設定都要嘗試這些操作。 +確認應用程式不會當機,可以看見基本功能,而且不會花太長的時間完成調整大小操作。 + + +
  • + +
  • 快速連續執行數次調整大小操作。確認應用程式不會因此當機或流失記憶體。 +如需檢查應用程式記憶體使用量的詳細資訊,請參閱調查 RAM 使用狀況。 + + +
  • + +
  • 以數個不同的視窗設定正常使用您的應用程式,並確認應用程式都能正常運作。 +確認文字可以閱讀,而且 UI 元素不會太小而無法與之互動。 + +
  • +
+ +

若已停用多視窗支援

+ +

+ 若您已設定 + android:resizableActivity="false" 來停用多視窗支援,您應該在執行 Android N 的裝置上啟動應用程式,並嘗試將應用程式放入自由形式與分割畫面模式。 + +確認您這樣做時,應用程式依然會處於全螢幕模式。 + +

diff --git a/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd b/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd new file mode 100644 index 000000000000..aada78f50be9 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd @@ -0,0 +1,214 @@ +page.title=語言和地區設定 +@jd:body + + + +

Android N 增強對多語言使用者的支援,讓他們可在設定中選取多個地區設定。 +Android N 藉由擴充支援的地區設定數量和改變系統解析資源的方式來提供多語言支援。 + +解析資源的新方法更加健全,而且它的設計是與現有 APK 相容,但是您應該特別注意任何未預期的行為。 + +例如,您應該進行測試,確認應用程式預設在預期的語言。 +此外,如果您的應用程式支援多個語言,則應該確保這項支援也能如預定方式運作。 + +最後,您應該試著確認應用程式可以順暢地處理沒有明確設計要支援的語言。 +

+ +

本文件一開始會先說明在 Android N 之前的資源解析策略。接下來,它會描述 Android N 的已改進的資源解析策略。 + +最後,它會說明如何利用擴充的地區設定數量來支援更多的多語言使用者。 +

+ +

解析語言資源中的挑戰

+ +

在 Android N 之前,Android 並不總能成功地對應應用程式與系統地區設定。 +舉例來說,假設您應用程式的預設語言的是 US English,但是它的 {@code es_ES} 資源檔案中也包含當地語言化的西班牙文字串。 + +

+

當您的 Java 程式碼參考這些字串時,它會以下列方式來解析字串語言: +

+
    +
  • 如果裝置設定為 {@code es_MX} (Spanish-Mexico),Android 會從 {@code es_ES} 資源檔案載入字串。 +
  • +
  • 如果裝置設定為 {@code en_AU},Android 會返回使用 {@code +en_US}。如果使用者選擇應用程式完全不支援的語言 (如法文),系統也會預設成 {@code en_US}。 +
  • +
+ + +

出現這些解析問題的原因,是如果系統找不到符合的項目,它會剝除地區設定中的國家/地區代碼。 +例如:

+

+表 1. 沒有完全符合的地區設定的資源解析。 +

+ + + + + + + + + + + + + +
使用者設定應用程式資源資源解析
fr_CH +預設 (en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+嘗試 fr_CH => 失敗
+嘗試 fr => 失敗
+使用預設 (en) +
+ + +

在此例中,系統會顯示英文字串,而不知道使用者是否了解英文。 +現在這種行為相當常見。 +Android N 可以大幅降低出現這類結果的頻率。 +

+ +

對資源解析策略所做的改進

+

Android N 帶來更健全的資源解析,而且會自動發現更佳的遞補。 +然而,為了加速解析和改進維護能力,您應該將資源存放在最常用的父系語言中。 + + 例如,如果之前將西班牙文資源存放在 {@code es-US} 目錄,請將它們移到包含拉丁美洲西班牙文的 {@code es-419} 目錄。 + + 同樣地,如果在名為 {@code en-GB} 的資料夾中包含資源字串,請將資料夾重新命名為 {@code en-001} (國際英文),因為 en-GB 字串的最常見父系為 {@code en-001}。 + + + 下列範例說明為什麼這些做法可改善資源解析的效能和可靠性。 +

+ +

資源解析範例

+ +

在 Android N 中,表 1 中所述的案例會用不同的方式解析: +

+ +

+表 2. 沒有完全符合的地區設定的已改進解析策略。 +

+ + + + + + + + + + + + +
使用者設定應用程式資源資源解析
    +
  1. fr_CH
  2. +
+
+預設 (en)
+de_DE
+es_ES
+fr_FR
+it_IT
+
+嘗試 fr_CH => 失敗
+嘗試 fr => 失敗
+嘗試 fr 的子項 => fr_FR
+使用 fr_FR +
+ + +

現在使用者會取得法文資源而非英文資源。這個範例也顯示為什麼在 Android N 中,您應該將法文字串存放在 {@code fr} 而非 {@code fr_FR} 中。以下是比對最接近父系語言的動作步驟,這些步驟可讓解析更快、更容易預測。 + + +

+ +

除了這個已改進的解析邏輯之外,現在 Android 還提供更多使用者語言供您選擇。 +讓我們指定義大利文做為額外的使用者語言但應用程式不支援法文的情況,再試一次上述的範例。 +

+ +

+表 3. 應用程式只比對到符合使用者第二個慣用地區設定時的資源解析。 +

+ + + + + + + + + + + + + + +
使用者設定應用程式資源資源解析
    +
  1. fr_CH
  2. +
  3. it_CH
  4. +
+
+預設 (en)
+de_DE
+es_ES
+it_IT
+
+嘗試 fr_CH => 失敗
+嘗試 fr => 失敗
+嘗試 fr 的子項 => 失敗
+嘗試 it_CH => 失敗
+嘗試 it => 失敗
+嘗試 it 的子項 => it_IT
+使用 it_IT +
+

即使應用程式不支援法文,但是使用者仍然取得他們了解的語言。 +

+ + +

設計您的應用程式支援其他地區設定

+

LocaleList API

+ +

Android N 增加了新的 API {@code LocaleList.GetDefault()} +,讓應用程式直接查詢使用者指定的語言清單。這個 API 可讓您建立更精細的應用程式行為,也能更好的最佳化內容的顯示方式。 + +例如,搜尋可以根據使用者的設定以多語言顯示結果。 +瀏覽器應用程式可以避免提供以使用者已知語言來翻譯網頁的選項,鍵盤應用程式可以自動啟用所有適當的版面配置。 + +

+ +

格式設定

+ +

直到 Android 6.0 (API 層級 23),Android 還只支援許多常用語言 (en、es、ar、fr、ru) 的一或兩個地區設定。 + +因為每種語言只有幾種變體,所以應用程式不用在資源檔案中將一些數字和日期儲存為硬式編碼字串。 + +然而,隨著 Android 擴充了支援的地區設定之後,即使在單一地區設定中,日期、時間、貨幣和類似資訊的格式可能會有顯著的差異。 + + +硬式編碼您的格式會對使用者產生令人混淆的體驗。 +因此,針對 Android N 進行開發時,請務必使用格式子,而不要硬式編碼數字和日期字串。 +

+ +

最主要的範例是阿拉伯文,它對 Android N 的支援從一個 {@code ar_EG} 擴充到 27 個阿拉伯地區設定。 +這些地區設定可以共用大多數的資源,但是有些地區設定慣用 ASCII 數字,而其他地區設定慣用當地數字。 +例如,在您想要建立一個包含數字變數的句子時,例如 "Choose a 4 digit pin",請使用如下所示的格式設定: + +

+ +
 format(locale, "Choose a %d-digit PIN", 4)
diff --git a/docs/html-intl/intl/zh-tw/preview/features/notification-updates.jd b/docs/html-intl/intl/zh-tw/preview/features/notification-updates.jd new file mode 100644 index 000000000000..5ebcebb2a5a2 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/features/notification-updates.jd @@ -0,0 +1,328 @@ +page.title=通知 +page.tags=notifications +helpoutsWidget=true +page.image=/preview/images/notifications-card.png + +trainingnavtop=true + +@jd:body + +
+
+ + +

本文件包括

+
    +
  1. 直接回覆
  2. +
  3. 整合式通知
  4. +
  5. 自訂檢視
  6. +
+ +
+
+ +

Android N 引進數個新 API,允許應用程式張貼相當顯眼且互動式的通知。 +

+ +

Android N 擴充現有的 {@link android.support.v4.app.RemoteInput} +通知 API,支援在手機上內嵌回覆。此功能允許使用者從通知欄快速回應,而不必造訪您的應用程式。 +

+ +

+ Android N 也允許您將類似的通知結合成單一通知。 +Android N 使用現有的 {@link + android.support.v4.app.NotificationCompat.Builder#setGroup + NotificationCompat.Builder.setGroup()} 方法來實現此目標。使用者能擴充每個通知,並可個別從通知欄執行動作,例如回覆和關閉每一個通知。 + + +

+ +

最後,Android N 還新增 API 讓您在應用程式的自訂通知檢視中利用系統的裝飾。 +這些 API 可協助確保通知檢視和標準範本的呈現方式一致。 + +

+ +

本文件將強調說明一些重要變更,您應該在應用程式中使用新的通知功能時納入考量。 +

+ +

直接回覆

+ +

使用 Android N 中的直接回覆功能,使用者可直接在通知介面內快速回應文字訊息或更新工作清單。 + +在手持式裝置上,內嵌回覆動作看起來就像是通知附加的額外按鈕。 +當使用者透過鍵盤回覆時,系統會在您為通知動作指定的意圖附加文字回應,然後將意圖傳送給您的手持裝置應用程式。 + + + + + + +

+ 圖 1. Android N 新增「回覆」 + 操作按鈕. +

+ +

新增內嵌回覆動作

+ +

建立支援直接回覆的通知動作: +

+ +
    +
  1. 建立您可以新增至通知動作的 {@link android.support.v4.app.RemoteInput.Builder} + 實例。 +此類別的建構函式接受字串,系統可當成文字輸入的金鑰使用。 +稍後,您的手持裝置應用程式會使用該金鑰,擷取輸入的文字。 + + +
    +// Key for the string that's delivered in the action's intent
    +private static final String KEY_TEXT_REPLY = "key_text_reply";
    +String replyLabel = getResources().getString(R.string.reply_label);
    +RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
    +        .setLabel(replyLabel)
    +        .build();
    +
    +
  2. +
  3. 使用 addRemoteInput() 將 {@link android.support.v4.app.RemoteInput} + 物件附加到動作。 + +
    +// Create the reply action and add the remote input
    +Notification.Action action =
    +        new Notification.Action.Builder(R.drawable.ic_reply_icon,
    +                getString(R.string.label), replyPendingIntent)
    +                .addRemoteInput(remoteInput)
    +                .build();
    +
    +
  4. + +
  5. 將動作套用到通知並發出通知。 + +
    +// Build the notification and add the action
    +Notification notification =
    +        new Notification.Builder(mContext)
    +                .setSmallIcon(R.drawable.ic_message)
    +                .setContentTitle(getString(R.string.title))
    +                .setContentText(getString(R.string.content))
    +                .addAction(action))
    +                .build();
    +
    +// Issue the notification
    +NotificationManager notificationManager =
    +        NotificationManager.from(mContext);
    +notificationManager.notify(notificationId, notification);
    +
    +
    +
  6. + +
+ + +

當使用者觸發通知動作時,系統會提示使用者輸入回應。 +

+ + +

+ 圖 2. 使用者從通知欄輸入文字。 +

+ +

從內嵌回覆擷取使用者輸入

+ +

從您在回覆動作的意圖中所宣告動作的通知介面接收使用者輸入: +

+
    +
  1. 透過將通知動作的意圖傳遞為輸入參數,來呼叫 {@link android.support.v4.app.RemoteInput#getResultsFromIntent + getResultsFromIntent()}。 +這個方法會傳回包含文字回應的 {@link android.os.Bundle}。 + +
  2. + +
    +Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
    +
    + +
  3. 使用 (提供給 {@link + android.support.v4.app.RemoteInput.Builder} 建構函式的) 結果金鑰查詢組合。 +
  4. +
+ +

下列程式碼片段說明方法如何從組合中擷取輸入文字: +

+ +
+// Obtain the intent that started this activity by calling
+// Activity.getIntent() and pass it into this method to
+// get the associated string.
+
+private CharSequence getMessageText(Intent intent) {
+    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+    if (remoteInput != null) {
+            return remoteInput.getCharSequence(KEY_TEXT_REPLY);
+            }
+    return null;
+ }
+
+ +

應用程式可以套用邏輯,決定擷取文字時要採取的動作。對於互動式應用程式 (像是聊天),要在通知本身提供更多內容 (例如,多行聊天歷程記錄,包括使用者自己的訊息),使用者才能適當回應。當使用者透過 {@link android.support.v4.app.RemoteInput} 回應時,請使用 {@code setRemoteInputHistory()} + 方法在回覆歷程記錄中包括文字。 + + + + + +

+ +

整合式通知

+ +

Android N 提供開發人員呈現通知佇列的全新方式: + 整合式通知。這類似於 Android Wear + 中的通知堆疊。 +例如,若您的應用程式會為接收的訊息建立通知,收到多個訊息時,會將通知結合成單一群組。 + +您可以使用現有的 {@link android.support.v4.app.NotificationCompat.Builder#setGroup +Builder.setGroup()} 方法,結合類似的通知。 +

+ +

+ 通知群組會對其中所含的通知強制施行階層。 + 階層的最上方是上層通知,顯示該群組的摘要資訊。 +使用者可以逐漸擴充通知群組,而系統會在使用者更深入探查時顯示更多資訊。 + +當使用者擴充組合時,系統會為所有子通知揭露更多資訊。當使用者擴充當中的其中一個通知時,系統會顯示該通知的所有內容。 + + +

+ + +

+ 圖 3. 使用者可以逐漸擴充通知群組。 + +

+ +

若要了解如何將通知新增至群組,請參閱將每個通知新增至群組。 + +

+ + +

整合式通知最佳做法

+

本節提供使用通知群組時的指導方針,而不是舊版 Android 平台可用的 {@link android.app.Notification.InboxStyle InboxStyle} +通知。 + +

+ +

使用整合式通知的時機

+ +

只有當您的使用案例與下列條件全部相符時,才應該使用通知群組: +

+ +
    +
  • 子通知是完整通知,也能個別顯示,而不需要群組摘要。 +
  • +
  • 讓子通知個別出現有其優點。例如: + +
  • +
      +
    • 能以特定動作來對每個子通知執行動作。
    • +
    • 可讓使用者想讀取的子通知能有更多資訊。
    • +
    +
+ +

良好的通知群組使用案例範例包括:顯示一連串傳入訊息的訊息傳送應用程式,或顯示一系列所接收電子郵件清單的電子郵件應用程式。 + +

+ +

+建議使用的單一通知案例範例包括:來自單人的個別訊息,或以清單呈現單行的文字項目。 + +您可以使用 +({@link android.app.Notification.InboxStyle InboxStyle} 或 +{@link android.app.Notification.BigTextStyle BigTextStyle}) 來完成。 + +

+ +

顯示整合式通知

+ +

+ 應用程式應一律張貼群組摘要,即使群組當中只包含單一子項。 +如果只包含單一通知,系統會抑制摘要,並直接顯示子通知。 +這可確保當使用者滑動離開群組子項時,系統能提供一致的體驗。 + + +

+ +

+ 注意:本版 Android N 還不會抑制包含單一子通知的通知群組摘要。 +更新的 Android N 版本才會新增此功能。 + +

+ +

預覽通知

+ +

雖然系統通常會將子通知顯示為群組,但您可以設定子通知,暫時顯示為抬頭通知 +。 + +此功能允許立即存取最新的子通知和與它相關的動作,因此特別實用。 + +

+ + +

回溯相容性

+ +

+ 自從 Android 5.0 (API 層級 21) 支援 Android Wear 裝置以來,通知群組與遠端輸入都是 {@link + android.app.Notification} API 的一部分。 +如果您已使用這些 API 建置通知,您必須採取的動作只有確認應用程式行為符合上述的指導方針,以及考慮實作 {@code + setRemoteInputHistory()}。 + + +

+ +

+ 為了支援回溯相容性,相同的 API 可與支援程式庫的 {@link android.support.v4.app.NotificationCompat} + 類別搭配使用,讓您建置能在舊版 Android 上運作的通知。 + +在手持裝置與平板電腦上,使用者只會看到摘要通知,應用程式應仍要為群組的完整資訊內容提供收件匣樣式或同等的通知呈現方式。 + +雖然 Android + Wear 裝置即使在較舊的平台層級上,也允許使用者查看所有子通知,但不論 API 層級為何,您都應該建置子通知。 + + +

+ +

自訂檢視

+

從 Android N 開始,您可以自訂通知檢視,也仍然可以取得系統裝飾,例如通知標題、動作及可擴充的版面配置。 + +

+ +

若要啟用此功能,Android N 新增下列 API 供您設定自訂檢視的樣式: +

+ +
+
+{@code DecoratedCustomViewStyle()}
+
設定媒體通知以外的通知樣式。 +
+
+{@code DecoratedMediaCustomViewStyle()}
+
設定媒體通知樣式
+
+ +

若要使用這個新 API,請呼叫 {@code setStyle()} 方法,再傳遞給想要的自訂檢視樣式。 +

+ +

此程式碼片段顯示如何使用 +{@code DecoratedCustomViewStyle()} 方法,建構自訂通知物件。

+ +
+Notification noti = new Notification.Builder()
+           .setSmallIcon(R.drawable.ic_stat_player)
+           .setLargeIcon(albumArtBitmap))
+           .setCustomContentView(contentView);
+           .setStyle(new Notification.DecoratedCustomViewStyle())
+           .build();
+
+
diff --git a/docs/html-intl/intl/zh-tw/preview/features/picture-in-picture.jd b/docs/html-intl/intl/zh-tw/preview/features/picture-in-picture.jd new file mode 100644 index 000000000000..b0ee8b8360cb --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/features/picture-in-picture.jd @@ -0,0 +1,186 @@ +page.title=子母畫面 +page.keywords=preview,sdk,PIP,Picture-in-picture +page.tags=androidn + +@jd:body + + + +

在 Android N 中,Android TV 使用者現在可以在應用程式內瀏覽時,同時觀賞螢幕角色中釘選視窗中的影片。 + +子母畫面 (PIP) 模式讓應用程式在釘選視窗中執行影片活動,同時讓另一個活動在背景持續進行。 + +PIP 視窗讓使用者在使用您的應用程式時同時多工處理,協助提高使用者的生產力。 +

+ +

您的應用程式可決定何時觸發 PIP 模式。以下是一些何時進入 PIP 模式的範例: +

+ +
    +
  • 當使用者從影片返回瀏覽其他內容,您的應用程式可以將影片移入 PIP 模式。 +
  • +
  • 當使用者觀看到影片內容的結尾時,您的應用程式可將影片切換到 PIP 模式。 +主畫面顯示系列中下一集的預告或摘要資訊時。 +
  • +
  • 您的應用程式可以為使用者提供一個觀賞影片時佇列其他內容的方式。 +當主畫面顯示內容選擇活動時,影片繼續在 PIP 模式中播放。 +
  • +
+ +

PIP 視窗為 240x135 dp,在系統所選的螢幕上四個角落之一的最上層顯示。 +使用者只要按住遙控器上的 Home 按鈕,即可帶出 PIP 選單,讓他們將 PIP 視窗切換成全螢幕或關閉 PIP 視窗。 + +如果另一個影片開始在主畫面上播放,會自動關閉 PIP 視窗。 + +使用者也可以透過 Recents 關閉 PIP 視窗。

+ + +

圖 1. 當使用者瀏覽主畫面上的內容時,可看到螢幕角落的子母畫面中的影片。 + +

+ +

PIP 利用 Android N 中提供的多視窗 API 來提供釘選影片疊加層視窗。 +若要將 PIP 新增到您的應用程式,您需要註冊支援 PIP 的活動,在需要時將活動切換到 PIP 模式,以及確定活動在 PIP 模式時會隱藏 UI 元素且影片繼續播放。 + + +

+ +

宣告您的活動支援子母畫面

+ +

根據預設,系統不會自動為應用程式支援 PIP。如果您想要應用程式 PIP,請將 +android:supportsPictureInPicture 和 +android:resizeableActivity 設定成 true,在宣示說明中註冊影片活動。 + +另外也請指定您的活動處理版面配置設定變更,如此一來,在 PIP 模式轉換期間版面配置變更時,才不會重新啟動您的活動。 + +

+ +
+<activity android:name="VideoActivity"
+    android:resizeableActivity="true"
+    android:supportsPictureInPicture="true"
+    android:configChanges=
+        "screenSize|smallestScreenSize|screenLayout|orientation"
+    ...
+
+ +

註冊您的活動時,請記住在 PIP 模式中,您的活動會顯示在電視螢幕上小的疊加層視窗中。 +顯示最少 UI 的影片播放活動可提供最佳的使用者體驗。 +包含小型 UI 元素的活動在切換到 PIP 模式時無法提供出色的使用者體驗,因為使用者在 PIP 視窗中看不到 UI 元素的詳細資訊。 + + +

+ +

將您的活動切換到子母畫面

+ +您需要將活動切換到 PIP 模式時,請呼叫 +Activity.enterPictureInPicture()。下列範例會在使用者選取媒體控制列上的專用 PIP 按鈕時切換到 PIP 模式: + +

+ +
+@Override
+public void onActionClicked(Action action) {
+    if (action.getId() == R.id.lb_control_picture_in_picture) {
+        getActivity().enterPictureInPicture();
+        return;
+    }
+    ...
+
+ +

將 PIP 按鈕新增到媒體控制列,可讓您的使用者在控制影片播放時輕鬆地切換到 PIP 模式。 +

+ + +

圖 1. 媒體控制列上的子母畫面按鈕。 +

+ +

Android N 包含新的 +PlaybackControlsRow.PictureInPictureAction 類別,它可定義控制列 PIP 動作和使用 PIP 圖示。 +

+ +

處理子母畫面模式中的 UI

+ +

當您的活動進入 PIP 模式時,您的活動應該只播放影片。 +在您的活動進入 PIP 時移除 UI 元素,並在您的活動重新進入全螢幕時還原這些元素。覆寫 Activity.onPictureInPictureChanged() 或 +Fragment.onPictureInPictureChanged() 並依需要啟用或停用 UI 元素,例如: + + +

+ +
+@Override
+public void onPictureInPictureChanged(boolean inPictureInPicture) {
+    if (inPictureInPicture) {
+        // Hide the controls in picture-in-picture mode.
+        ...
+    } else {
+        // Restore the playback UI based on the playback status.
+        ...
+    }
+}
+
+ +

在子母畫面模式中繼續播放影片 +

+ +

當您的活動切換到 PIP 時,系統會將活動視為暫停狀態並呼叫您活動的 onPause() 方法。 +影片播放不應該暫停,而且活動因為 PIP 模式而暫停時,影片應該繼續播放。 + +查看您活動的 +onPause() 方法中的 PIP 並適當地處理播放,例如: +

+ +
+@Override
+public void onPause() {
+    // If called due to PIP, do not pause playback
+    if (inPictureInPicture()) {
+        // Continue playback
+        ...
+    }
+    // If paused but not in PIP, pause playback if necessary
+    ...
+}
+
+ +

當您的活動從 PIP 模式切換回全螢幕模式時,系統會繼續您的活動並呼叫您的 onResume()方法。 +

+ +

最佳做法

+ +

PIP 主要針對播放全螢幕影片的活動。將您的活動切換到 PIP 模式時,避免顯示影片內容以外的任何項目。追蹤當您的活動進入 PIP 模式時隱藏 UI 元素,如處理子母畫面模式中的 UI 中所述。 + + +

+ +

因為 PIP 視窗會在螢幕角落上以浮動視窗顯示,所以您應該避免在主畫面上 PIP 視窗可能遮蓋的任何地方顯示重要資訊。 + +

+ +

當活動處於 PIP 模式時,預設它不會取得輸入焦點。若要在處於 PIP 模式時接收輸入事件,請使用 +MediaSession.setMediaButtonReceiver()。 +

diff --git a/docs/html-intl/intl/zh-tw/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/zh-tw/preview/features/scoped-folder-access.jd new file mode 100644 index 000000000000..0a530d23f926 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/features/scoped-folder-access.jd @@ -0,0 +1,124 @@ +page.title=限定範圍目錄存取 +page.keywords=preview,sdk,scoped directory access +page.tags=androidn + +@jd:body + + + +

應用程式 (例如,相片應用程式) 通常只需要存取外部儲存空間中的特定目錄,例如 Pictures 目錄。 +目前用來存取外部儲存空間的方式並非設計來輕鬆地為這些類型的應用程式提供已設定目標的目錄存取。 + +例如:

+ +
    +
  • 在您的宣示說明中要求 {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} 或 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} 可允許存取外部儲存空間ac上的所有公用目錄,但這可能超過您應用程式所需的存取權。 + + +
  • +
  • 使用儲存空間存取架構通常會使得您的使用者透過系統 UI 挑選目錄,這在您的應用程式一律存取相同外部目錄的情況下是不必要的。 + + + +
  • +
+ +

Android N 提供新的簡化 API,可用來存取常用外部儲存空間目錄。 +

+ +

存取外部儲存空間目錄

+ +

使用 StorageManager 類別來取得適當的 StorageVolume 實例。 +接著,透過呼叫該實例的 StorageVolume.createAccessIntent() 方法以建立意圖。使用此意圖來存取外部儲存空間目錄。 + +若要取得所有可用的磁碟區 (包括抽取式媒體磁碟區) 清單,請使用 StorageManager.getVolumesList()。 + +

+ +

下列程式碼片段是一個範例,它說明如何開啟主要共用儲存空間中的 Pictures 目錄: +

+ +
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

系統會嘗試授予對外部目錄的存取權,並在需要時使用簡化的 UI 向使用者確認存取權: +

+ + +

圖 1. 應用程式要求對 [圖片] 目錄的存取權。 +

+ +

若使用者授予存取權,系統會呼叫您的 onActivityResult() 覆寫並傳回 Activity.RESULT_OK 的結果代碼,以及包含 URI 的意圖資料。 + +使用提供的 URI 來存取目錄資訊,這類似於使用儲存空間存取架構所傳回的 URI。 + + + +

+ +

若使用者未授予存取權,系統會呼叫您的 onActivityResult() 覆寫並傳回 Activity.RESULT_CANCELED 的結果代碼,以及 Null 意圖資料。 + +

+ +

注意:取得對特定外部目錄的存取權也會取得對該目錄之子目錄的存取權。 +

+ +

存取抽取式媒體上的目錄

+ +

若要使用「限定範圍目錄存取」來存取抽取式媒體上的目錄,請先新增會接聽 {@link android.os.Environment#MEDIA_MOUNTED} 通知的 {@link android.content.BroadcastReceiver},例如: + +

+ +
+<receiver
+    android:name=".MediaMountedReceiver"
+    android:enabled="true"
+    android:exported="true" >
+    <intent-filter>
+        <action android:name="android.intent.action.MEDIA_MOUNTED" />
+        <data android:scheme="file" />
+    </intent-filter>
+</receiver>
+
+ +

當使用者掛接抽取式媒體 (例如 SD 卡) 時,系統會傳送 {@link android.os.Environment#MEDIA_MOUNTED} 通知。 +此通知會在意圖資料中提供 StorageVolume 物件,讓您用來存取抽取式媒體上的目錄。 + +下列範例會存取抽取式媒體上的 Pictures 目錄: +

+ +
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+    mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+
+ +

最佳做法

+ +

如果可能,請將外部目錄存取 URI 設定為持續性,這樣您就不需要重複地要求使用者授予存取權。 +一旦使用者授予存取權,請使用目錄存取 URI 呼叫 getContentResolver().takePersistableUriPermssion()。 + +系統會將該 URI 設定為持續性,而且後續存取要求將會傳回 RESULT_OK,而且不會為使用者顯示確認 UI。 + +

+ +

若使用者拒絕對外部目錄的存取權,請勿立刻又要求存取權。 +重複堅持取得存取權會導致極差的使用者體驗。 +

diff --git a/docs/html-intl/intl/zh-tw/preview/features/security-config.jd b/docs/html-intl/intl/zh-tw/preview/features/security-config.jd new file mode 100644 index 000000000000..a74712a8fcd4 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/features/security-config.jd @@ -0,0 +1,744 @@ +page.title=網路安全性設定 +page.keywords=preview,security,network + +@jd:body + + + + +

+ Android N 包括網路安全性設定功能,讓應用程式在安全的宣告式設定檔中即可自訂網路安全性設定,而不必修改應用程式的程式碼。 + +這些設定可以針對特定網域以及針對特定應用程式來設定。 +此功能的主要能力如下: + +

+ +
    +
  • + 自訂信任錨點:為應用程式的安全連線自訂信任的憑證授權單位 (CA)。 +例如,信任特定的自我簽署憑證,或限制應用程式信任的一組公用 CA。 + + +
  • + +
  • + 僅偵錯覆寫:在應用程式中安全地為安全連線進行偵錯,而不會增加已安裝應用程式者的風險。 + +
  • + +
  • + 退出明碼流量:保護應用程式不受意外使用明碼流量危害。 + +
  • + +
  • + 憑證關聯:限制應用程式的安全連線只用特定憑證。 + +
  • +
+ + +

新增安全性設定檔

+ +

+ 網路安全性設定功能會使用 XML 檔案,而您為應用程式指定的設定就在此。 +您必須在應用程式的宣示說明包括一個指向這個檔案的項目。 +以下節錄自宣示說明的程式碼,示範如何建立此項目: + +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+...
+<app ...>
+    <meta-data android:name="android.security.net.config"
+               android:resource="@xml/network_security_config" />
+    ...
+</app>
+
+ +

自訂信任的 CA

+ +

+ 應用程式會想要信任自訂的一組 CA,而不是平台預設的 CA。 +最常見的原因如下: +

+ +
    +
  • 使用 (由內部公司 CA 等所自我簽署、發行的) 自訂憑證授權單位連線至主機。 + +
  • + +
  • 限制 CA 只用您信任的那組 CA,而不是所有人預先安裝的 CA。 + +
  • + +
  • 信任系統中所未包括的其他 CA。 +
  • +
+ +

+ 根據預設,來自所有應用程式的安全連線全都信任預先安裝的系統 CA,而目標為 API 層級 23 (Android M) 和以下版本的應用程式預設也會信任使用者新增的 CA 存放區。 + +應用程式可以使用 {@code base-config} (針對整個應用程式自訂) 或 {@code domain-config} (針對每個網域自訂),自訂自己的連線。 + + + +

+ + +

設定自訂 CA

+ +

+ 假設您想要連線的主機使用自我簽署的 SSL 憑證,或要連線的主機使用 SSL 憑證是由您信任的非公用 CA 所發行,例如您公司的內部 CA。 + + +

+ +

+ res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ 將 PEM 或 DER 格式的自我簽署或非公用 CA 憑證新增至 + {@code res/raw/my_ca}。 +

+ + +

限制信任的 CA 組

+ +

+ 應用程式若不想要信任系統所信任的所有 CA,可以自行指定一組範圍較小的信任 CA。 +如此可以保護應用程式,不受任何其他 CA 所發行的詐騙憑證危害。 + +

+ +

+ 限制信任的 CA 組,其設定類似於信任自訂 CA (針對特定網域),只不過多個 CA 都是資源所提供。 + +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">secure.example.com</domain>
+        <domain includeSubdomains="true">cdn.example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/trusted_roots"/>
+        </trust-anchors>
+    </domain-config>
+</network-security-config>
+
+

+ +

+ 將 PEM 或 DER 格式的信任 CA 新增至 {@code res/raw/trusted_roots}。 + 請注意,如果使用 PEM 格式,該檔案「只」能包含 PEM 資料,不能有額外的文字。 +您還可以提供多個 + <certificates> +元素,而不只一個。 +

+ + +

+ 信任其他 CA +

+ +

+ 應用程式會想要信任不受系統信任的其他 CA,這是因為系統尚未包括該 CA,或 CA 不符合納入 Android 系統的需求。 + +應用程式可以為設定指定多個憑證來源,來完成此動作。 + + +

+

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="@raw/extracas"/>
+            <certificates src="system"/>
+        </trust-anchors>
+    </base-config>
+</network-security-config>
+
+

+ + +

設定 CA 進行偵錯

+ +

+ 對透過 HTTPS 連線的應用程式進行偵錯時,您想要連線的本機開發伺服器並沒有生產伺服器的 SSL 憑證。 + +若以不修改應用程式的程式碼為前提,為了支援此動作,您可以使用 {@code debug-overrides} 來指定僅偵錯 CA,「只」有在 +android:debuggable + 為 {@code true} 時才予以信任。 + +一般來說,IDE 和建置工具會為非發行版本自動設定此旗標。 + +

+ +

+ 因為應用程式商店採取的安全措施是,不接受標示為可偵錯的應用程式,所以這種方式會比條件式程式碼安全。 + + +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="@raw/debug_cas"/>
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+

+ + +

退出明碼流量

+ +

+ 打算只使用安全連線連線至目的地的應用程式,可以針對那些目的地退出支援明碼 (使用未加密的 HTTP 通訊協定,而非 HTTPS)。 + +此選項有助於避免應用程式由於外部來源 (例如,後端伺服器) 提供的 URL 中發生變更,而造成意外回復。 + + + 如需更多詳細資料,請參閱 {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted + NetworkSecurityPolicy.isCleartextTrafficPermitted()}。 +

+ +

+ 例如,應用程式想要確保 的所有連線一律要透過 HTTPS 完成,以保護敏感流量不受惡意網路危害。 + + +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config usesCleartextTraffic="false">
+        <domain includeSubdomains="true">secure.example.com</domain>
+    </domain-config>
+</network-security-config>
+
+

+ + +

關聯憑證

+ +

+ 應用程式一般會信任所有預先安裝的 CA。若這類的任何 CA 意在發行詐騙憑證,應用程式會有遭受 MiTM 攻擊的風險。 + +有些應用程式選擇透過限制所信任的 CA 組或關聯憑證,來限制可接受的憑證組。 + +

+ +

+ 憑證關聯的方法是,透過公用金鑰的雜湊 (X.509 憑證的 SubjectPublicKeyInfo) 來提供一組憑證。 +只有當憑證鏈至少包含一個關聯的公用金鑰時,才是有效的憑證鏈。 + + +

+ +

+ 請注意,使用憑證關聯時,您務必要包括備份金鑰,這樣萬一強制您切換到新的金鑰或變更 CA (關聯到 CA 憑證或該 CA 的中繼者) 時,您的應用程式連線才不會受到影響。 + + +否則,您必須推出應用程式更新,才能還原連線。 + +

+ +

+ 此外,可為關聯設定到期時間,只要該關聯經過多久都未執行,即為到期。 +這有助於避免未經更新的應用程式發生連線問題。 +然而,針對關聯設定到期時間,會造成略過關聯。 + +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <pin-set expiration="2018-01-01">
+            <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+            <!-- backup pin -->
+            <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+    </domain-config>
+</network-security-config>
+
+

+ + +

設定繼承行為

+ +

+ 繼承的值都未設定在特定設定中。此行為允許有更複雜的設定,同時保持設定檔讓人看得懂。 + +

+ +

+ 如果值未設定在特定項目中時,就會使用下一個更一般項目的值。 +如為巢狀結構,就會從上層 {@code domain-config} 取得未在 {@code domain-config} 中設定的值,或非巢狀時,則會從 {@code + base-config} 取得值。 +未在 {@code base-config} 中設定的值會使用平台的預設值。 + +

+ +

+ 例如,假設所有連至 {@code + example.com} 子網域的連線都必須使用一組自訂 CA。此外,允許明碼流量送往這些網域,但連線到 {@code + secure.example.com} 時「除外」。 +在 {@code example.com} 的設定內以巢狀方式排列 {@code + secure.example.com} 的設定,就不需要重複 + {@code trust-anchors}。 +

+ +

+res/xml/network_security_config.xml: +

+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config>
+        <domain includeSubdomains="true">example.com</domain>
+        <trust-anchors>
+            <certificates src="@raw/my_ca"/>
+        </trust-anchors>
+        <domain-config cleartextTrafficPermitted="false">
+            <domain includeSubdomains="true">secure.example.com</domain>
+        </domain-config>
+    </domain-config>
+</network-security-config>
+
+

+ + +

設定檔案格式

+ +

+ 網路安全性設定功能會使用 XML 檔案格式。 + 下列程式碼範例顯示檔案的整體結構: +

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </base-config>
+
+    <domain-config>
+        <domain>android.com</domain>
+        ...
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+        <pin-set>
+            <pin digest="...">...</pin>
+            ...
+        </pin-set>
+    </domain-config>
+    ...
+    <debug-overrides>
+        <trust-anchors>
+            <certificates src="..."/>
+            ...
+        </trust-anchors>
+    </debug-overrides>
+</network-security-config>
+
+ +

+ 下列各區段描述檔案格式的語法與其他詳細資料。 + +

+ +

+ <network-security-config> +

+ +
+
+ 可以包含: +
+ +
+ 0 或 1 個 <base-config>
+ 任何數目的 <domain-config>
+ 0 或 1 個 <debug-overrides> +
+
+ +

+ <base-config> +

+ +
+
+ 語法: +
+
+ +
+<base-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</base-config>
+
+
+
+ 可以包含: +
+ +
+ <trust-anchors> +
+ +
+ 描述: +
+ +
+ 連線到 domain-config 所未涵蓋的目的地時使用的預設設定。 + + +

+ 任何未設定的值都會使用平台預設值。目標為 API 層級 24 和更新版本的應用程式預設設定: + +

+ +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+    </trust-anchors>
+</base-config>
+
+目標為 API 層級 23 和以下版本的應用程式預設設定: +
+<base-config usesCleartextTraffic="true">
+    <trust-anchors>
+        <certificates src="system" />
+        <certificates src="user" />
+    </trust-anchors>
+</base-config>
+
+ +
+
+ +

<domain-config>

+
+
語法:
+
+
<domain-config usesCleartextTraffic=["true" | "false"]>
+    ...
+</domain-config>
+
+ +
可以包含:
+ +
+1 或更多個 <domain> +
0 或 1 個 <trust-anchors> +
0 或 1 個 <pin-set> +
任何數目的巢狀 <domain-config>
+ +
描述
+
依照 {@code domain} 元素所定義,連線至特定目的地時使用的設定。 + +

請注意,如有多個 {@code domain-config} 元素涵蓋同一個目的地,則會使用含有最明確 (最長) 比對網域規則的設定。 +

+
+ + +

<domain>

+ +
+
+ 語法: +
+ +
+
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+
+
+ +
+ 屬性: +
+ +
+
+
+ {@code includeSubdomains} +
+ +
+ 如為 {@code "true"},表示此網域規則會比對網域和所有子網域,包括子網域的子網域在內,反之此規則只會套用到完全相符者。 + + +
+
+
+ +
+ 描述: +
+
+ +

<debug-overrides>

+ +
+
+ 語法: +
+ +
+
+<debug-overrides>
+    ...
+</debug-overrides>
+
+
+ +
+ 可以包含: +
+ +
+ 0 或 1 個 <trust-anchors> +
+ +
+ 描述: +
+ +
+ 當 android:debuggable + 為 {@code "true"} (一般是在非發行版本由 IDE 與建置工具產生的情況下) 時所要套用的覆寫。 +{@code + debug-overrides} 中指定的信任錨點會新增至所有其他連線,而當伺服器的憑證鏈使用其中一個僅偵錯信任錨點時,即不會執行憑證關聯。 + +如果 android:debuggable + 為 {@code "false"},就會完全略過這個區段。 +
+
+ +

<trust-anchors>

+
+
+ 語法: +
+ +
+
+<trust-anchors>
+...
+</trust-anchors>
+
+
+ +
+ 可以包含: +
+ +
+ 任何數目的 <certificates> +
+ +
+ 描述: +
+ +
+ 可供安全連線使用的信任錨點組。 +
+
+ + +

<certificates>

+
+
語法:
+
<certificates src=["system" | "user" | "raw resource"]
+              overridePins=["true" | "false"] />
+
+
描述:
+
可供 {@code trust-anchors} 元素使用的 X.509 憑證組。
+ +
屬性:
+
+
{@code src}
+
+CA 憑證的來源,可以是其中一個原始資源識別碼,其指向含有 X.509 憑證的檔案。 +
    +
  • + 憑證必須以 DER 或 PEM 格式編碼。如為 PEM 憑證,檔案中「不可」包含非 PEM 的額外資料,例如註解。 + + +
  • + +
  • {@code "system"} 代表預先安裝的系統 CA 憑證 +
  • + +
  • {@code "user"} 代表使用者新增的 CA 憑證 +
  • +
+
+ +
{@code overridePins}
+
+

+ 指定來自此來源的 CA 是否要略過憑證關聯。如為 {@code + "true"},憑證鏈的鏈結若經過此來源的其中一個 CA,就不會執行關聯。 +這對偵錯 CA 會很實用,或支援讓使用者 MiTM 應用程式的安全流量。 + +

+ +

+ 預設為 {@code "false"},除非您在 {@code debug-overrides} + 元素中指定,而那種情況的預設為 {@code "true"}。 +

+
+
+
+ + +

<pin-set>

+ +
+
+ 語法: +
+ +
+
+<pin-set expiration="date">
+...
+</pin-set>
+
+
+ +
+ 可以包含: +
+ +
+ 任何數目的 <pin> +
+ +
+ 描述: +
+ +
+ 一組公用金鑰關聯。信任鏈中的其中一個公用金鑰必須要在這組關聯中,才是可信任的安全連線。 +如需關聯的格式,請參閱 + <pin>。 +
+ +
+ 屬性: +
+ +
+
+
+ {@code expiration} +
+ +
+ 到期之後就會停用關聯的日期,格式為 {@code yyyy-MM-dd}。 +如果未設定屬性,關聯就不會到期。 + +

+ 到期有助於避免因使用者停用應用程式更新,而無法取得關聯組更新的應用程式發生連線問題。 + + +

+
+
+
+
+ +

<pin>

+
+
+ 語法: +
+ +
+
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+    SubjectPublicKeyInfo (SPKI)</pin>
+
+
+ +
+ 屬性: +
+ +
+
+
+ {@code digest} +
+ +
+ 用來產生關聯的摘要演算法。目前僅支援 + {@code "SHA-256"}。 +
+
+
+
diff --git a/docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd b/docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd new file mode 100644 index 000000000000..7d50a3c10e73 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd @@ -0,0 +1,120 @@ +page.title=電視錄製 +page.keywords=preview,sdk,tv,recording +page.tags=androidn + +@jd:body + + + +

電視輸入服務可讓使用者透過時間位移 API 來暫停及繼續頻道播放。 +Android N 透過讓使用者儲存多個已錄製的工作階段,以延伸時間位移功能。 +

+ +

使用者可以事先排定錄製作業,或在觀看節目時開始錄製。 +一旦系統儲存錄製的內容,使用者可以使用系統電視應用程式來瀏覽、管理及播放錄製的內容。 +

+ +

如果要為您的電視輸入服務提供錄製功能,您必須向系統指出您的應用程式支援錄製、實作錄製節目的功能、處理及溝通錄製期間可能發生的任何錯誤,以及管理您已錄製的工作階段。 + + +

+ +

指出錄製支援

+ +

若要告訴系統您的電視輸入服務支援錄製,請依照這些步驟執行: +

+ +
    +
  1. 在您的 TvInputService.onCreate() 方法中,使用 TvInputInfo.Builder 類別建立新的 TvInputInfo 物件。 + +
  2. +
  3. 建立新的 TvInputInfo 物件時,在呼叫 build() 之前先呼叫 setCanRecord(true),以指出您的服務支援錄製。 + +
  4. +
  5. 透過呼叫 TvInputService.updateTvInputInfo(),以向系統註冊您的 TvInputInfo 物件。 +
  6. +
+ +

錄製工作階段

+ +

在您的電視輸入服務註冊並告訴系統它支援錄製功能之後,系統會在需要存取您應用程式的錄製實作時呼叫您的 TvInputService.onCreateRecordingSession()。 + + +實作您自己的 TvInputService.RecordingSession 子類別,並在 onCreateRecordingSession() 回呼引發時傳回它。 + + +此子類別負責切換到正確的頻道資料、錄製要求的資料,並和系統溝通錄製狀態與錯誤。 + +

+ +

當系統透過傳入頻道 URI 以呼叫 RecordingSession.onTune() 時,會轉台到 URI 指定的頻道。 +透過呼叫 notifyTuned() 以通知系統您的應用程式已轉台到想要的頻道,或者,若您的應用程式無法轉台到適當的頻道,則呼叫 notifyError()。 + + +

+ +

接著,系統會呼叫 RecordingSession.onStartRecording() 回呼。 +您的應用程式必須立即開始錄製。當系統呼叫此回呼時,它可能會提供包含將錄製之節目相關資訊的 URI。 + +當錄製完成時,您必須將此資料複製到 RecordedPrograms 資料表格。 +

+ +

最後,系統會呼叫 RecordingSession.onStopRecording()。此時,您的應用程式必須立即停止錄製。 +您也必須在 RecordedPrograms 表格中建立一個項目。 +此項目應該在 RecordedPrograms.COLUMN_RECORDING_DATA_URI 欄中包括已錄製的工作階段資料 URI,以及系統在對 onStartRecording() 的初始呼叫中提供的任何節目資訊。 + + + +

+ +

如需有關如何存取 RecordedPrograms 表格的詳細資料,請參閱管理已錄製的工作階段。 +

+ +

處理錄製錯誤

+ +

如果錄製期間發生錯誤,造成已錄製的資料無法使用,請透過呼叫 RecordingSession.notifyError() 以通知系統。同樣地,您可以在建立錄製工作階段之後呼叫 notifyError(),以讓系統知道您的應用程式已無法再錄製工作階段。 + + +

+ +

如果錄製期間發生錯誤,但您想要提供可用的部分錄製內容給使用者播放,請呼叫 RecordingSession.notifyRecordingStopped() 以讓系統使用該部分工作階段。 + + +

+ +

管理已錄製的工作階段

+ +

系統會從 TvContract.RecordedPrograms 內容提供者表格中所有支援錄製頻道的應用程式維護所有已錄製之工作階段的資訊。 + +此資訊可透過 RecordedPrograms.Uri 內容 URI 來存取。 +使用內容提供者 API 來讀取、新增及刪除此表格中的項目。 +

+ +

如需有關處理內容提供者資料的詳細資訊,請參閱內容提供者基礎知識。 + +

+ +

最佳做法

+ +

電視裝置的儲存空間可能有限,因此在配置儲存空間以儲存已錄製的工作階段時,請使用最佳判斷。 +當可用空間不足而無法儲存已錄製的工作階段時,請使用 RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)。 + +

+ +

當使用者起始錄製時,您應該儘快開始錄製資料。 +如果要加快此程序,請在系統呼叫 onCreateRecordingSession() 回呼時完成所有初期耗時工作 (例如,存取及配置儲存空間)。 + +這樣做可讓您在 onStartRecording() 回呼引發時立即開始錄製。 + +

diff --git a/docs/html-intl/intl/zh-tw/preview/index.jd b/docs/html-intl/intl/zh-tw/preview/index.jd new file mode 100644 index 000000000000..e899bc0b1260 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/index.jd @@ -0,0 +1,120 @@ +page.title=Android N Developer Preview +page.tags="preview","developer" +meta.tags="preview", "android" +fullpage=true +forcelocalnav=true +header.hide=1 +footer.hide=1 +@jd:body + + + +
+
+
+ +
+

Android N Developer Preview

+

+ 為 Android N 做好準備! + 在 Nexus 與其他裝置上測試您的應用程式。支援新系統行為以節省電力與記憶體。使用多視窗 UI直接回覆通知等延伸您的應用程式。 + + + +

+ + + + 開始使用 + +
+
+ +
+
+
+
+
+
+
+ + + + + +
+

資源

+
+ 以下重要資訊可幫助您的應用程式準備好使用 Android N。 +
+ +
+ +
+
+ diff --git a/docs/html-intl/intl/zh-tw/preview/j8-jack.jd b/docs/html-intl/intl/zh-tw/preview/j8-jack.jd new file mode 100644 index 000000000000..91b65d074a78 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/j8-jack.jd @@ -0,0 +1,183 @@ +page.title=Java 8 語言功能 +page.keywords="android N", "Java 8", "Jack" +@jd:body + + + +

Android N 引進對 Java 8 語言功能的支援,供您在開發目標為 Android N 的應用程式時使用。此頁面描述「Android N Preview」中支援的新語言功能、如何正確地設定您的專案以使用它們,以及您可能會遇到的所有已知問題。 + + + + +

+ +

如果要開始使用這些功能,您必須下載並安裝 Android Studio 2.1 (預覽版) 與 Android N Preview SDK,其中包括必要的 Jack 工具鏈與適用於 Gradle 的已更新 Android 外掛程式。如果尚未安裝 Android N Preview SDK,請參閱設定以針對 Android N 開發。 + + +

+ + + +

+ 注意:使用新的 Java 8 語言功能並不是開發以 Android N 平台為目標之應用程式的需求。如果不想使用 Java 8 語言功能撰寫程式碼,您可以將專案的來源與目標相容性值維持設定為 Java 7,但仍必須與 JDK 8 相容,以針對 Android N 平台建置。 + + + + +

+ +

+ 支援的 Java 8 語言功能與 API +

+ +

+ Android 目前不支援所有 Java 8 語言功能。然而,開發目標為「Android N Preview」的應用程式時,可以使用下列功能: + + +

+ + + + +

+ 此外,下列 Java 8 語言功能 API 現已可用: +

+ +
    +
  • Reflection 與語言相關 API: +
  • + +
  • +
      +
    • {@code java.lang.FunctionalInterface} +
    • + +
    • {@code java.lang.annotation.Repeatable} +
    • + +
    • {@code java.lang.reflect.Method.isDefault()} +
    • + +
    • 與 Reflection API (與可重複的註解關聯),例如 {@code AnnotatedElement.getAnnotationsByType(Class)} + +
    • +
    +
  • +
  • 公用程式 API: +
  • + +
  • +
      +
    • {@code java.util.function} +
    • +
    +
  • +
+ +

+ 注意:Android N 的 Lambda 運算式實作是以匿名類別為基礎。此方法可讓它們向下相容並可在舊版 Android 上執行。如果要在舊版上測試 Lambda 運算式,請務必移至您的 {@code + build.gradle} 檔案,並將 {@code compileSdkVersion} 與 {@code + targetSdkVersion} 設定為 23 或更低的層級。 + + + +

+ +

+ 啟用 Java 8 功能與 Jack 工具鏈 +

+ +

+ 如果要使用新的 Java 8 語言功能,您也必須使用新的 Jack 工具鏈。這個新的 Android 工具鏈可將 Java 語言原始程式碼編譯成 Android 可讀取的 Dex 位元組程式碼、具有其自己的 {@code .jack} 程式庫格式,並在單一工具之外提供最多工具鏈功能:重新封裝、縮減、混淆 (Obfuscation ) 與多 Dex (Multidex)。 + + + + + +

+ +

以下是用來建置 Android DEX 檔案之兩個工具鏈的比較:

+
    +
  • 傳統 javac 工具鏈:
    + javac ({@code .java} --> {@code .class}) --> dx ({@code + .class} --> {@code .dex}) +
  • + +
  • 新的 Jack 工具鏈:
    + Jack ({@code .java} --> {@code .jack} --> {@code .dex}) +
  • +
+ +

+ 設定 Gradle +

+ +

+ 如果要為您的專案啟用 Java 8 語言功能與 Jack,請在您的模組特定 {@code build.gradle} 檔案中輸入下列內容: + +

+ +
+android {
+  ...
+  defaultConfig {
+    ...
+    jackOptions {
+      enabled true
+    }
+  }
+  compileOptions {
+    sourceCompatibility JavaVersion.VERSION_1_8
+    targetCompatibility JavaVersion.VERSION_1_8
+  }
+}
+
+ +

+ 已知問題 +

+ +

+ 立即執行 (在 Android Studio 2.0 (Beta) 引進) 目前無法搭配 Jack 使用,而且會將它停用並使用新的工具鏈。 + +

+ +

因為 Jack 在編譯應用程式時不會產生中繼類別檔案,相依於這些檔案的工具目前無法搭配 Jack 使用。這些工具的某些範例為: + +

+ +
    +
  • 在類別檔案上運作的 Lint 偵測器 +
  • + +
  • 需要應用程式類別檔案 (例如 JaCoCo 與 Mockito) 的工具與程式庫 +
  • +
+ +

如果在使用 Jack 時發現任何問題,請回報錯誤

\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/preview/overview.jd b/docs/html-intl/intl/zh-tw/preview/overview.jd new file mode 100644 index 000000000000..590afe592754 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/overview.jd @@ -0,0 +1,440 @@ +page.title=計劃總覽 +page.metaDescription=讓您的應用程式為下一版 Android 做好準備。 +page.image=images/cards/card-n-overview_2x.png +meta.tags="preview", "developer", "android" +page.tags="preview", "developer", "android" + +@jd:body + + +

+ 歡迎使用「Android N Developer Preview」,本計劃提供為新版 Android 測試和最佳化您應用程式所需的一切。它是免費的,而且您可以下載「N Developer Preview」工具來立刻開始。 + + + +

+ + + + + + + +
+
+
+
+
+ 硬體與模擬器映像 +
+ +

+ 在各種裝置上或在模擬器上執行並測試您的應用程式。 + +

+
+ +
+
+ 最新的平台程式碼 +
+ +

+ 我們將在 Preview 期間提供每月更新,讓您能夠針對最新的平台變更進行測試。 +

+
+ +
+
+ 開發人員問題的優先順序 +
+ +

+ 在前幾個星期內,我們將讓開發人員優先回報問題,因此請儘快測試並提供意見回饋。 + +

+
+ +
+ +
+ + +
+
+ 新行為與功能 +
+ +

+ 儘早開始開發以支援新的平台行為,並使用新功能來開發。 +

+
+ +
+
+ 更新是透過隔空傳輸 (OTA) 方式傳遞 +
+ +

+ 透過「Android Beta 計劃」,可以在任何支援的裝置上透過無接縫的隔空傳輸方式取得更新。不需要刷機。 + +

+
+ +
+
+ 意見回饋與支援 +
+ +

+ 使用我們的問題追蹤器回報問題並提供意見回饋。與 N 開發人員社群中的開發人員互動。 + + + +

+
+
+
+
+ + + +

時間軸與更新

+ + +

+ 「N Developer Preview」計畫日期從 2016 年 3 月 9 日到最終 Android N 公開發行版釋出給 AOSP 與 OEM 為止 (預計是 2016 年第 3 季)。 + +

+ +

+ 在關鍵開發里程碑,我們將為您的開發與測試環境傳遞更新。一般而言,您可以預期每個月 (4 到 6 週的間隔) 都能收到更新。里程碑列出如下。 + + +

+ +
    +
  • 預覽版 1 (初始版本,Alpha)
  • +
  • 預覽版 2 (遞增更新,Beta)
  • +
  • 預覽版 3 (遞增更新,Beta)
  • +
  • 預覽版 4 (最終 API 與正式 SDK,Play 發佈)
  • +
  • 預覽版 5 (用於最終測試的近最終系統映像)
  • +
  • 最終版本 (推出給 AOSP 與生態系統)
  • +
+ +

+ 每個更新都包括 SDK 工具、預覽版系統映像、模擬器、參考文件與 API 差異。 + +

+ +

+ 前三個預覽版里程碑提供早期測試與開發環境,可協助您發現目前應用程式中的相容性問題,並針對在新平台運作的目標規劃遷移或功能工作。您可以在這個優先順序期間將您對功能與 API 和檔案相容性問題的意見回饋提供給我們 — 對於上述所有問題,請使用問題追蹤器。您可以預期這些更新之間會有一些 API 變更。 + + + + + + +

+ +

+ 在預覽版 4 與 5,您將能存取最終 N API 與 SDK 以進行開發,並存取接近最終系統映像來測試系統行為與功能。Android N 在此時將提供標準 API 層級。您可以開始為您的舊版應用程式執行最終相容性測試,並調整使用 N API 或功能的任何新程式碼。 + + + + +

+ +

+ 此外,從預覽版 4 開始,您可以發佈應用程式到執行 Android N 的裝置 (在正式 API 層級),例如已選擇加入 Android Beta 計劃的使用者裝置。您可以先發佈到 Google Play 的 Alpha 與 Beta 管道,以便在廣泛於商店中散佈之前,先透過 Android Beta 使用者測試您的應用程式。 + + + + + +

+ +

+ 當您在 Android N 上測試及開發時,強烈建議您在預覽版更新發行時立即更新,讓您的開發環境保持在最新狀態。為簡化此程序,您可以在 Android Beta 計劃中註冊您的測試裝置,並在每個里程碑取得隔空傳輸 (OTA) 更新。或者,我們也會提供已更新的預覽版映像讓您下載並手動刷新。 + + + + + +

+ +

+ 我們將透過 Android 開發人員部落格,還有此網站與 Android N 開發人員社群來通知您有可用的預覽版更新。 + + +

+ + +

N Developer Preview 中有什麼?

+ +

+ 「N Developer Preview」包括您針對各種不同螢幕大小、網路技術、 CPU/GPU 晶片組與硬體架構,測試現有應用程式所需的一切。 + + +

+ +

SDK 工具

+ +

您可以透過 Android Studio 中的 SDK Manager 下載這些元件:

+ +
    +
  • N Developer Preview SDK 工具 +
  • N Developer Preview 模擬器系統映像 (32 位元與 64 位元) +
  • N Developer Preview 模擬器系統映像 (適用於 Android TV) (32 位元) +
  • N Developer Preview 支援程式庫 (適用於新的應用程式範本) +
+ +

+ 我們將視需要在每個里程碑提供這些開發工具的更新。 +

+ +

硬體系統映像

+ +

+ 「N Developer Preview」包括 Nexus 以及在實體裝置上測試及開發時可以使用的其他硬體系統映像。如需硬體映像的完整清單,請參閱裝置映像頁面。 + + +

+ +

+ 我們將在每個里程碑傳遞已更新的系統映像。您可以下載已更新的系統映像並手動將它刷到您的測試裝置,而且刷機頻率無限制。當您需要在自動化測試環境多次刷新您裝置時,這特別實用。 + + + + +

+ +

注意手動刷新的裝置將無法像去年的預覽版一樣取得 OTA 更新。今年,您可以透過在「Android Beta 計劃」註冊裝置以取得 OTA — 請參閱下一節的詳細資料。 + + + +

+ +

透過 Android Beta 計劃取得 OTA 更新

+ +

+ Android N 中的其中一個新功能是隔空傳輸 (OTA) 更新計劃,它可以自動將最新的 Android N 預覽版更新直接傳遞給已註冊此計劃的裝置。加入此計劃完全免費,而且此計劃開放給所有擁有支援裝置並已註冊 Google 帳戶的人。 + + + +

+ +

+ 如果要註冊此計劃,請瀏覽 Android Beta 計劃網站。您將會看到已在您的帳戶註冊且符合加入 Android Beta 計劃的所有裝置。 + + + +

+ +
    +
  1. 選擇要接收 Android N 更新的裝置 +
  2. 按一下 [Enroll],閱讀並同意服務條款,然後按一下 [OK]。 +
+ +

+ 一旦註冊,您的裝置很快就會收到更新。在大部分情況下,您不需要執行完整重設以將您的資料移到 Android N,但建議您先備份重要資料,再註冊裝置。 + + + +

+ +

+ 當更新傳遞到您的裝置之後,建議您儘快下載並安裝。您將能掌握系統 UI、行為、API 與功能的最新變更。 + + +

+ +

+ 在「Developer Preview」結束時,您已註冊的裝置將會收到正式 Android N 版本的更新。 + +

+ +

+ 您可以隨時取消註冊 Android Beta 計劃。在取消註冊之前,請務必備份裝置上的資料。 + + +

+ +

注意:當您取消註冊時,系統會將您的裝置還原為出廠預設值並更新到最新版本的 Android 6.0 Marshmallow (不一定是註冊裝置之前安裝的版本)。為確保乾淨的安裝,系統會將您的資料從裝置清除,包括聯絡人、訊息與相片等。 + + + + + + +

+ +

文件與範例程式碼

+ +

+ 「Developer Preview」網站上提供這些文件資源,協助您了解 Android N: + +

+ +
    +
  • 設定以針對 Android N 開發提供逐步指示協助您開始。 + +
  • +
  • 行為變更指出要測試的關鍵區域。 +
  • +
  • 新 API 的文件,包括 API 總覽、可下載的 API 參考資料與詳細關鍵功能 (例如多視窗支援、整合式通知、多地區設定支援等) 的開發人員指南。 + + + +
  • 示範如何支援權限與其他新功能的範例程式碼。 + +
  • 適用於目前 N Developer Preview 的版本資訊,包括變更資訊與差異報告。 + + +
+ +

可下載的 API 參考資料

+ +

+ 在早期預覽版更新期間,您能以獨立 zip 壓縮檔的形式下載最新的 Android N 平台 API 參考資料。下載的參考資料也包括差異報告,可協助您瞭解自 API 23 與前次更新之後的 API 變更。 + + + + +

+ +

+ 當 Android N API 邁入最終階段且我們為它指派正式 API 層級時,我們將在 https://developer.android.com 為您提供線上 API 參考資料。 + +

+ +

+ 支援資源 +

+ +

+ 在「N Developer Preview」上測試及開發時,請使用這些管道來回報問題及提供意見回饋: + +

+ +
    +
  • N Developer Preview 問題追蹤器是您的主要意見回饋管道。您可以透過此問題追蹤器來回報錯誤、效能問題與一般意見回饋。您也可以檢查已知問題並尋找變通方式步驟。當您的問題經過分類並傳送給 Android 工程團隊檢閱時,我們會通知您。 + + + + +
  • +
  • Android N 開發人員社群是您能與其他 Android N 開發人員聯絡的 Google+ 社群。您可以分享有關 Android N 的觀察或想法,或尋找解答。我們會主持社群並視需要提供解答與指導方針。 + + + +
  • +
+ +

目標設定、預覽版 API 及發佈

+ +

+ 「N Developer Preview」提供僅供開發的系統與沒有標準 API 層級的 Android 程式庫。如果要選擇退出相容性行為以測試您的應用程式 (強烈建議),您可以透過將您應用程式的 targetSdkVersion 設定為 “N”,以便以 Android N 預覽版。做為目標。 + + + + + +

+ +

+ 「Android N Developer Preview」提供預覽版 API — 在最終版 SDK (目前規劃在 2016 年第 3 季) 發行之前的都不是正式 API。這表示您可以預期這段時間會有小幅度的 API 變更,特別是在計劃開始的前幾週。隨著每次更新「Android N Developer Preview」,我們將提供變更摘要。 + + + + + +

+ +

+ 注意:雖然預覽版 API 可能會變更,基本系統行為均已穩定且能夠立即測試。 + + +

+ +

+ Google Play 會防止發佈目標為 N Developer Preview 的應用程式。當 Android N 最終 SDK 可用時,您將能以正式 Android N API 層級做為目標,並透過 Alpha 與 Beta 發行管道將您的應用程式發佈到 Google Play。同時,如果要將目標為 Android N 的應用程式散佈給測試人員,您可以透過電子郵件或您網站的直接下載連結來完成。 + + + + + +

+ +

+ 在完全將 Android N 釋出給 AOSP 與 OEM 時 (預計是 2016 年第 3 季),您可以將以 Android N 為目標的發佈發佈給 Google Play 中的公開發行管道。 + + +

+ + +

如何開始

+ +

+ 開始使用 Android N 測試您的應用程式: +

+ +
    +
  1. 檢閱 API 總覽行為變更以瞭解新功能,以及它會如何影響您的應用程式。特別是瞭解新的通知功能與多視窗支援。 + + + +
  2. +
  3. 依照設定 Preview SDK 的指示來設定您的環境,並設定測試裝置。 +
  4. +
  5. 依照刷新指示,將您的裝置刷新為最新的 Android N 系統映像。 +
  6. +
  7. 檢閱 API 參考資料Android N 範例,以深入瞭解新的 API 功能以及如何在您的應用程式中運用。 + + +
  8. 加入 Android N 開發人員社群以取得最新消息,並與使用新平台的開發人員聯絡 + +
  9. +
+ +

+ 感謝您參與「Android N Developer Preview」計劃! +

diff --git a/docs/html-intl/intl/zh-tw/preview/samples.jd b/docs/html-intl/intl/zh-tw/preview/samples.jd new file mode 100644 index 000000000000..265c0ff2e0cd --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/samples.jd @@ -0,0 +1,85 @@ +page.title=範例 +page.tags="preview", "samples", "android" +page.image=images/cards/card-n-samples_2x.png +@jd:body + +

+ 下列程式碼範例是針對 Android N 提供。如果要在 Android Studio 中下載, 範例,請選取 [File] > [Import Samples] 選單選項。 + + +

+ +

+ 注意:這些可下載的專案是專為與 Gradle 和 Android Studio 一起使用而設計。 + +

+ + +

多視窗 Playground

+ +

+ 此範例示範如何在您的應用程式中發揮多視窗使用者介面的功能。 + +

+

+ 在 GitHub 上取得 + +

+ +
+

使用中通知

+ +

+ 這是現有的範例,它會顯示使用 NotificationCompat 傳送通知的簡單服務。來自使用者的每個未閱讀交談都會以個別通知方式傳送。 + + +

+

+ 已更新此範例以利用 Android N 中的新通知功能。 + +

+

+ 在 GitHub 上取得 + +

+ +
+

簡訊服務

+ +

+ 這是現有的範例,它示範如何使用 NotificationManager 告知使用者應用程式目前顯示的通知數目。 + + +

+

+ 已更新此範例以利用 Android N 中的新通知功能。 + +

+

+ 在 GitHub 上取得 + +

+ +
+

直接開機

+ +

+ 此範例示範如何在裝置加密的儲存空間 (裝置開機後即一律可用) 中儲存及存取資料。 + +

+

+ 在 GitHub 上取得 + +

+ +
+

限定範圍目錄存取

+ +

+ 此範例示範如何讀取及寫入特定目錄的資料,同時要求較少的權限。 + +

+

+ 在 GitHub 上取得 + +

\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd b/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd new file mode 100644 index 000000000000..a5ce556b74b2 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd @@ -0,0 +1,226 @@ +page.title=設定 Preview +meta.keywords="preview", "android" +page.tags="preview", "developer preview" +page.image=images/cards/card-n-sdk_2x.png + +@jd:body + + + + +

如果要開發適用於「Android N Preview」的應用程式,您必須為您的開發人員環境進行一些更新,如此頁面上所述。 +

+ +

如果只要在 Android N 系統映像上測試您應用程式的相容性,請依照在 Android N 裝置上測試中的指南執行。 +

+ + + + +

取得 Android Studio 2.1 (預覽版)

+ +

Android N 平台新增對 Java 8 語言功能的支援,它需要名為 Jack 的新編譯器。目前,只有 Android Studio 2.1 中才支援最新的 Jack 版本。因此,如果要使用 Java 8 語言功能,您必須使用 Android Studio 2.1 來建置您的應用程式。否則,您不需要使用 Jack 編譯器,但您仍需要更新到 JDK 8 以針對 Android N 編譯,如下所述。 + + + + + + +

+ + + +

Android Studio 2.1 目前在早期測試發行管道中是以預覽版形式提供。如果您已經有 Android Studio 但不想要更新到早期測試管道,您可以下載 Android Studio 2.1 並另行安裝,並使用它來針對 Android N 進行開發,這樣並不會影響您的主要 Android Studio 環境。 + + + + +

+ +

如果要下載 Android Studio 2.1 並另行安裝,請依照這些步驟執行 (或者,如果要以現有安裝之更新的形式接收 Android Studio 2.1,請跳到步驟 4): + +

+ +
    +
  1. 編輯現有 Android Studio 安裝的名稱,並附加版本號碼。這樣,當您安裝新版本時,它將不會覆寫現有的版本。 + +
  2. +
  3. 早期測試管道下載頁面針對您的作業系統下載適當的 ZIP 檔案。 + +
  4. +
  5. 將套件解壓縮,並將 Android Studio 2.1 內容移動到系統上應用程式的適當位置,然後將它啟動。 +
  6. +
  7. 開啟 [Settings] 對話方塊 (在 Windows/Linux 上是 [File] > [Settings],在 Mac 上是 [Android Studio] > [Preferences])。在左面板中,選取 [Appearance & Behavior] > [System Settings] > [Updates]。 + + + + +
  8. +
  9. 在 [Updates] 面板上,選取 [Automatically check updates for] 核取方塊,然後從下拉式清單選取 [Canary Channel]。 + + +
  10. +
+ +

針對下一個步驟,將此設定視窗維持開啟。

+ + +

取得 N Preview SDK

+ +

如果要開始使用 Android N API 來開發,您必須在 Android Studio 中安裝 Android N Preview SDK,如下所示: +

+ +
    +
  1. 在仍於 [Updates] 面板 (上面的步驟 4) 中檢視時,選取 [Automatically check updates for Android SDK] 核取方塊,然後從下拉式清單中選取 [Preview Channel]。 + + + +
  2. +
  3. 按一下 [Check Now]
  4. + +
  5. 在左面板中,選取 [Appearance & Behavior] > [System Settings] > [Android SDK]。 + + +
  6. 按一下 [SDK Platforms] 分頁,然後選取 [Android N Preview] 核取方塊。 +
  7. + +
  8. 按一下 [SDK Tools] 分頁,然後選取 [Android SDK Build Tools]、[Android SDK Platform-Tools] 與 [Android SDK Tools] 核取方塊。 + + + +
  9. + +
  10. 按一下 [OK],然後接受要安裝之任何套件的授權合約。 + +
  11. +
+ +

取得 N Preview 參考文件

+ +

+ 您可以在 N Preview 參考文件 (可從下表下載) 中找到有關 Android N API 的詳細資訊。此套件包含 Android 開發人員網站的已刪節離線版本,而且包括適用於 Android N API 的已更新 API 參考資料與 API 差異報告。 + + + + +

+ + + + + + + + + + +
文件總和檢查碼
+ n-preview-1-docs.zip + MD5:4ab33ccbe698f46f125cc5b807cf9c2f
+ SHA-1:6a3880b3ccd19614daae5a4d0698ea6ae11c20a5 +
+ + + +

取得 Java 8 JDK 與 JRE

+ +

如果要針對 Android N 平台編譯您的應用程式,您必須使用 Java 8 開發人員套件 (JDK 8),而且如果要使用某些工具來搭配 Android Studio 2.1,您必須安裝 Java 8 執行階段環境 (JRE 8)。因此,如果您沒有最新版本的 JDK 8 與 JRE 8,請立即下載。 + + + +

+ +

接著,在 Android Studio 中設定 JDK 版本,如下所示:

+ +
    +
  1. 在 Android Studio 中開啟 Android 專案,然後選取 [File] > [Project Structure] 以開啟 [Project Structure] 對話方塊 (或者,您可以選取 [File] > [Other Settings] > [Default Project Structure],以針對所有專案設定預設值)。 + + + + +
  2. +
  3. 在對話方塊的左面板中,按一下 [SDK Location]。 +
  4. +
  5. 在 [JDK Location] 欄位中,輸入 Java 8 JDK 的位置 (按一下右邊的按鈕以瀏覽您的檔案),然後按一下 [OK]8 。 + + +
  6. +
+ + + + +

更新或建立專案

+ +

+ 如果要使用 Android N API,您必須適當地設定您的專案。 +

+ +

如果計畫使用 Java 8 語言功能,您也應該閱讀 Java 8 語言功能,以取得支援之 Java 8 功能以及如何搭配 Jack 編譯器設定您專案的詳細資訊。 + + +

+ + +

更新現有的專案

+ +

開啟模組的 build.gradle 檔案並更新值,如下所示: + + +

+ +
+android {
+  compileSdkVersion 'android-N'
+  buildToolsVersion '24.0.0-rc1'
+  ...
+
+  defaultConfig {
+     minSdkVersion 'N'
+     targetSdkVersion 'N'
+     ...
+  }
+  ...
+}
+ + +

建立新專案

+ + +

使用 Android N Preview SDK 建立新的開發專案:

+ +
    +
  1. 按一下 [File] > [New Project],並依照步驟執行,直到到達 [Target Android Devices] 頁面。 + +
  2. +
  3. 在此頁面上,選取 [Phone and Tablet] 選項。
  4. +
  5. 在 [Phone and Tablet] 選項下,在 [Minimum SDK] 選項清單中,選取 [N: Android API 23, N Preview (Preview)]。 + +
  6. +
+ + +

後續步驟

+ + + diff --git a/docs/html/preview/preview_toc.cs b/docs/html/preview/preview_toc.cs index cf38f701a8b2..1829d11226e8 100644 --- a/docs/html/preview/preview_toc.cs +++ b/docs/html/preview/preview_toc.cs @@ -29,8 +29,16 @@ zh-tw-lang="設定預覽版 SDK"> Set Up to Develop + @@ -47,9 +55,23 @@
  • Background Optimizations
  • + es-lang="Optimizaciones en segundo plano" + ja-lang="バックグラウンド処理の最適化" + ko-lang="백그라운드 최적화" + pt-br-lang="Otimizações em segundo plano" + ru-lang="Оптимизация фоновых процессов" + zh-cn-lang="后台优化" + zh-tw-lang="背景最佳化">Background Optimizations +
  • Language and Locale
  • + es-lang="Idioma y configuración regional" + ja-lang="言語とロケール" + ko-lang="언어 및 로케일" + pt-br-lang="Idioma e localidade" + ru-lang="Язык и языковой стандарт" + zh-cn-lang="语言和区域设置" + zh-tw-lang="語言和地區設定">Language and Locale +
@@ -66,31 +88,80 @@
  • Multi-Window Support
  • + es-lang="Compatibilidad con ventanas múltiples" + ja-lang="マルチ ウィンドウのサポート" + ko-lang="다중 창 지원" + pt-br-lang="Suporte a várias janelas" + ru-lang="Поддержка многооконного режима" + zh-cn-lang="多窗口支持" + zh-tw-lang="多視窗支援"> + Multi-Window Support
  • Notifications
  • - -
  • Data Saver
  • + es-lang="Notificaciones" + ja-lang="通知" + ko-lang="알림" + pt-br-lang="Notificações" + ru-lang="Уведомления" + zh-cn-lang="通知" + zh-tw-lang="通知"> + Notifications + +
  • + Data Saver
  • TV Recording
  • + es-lang="Grabación de TV" + ja-lang="TV の録画" + ko-lang="TV 녹화" + pt-br-lang="Gravação para TV" + ru-lang="Запись ТВ" + zh-cn-lang="TV 录制" + zh-tw-lang="電視錄製"> + TV Recording
  • Network Security Configuration
  • + es-lang="Configuración de seguridad de la red" + ja-lang="ネットワーク セキュリティ構成" + ko-lang="네트워크 보안 구성" + pt-br-lang="Configurações de segurança de rede" + ru-lang="Конфигурация сетевой безопасности" + zh-cn-lang="网络安全配置" + zh-tw-lang="網路安全性設定"> + Network Security Configuration
  • ICU4J Support
  • + es-lang="API de ICU4J del framework de Android" + ja-lang="ICU4J Android フレームワーク API" + ko-lang="ICU4J Android 프레임워크 API" + pt-br-lang="APIs de estrutura do Android para ICU4J" + ru-lang="API-интерфейсы ICU4J в платформе Android" + zh-cn-lang="ICU4J Android 框架 API" + zh-tw-lang="ICU4J Android 架構 API"> + ICU4J Support
  • Java 8 Language Features
  • - -
  • Android for Work Updates
  • + es-lang="Funciones del lenguaje Java 8" + ja-lang="Java 8 の機能" + ko-lang="Java 8 언어 기능" + pt-br-lang="Recursos de linguagem do Java 8" + ru-lang="Возможности языка Java 8" + zh-cn-lang="Java 8 语言功能" + zh-tw-lang="Java 8 語言功能"> + Java 8 Language Features + +
  • + Android for Work Updates
  • Scoped Directory Access
  • + es-lang="Acceso a directorios determinados" + ja-lang="特定のディレクトリへのアクセス" + ko-lang="범위가 지정된 디렉터리 액세스" + pt-br-lang="Acesso a diretórios com escopo" + ru-lang="Доступ к выделенным каталогам" + zh-cn-lang="作用域目录访问" + zh-tw-lang="限定範圍目錄存取"> + Scoped Directory Access
-- GitLab