Tổng quan về các tính năng và API

Android 15 mang đến cho nhà phát triển các tính năng và API mới tuyệt vời. Các phần sau đây tóm tắt các tính năng này để giúp bạn bắt đầu sử dụng các API liên quan.

Để biết danh sách chi tiết về các API mới, đã được sửa đổi, cũng như đã bị xoá, hãy đọc báo cáo điểm khác biệt về API. Để biết thông tin chi tiết về các API mới, hãy truy cập vào tài liệu tham khảo về API cho Android (các API mới được làm nổi bật để hiển thị). Ngoài ra, để tìm hiểu những thay đổi của nền tảng có thể ảnh hưởng đến ứng dụng của bạn, hãy nhớ tham khảo các thay đổi về hành vi của Android 15 ảnh hưởng đến các ứng dụng nhắm đến Android 15các thay đổi về hành vi ảnh hưởng đến tất cả ứng dụng bất kể targetSdkVersion.

Máy ảnh và nội dung nghe nhìn

Android 15 cung cấp nhiều tính năng giúp cải thiện trải nghiệm camera và nội dung nghe nhìn, đồng thời cho phép bạn truy cập vào các công cụ và phần cứng để hỗ trợ nhà sáng tạo hiện thực hoá tầm nhìn của họ trên Android.

Để biết thêm về các tính năng mới nhất và giải pháp dành cho nhà phát triển liên quan đến máy ảnh và nội dung nghe nhìn trên Android, hãy xem bài thuyết trình về Xây dựng trải nghiệm camera và nội dung nghe nhìn trên Android hiện đại tại Google I/O.

Tăng cường ánh sáng yếu

Android 15 ra mắt Low Light Boost (Tăng cường ánh sáng yếu), một chế độ phơi sáng tự động mới dành cho cả Camera 2tiện ích máy ảnh ở chế độ ban đêm. Tính năng Tăng cường ánh sáng yếu điều chỉnh độ phơi sáng của luồng Xem trước trong điều kiện ánh sáng yếu. Điều này khác với cách tiện ích máy ảnh chế độ ban đêm tạo ra các hình ảnh tĩnh, vì chế độ ban đêm kết hợp một loạt ảnh để tạo ra một hình ảnh nâng cao duy nhất. Mặc dù chế độ ban đêm hoạt động rất hiệu quả khi tạo hình ảnh tĩnh, nhưng không thể tạo luồng khung hình liên tục, nhưng tính năng Tăng cường ánh sáng yếu có thể làm được. Do đó, tính năng Tăng cường ánh sáng yếu mang đến các tính năng mới của máy ảnh, chẳng hạn như:

  • Cung cấp bản xem trước hình ảnh nâng cao để người dùng có thể lấy khung hình cho hình ảnh thiếu sáng tốt hơn
  • Quét mã QR trong điều kiện ánh sáng yếu

Nếu bạn bật tính năng Tăng cường ánh sáng yếu, thì tính năng này sẽ tự động bật khi trong môi trường ánh sáng yếu và tắt khi có nhiều ánh sáng hơn.

Ứng dụng có thể ghi tắt luồng Xem trước trong điều kiện ánh sáng yếu để lưu video được tăng độ sáng.

Để biết thêm thông tin, hãy xem bài viết Tăng cường ánh sáng yếu.

Tính năng điều khiển máy ảnh trong ứng dụng

Android 15 thêm một tiện ích mới để tăng cường kiểm soát phần cứng máy ảnh cũng như các thuật toán của phần cứng đó trên các thiết bị được hỗ trợ:

  • Điều chỉnh độ mạnh đèn flash nâng cao cho phép điều khiển chính xác cường độ đèn flash ở cả hai chế độ SINGLETORCH trong khi chụp ảnh.

Điều khiển khoảng trần HDR

Android 15 chọn khoảng trần HDR phù hợp với các tính năng cơ bản của thiết bị và độ sâu bit của bảng điều khiển. Đối với các trang có nhiều nội dung SDR, chẳng hạn như ứng dụng nhắn tin hiển thị một hình thu nhỏ HDR, hành vi này có thể ảnh hưởng xấu đến độ sáng cảm nhận được của nội dung SDR. Android 15 cho phép bạn điều khiển khoảng trần HDR bằng setDesiredHdrHeadroom để cân bằng giữa nội dung SDR và HDR.

Độ sáng của các thành phần trên giao diện người dùng SDR trên màn hình bên trái có vẻ đồng nhất so với độ sáng trên màn hình bên phải. Điều này mô phỏng các vấn đề về khoảng trần có thể xảy ra khi nội dung HDR và SDR kết hợp với nhau. Bằng cách điều chỉnh khoảng trần HDR, bạn có thể cân bằng tốt hơn giữa nội dung SDR và HDR.

Kiểm soát độ to

Android 15 hỗ trợ tiêu chuẩn về độ ồn CTA-2075 để giúp bạn tránh tình trạng không nhất quán về độ lớn và đảm bảo người dùng không phải liên tục điều chỉnh âm lượng khi chuyển đổi giữa các nội dung. Hệ thống này tận dụng các đặc điểm đã biết của các thiết bị đầu ra (tai nghe và loa) cùng với siêu dữ liệu về độ to có trong nội dung âm thanh AAC để điều chỉnh độ lớn âm thanh và mức nén dải động một cách thông minh.

Để bật tính năng này, bạn cần đảm bảo siêu dữ liệu về độ ồn có sẵn trong nội dung AAC và bật tính năng nền tảng trong ứng dụng của mình. Để tạo thực thể cho đối tượng LoudnessCodecController bằng cách gọi phương thức ban đầu create với mã phiên âm thanh từ AudioTrack được liên kết; thao tác này sẽ tự động bắt đầu áp dụng các bản cập nhật âm thanh. Bạn có thể truyền OnLoudnessCodecUpdateListener để sửa đổi hoặc lọc các tham số độ lớn trước khi các tham số đó được áp dụng trên MediaCodec.

// Media contains metadata of type MPEG_4 OR MPEG_D
val mediaCodec = …
val audioTrack = AudioTrack.Builder()
                                .setSessionId(sessionId)
                                .build()
...
// Create new loudness controller that applies the parameters to the MediaCodec
try {
   val lcController = LoudnessCodecController.create(mSessionId)
   // Starts applying audio updates for each added MediaCodec
}

AndroidX media3 ExoPlayer cũng sẽ được cập nhật để sử dụng các API LoudnessCodecController nhằm tích hợp ứng dụng liền mạch.

Thiết bị MIDI 2.0 ảo

Android 13 đã bổ sung tính năng hỗ trợ việc kết nối với các thiết bị MIDI 2.0 bằng USB. Các thiết bị này giao tiếp bằng Gói MIDI Universal (UMP). Android 15 mở rộng hỗ trợ UMP cho các ứng dụng MIDI ảo, cho phép các ứng dụng kết hợp điều khiển các ứng dụng tổng hợp dưới dạng thiết bị MIDI 2.0 ảo giống như với thiết bị USB MIDI 2.0.

Giải mã phần mềm AV1 hiệu quả hơn

biểu trưng dav1d

dav1d, bộ giải mã phần mềm AV1 phổ biến từ VideoLAN hiện có sẵn cho các thiết bị Android không hỗ trợ giải mã AV1 trong phần cứng. Dav1d có hiệu suất cao hơn gấp 3 lần so với bộ giải mã phần mềm AV1 cũ, cho phép phát HD AV1 cho nhiều người dùng hơn, bao gồm cả một số thiết bị cấp thấp và trung bình.

Hiện tại, ứng dụng của bạn cần chọn sử dụng dav1d bằng cách gọi ứng dụng này theo tên "c2.android.av1-dav1d.decoder". dav1d sẽ được đặt làm bộ giải mã phần mềm AV1 mặc định trong lần cập nhật tiếp theo. Dịch vụ hỗ trợ này được chuẩn hoá và điều chỉnh cho phiên bản cũ đối với các thiết bị Android 11 nhận được bản cập nhật hệ thống Google Play.

Năng suất và công cụ dành cho nhà phát triển

Tuy hầu hết nỗ lực của chúng tôi nhằm cải thiện các trung tâm cải thiện năng suất của bạn xoay quanh các công cụ như Android Studio, Jetpack Compose và thư viện Android Jetpack, nhưng chúng tôi luôn tìm kiếm những cách thức trong nền tảng này để giúp bạn hiện thực hoá tầm nhìn của mình dễ dàng hơn.

Nội dung cập nhật OpenJDK 17

Android 15 tiếp tục công cuộc làm mới các thư viện cốt lõi của Android để phù hợp với các tính năng trong bản phát hành LTS OpenJDK mới nhất.

Bao gồm các tính năng và điểm cải tiến chính sau đây:

Các API này được cập nhật trên hơn một tỷ thiết bị chạy Android 12 (API cấp 31) trở lên thông qua các Bản cập nhật hệ thống Google Play, vì vậy, bạn có thể nhắm đến các tính năng lập trình mới nhất.

Cải tiến tệp PDF

Android 15 có những cải tiến đáng kể cho API PdfRenderer. Ứng dụng có thể tích hợp các tính năng nâng cao như hiển thị tệp được bảo vệ bằng mật khẩu, chú thích, chỉnh sửa biểu mẫu, tìm kiếmlựa chọn bằng nội dung sao chép. Hỗ trợ tính năng tối ưu hoá tệp PDF tuyến tính để tăng tốc độ xem tệp PDF trên thiết bị và giảm mức sử dụng tài nguyên.

Những điểm cập nhật mới nhất cho tính năng kết xuất hình ảnh PDF bao gồm các tính năng như tìm kiếm tệp PDF nhúng.

PdfRenderer đã được chuyển sang một mô-đun có thể cập nhật bằng các bản cập nhật hệ thống Google Play độc lập với bản phát hành nền tảng. Đồng thời, chúng tôi sẽ hỗ trợ những thay đổi này quay lại Android 11 (API cấp 30) bằng cách tạo phiên bản trước Android 15 tương thích của khu vực API, gọi là PdfRendererPreV.

Chúng tôi trân trọng ý kiến phản hồi của bạn về những cải tiến mà chúng tôi đã thực hiện cho giao diện API PdfRenderer, đồng thời chúng tôi dự định giúp bạn dễ dàng tích hợp các API này vào ứng dụng hơn nữa với thư viện Android Jetpack sắp ra mắt.

Tinh lọc chuyển đổi ngôn ngữ tự động

Android 14 đã bổ sung tính năng nhận dạng đa ngôn ngữ trên thiết bị, có tính năng tự động chuyển đổi giữa các ngôn ngữ. Tuy nhiên, điều này có thể khiến từ bị loại bỏ, đặc biệt là khi các ngôn ngữ chuyển đổi ít bị tạm dừng giữa hai cách nói. Android 15 bổ sung các chế độ kiểm soát bổ sung để giúp các ứng dụng điều chỉnh quá trình chuyển đổi này cho phù hợp với trường hợp sử dụng của chúng. EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS giới hạn chế độ tự động chuyển sang đầu phiên âm thanh, trong khi EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES tắt tính năng chuyển đổi ngôn ngữ sau một số lượng nút chuyển đã xác định. Các tuỳ chọn này đặc biệt hữu ích nếu bạn dự kiến sẽ có một ngôn ngữ duy nhất được nói trong phiên cần được phát hiện tự động.

Cải thiện API phông chữ biến OpenType

Android 15 cải thiện khả năng hữu dụng của phông chữ biến OpenType. Giờ đây, bạn có thể tạo một thực thể FontFamily từ phông chữ thay đổi mà không cần chỉ định trục trọng số bằng API buildVariableFamily. Trình kết xuất văn bản ghi đè giá trị của trục wght để khớp với văn bản đang hiển thị.

Khi sử dụng API mới, việc này sẽ giúp đơn giản hoá đáng kể mã để tạo Typeface:

Kotlin

val newTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build()

Java

Typeface newTypeface = Typeface.CustomFallbackBuilder(
            new FontFamily.Builder(
                new Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build();

Trước đây, để tạo cùng một Typeface, bạn sẽ cần thêm nhiều mã:

Kotlin

val oldTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf")
                    .setFontVariationSettings("'wght' 400")
                    .setWeight(400)
                    .build())
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 100")
                        .setWeight(100)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 200")
                        .setWeight(200)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 300")
                        .setWeight(300)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 500")
                        .setWeight(500)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 600")
                        .setWeight(600)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 700")
                        .setWeight(700)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 800")
                        .setWeight(800)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 900")
                        .setWeight(900)
                        .build()
                ).build()
        ).build()

Java

Typeface oldTypeface = new Typeface.CustomFallbackBuilder(
    new FontFamily.Builder(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 400")
            .setWeight(400)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 100")
            .setWeight(100)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 200")
            .setWeight(200)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 300")
            .setWeight(300)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 500")
            .setWeight(500)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 600")
            .setWeight(600)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 700")
            .setWeight(700)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 800")
            .setWeight(800)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 900")
            .setWeight(900)
            .build()
    )
    .build()
).build();

Dưới đây là ví dụ về cách Typeface được tạo bằng cả API cũ và API mới kết xuất:

Ví dụ về sự khác biệt giữa Kết xuất kiểu chữ khi sử dụng API mới và API cũ

Trong ví dụ này, Typeface được tạo bằng API cũ không thể tạo độ đậm phông chữ chính xác cho các thực thể 350, 450, 550 và 650 Font. Vì vậy, trình kết xuất sẽ quay về trọng số gần nhất. Trong trường hợp này, kết xuất 300 thay vì 350, 400 được kết xuất thay vì 450, và cứ tiếp tục như vậy. Ngược lại, Typeface được tạo bằng các API mới sẽ linh động tạo một thực thể Font với trọng số nhất định, vì vậy, các trọng số chính xác cũng được hiển thị cho 350, 450, 550 và 650.

Điều khiển ngắt dòng chi tiết

Kể từ Android 15, TextView và ngắt dòng cơ bản có thể giữ nguyên phần văn bản nhất định trong cùng một dòng để cải thiện khả năng đọc. Bạn có thể tận dụng tính năng tuỳ chỉnh ngắt dòng này bằng cách sử dụng thẻ <nobreak> trong tài nguyên chuỗi hoặc createNoBreakSpan. Tương tự, bạn có thể giữ các từ không bị giả lập bằng cách sử dụng thẻ <nohyphen> hoặc createNoHyphenationSpan.

Ví dụ: tài nguyên chuỗi sau đây không có dấu ngắt dòng và kết xuất dưới dạng văn bản "Pixel 8 Pro" bị ngắt ở vị trí không mong muốn:

<resources>
    <string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>

Ngược lại, tài nguyên chuỗi này bao gồm thẻ <nobreak>. Thẻ này gói cụm từ "Pixel 8 Pro" và tránh ngắt dòng:

<resources>
    <string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>

Sự khác biệt về cách hiển thị các chuỗi này được thể hiện trong các hình ảnh sau:

Bố cục của một dòng văn bản mà trong đó cụm từ "Pixel 8 Pro." không được gói bằng thẻ <nobreak>.
Bố cục cho cùng một dòng văn bản, trong đó cụm từ "Pixel 8 Pro" được gói bằng thẻ <nobreak>.

Lưu trữ ứng dụng

Android và Google Play đã thông báo về việc hỗ trợ tính năng lưu trữ ứng dụng vào năm ngoái, cho phép người dùng giải phóng dung lượng bằng cách xoá một phần các ứng dụng ít dùng khỏi thiết bị được phát hành bằng Android App Bundle trên Google Play. Android 15 hiện đã hỗ trợ cấp hệ điều hành để lưu trữ và huỷ lưu trữ ứng dụng, giúp mọi cửa hàng ứng dụng triển khai dễ dàng hơn.

Các ứng dụng có quyền REQUEST_DELETE_PACKAGES có thể gọi phương thức PackageInstaller requestArchive để yêu cầu lưu trữ gói ứng dụng đã cài đặt. Phương thức này sẽ xoá APK và mọi tệp đã lưu vào bộ nhớ đệm nhưng vẫn giữ lại dữ liệu người dùng. Các ứng dụng đã lưu trữ được trả về dưới dạng ứng dụng có thể hiển thị thông qua các API LauncherApps; người dùng sẽ thấy một cách xử lý trên giao diện người dùng để làm nổi bật các ứng dụng đó đã được lưu trữ. Nếu người dùng nhấn vào một ứng dụng đã lưu trữ, thì người cài đặt chịu trách nhiệm sẽ nhận được yêu cầu huỷ lưu trữ ứng dụng đó và có thể theo dõi quá trình khôi phục bằng thông báo ACTION_PACKAGE_ADDED.

Đồ hoạ

Android 15 mang đến những điểm cải tiến mới nhất về đồ hoạ, bao gồm cả ANGLE và các nội dung bổ sung cho hệ thống đồ hoạ Canvas.

Hiện đại hoá quyền truy cập vào GPU của Android

Biểu trưng Vulkan

Phần cứng Android đã phát triển khá nhiều từ những ngày đầu, khi hệ điều hành cốt lõi chạy trên một CPU và GPU được truy cập bằng API dựa trên quy trình chức năng cố định. API đồ hoạ Vulkan® đã có trong NDK kể từ Android 7.0 (API cấp 24) với mô hình trừu tượng cấp thấp hơn giúp phản ánh tốt hơn phần cứng GPU hiện đại, mở rộng quy mô hiệu quả hơn để hỗ trợ nhiều lõi CPU và giảm mức hao tổn của trình điều khiển CPU — nhờ đó cải thiện hiệu suất của ứng dụng. Vulkan được mọi công cụ phát triển trò chơi hiện đại hỗ trợ.

Vulkan là giao diện ưu tiên của Android cho GPU. Do đó, Android 15 tích hợp ANGLE làm lớp không bắt buộc để chạy OpenGL® ES trên Vulkan. Việc chuyển sang ANGLE sẽ chuẩn hoá hoạt động triển khai Android OpenGL để cải thiện khả năng tương thích và trong một số trường hợp, sẽ cải thiện hiệu suất. Bạn có thể kiểm thử độ ổn định và hiệu suất của ứng dụng OpenGL ES bằng ANGLE bằng cách bật tuỳ chọn cho nhà phát triển trong phần Cài đặt -> Hệ thống -> Tuỳ chọn cho nhà phát triển -> Thử nghiệm: Bật ANGLE trên Android 15.

Android ANGLE trong lộ trình Vulkan

Lộ trình thay đổi sắp tới đối với API GPU của Android.

Để tinh giản ngăn xếp GPU, từ nay về sau, chúng tôi sẽ cung cấp ANGLE dưới dạng trình điều khiển hệ thống GL trên các thiết bị mới khác, với dự kiến trong tương lai rằng OpenGL/ES sẽ chỉ được cung cấp thông qua ANGLE. Tuy nhiên, chúng tôi dự định tiếp tục hỗ trợ OpenGL ES trên tất cả thiết bị.

Các bước nên làm tiếp theo

Sử dụng các tuỳ chọn cho nhà phát triển để chọn trình điều khiển ANGLE cho OpenGL ES và kiểm thử ứng dụng của bạn. Đối với các dự án mới, bạn nên sử dụng Vulkan cho C/C++.

Cải tiến cho Canvas

Android 15 tiếp tục hiện đại hoá hệ thống đồ hoạ Canvas của Android với các tính năng mới:

  • Matrix44 cung cấp ma trận 4x4 để biến đổi các toạ độ nên dùng khi bạn muốn điều khiển canvas ở chế độ 3D.
  • clipShader giao cắt đoạn video hiện tại với chương trình đổ bóng được chỉ định, trong khi clipOutShader đặt đối tượng cắt thành điểm khác biệt của đoạn video hiện tại và chương trình đổ bóng, mỗi chương trình coi chương trình đổ bóng là một mặt nạ alpha. Tính năng này hỗ trợ vẽ các hình dạng phức tạp một cách hiệu quả.

Hiệu suất và pin

Android tiếp tục tập trung vào việc giúp bạn cải thiện hiệu suất và chất lượng của các ứng dụng. Android 15 giới thiệu các API mới giúp tăng hiệu quả thực thi các tác vụ trong ứng dụng, tối ưu hoá hiệu suất của ứng dụng và thu thập thông tin chi tiết về ứng dụng của bạn.

Để tìm hiểu các phương pháp hay nhất giúp tiết kiệm pin, gỡ lỗi mức sử dụng pin và mạng, cũng như chi tiết về cách chúng tôi cải thiện hiệu suất pin của tác vụ chạy ở chế độ nền trong Android 15 và các phiên bản Android gần đây, hãy xem bài viết Cải thiện hiệu suất pin của hoạt động ở chế độ nền trên Android tại Google I/O.

API ApplicationStartInfo

Trong các phiên bản Android trước, quá trình khởi động ứng dụng khá là bí ẩn. Việc xác định trong ứng dụng của bạn xem ứng dụng bắt đầu từ trạng thái lạnh, ấm hay nóng. Bạn cũng khó mà biết được ứng dụng của mình dành bao nhiêu thời gian trong các giai đoạn khởi chạy khác nhau: phát hành quy trình, gọi onCreate, vẽ khung đầu tiên, v.v. Khi lớp Application được tạo thực thể, bạn không có cách nào để biết ứng dụng bắt đầu từ một thông báo truyền tin, nhà cung cấp nội dung, một công việc, một bản sao lưu, khởi động xong, một chuông báo hay một Activity.

API ApplicationStartInfo trên Android 15 cung cấp tất cả những điều này và nhiều tính năng khác. Thậm chí, bạn có thể chọn thêm dấu thời gian của riêng mình vào quy trình để giúp thu thập dữ liệu thời gian ở một nơi. Ngoài việc thu thập chỉ số, bạn có thể sử dụng ApplicationStartInfo để trực tiếp tối ưu hoá quá trình khởi động ứng dụng. Ví dụ: bạn có thể loại bỏ việc tạo thực thể tốn kém của các thư viện liên quan đến giao diện người dùng trong lớp Application khi ứng dụng đang khởi động do có một thông báo truyền tin.

Thông tin chi tiết về kích thước ứng dụng

Kể từ Android 8.0 (API cấp 26), Android đã bao gồm API StorageStats.getAppBytes nhằm tóm tắt kích thước cài đặt của một ứng dụng dưới dạng một số byte duy nhất, là tổng kích thước APK, kích thước của tệp được trích xuất từ APK và các tệp được tạo trên thiết bị như mã biên dịch trước khi chạy (AOT). Con số này chưa cho thấy nhiều thông tin chi tiết về cách ứng dụng của bạn đang sử dụng bộ nhớ.

Android 15 bổ sung API StorageStats.getAppBytesByDataType([type]), cho phép bạn nắm được thông tin chi tiết về cách ứng dụng đang sử dụng hết dung lượng đó, bao gồm cả việc phân tách tệp APK, mã AOT và tăng tốc, siêu dữ liệu dex, thư viện và hồ sơ có hướng dẫn.

Lập hồ sơ do ứng dụng quản lý

Android 15 có lớp ProfilingManager hoàn toàn mới, cho phép bạn thu thập thông tin lập hồ sơ từ trong ứng dụng của mình. Chúng tôi đang dự định gói tính năng này bằng một API Android Jetpack giúp đơn giản hoá việc xây dựng các yêu cầu lập hồ sơ, nhưng API cốt lõi sẽ cho phép thu thập tệp báo lỗi, hồ sơ vùng nhớ khối xếp, lấy mẫu ngăn xếp và nhiều tính năng khác. Phương thức này cung cấp lệnh gọi lại cho ứng dụng của bạn kèm theo một thẻ được cung cấp để xác định tệp đầu ra sẽ được phân phối đến thư mục tệp của ứng dụng. API sẽ giới hạn số lượng yêu cầu để giảm thiểu tác động đến hiệu suất.

Cải thiện cơ sở dữ liệu SQLite

Android 15 giới thiệu các API SQLite mới để hiển thị các tính năng nâng cao từ công cụ SQLite cơ bản nhắm đến các vấn đề cụ thể về hiệu suất có thể xuất hiện trong ứng dụng.

Nhà phát triển nên tham khảo các phương pháp hay nhất về hiệu suất SQLite để khai thác tối đa cơ sở dữ liệu SQLite, đặc biệt là khi làm việc với các cơ sở dữ liệu lớn hoặc khi chạy các truy vấn có độ trễ.

  • Giao dịch trì hoãn ở chế độ chỉ đọc: khi phát hành các giao dịch ở chế độ chỉ có thể đọc (không bao gồm câu lệnh ghi), hãy sử dụng beginTransactionReadOnly()beginTransactionWithListenerReadOnly(SQLiteTransactionListener) để phát hành các giao dịch DEFERRED chỉ đọc. Các giao dịch như vậy có thể chạy đồng thời với nhau và nếu cơ sở dữ liệu ở chế độ WAL, chúng có thể chạy đồng thời với các giao dịch IMMEDIATE hoặc EXCLUSIVE.
  • Số lượng hàng và mã nhận dạng: Các API mới được thêm vào để truy xuất số lượng hàng đã thay đổi hoặc mã nhận dạng hàng được chèn gần đây nhất mà không cần đưa ra thêm truy vấn. getLastChangedRowCount() trả về số lượng hàng đã được câu lệnh SQL gần đây nhất chèn, cập nhật hoặc xoá trong giao dịch hiện tại, trong khi getTotalChangedRowCount() trả về số lượng trên kết nối hiện tại. getLastInsertRowId() trả về rowid của hàng cuối cùng được chèn vào kết nối hiện tại.
  • Câu lệnh thô: phát hành một câu lệnh SQlite thô, bỏ qua các trình bao bọc tiện lợi và mọi chi phí xử lý bổ sung mà các câu lệnh này có thể phải chịu.

Nội dung cập nhật đối với Android Dynamic Performance Framework (Khung hiệu suất động Android)

Android 15 tiếp tục đầu tư vào Khung hiệu suất động Android (ADPF), một bộ API cho phép các trò chơi và ứng dụng nặng về hiệu suất tương tác trực tiếp hơn với hệ thống nguồn và nhiệt của thiết bị Android. Trên các thiết bị được hỗ trợ, Android 15 sẽ thêm các tính năng ADPF mới:

  • Chế độ tiết kiệm pin cho các phiên gợi ý để cho biết rằng các luồng liên kết nên ưu tiên tiết kiệm điện hơn thay vì hiệu suất, rất phù hợp với các khối lượng công việc chạy trong nền.
  • Thời gian làm việc của GPU và CPU đều có thể được báo cáo trong các phiên gợi ý, cho phép hệ thống điều chỉnh tần suất của CPU và GPU cùng lúc để đáp ứng tốt nhất nhu cầu khối lượng công việc.
  • Ngưỡng khoảng nhiệt để diễn giải trạng thái điều tiết nhiệt có thể xảy ra dựa trên thông tin dự đoán về khoảng nhiệt.

Để tìm hiểu thêm về cách sử dụng ADPF trong ứng dụng và trò chơi, hãy chuyển đến tài liệu này.

Quyền riêng tư

Android 15 cung cấp nhiều tính năng giúp nhà phát triển ứng dụng bảo vệ quyền riêng tư của người dùng.

Phát hiện bản ghi màn hình

Android 15 bổ sung tính năng hỗ trợ cho các ứng dụng để phát hiện rằng các ứng dụng đó đang được ghi lại. Lệnh gọi lại được gọi bất cứ khi nào ứng dụng chuyển đổi giữa trạng thái hiển thị hoặc ẩn trong bản ghi màn hình. Một ứng dụng sẽ được coi là hiển thị nếu các hoạt động do UID của quá trình đăng ký đang được ghi lại. Bằng cách này, nếu ứng dụng của bạn đang thực hiện một thao tác nhạy cảm, thì bạn có thể thông báo cho người dùng rằng các thao tác đó đang được ghi lại.

val mCallback = Consumer<Int> { state ->
  if (state == SCREEN_RECORDING_STATE_VISIBLE) {
    // We're being recorded
  } else {
    // We're not being recorded
  }
}

override fun onStart() {
   super.onStart()
   val initialState =
      windowManager.addScreenRecordingCallback(mainExecutor, mCallback)
   mCallback.accept(initialState)
}

override fun onStop() {
    super.onStop()
    windowManager.removeScreenRecordingCallback(mCallback)
}

Mở rộng các chức năng của IntentFilter

Android 15 hỗ trợ độ phân giải Intent chính xác hơn thông qua UriRelativeFilterGroup, chứa một tập hợp các đối tượng UriRelativeFilter tạo thành một bộ quy tắc phù hợp Intent mà mỗi đối tượng phải được đáp ứng, trong đó có tham số truy vấn URL, mảnh URL cũng như quy tắc chặn hoặc loại trừ.

Bạn có thể xác định các quy tắc này trong tệp XML AndroidManifest bằng thẻ <uri-relative-filter-group> mới. Thẻ này có thể bao gồm thẻ android:allow. Các thẻ này có thể chứa <data> thẻ sử dụng các thuộc tính thẻ dữ liệu hiện có cũng như các thuộc tính android:queryandroid:fragment mới.

Dưới đây là ví dụ về cú pháp AndroidManifest:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="http" />
  <data android:scheme="https" />
  <data android:domain="astore.com" />
  <uri-relative-filter-group>
    <data android:pathPrefix="/auth" />
    <data android:query="region=na" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:query="mobileoptout=true" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:fragmentPrefix="faq" />
  </uri-relative-filter-group>
</intent-filter>

Không gian riêng tư

Bạn có thể mở khoá và khoá không gian riêng tư để hiện hoặc ẩn các ứng dụng nhạy cảm trên thiết bị.

Không gian riêng tư cho phép người dùng tạo một không gian riêng trên thiết bị. Tại đây, họ có thể ngăn các ứng dụng nhạy cảm khỏi những hành vi tò mò, dưới một lớp xác thực bổ sung. Không gian riêng tư sử dụng một hồ sơ người dùng riêng biệt. Người dùng có thể chọn sử dụng phương thức khoá thiết bị hoặc một hệ số khoá riêng cho không gian riêng tư.

Các ứng dụng trong không gian riêng tư xuất hiện trong một vùng chứa riêng trong trình chạy, đồng thời bị ẩn khỏi khung hiển thị gần đây, thông báo, chế độ cài đặt, cũng như khỏi các ứng dụng khác khi không gian riêng tư bị khoá. Nội dung do người dùng tạo và nội dung đã tải xuống (chẳng hạn như nội dung nghe nhìn hoặc tệp) và tài khoản được phân tách giữa không gian riêng tư và không gian chính. Bạn có thể dùng trang chia sẻ nội dung của hệ thốngcông cụ chọn ảnh để cấp cho các ứng dụng quyền truy cập vào nội dung trên các không gian khi không gian riêng tư được mở khoá.

Người dùng không thể di chuyển các ứng dụng hiện có và dữ liệu của họ vào không gian riêng tư. Thay vào đó, người dùng chọn một tuỳ chọn cài đặt trong không gian riêng tư để cài đặt một ứng dụng bằng bất kỳ cửa hàng ứng dụng nào họ muốn. Các ứng dụng trong không gian riêng tư được cài đặt dưới dạng bản sao riêng biệt với bất kỳ ứng dụng nào trong không gian chính (bản sao mới của cùng một ứng dụng).

Khi người dùng khoá không gian riêng tư, hồ sơ sẽ dừng lại. Khi hồ sơ bị dừng, các ứng dụng trong không gian riêng tư sẽ không còn hoạt động nữa và không thể thực hiện các hoạt động ở nền trước hoặc nền sau, bao gồm cả việc hiển thị thông báo.

Bạn nên kiểm thử ứng dụng của mình với không gian riêng tư để đảm bảo ứng dụng hoạt động như mong đợi, đặc biệt là khi ứng dụng của bạn thuộc một trong các danh mục sau:

Truy vấn lựa chọn gần đây nhất của người dùng để cấp Quyền truy cập vào ảnh đã chọn

Giờ đây, các ứng dụng có thể chỉ làm nổi bật những ảnh và video được chọn gần đây nhất khi được cấp quyền truy cập một phần vào nội dung nghe nhìn. Tính năng này có thể cải thiện trải nghiệm người dùng đối với các ứng dụng thường xuyên yêu cầu quyền truy cập vào ảnh và video. Để dùng tính năng này trong ứng dụng, hãy bật đối số QUERY_ARG_LATEST_SELECTION_ONLY khi truy vấn MediaStore thông qua ContentResolver.

Kotlin

val externalContentUri = MediaStore.Files.getContentUri("external")

val mediaColumns = arrayOf(
   FileColumns._ID,
   FileColumns.DISPLAY_NAME,
   FileColumns.MIME_TYPE,
)

val queryArgs = bundleOf(
   // Return only items from the last selection (selected photos access)
   QUERY_ARG_LATEST_SELECTION_ONLY to true,
   // Sort returned items chronologically based on when they were added to the device's storage
   QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC",
   QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?",
   QUERY_ARG_SQL_SELECTION_ARGS to arrayOf(
       FileColumns.MEDIA_TYPE_IMAGE.toString(),
       FileColumns.MEDIA_TYPE_VIDEO.toString()
   )
)

Java

Uri externalContentUri = MediaStore.Files.getContentUri("external");

String[] mediaColumns = {
    FileColumns._ID,
    FileColumns.DISPLAY_NAME,
    FileColumns.MIME_TYPE
};

Bundle queryArgs = new Bundle();
queryArgs.putBoolean(MediaStore.QUERY_ARG_LATEST_SELECTION_ONLY, true);
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SORT_ORDER, FileColumns.DATE_ADDED + " DESC");
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SELECTION, FileColumns.MEDIA_TYPE + " = ? OR " + FileColumns.MEDIA_TYPE + " = ?");
queryArgs.putStringArray(MediaStore.QUERY_ARG_SQL_SELECTION_ARGS, new String[] {
    String.valueOf(FileColumns.MEDIA_TYPE_IMAGE),
    String.valueOf(FileColumns.MEDIA_TYPE_VIDEO)
});

Hộp cát về quyền riêng tư trên Android

Android 15 bao gồm các tiện ích Dịch vụ quảng cáo Android mới nhất, kết hợp với phiên bản mới nhất của Hộp cát về quyền riêng tư trên Android. Việc bổ sung này là một phần trong nỗ lực của chúng tôi nhằm phát triển các công nghệ mới giúp cải thiện quyền riêng tư của người dùng và mang lại trải nghiệm quảng cáo được cá nhân hoá hiệu quả cho các ứng dụng di động. Trang hộp cát về quyền riêng tư của chúng tôi có thêm thông tin về Bản dùng thử cho nhà phát triển và các chương trình beta của Hộp cát về quyền riêng tư trên Android để giúp bạn bắt đầu.

Health Connect

Android 15 tích hợp các tiện ích mới nhất cho Health Connect của Android, một nền tảng bảo mật và tập trung để quản lý cũng như chia sẻ dữ liệu sức khoẻ và thể chất được thu thập qua ứng dụng. Bản cập nhật này hỗ trợ thêm các loại dữ liệu mới về thể chất, dinh dưỡng, nhiệt độ da, kế hoạch tập luyện, v.v.

Tính năng theo dõi nhiệt độ trên da cho phép người dùng lưu trữ và chia sẻ dữ liệu nhiệt độ chính xác hơn từ thiết bị đeo hoặc thiết bị theo dõi khác.

Kế hoạch đào tạo là kế hoạch tập luyện có cấu trúc để giúp người dùng đạt được mục tiêu rèn luyện thể chất. Kế hoạch đào tạo hỗ trợ nhiều mục tiêu hoàn thành và hiệu suất:

Tìm hiểu thêm về các bản cập nhật mới nhất cho Health Connect trong Android tại bài thuyết trình Xây dựng trải nghiệm thích ứng bằng Android Health tại Google I/O.

Chia sẻ một phần màn hình

Android 15 hỗ trợ tính năng chia sẻ một phần màn hình để người dùng có thể chia sẻ hoặc chỉ ghi một cửa sổ ứng dụng thay vì toàn bộ màn hình thiết bị. Tính năng này (được bật lần đầu trong Android 14 QPR2) bao gồm lệnh gọi lại MediaProjection cho phép ứng dụng tuỳ chỉnh trải nghiệm chia sẻ một phần màn hình. Xin lưu ý rằng đối với các ứng dụng nhắm mục tiêu đến Android 14 (API cấp 34) trở lên, giờ đây, bạn bắt buộc phải có sự đồng ý của người dùng cho từng phiên chụp MediaProjection.

Trải nghiệm người dùng và giao diện người dùng hệ thống

Android 15 mang đến cho nhà phát triển ứng dụng và người dùng nhiều quyền kiểm soát cũng như sự linh hoạt hơn để định cấu hình thiết bị cho phù hợp với nhu cầu của họ.

Để tìm hiểu thêm về cách sử dụng các điểm cải tiến mới nhất trong Android 15 để cải thiện trải nghiệm người dùng của ứng dụng, hãy xem bài thuyết trình Cải thiện trải nghiệm người dùng của ứng dụng Android tại Google I/O.

Bản xem trước tiện ích phong phú hơn với API Bản xem trước đã tạo

Trước Android 15, cách duy nhất để cung cấp bản xem trước của bộ chọn tiện ích là chỉ định tài nguyên hình ảnh hoặc bố cục tĩnh. Những bản xem trước này thường khác biệt đáng kể so với giao diện của tiện ích thực tế khi được đặt trên màn hình chính. Ngoài ra, không thể tạo các tài nguyên tĩnh bằng Jetpack Waze. Vì vậy, nhà phát triển tính năng Xem nhanh phải chụp ảnh màn hình tiện ích hoặc tạo một bố cục XML để có bản xem trước tiện ích.

Android 15 hỗ trợ thêm các bản xem trước được tạo. Điều này có nghĩa là các nhà cung cấp tiện ích ứng dụng có thể tạo RemoteViews để dùng làm bản xem trước bộ chọn, thay vì một tài nguyên tĩnh.

Các ứng dụng có thể cung cấp Chế độ xem từ xa cho Bộ chọn tiện ích để có thể cập nhật nội dung trong bộ chọn sao cho thể hiện chính xác hơn những nội dung mà người dùng sẽ thấy.

API Đẩy

Các ứng dụng có thể cung cấp bản xem trước được tạo thông qua một API đẩy. Các ứng dụng có thể cung cấp bản xem trước bất cứ lúc nào trong vòng đời và không nhận được yêu cầu rõ ràng từ máy chủ để cung cấp bản xem trước. Các bản xem trước sẽ được lưu lại trong AppWidgetService và máy chủ lưu trữ có thể yêu cầu các bản xem trước đó theo yêu cầu. Ví dụ sau đây tải một tài nguyên bố cục tiện ích XML và đặt tài nguyên đó làm bản xem trước:

AppWidgetManager.getInstance(appContext).setWidgetPreview(
   ComponentName(
       appContext,
       SociaLiteAppWidgetReceiver::class.java
   ),
   AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
   RemoteViews("com.example", R.layout.widget_preview)
)

Quy trình dự kiến là:

  1. Trình cung cấp tiện ích sẽ gọi setWidgetPreview bất cứ lúc nào. Các bản xem trước đã cung cấp sẽ được duy trì trong AppWidgetService cùng với thông tin khác về nhà cung cấp.
  2. setWidgetPreview thông báo cho máy chủ về bản xem trước đã cập nhật thông qua lệnh gọi lại AppWidgetHost.onProvidersChanged. Để phản hồi, máy chủ tiện ích sẽ tải lại tất cả thông tin về trình cung cấp.
  3. Khi hiển thị bản xem trước tiện ích, máy chủ lưu trữ sẽ kiểm tra AppWidgetProviderInfo.generatedPreviewCategories và nếu danh mục đã chọn có sẵn, hãy gọi AppWidgetManager.getWidgetPreview để trả về bản xem trước đã lưu cho nhà cung cấp này.

Thời điểm gọi setWidgetPreview

Do không có lệnh gọi lại nào để cung cấp bản xem trước nên các ứng dụng có thể chọn gửi bản xem trước bất cứ lúc nào khi chúng đang chạy. Tần suất cập nhật bản xem trước tuỳ thuộc vào trường hợp sử dụng của tiện ích.

Danh sách sau đây mô tả hai danh mục chính của trường hợp sử dụng tính năng xem trước:

  • Nhà cung cấp hiển thị dữ liệu thực trong bản xem trước tiện ích, chẳng hạn như thông tin được cá nhân hoá hoặc thông tin gần đây. Các nhà cung cấp này có thể đặt bản xem trước sau khi người dùng đăng nhập hoặc định cấu hình ban đầu trong ứng dụng. Sau đó, họ có thể thiết lập một tác vụ định kỳ để cập nhật bản xem trước theo tần suất họ muốn. Ví dụ về loại tiện ích này có thể là tiện ích ảnh, lịch, thời tiết hoặc tiện ích tin tức.
  • Trình cung cấp hiển thị thông tin tĩnh trong bản xem trước hoặc tiện ích thao tác nhanh mà không hiển thị dữ liệu nào. Các nhà cung cấp này có thể đặt bản xem trước một lần, khi ứng dụng khởi chạy lần đầu tiên. Ví dụ về loại tiện ích này bao gồm tiện ích thao tác nhanh lái xe hoặc tiện ích lối tắt của Chrome.

Một số nhà cung cấp có thể hiển thị bản xem trước tĩnh trên bộ chọn chế độ trung tâm, nhưng sẽ hiển thị thông tin thực trên bộ chọn màn hình chính. Các trình cung cấp này nên làm theo hướng dẫn cho cả hai trường hợp sử dụng này để đặt bản xem trước.

Hình trong hình

Android 15 giới thiệu các thay đổi mới về tính năng Hình trong hình (PiP) giúp quá trình chuyển đổi mượt mà hơn khi chuyển sang chế độ PiP. Điều này sẽ có lợi cho ứng dụng có các thành phần giao diện người dùng phủ lên trên giao diện người dùng chính (sẽ nằm trong PiP).

Nhà phát triển sử dụng lệnh gọi lại onPictureInPictureModeChanged để xác định logic bật/tắt chế độ hiển thị của các thành phần lớp phủ trên giao diện người dùng. Lệnh gọi lại này được kích hoạt khi ảnh động nhập hoặc thoát của PiP hoàn tất. Kể từ Android 15, lớp PictureInPictureUiState sẽ có một trạng thái mới.

Với trạng thái giao diện người dùng mới này, các ứng dụng nhắm đến Android 15 sẽ quan sát thấy lệnh gọi lại Activity#onPictureInPictureUiStateChanged được gọi bằng isTransitioningToPip() ngay khi ảnh động PiP bắt đầu. Có nhiều thành phần trên giao diện người dùng không liên quan đến ứng dụng khi ở chế độ PiP, chẳng hạn như khung hiển thị hoặc bố cục chứa thông tin như đề xuất, video sắp ra mắt, điểm xếp hạng và tiêu đề. Khi ứng dụng chuyển sang chế độ PiP, hãy sử dụng lệnh gọi lại onPictureInPictureUiStateChanged để ẩn các thành phần này trên giao diện người dùng. Khi ứng dụng chuyển sang chế độ toàn màn hình từ cửa sổ PiP, hãy sử dụng lệnh gọi lại onPictureInPictureModeChanged để hiện các phần tử này, như minh hoạ trong các ví dụ sau:

override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
        if (pipState.isTransitioningToPip()) {
          // Hide UI elements
        }
    }
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
        if (isInPictureInPictureMode) {
          // Unhide UI elements
        }
    }

Nút bật/tắt chế độ hiển thị nhanh này các thành phần trên giao diện người dùng không liên quan (đối với cửa sổ PiP) giúp đảm bảo ảnh động nhập PiP mượt mà và không nhấp nháy.

Quy tắc Không làm phiền được cải thiện

AutomaticZenRule cho phép các ứng dụng tuỳ chỉnh các quy tắc Quản lý sự chú ý (Không làm phiền) và quyết định thời điểm kích hoạt hoặc huỷ kích hoạt các quy tắc đó. Android 15 cải thiện đáng kể các quy tắc này với mục tiêu cải thiện trải nghiệm người dùng. Bao gồm các tính năng nâng cao sau đây:

  • Thêm các kiểu vào AutomaticZenRule, cho phép hệ thống áp dụng phương thức xử lý đặc biệt cho một số quy tắc.
  • Thêm một biểu tượng vào AutomaticZenRule, giúp dễ nhận ra các chế độ hơn.
  • Thêm một chuỗi triggerDescription vào AutomaticZenRule để mô tả các điều kiện mà quy tắc phải có hiệu lực đối với người dùng.
  • Thêm ZenDeviceEffects vào AutomaticZenRule, cho phép các quy tắc kích hoạt những tính năng như hiển thị thang màu xám, chế độ ban đêm hoặc làm mờ hình nền.

Đặt Hiệu ứng rung cho các kênh thông báo

Android 15 hỗ trợ chế độ rung nhiều cho thông báo đến theo kênh bằng cách sử dụng NotificationChannel.setVibrationEffect để người dùng có thể phân biệt các loại thông báo mà không cần phải nhìn vào thiết bị.

Màn hình lớn và kiểu dáng

Android 15 hỗ trợ các ứng dụng của bạn để khai thác tối đa các kiểu dáng của Android, bao gồm màn hình lớn, thiết bị có thể gập lại và thiết bị có thể gập lại.

Cải thiện khả năng đa nhiệm trên màn hình lớn

Android 15 cung cấp cho người dùng những cách hiệu quả hơn để làm nhiều việc cùng lúc trên thiết bị có màn hình lớn. Ví dụ: người dùng có thể lưu các tổ hợp ứng dụng chia đôi màn hình mà họ yêu thích để truy cập nhanh và ghim thanh tác vụ trên màn hình để chuyển đổi nhanh giữa các ứng dụng. Điều này có nghĩa là việc đảm bảo ứng dụng của bạn có khả năng thích ứng quan trọng hơn bao giờ hết.

Google I/O có các phiên thảo luận về chủ đề Xây dựng ứng dụng Android thích ứngXây dựng giao diện người dùng bằng thư viện thích ứng Material 3. Ngoài ra, tài liệu của chúng tôi còn có nhiều thông tin hữu ích khác để giúp bạn Thiết kế cho màn hình lớn.

Hỗ trợ màn hình ngoài

Ứng dụng của bạn có thể khai báo một thuộc tính mà Android 15 dùng để cho phép Application hoặc Activity của bạn xuất hiện trên màn hình bìa nhỏ của thiết bị có thể gập lại được hỗ trợ. Những màn hình này quá nhỏ để được coi là mục tiêu tương thích để chạy ứng dụng Android. Tuy nhiên, ứng dụng của bạn có thể chọn hỗ trợ những màn hình này, giúp ứng dụng của bạn xuất hiện ở nhiều vị trí hơn.

Khả năng kết nối

Android 15 cập nhật nền tảng này để cho phép ứng dụng của bạn tiếp cận những tiến bộ mới nhất về công nghệ liên lạc và không dây.

Hỗ trợ qua vệ tinh

Android 15 tiếp tục mở rộng khả năng hỗ trợ nền tảng cho khả năng kết nối vệ tinh và tích hợp một số thành phần trên giao diện người dùng để đảm bảo trải nghiệm nhất quán cho người dùng trên bối cảnh kết nối vệ tinh.

Các ứng dụng có thể dùng ServiceState.isUsingNonTerrestrialNetwork() để phát hiện thời điểm một thiết bị được kết nối với vệ tinh, giúp ứng dụng biết thêm về lý do không thể sử dụng các dịch vụ mạng đầy đủ. Ngoài ra, Android 15 còn hỗ trợ các ứng dụng SMS và MMS, cũng như các ứng dụng RCS được tải trước để sử dụng kết nối vệ tinh để gửi và nhận tin nhắn.

Một thông báo sẽ xuất hiện khi thiết bị kết nối với vệ tinh.

Trải nghiệm NFC mượt mà hơn

Android 15 đang nỗ lực mang đến trải nghiệm thanh toán không tiếp xúc liền mạch và đáng tin cậy hơn, đồng thời tiếp tục hỗ trợ hệ sinh thái ứng dụng NFC mạnh mẽ của Android. Trên các thiết bị được hỗ trợ, ứng dụng có thể yêu cầu NfcAdapter chuyển sang chế độ quan sát, trong đó thiết bị lắng nghe nhưng không phản hồi với trình đọc NFC, gửi các đối tượng PollingFrame NFC của ứng dụng để xử lý. Bạn có thể sử dụng các đối tượng PollingFrame để xác thực trước giao tiếp đầu tiên với trình đọc NFC, cho phép thực hiện giao dịch một lần nhấn trong nhiều trường hợp.

Ngoài ra, các ứng dụng hiện có thể đăng ký vân tay trên các thiết bị được hỗ trợ để có thể nhận được thông báo về hoạt động trong vòng lặp thăm dò, nhờ đó giúp hoạt động trơn tru với nhiều ứng dụng có nhận biết NFC.

Vai trò trong Wallet

Android 15 ra mắt vai trò Wallet mới, cho phép tích hợp chặt chẽ hơn với ứng dụng ví ưu tiên của người dùng. Vai trò này thay thế chế độ cài đặt thanh toán không tiếp xúc mặc định bằng NFC. Người dùng có thể quản lý chủ vai trò trên Wallet bằng cách chuyển đến Cài đặt > Ứng dụng > Ứng dụng mặc định.

Vai trò Wallet được dùng khi định tuyến các lượt nhấn NFC cho các AID đã đăng ký trong danh mục thanh toán. Các lượt nhấn luôn chuyển đến phần tử giữ vai trò trong Wallet trừ phi một ứng dụng khác được đăng ký cho cùng một AID đang chạy ở nền trước.

Vai trò này cũng được dùng để xác định vị trí của ô Truy cập nhanh của Wallet khi được kích hoạt. Khi bạn đặt vai trò thành "None", ô QuickAccess sẽ không có sẵn và các lượt nhấn NFC vào danh mục thanh toán chỉ được gửi đến ứng dụng trên nền trước.

Bảo mật

Android 15 giúp bạn tăng cường tính bảo mật của ứng dụng, bảo vệ dữ liệu của ứng dụng, cũng như tăng cường tính minh bạch và cung cấp cho người dùng quyền kiểm soát cao hơn đối với dữ liệu của họ. Xem bài thuyết trình Tăng cường bảo mật cho người dùng trên Android tại Google I/O để biết thêm về những việc chúng tôi đang làm nhằm cải thiện khả năng bảo vệ người dùng và bảo vệ ứng dụng của bạn khỏi các mối đe doạ mới.

Quản lý khoá cho phương thức mã hoá hai đầu

Chúng tôi sẽ ra mắt E2eeContactKeysManager trong Android 15, hỗ trợ phương thức mã hoá hai đầu (E2EE) trong các ứng dụng Android của bạn bằng cách cung cấp một API cấp hệ điều hành để lưu trữ khoá công khai mã hoá.

E2eeContactKeysManager được thiết kế để tích hợp với ứng dụng danh bạ trên nền tảng, giúp người dùng quản lý và xác minh khoá công khai của danh bạ một cách tập trung.

Kiểm tra quyền đối với URI nội dung

Android 15 ra mắt một bộ API mới giúp kiểm tra quyền đối với URI nội dung:

  • Context.checkContentUriPermissionFull: Thao tác này sẽ thực hiện kiểm tra quyền đầy đủ đối với các URI nội dung.
  • Thuộc tính tệp kê khai Activity requireContentUriPermissionFromCaller: Thuộc tính này thực thi các quyền được chỉ định trên các URI nội dung được cung cấp khi khởi chạy hoạt động.
  • Lớp ComponentCaller cho phương thức gọi Activity: Lớp này đại diện cho ứng dụng đã chạy hoạt động.

Hỗ trợ tiếp cận

Android 15 bổ sung các tính năng giúp cải thiện khả năng hỗ trợ tiếp cận cho người dùng.

Chữ nổi tốt hơn

Trên Android 15, chúng tôi đã tạo điều kiện để TalkBack có thể hỗ trợ màn hình chữ nổi đang sử dụng tiêu chuẩn HID qua cả USB và Bluetooth bảo mật.

Tiêu chuẩn này, cũng giống như tiêu chuẩn mà chuột và bàn phím sử dụng, sẽ giúp Android hỗ trợ nhiều loại màn hình chữ nổi hơn theo thời gian.

Quốc tế hoá

Android 15 bổ sung các tính năng và khả năng bổ sung cho trải nghiệm người dùng khi thiết bị được sử dụng bằng nhiều ngôn ngữ.

Phông chữ biến CJK

Kể từ Android 15, tệp phông chữ cho tiếng Trung, tiếng Nhật và tiếng Hàn (CJK) (NotoSansCJK) nay là một phông chữ có thể thay đổi. Phông chữ thay đổi mở ra nhiều khả năng mới cho kiểu chữ sáng tạo bằng ngôn ngữ CJK. Nhà thiết kế có thể khám phá nhiều kiểu dáng và tạo ra những bố cục bắt mắt, ấn tượng mà trước đây khó hoặc không thể làm được.

Cách phông chữ có thể thay đổi cho tiếng Trung, tiếng Nhật và tiếng Hàn (CJK) xuất hiện với độ rộng phông chữ khác nhau.

Lý do giữa các ký tự

Kể từ Android 15, bạn có thể căn đều văn bản bằng cách sử dụng khoảng cách chữ cái bằng cách sử dụng JUSTIFICATION_MODE_INTER_CHARACTER. Tính năng lý do giữa các từ lần đầu ra mắt trong Android 8.0 (API cấp 26). Tính năng căn chỉnh giữa các ký tự cung cấp các tính năng tương tự cho những ngôn ngữ sử dụng ký tự khoảng trắng để phân đoạn, chẳng hạn như tiếng Trung, tiếng Nhật và các ngôn ngữ khác.

Bố cục cho văn bản tiếng Nhật bằng JUSTIFICATION_MODE_NONE.
Bố cục cho văn bản tiếng Anh bằng JUSTIFICATION_MODE_NONE.


Bố cục cho văn bản tiếng Nhật bằng JUSTIFICATION_MODE_INTER_WORD.
Bố cục cho văn bản tiếng Anh bằng JUSTIFICATION_MODE_INTER_WORD.


Bố cục cho văn bản tiếng Nhật bằng JUSTIFICATION_MODE_INTER_CHARACTER mới.
Bố cục cho văn bản tiếng Anh bằng JUSTIFICATION_MODE_INTER_CHARACTER mới.

Cấu hình ngắt dòng tự động

Android đã bắt đầu hỗ trợ ngắt dòng theo cụm từ cho tiếng Nhật và tiếng Hàn trong Android 13 (API cấp 33). Tuy nhiên, mặc dù ngắt dòng theo cụm từ giúp cải thiện khả năng đọc các dòng văn bản ngắn, nhưng lại không hoạt động tốt trên các dòng văn bản dài. Trên Android 15, các ứng dụng hiện chỉ có thể áp dụng dấu ngắt dòng theo cụm từ cho các dòng văn bản ngắn, bằng cách sử dụng tuỳ chọn LINE_BREAK_WORD_STYLE_AUTO. Lựa chọn này giúp chọn kiểu từ phù hợp nhất cho văn bản.

Đối với các dòng văn bản ngắn, dấu ngắt dòng theo cụm từ được dùng, hoạt động giống như LINE_BREAK_WORD_STYLE_PHRASE, như trong hình sau:

Đối với các dòng văn bản ngắn, LINE_BREAK_WORD_STYLE_AUTO áp dụng ngắt dòng theo cụm từ để cải thiện khả năng đọc văn bản. Việc này cũng giống như việc áp dụng LINE_BREAK_WORD_STYLE_PHRASE.

Đối với các dòng văn bản dài hơn, LINE_BREAK_WORD_STYLE_AUTO sử dụng kiểu từ không ngắt dòng, hoạt động giống như LINE_BREAK_WORD_STYLE_NONE, như trong hình sau:

Đối với các dòng văn bản dài, LINE_BREAK_WORD_STYLE_AUTO không áp dụng kiểu từ ngắt dòng để cải thiện khả năng đọc văn bản. Việc này cũng giống như việc áp dụng LINE_BREAK_WORD_STYLE_NONE.

Phông chữ Hentaigana mới của Nhật Bản

Trên Android 15, một tệp phông chữ mới cho chữ Hiragana cũ của Nhật Bản (còn gọi là Hentaigana) sẽ được đóng gói theo mặc định. Các hình dạng độc đáo của các nhân vật Hentaigana có thể mang lại sự tinh tế đặc biệt cho các tác phẩm nghệ thuật hoặc thiết kế, đồng thời giúp giữ nguyên khả năng truyền và hiểu chính xác các tài liệu Nhật Bản cổ đại.

Kiểu ký tự và văn bản cho phông chữ Hentaigana của Nhật Bản.

VideoLAN nón Bản quyền (c) 1996-2010 VideoLAN. Biểu trưng này hoặc phiên bản đã sửa đổi có thể được bất kỳ ai sử dụng hoặc sửa đổi để tham chiếu đến dự án VideoLAN hoặc bất kỳ sản phẩm nào do nhóm VideoLAN phát triển, nhưng không thể hiện sự chứng thực của dự án.

Vulkan và biểu trưng Vulkan là nhãn hiệu đã đăng ký của Khronos Group Inc.

OpenGL là một nhãn hiệu đã đăng ký và biểu trưng OpenGL ES là nhãn hiệu của Hewlett Packard Enterprise do Khronos sử dụng.