Các tính năng và API của Android 9

Android 9 (API cấp 28) giới thiệu các tính năng và khả năng mới tuyệt vời cho Người dùng và nhà phát triển. Tài liệu này nêu bật những tính năng mới dành cho nhà phát triển.

Để tìm hiểu về các API mới, hãy đọc báo cáo điểm khác biệt về API hoặc truy cập vào Tài liệu tham khảo về API của Android. Ngoài ra, hãy nhớ thanh toán Các thay đổi về hành vi của Android 9 cần tìm hiểu về những khía cạnh mà những thay đổi của nền tảng có thể ảnh hưởng đến ứng dụng của bạn.

Định vị trong nhà bằng tin nhắn theo thời gian thực (RTT) của Wi-Fi

API RTT mới hỗ trợ định vị trong nhà trong các ứng dụng.

Android 9 hỗ trợ chuẩn Wi-Fi IEEE 802.11-2016 giao thức—còn gọi là Thời gian trọn vòng của Wi-Fi (RTT) để giúp bạn tận dụng về vị trí trong nhà trong ứng dụng của bạn.

Trên thiết bị chạy Android 9 có hỗ trợ phần cứng, ứng dụng của bạn có thể sử dụng API RTT để đo lường khoảng cách đến các điểm truy cập (AP) Wi-Fi ở gần có hỗ trợ RTT. Thiết bị phải có đã bật dịch vụ vị trí và bật quét tìm Wi-Fi (trong Cài đặt > Vị trí) và ứng dụng của bạn phải có ACCESS_FINE_LOCATION quyền. Thiết bị này không cần kết nối với các điểm truy cập để sử dụng tính năng RTT. Để đảm bảo quyền riêng tư, chỉ điện thoại đó mới có thể xác định khoảng cách đến điểm truy cập; điểm truy cập không có thông tin này.

Nếu thiết bị của bạn đo khoảng cách đến 3 điểm truy cập trở lên, bạn có thể sử dụng thuật toán đa phương để ước tính vị trí thiết bị phù hợp nhất với thiết bị đo lường. Kết quả thường chính xác trong vòng 1 đến 2 mét.

Với độ chính xác này, bạn có thể tạo ra các trải nghiệm mới, chẳng hạn như chỉ đường trong toà nhà và các dịch vụ dựa trên vị trí chi tiết, chẳng hạn như điều khiển bằng giọng nói khó phân biệt (ví dụ: "Bật đèn này") và thông tin dựa trên vị trí (chẳng hạn như "Có ưu đãi đặc biệt cho sản phẩm này không?").

Xem API RTT Wi-Fi đang được sử dụng trong Ứng dụng minh hoạ Android WifiRttScan.

Để biết thêm thông tin, hãy xem Vị trí Wi-Fi: phạm vi có thời gian trọn vòng (RTT).

Hỗ trợ vết cắt trên màn hình

Màn hình Tuỳ chọn cho nhà phát triển cho thấy nhiều kích thước vết cắt

Kiểm thử vết cắt trên màn hình bằng cách dùng trình mô phỏng

Android 9 hỗ trợ các màn hình tràn viền mới nhất có vết cắt trên màn hình của camera và loa. Chiến lược phát hành đĩa đơn DisplayCutout giúp bạn tìm ra vị trí và hình dạng của các khu vực không hoạt động nơi nội dung không được hiển thị. Để xác định sự tồn tại và vị trí của những vùng cắt này, hãy sử dụng getDisplayCutout() .

Thuộc tính bố cục cửa sổ mới layoutInDisplayCutoutMode! cho phép ứng dụng của bạn bố trí nội dung xung quanh các vết cắt của thiết bị. Bạn có thể đặt thuộc tính này cho một trong các giá trị sau:

Bạn có thể mô phỏng vết cắt trên màn hình trên bất kỳ thiết bị hoặc trình mô phỏng nào chạy Android 9 như sau:

  1. Bật tuỳ chọn cho nhà phát triển.
  2. Trong màn hình Tuỳ chọn cho nhà phát triển, cuộn xuống phần Bản vẽ rồi chọn Mô phỏng màn hình có vết cắt.
  3. Chọn kích thước của vết cắt.

Thông báo

Android 9 giới thiệu một số tính năng nâng cao cho thông báo, tất cả đều được cung cấp cho những nhà phát triển nhắm đến API cấp 28 trở lên.

Thông báo tin nhắn

MessagingStyle có ảnh đính kèm.

Thông báo tin nhắn

MessagingStyle với tin nhắn trả lời và cuộc trò chuyện.

Để biết mã mẫu sử dụng thông báo, bao gồm cả các tính năng của Android 9, hãy xem Mọi người Mẫu.

Trải nghiệm nhắn tin nâng cao

Kể từ Android 7.0 (API cấp 24), bạn có thể thêm một thao tác để trả lời tin nhắn hoặc nhập văn bản khác trực tiếp từ thông báo. Các điểm cải tiến của Android 9 tính năng này cùng với những cải tiến sau:

  • Hỗ trợ đơn giản cho những người tham gia cuộc trò chuyện: Person lớp học được dùng để xác định những người tham gia vào một cuộc trò chuyện, bao gồm hình đại diện và URI. Nhiều API khác, chẳng hạn như addMessage()! nay tận dụng lớp Person thay vì CharSequence. Lớp Person cũng hỗ trợ mẫu thiết kế Builder.

  • Hỗ trợ hình ảnh: Android 9 hiện hiển thị hình ảnh trong Thông báo nhắn tin trên điện thoại. Bạn có thể sử dụng setData() vào thông báo để hiển thị hình ảnh. Đoạn mã sau đây minh hoạ cách để tạo Person và một thông báo chứa hình ảnh.

Kotlin

// Create new Person.
val sender = Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build()
// Create image message.
val message = Message("Picture", time, sender)
        .setData("image/", imageUri)
val style = Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message)

Java

// Create new Person.
Person sender = new Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build();
// Create image message.
Message message = new Message("Picture", time, sender)
        .setData("image/", imageUri);
Notification.MessagingStyle style = new Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message);
  • Lưu câu trả lời dưới dạng bản nháp: Ứng dụng của bạn có thể truy xuất EXTRA_REMOTE_INPUT_DRAFT do hệ thống gửi khi người dùng vô tình đóng thông báo nhắn tin. Bạn có thể dùng dữ liệu bổ sung này để điền sẵn các trường văn bản trong ứng dụng và giúp người dùng có thể hoàn thành câu trả lời của họ.

  • Xác định xem một cuộc trò chuyện có phải là cuộc trò chuyện nhóm hay không: Bạn có thể sử dụng setGroupConversation() để xác định một cuộc trò chuyện là cuộc trò chuyện nhóm hay cuộc trò chuyện không theo nhóm.

  • Đặt thao tác ngữ nghĩa cho một ý định: setSemanticAction() cho phép bạn cung cấp ý nghĩa ngữ nghĩa cho một hành động, chẳng hạn như là "đánh dấu là đã đọc", "xoá" "trả lời" và cứ tiếp tục như vậy.

  • Trả lời thông minh: Android 9 hỗ trợ các câu trả lời đề xuất tương tự có trong nhắn tin. Sử dụng RemoteInput.setChoices() để cung cấp một loạt các phản hồi chuẩn cho người dùng.

Chế độ cài đặt kênh, thông báo phát đi và chế độ Không làm phiền

Android 8.0 giới thiệu Kênh thông báo, cho phép bạn tạo một cho từng loại thông báo mà bạn muốn hiển thị. Android 9 đơn giản hoá chế độ cài đặt kênh thông báo nhờ những thay đổi sau:

  • Chặn nhóm kênh: Giờ đây, người dùng có thể chặn toàn bộ các nhóm kênh trong phần cài đặt thông báo cho ứng dụng. Bạn có thể sử dụng isBlocked() để xác định thời điểm một nhóm bị chặn và do đó, không gửi bất kỳ cho các kênh trong nhóm đó.

    Ngoài ra, ứng dụng của bạn có thể truy vấn các chế độ cài đặt hiện tại của nhóm kênh bằng cách sử dụng cái mới getNotificationChannelGroup() .

  • Các loại ý định truyền tin mới: Hệ thống Android hiện gửi ý định truyền tin khi trạng thái chặn của kênh thông báo và nhóm kênh thay đổi. Ứng dụng sở hữu kênh hoặc nhóm bị chặn có thể theo dõi những ý định này và phản ứng theo cách phù hợp. Để biết thêm thông tin về các thao tác theo ý định và nội dung bổ sung này, tham chiếu đến danh sách hằng số được cập nhật trong NotificationManager tham chiếu. Để biết thông tin về cách phản ứng với ý định truyền tin, hãy tham khảo Chương trình phát sóng.

  • NotificationManager.Policy có 3 danh mục ưu tiên mới Không làm phiền:

  • NotificationManager.Policy cũng có 7 hằng số Do-Not-Disturb mới có thể dùng để ngăn tình trạng gián đoạn hình ảnh:

Hỗ trợ nhiều camera và cập nhật camera

Trên các thiết bị chạy Android 9, bạn có thể truy cập vào bảng tin đồng thời hai hoặc nhiều thiết bị camera. Trên các thiết bị có máy ảnh kép mặt trước hoặc mặt sau, bạn có thể tạo các tính năng tiên tiến không thể dùng với chỉ một máy ảnh, chẳng hạn như tính năng liền mạch thu phóng, hiệu ứng bokeh và hình ảnh nổi. API này cũng cho phép bạn gọi một hàm logic hoặc hợp nhất luồng camera tự động chuyển đổi giữa 2 hoặc nhiều camera.

Các cải tiến khác về máy ảnh bao gồm Phiên hoạt động bổ sung tham số giúp giảm độ trễ trong quá trình chụp ảnh ban đầu và chia sẻ nền tảng cho phép ứng dụng máy ảnh xử lý nhiều trường hợp sử dụng mà không cần dừng hay bắt đầu lại luồng camera. Chúng tôi cũng đã thêm các API cho flash dựa trên hiển thị hỗ trợ và quyền truy cập vào OIS dấu thời gian để ổn định hình ảnh cấp ứng dụng và các hiệu ứng đặc biệt.

Trong Android 9, tính năng nhiều camera API hỗ trợ máy ảnh đơn sắc cho các thiết bị có FULL hoặc Chức năng LIMITED. Đầu ra đơn sắc đạt được thông qua YUV_420_888 trong đó Y là thang độ xám, U (Cb) là 128 và V (Cr) là 128.

Android 9 cũng cho phép hỗ trợ USB/UVC bên ngoài camera bật thiết bị được hỗ trợ.

ImageDecoder cho các đối tượng có thể vẽ và bitmap

Android 9 ra mắt ImageDecoder mang đến một phương pháp hiện đại hoá để giải mã hình ảnh. Sử dụng lớp học này thay cho BitmapFactoryBitmapFactory.Options API.

ImageDecoder cho phép bạn tạo Drawable hoặc một Bitmap từ vùng đệm byte, một tệp hoặc URI. Để giải mã hình ảnh, trước tiên hãy gọi createSource() bằng nguồn của hình ảnh được mã hoá. Sau đó, gọi decodeDrawable() hoặc decodeBitmap() bằng cách truyền ImageDecoder.Source để tạo Drawable hoặc Bitmap. Để thay đổi cài đặt mặc định, chuyển OnHeaderDecodedListener đến decodeDrawable() hoặc decodeBitmap(). ImageDecoder cuộc gọi onHeaderDecoded() với chiều rộng và chiều cao mặc định của hình ảnh khi đã biết thông tin. Nếu hình ảnh được mã hoá là ảnh GIF hoặc WebP động, thì decodeDrawable() sẽ trả về một Drawable là một thực thể của AnimatedImageDrawable .

Bạn có thể sử dụng nhiều phương pháp để đặt thuộc tính hình ảnh:

  • Để điều chỉnh tỷ lệ hình ảnh đã giải mã đến một kích thước chính xác, hãy chuyển các kích thước mục tiêu vào setTargetSize(). Bạn cũng có thể điều chỉnh tỷ lệ hình ảnh bằng cách sử dụng một kích thước mẫu. Truyền trực tiếp kích thước mẫu đến setTargetSampleSize().
  • Để cắt hình ảnh trong phạm vi của hình ảnh được điều chỉnh theo tỷ lệ, hãy gọi setCrop().
  • Để tạo một bitmap có thể thay đổi, hãy truyền true vào setMutableRequired().

ImageDecoder cũng cho phép bạn thêm các hiệu ứng tuỳ chỉnh và phức tạp vào hình ảnh chẳng hạn như góc bo tròn hoặc mặt nạ hình tròn. Sử dụng setPostProcessor() với một bản sao của PostProcessor để thực thi bất kỳ lệnh vẽ nào mà bạn muốn.

Ảnh động

Android 9 ra mắt AnimatedImageDrawable để vẽ và hiển thị hình ảnh động GIF và WebP. AnimatedImageDrawable hoạt động tương tự như AnimatedVectorDrawable trong đó luồng kết xuất điều khiển ảnh động của AnimatedImageDrawable. Luồng kết xuất cũng sử dụng luồng worker để giải mã, nhờ đó việc giải mã không can thiệp vào các thao tác khác trên luồng kết xuất. Phương thức triển khai này cho phép ứng dụng của bạn để hiển thị hình ảnh động mà không cần quản lý các bản cập nhật của ứng dụng hoặc can thiệp vào các sự kiện khác trên luồng giao diện người dùng của ứng dụng.

Có thể giải mã AnimatedImageDrawable bằng cách sử dụng một bản sao của ImageDecoder. Nội dung sau đây đoạn mã cho biết cách sử dụng ImageDecoder để giải mã AnimatedImageDrawable:

Kotlin

@Throws(IOException::class)
private fun decodeImage() {
    val decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(resources, R.drawable.my_drawable))

    // Prior to start(), the first frame is displayed.
    (decodedAnimation as? AnimatedImageDrawable)?.start()
}

Java

private void decodeImage() throws IOException {
    Drawable decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(getResources(), R.drawable.my_drawable));

    if (decodedAnimation instanceof AnimatedImageDrawable) {
        // Prior to start(), the first frame is displayed.
        ((AnimatedImageDrawable) decodedAnimation).start();
    }
}

ImageDecoder có một số phương thức cho phép bạn chỉnh sửa hình ảnh thêm. Ví dụ: bạn có thể sử dụng setPostProcessor() để sửa đổi giao diện của hình ảnh, chẳng hạn như áp dụng mặt nạ hình tròn hoặc các góc tròn.

Video HDR VP9, nén hình ảnh HEIF và API đa phương tiện

Android 9 cung cấp hỗ trợ tích hợp cho Cấu hình VP9 có Dải động cao (HDR) 2, để bạn có thể phân phối phim hỗ trợ HDR cho người dùng của mình từ YouTube, Play Phim và các nguồn khác trên thiết bị có hỗ trợ HDR.

Android 9 cũng hỗ trợ thêm việc mã hoá hình ảnh bằng Hình ảnh hiệu quả cao Định dạng tệp (HEIF hoặc HEIC), giúp cải thiện khả năng nén và giảm không gian lưu trữ cũng như dữ liệu mạng mức sử dụng. Mẫu ảnh tĩnh HEIF được hỗ trợ trong MediaMuxerMediaExtractor khác. Với sự hỗ trợ nền tảng trên các thiết bị Android 9, bạn có thể dễ dàng gửi và sử dụng hình ảnh HEIF từ máy chủ phụ trợ của bạn. Sau khi bạn đã đảm bảo rằng ứng dụng tương thích với định dạng dữ liệu này để chia sẻ và hiển thị, hãy dùng thử HEIF làm định dạng lưu trữ hình ảnh trong ứng dụng của bạn. Bạn có thể thực hiện chuyển đổi jpeg sang heic sử dụng ImageDecoder hoặc BitmapFactory (sẽ nhận bitmap từ tệp JPEG). Sau đó, bạn có thể sử dụng HeifWriter để ghi HEIF hình ảnh tĩnh từ bộ đệm byte YUV hoặc các bản sao của Surface hoặc Bitmap.

Bạn cũng có thể xem các chỉ số về nội dung nghe nhìn ở AudioTrack! AudioRecord! và MediaDrm lớp học.

Android 9 giới thiệu các phương thức cho Lớp MediaDRM để nhận chỉ số, HDCP các cấp, mức độ bảo mật và số phiên, cũng như để tăng thêm khả năng kiểm soát các mức bảo mật và điểm dừng an toàn. Xem Điểm khác biệt về API để biết thông tin chi tiết.

Trong Android 9, API AAudio thêm hỗ trợ một số thuộc tính AAudioStream bổ sung, bao gồm cả cách sử dụng, nội dung và giá trị đặt trước. Khi sử dụng những thuộc tính này, bạn có thể tạo sự kiện phát trực tiếp được điều chỉnh cho các ứng dụng VoIP hoặc máy quay video. Bạn cũng có thể đặt mã phiên thành liên kết luồng AAudio với tuyển tập phụ có thể chứa các hiệu ứng. Sử dụng AudioEffect API để kiểm soát các hiệu ứng.

Android 9 ra mắt AudioEffect API cho xử lý động. Với lớp này, bạn có thể tạo hiệu ứng âm thanh dựa trên kênh, bao gồm cân bằng âm thanh, nén nhiều băng tần và giới hạn — qua nhiều giai đoạn. Chiến lược phát hành đĩa đơn số lượng băng tần và giai đoạn hoạt động có thể định cấu hình và hầu hết các thông số có thể được định cấu hình kiểm soát theo thời gian thực.

Mức độ nhạy cảm của chi phí dữ liệu trong JobScheduler

Kể từ Android 9, JobScheduler có thể sử dụng các tín hiệu trạng thái mạng do nhà mạng cung cấp để cải thiện quá trình xử lý công việc liên quan đến mạng.

Công việc có thể khai báo kích thước dữ liệu ước tính, tìm nạp trước tín hiệu và chỉ định các yêu cầu chi tiết về mạng. Sau đó, JobScheduler sẽ quản lý công việc theo trạng thái mạng. Ví dụ: khi tín hiệu mạng cho biết đang nghẽn, JobScheduler có thể trì hoãn các yêu cầu mạng lớn. Khi ở trên mạng không đo lượng dữ liệu, JobScheduler có thể chạy các công việc tìm nạp trước để cải thiện trải nghiệm người dùng, chẳng hạn như bằng cách tìm nạp trước dòng tiêu đề.

Khi thêm công việc, hãy nhớ sử dụng setEstimatedNetworkBytes(), setPrefetch()! và setRequiredNetwork() khi thích hợp để trợ giúp JobScheduler xử lý công việc đúng cách. Khi công việc của bạn thực thi, hãy nhớ sử dụng đối tượng Network được trả về bởi JobParameters.getNetwork(). Nếu không, bạn sẽ ngầm sử dụng mạng mặc định của thiết bị có thể không đáp ứng yêu cầu của bạn, dẫn đến việc sử dụng dữ liệu ngoài ý muốn.

Neural Networks API 1.1

Ra mắt Neural Networks API trong Android 8.1 (API cấp 27) để tăng tốc công nghệ học máy trên thiết bị Android. Android 9 mở rộng và cải thiện API, bổ sung thêm hỗ trợ 9 hoạt động mới:

Vấn đề đã biết: Khi chuyển ANEURALNETWORKS_TENSOR_QUANT8_ASYMM tensor thành ANEURALNETWORKS_PAD hoạt động, có sẵn trên Android 9 trở lên, đầu ra từ NNAPI có thể không khớp với đầu ra của máy cấp cao hơn khung học tập, chẳng hạn như TensorFlow Lite Bạn chỉ nên chuyển ANEURALNETWORKS_TENSOR_FLOAT32 cho đến khi vấn đề được giải quyết.

Ngoài ra, API này cũng giới thiệu một hàm mới, ANeuralNetworksModel_relaxComputationFloat32toFloat16()! cho phép bạn chỉ định xem cần tính ANEURALNETWORKS_TENSOR_FLOAT32 có phạm vi và độ chính xác thấp như của dấu phẩy động 16 bit IEEE 754 .

Khung tự động điền

Android 9 giới thiệu nhiều điểm cải tiến về tính năng tự động điền các dịch vụ có thể triển khai để nâng cao hơn nữa trải nghiệm người dùng khi điền thông tin biểu mẫu. Để tìm hiểu thêm về cách sử dụng các tính năng tự động điền trong ứng dụng, hãy xem Hướng dẫn về Khung tự động điền.

Các tính năng nâng cao về bảo mật

Android 9 giới thiệu một số tính năng bảo mật mà các phần sau đây sẽ tóm tắt:

Xác nhận bảo vệ của Android

Các thiết bị được hỗ trợ chạy Android 9 trở lên cung cấp cho bạn khả năng sử dụng API Xác nhận bảo vệ của Android. Khi sử dụng quy trình làm việc này, ứng dụng sẽ hiện lời nhắc cho người dùng để yêu cầu họ phê duyệt một câu lệnh ngắn. Câu này cho phép ứng dụng khẳng định lại rằng người dùng muốn hoàn tất một giao dịch nhạy cảm, chẳng hạn như thanh toán.

Nếu người dùng chấp nhận tuyên bố này, Kho khoá Android sẽ nhận được và lưu trữ một chữ ký mã hoá được bảo vệ bằng cơ chế xác thực thông điệp có khoá băm (HMAC). Sau khi Kho khoá Android xác nhận tính hợp lệ của thông báo, ứng dụng của bạn có thể sử dụng khoá được tạo từ trustedConfirmationRequired trong phần môi trường thực thi (TEE) để ký thông báo mà người dùng đã chấp nhận. Chiến lược phát hành đĩa đơn chữ ký này cho biết với độ tin cậy rất cao rằng người dùng đã xem và đã đồng ý với điều đó.

Thận trọng: API Xác nhận bảo vệ của Android không cung cấp kênh thông tin bảo mật cho người dùng. Ứng dụng của bạn không được giả định bất kỳ đảm bảo tính bảo mật ngoài những điều mà nền tảng Android cung cấp. Cụ thể, không sử dụng quy trình này để hiển thị thông tin nhạy cảm mà bạn thường sẽ không hiển thị trên thiết bị của người dùng.

Để biết hướng dẫn về cách thêm tính năng hỗ trợ cho API Xác nhận bảo vệ của Android, hãy xem Được Android bảo vệ Xác nhận của chúng tôi.

Hộp thoại xác thực sinh trắc học hợp nhất

Trên Android 9, hệ thống này thay mặt họ cung cấp hộp thoại xác thực bằng sinh trắc học ứng dụng của bạn. Chức năng này tạo giao diện và vị trí được chuẩn hoá cho hộp thoại, giúp người dùng tự tin hơn rằng họ đang xác thực một trình kiểm tra thông tin xác thực sinh trắc học đáng tin cậy.

Nếu ứng dụng của bạn sử dụng FingerprintManager để hiển thị hộp thoại xác thực bằng vân tay cho người dùng, hãy chuyển sang sử dụng BiometricPrompt thay thế. BiometricPrompt dựa vào hệ thống để hiển thị thông tin xác thực . Trợ lý cũng thay đổi hành vi để thích ứng với loại sinh trắc học mà người dùng đã chọn.

Mô-đun bảo mật phần cứng

Các thiết bị được hỗ trợ chạy Android 9 trở lên có thể cài đặt có StrongBox Keymaster, một cách triển khai HAL Keymaster nằm trong mô-đun bảo mật phần cứng. Mô-đun này có các thành phần sau:

  • CPU riêng.
  • Bộ nhớ bảo mật.
  • Một trình tạo số ngẫu nhiên thực sự.
  • Các cơ chế bổ sung để chống lại hành vi can thiệp vào gói và cài đặt trái phép không qua cửa hàng ứng dụng ứng dụng.

Khi kiểm tra các khoá được lưu trữ trong StrongBox Keymaster, hệ thống chứng thực một tính toàn vẹn của khoá với Môi trường thực thi đáng tin cậy (TEE).

Để tìm hiểu thêm về cách sử dụng Strongbox Keymaster, hãy xem bài viết Bảo mật phần cứng Phụ lục.

Nhập khoá bảo mật vào Kho khoá

Android 9 cung cấp thêm khả năng bảo mật cho quy trình giải mã khoá bằng cách thêm khả năng nhập các khoá đã mã hoá một cách an toàn vào Kho khoá bằng cách sử dụng Định dạng khoá được mã hoá ASN.1. Sau đó, Keymaster giải mã các khoá trong Kho khoá nên nội dung của các khoá không bao giờ xuất hiện dưới dạng văn bản thuần tuý trong bộ nhớ máy chủ của thiết bị.

Tìm hiểu thêm về cách Nhập khoá đã mã hoá thêm một cách an toàn.

Lược đồ chữ ký APK có tính năng xoay vòng khoá

Android 9 bổ sung tính năng hỗ trợ Lược đồ chữ ký APK v3. Giao thức này có tuỳ chọn để thêm một bản ghi proof-of-rotation vào khối ký cho mỗi lần ký chứng chỉ. Chức năng này cho phép ứng dụng của bạn được ký bằng một tính năng ký mới bằng cách liên kết chứng chỉ ký trước đây của tệp APK với chứng chỉ có bản ghi hiện đã được ký.

Tìm hiểu thêm về cách dùng chìa khoá để xoay apksigner.

Tuỳ chọn chỉ cho phép giải mã khoá trên các thiết bị đã mở khoá

Android 9 ra mắt cờ unlockedDeviceRequired. Lựa chọn này xác định liệu Kho khoá có yêu cầu mở khoá màn hình trước khi cho phép hay không giải mã bất kỳ dữ liệu nào đang chuyển hoặc được lưu trữ bằng khoá được chỉ định. Các loại này khoá rất phù hợp để mã hoá dữ liệu nhạy cảm để lưu trữ trên ổ đĩa, chẳng hạn như dữ liệu sức khoẻ hoặc dữ liệu doanh nghiệp. Cờ này cung cấp cho người dùng một sự đảm bảo rõ ràng hơn rằng không thể giải mã dữ liệu trong khi thiết bị bị khoá nếu điện thoại của họ bị mất hoặc bị đánh cắp.

Để khoá một khoá không bị giải mã khi thiết bị đang khoá, hãy bật cờ bằng cách truyền true đến setUnlockedDeviceRequired() . Sau khi hoàn tất bước này, khi màn hình của người dùng bị khoá, bất kỳ việc giải mã hoặc ký dữ liệu bằng khoá này sẽ không thành công. Để thiết bị bị khoá, bạn cần Mã PIN, mật khẩu, vân tay hoặc một số yếu tố đáng tin cậy khác trước khi có thể được đã truy cập.

Hỗ trợ công nghệ mã hoá cũ

Các thiết bị Android 9 đi kèm với Keymaster 4 hỗ trợ Dữ liệu gấp ba Thuật toán mã hoá hoặc DES 3 lần. Nếu ứng dụng của bạn tương tác với phiên bản cũ các hệ thống yêu cầu DES ba lần, hãy sử dụng loại thuật toán mật mã này khi mã hoá thông tin xác thực nhạy cảm.

Để tìm hiểu thêm về cách tăng cường bảo mật cho ứng dụng của bạn, hãy xem bài viết Bảo mật cho Android Nhà phát triển.

Ngừng sử dụng WPS

Tính năng Thiết lập được bảo vệ bằng Wi-Fi (WPS) không được dùng nữa vì lý do bảo mật.

Bản sao lưu Android

Android 9 bổ sung chức năng mới và tuỳ chọn cho nhà phát triển liên quan sao lưu và khôi phục. Thông tin chi tiết về những thay đổi này sẽ xuất hiện trong phần sau .

Bản sao lưu được mã hoá phía máy khách

Android 9 hỗ trợ thêm việc mã hoá bản sao lưu Android bằng mã bí mật phía máy khách. Hỗ trợ này được bật tự động khi điều kiện được đáp ứng:

Khi biện pháp bảo vệ quyền riêng tư này đang bật, mã PIN, hình mở khoá hoặc mật khẩu của thiết bị sẽ để khôi phục dữ liệu từ các bản sao lưu mà thiết bị của người dùng tạo. Để tìm hiểu để biết thêm về công nghệ đằng sau tính năng này, hãy xem Google Cloud Key Vault Sách trắng về Dịch vụ.

Xác định các điều kiện thiết bị cần có để sao lưu

Nếu dữ liệu ứng dụng của bạn chứa thông tin hoặc lựa chọn ưu tiên nhạy cảm, thì Android 9 cho phép bạn xác định thiết bị mà theo đó, dữ liệu của ứng dụng có trong bản sao lưu của người dùng, chẳng hạn như khi phía máy khách đã bật tính năng mã hoá hoặc một quy trình chuyển dữ liệu từ thiết bị này sang thiết bị khác đang diễn ra.

Để tìm hiểu thêm về cách sao lưu dữ liệu trên thiết bị Android, hãy xem bài viết Dữ liệu Tổng quan về hoạt động sao lưu.

Hỗ trợ tiếp cận

Android 9 giới thiệu các điểm cải tiến về khả năng hỗ trợ tiếp cận giúp dễ dàng cung cấp trải nghiệm tốt hơn nữa cho người dùng ứng dụng của bạn.

Ngữ nghĩa điều hướng

Các thuộc tính được thêm vào Android 9 giúp bạn dễ dàng xác định cách các dịch vụ hỗ trợ tiếp cận, đặc biệt là trình đọc màn hình, điều hướng từ một phần màn hình này sang một màn hình khác. Các thuộc tính này có thể giúp người dùng khiếm thị nhanh chóng di chuyển qua văn bản trong giao diện người dùng của ứng dụng và cho phép họ lựa chọn.

Ví dụ: trong một ứng dụng mua sắm, trình đọc màn hình có thể giúp người dùng thao tác trực tiếp từ danh mục giao dịch này sang danh mục giao dịch tiếp theo mà không cần trình đọc màn hình phải đọc tất cả các mục trong một danh mục trước khi chuyển sang mục tiếp theo.

Tiêu đề của ngăn hỗ trợ tiếp cận

Trong Android 8.1 (API cấp 27) trở xuống, các dịch vụ hỗ trợ tiếp cận không phải lúc nào cũng xác định thời điểm cập nhật một ngăn cụ thể của màn hình, chẳng hạn như khi một hoạt động thay thế một mảnh bằng một mảnh khác. Các ngăn bao gồm các phần tử trên giao diện người dùng có liên quan trực quan, được nhóm hợp lý thường bao gồm một mảnh.

Trong Android 9, bạn có thể cung cấp tiêu đề của ngăn hỗ trợ tiếp cận hoặc riêng lẻ tiêu đề có thể nhận dạng, cho các ngăn này. Nếu một ngăn có tiêu đề của ngăn hỗ trợ tiếp cận, dịch vụ hỗ trợ tiếp cận sẽ nhận được thông tin chi tiết hơn khi ngăn thay đổi. Tính năng này cho phép các dịch vụ cung cấp thông tin chi tiết hơn cho người dùng về những thay đổi trên giao diện người dùng.

Để chỉ định tiêu đề của một ngăn, hãy sử dụng android:accessibilityPaneTitle . Bạn cũng có thể cập nhật tiêu đề của ngăn giao diện người dùng được thay thế tại trong thời gian chạy bằng setAccessibilityPaneTitle(). Ví dụ: bạn có thể cung cấp tiêu đề cho vùng nội dung của Đối tượng Fragment.

Điều hướng dựa trên tiêu đề

Nếu ứng dụng của bạn hiển thị nội dung văn bản bao gồm tiêu đề logic, hãy đặt giá trị android:accessibilityHeading cho true đối với các phiên bản của View đại diện cho các tiêu đề đó. Theo khi thêm các tiêu đề này, bạn sẽ cho phép các dịch vụ hỗ trợ tiếp cận giúp người dùng điều hướng trực tiếp từ tiêu đề này sang tiêu đề tiếp theo. Mọi dịch vụ hỗ trợ tiếp cận đều có thể sử dụng tính năng này có thể giúp người dùng cải thiện Trải nghiệm điều hướng trong giao diện người dùng.

Điều hướng và kết quả của nhóm

Trình đọc màn hình thường sử dụng Thuộc tính android:focusable cho xác định thời điểm các em nên đọc ViewGroup hoặc bộ sưu tập View đối tượng dưới dạng một đơn vị duy nhất. Bằng cách đó, người dùng có thể hiểu rằng các lượt xem có liên quan với nhau về mặt logic.

Trong Android 8.1 trở xuống, bạn cần đánh dấu từng đối tượng View trong một ViewGroup là không thể làm tâm điểm và chính ViewGroup có thể làm tâm điểm. Chiến dịch này cách sắp xếp khiến một số thực thể của View được đánh dấu là có thể làm tâm điểm theo cách khiến việc điều hướng bằng bàn phím trở nên rườm rà hơn.

Kể từ Android 9, bạn có thể sử dụng android:screenReaderFocusable thay cho thuộc tính android:focusable trong các trường hợp việc đặt một đối tượng View có thể làm tâm điểm sẽ gây ra những hậu quả không mong muốn. Trình đọc màn hình đặt tiêu điểm vào tất cả các phần tử đặt android:screenReaderFocusable hoặc android:focusable đến true.

Thao tác thuận tiện

Android 9 thêm tính năng hỗ trợ để thay mặt người dùng thực hiện các thao tác tiện lợi:

Tương tác với chú thích
Các tính năng đã thêm vào khung hỗ trợ tiếp cận giúp bạn có quyền truy cập vào chú thích trong giao diện người dùng của một ứng dụng. Sử dụng getTooltipText() để đọc văn bản của chú thích và sử dụng ACTION_SHOW_TOOLTIPACTION_HIDE_TOOLTIP để hướng dẫn các thực thể của View hiển thị hoặc hãy ẩn phần chú thích.
Đã thêm thao tác chung
Android 9 hỗ trợ thêm 2 thao tác trên thiết bị trong AccessibilityService . Dịch vụ của bạn có thể giúp người dùng khoá thiết bị và chụp ảnh màn hình sử dụng GLOBAL_ACTION_LOCK_SCREENGLOBAL_ACTION_TAKE_SCREENSHOT hành động tương ứng.

Chi tiết về việc thay đổi cửa sổ

Android 9 giúp bạn dễ dàng theo dõi bản cập nhật cho cửa sổ của một ứng dụng khi một ứng dụng vẽ lại nhiều cửa sổ cùng lúc. Khi một TYPE_WINDOWS_CHANGED sự kiện xảy ra, hãy sử dụng getWindowChanges() API để xác định cách các cửa sổ đã thay đổi. Trong một lần cập nhật nhiều cửa sổ, mỗi lần cửa sổ sẽ tạo một nhóm sự kiện riêng. getSource() sẽ trả về chế độ xem gốc của cửa sổ liên kết với mỗi sự kiện.

Nếu một ứng dụng đã xác định tiêu đề của ngăn hỗ trợ tiếp cận cho View tương ứng với đối tượng mà dịch vụ của bạn có thể nhận dạng khi giao diện người dùng của ứng dụng được cập nhật. Khi một TYPE_WINDOW_STATE_CHANGED xảy ra sự kiện, hãy sử dụng các loại được trả về bởi getContentChangeTypes() để xác định cách cửa sổ đã thay đổi. Ví dụ: khung này có thể phát hiện thời điểm một ngăn có tiêu đề mới hoặc thời điểm một ngăn đã biến mất.

Góc xoay

Để loại bỏ việc xoay ngoài ý muốn, chúng tôi đã thêm một chế độ ghim dòng điện ngay cả khi vị trí của thiết bị thay đổi. Người dùng có thể kích hoạt chế độ xoay theo cách thủ công khi cần bằng cách nhấn một nút trên thanh hệ thống.

Trong hầu hết trường hợp, các ứng dụng chỉ chịu ảnh hưởng rất nhỏ đến khả năng tương thích. Tuy nhiên, nếu ứng dụng có bất kỳ hành vi xoay tuỳ chỉnh nào hoặc sử dụng hướng màn hình bất thường nào bạn có thể gặp phải các vấn đề mà trước đây không để ý, khi tuỳ chọn xoay người dùng luôn được đặt thành dọc. Chúng tôi khuyến khích bạn tham gia bạn có thể xem xét hành vi xoay trong tất cả các hoạt động chính của ứng dụng và đảm bảo rằng tất cả các cài đặt hướng màn hình của bạn vẫn đang cung cấp trải nghiệm tối ưu.

Để biết thêm chi tiết, hãy xem hành vi liên quan thay đổi.

Tính năng xoay thiết bị di động cho thấy chế độ xoay mới cho phép người dùng kích hoạt chế độ xoay theo cách thủ công

Chế độ xoay mới cho phép người dùng kích hoạt chế độ xoay theo cách thủ công khi cần bằng cách sử dụng một nút trên thanh hệ thống.

Văn bản

Android 9 cung cấp các tính năng liên quan đến văn bản sau đây cho nền tảng:

  • Văn bản được tính toán trước: Phần tử Lớp PrecomputedText cải thiện hiệu suất hiển thị văn bản bằng cách cho phép bạn tính toán và lưu vào bộ nhớ đệm các thuộc tính bắt buộc thông tin. Thao tác này cũng cho phép ứng dụng của bạn tắt bố cục văn bản luồng chính.

  • Kính lúp: Lớp Magnifier là một tiện ích nền tảng cung cấp API phóng to, cho phép trải nghiệm tính năng phóng to trên mọi ứng dụng.

  • Smart Linkify: Android 9 nâng cao Lớp TextClassifier, Khai thác công nghệ học máy để xác định một số đối tượng trong văn bản đã chọn và đề xuất hành động. Ví dụ: TextClassifier có thể cho phép ứng dụng của bạn phát hiện người dùng đã chọn một số điện thoại. Khi đó, ứng dụng của bạn có thể đề xuất người dùng gọi điện bằng số đó. Các tính năng trong TextClassifier thay thế chức năng của lớp Linkify.

  • Bố cục văn bản: Một số phương thức và thuộc tính tiện lợi giúp dễ dàng triển khai thiết kế giao diện người dùng của bạn. Để biết thông tin chi tiết, hãy xem tài liệu tham khảo cho TextView.

Chuyển đổi tệp DEX trước thời gian ART

Trên các thiết bị chạy Android 9 trở lên, Android Runtime (ART) đã tối ưu hoá thêm Dalvik thực thi cho Dalvik nén (DEX) bằng cách chuyển đổi các tệp DEX trong gói ứng dụng thành biểu diễn thu gọn. Thay đổi này cho phép ứng dụng của bạn khởi động nhanh hơn và tiêu thụ dung lượng ổ đĩa và RAM sẽ giảm.

Điểm cải tiến này đặc biệt mang lại lợi ích cho các thiết bị cấp thấp có ổ đĩa I/O chậm hơn tốc độ.

Theo dõi hệ thống trên thiết bị

Android 9 cho phép bạn ghi lại dấu vết hệ thống từ thiết bị của mình, sau đó chia sẻ báo cáo về các bản ghi này với nhóm phát triển của bạn. Báo cáo này hỗ trợ nhiều định dạng, bao gồm cả HTML.

Bằng cách thu thập các dấu vết này, bạn có thể thu thập được dữ liệu thời gian liên quan đến các quy trình và luồng, cũng như xem các loại thiết bị quan trọng trên toàn cầu các trạng thái.

Để tìm hiểu thêm về công cụ này, hãy xem phần Thực hiện hệ thống trên thiết bị theo dõi.