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 tài liệu tham khảo về API cho Android (các API mới được trình bày nổi bật). Ngoài ra, để tìm hiểu về những khía cạnh mà 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 trên Android 15 ảnh hưởng đến ứng dụng khi ứng dụng nhắm đến Android 15 và cá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 có nhiều tính năng giúp cải thiện trải nghiệm máy ảnh và nội dung đa phương tiện, đồng thời cho phép bạn sử dụng 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 mình trên Android.
Để biết thêm thông tin về các tính năng cũng như giải pháp mới nhất dành cho nhà phát triển cho nội dung nghe nhìn và máy ảnh Android, hãy xem bài nói chuyện Xây dựng trải nghiệm máy ảnh và nội dung nghe nhìn Android hiện đại của 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 2 và tiệ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.
Đ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ế độ
SINGLE
vàTORCH
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.
![](https://developer.android.com/static/about/versions/15/images/hdr-headroom.png?authuser=9&hl=vi)
Kiểm soát âm lượng
Android 15 hỗ trợ cho Tiêu chuẩn độ lớn CTA-2075 để trợ giúp bạn tránh sự không thống nhất về độ ồn của âm thanh 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 tận dụng những thông tin đã biết các đặc điểm của thiết bị đầu ra (tai nghe và loa) cùng với siêu dữ liệu về độ lớn có trong nội dung âm thanh AAC để điều chỉnh thông minh độ ồn và mức nén dải động.
Để bật tính năng này, bạn cần đảm bảo có siêu dữ liệu về độ ồn trong
nội dung AAC và bật tính năng nền tảng trong ứng dụng của bạn. Để làm được điều này, bạn
tạo thực thể cho đối tượng LoudnessCodecController
bằng cách
đang gọi phương thức ban đầu create bằng âm thanh
mã phiên hoạt động từ AudioTrack
được liên kết; này
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
trước khi áp dụng cho các tham số về độ lớn âm thanh
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
giúp 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
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
Mặc dù hầu hết nỗ lực của chúng tôi là cải thiện các trung tâm năng suất cho 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 cách trong nền tảng này để giúp bạn dễ dàng hiện thực hoá tầm nhìn của mình.
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ải thiện chất lượng cuộc sống xung quanh vùng đệm NIO
- Luồng
- Phương thức
math
vàstrictmath
khác - Cập nhật gói
util
, bao gồmcollection
,map
vàset
theo trình tự - Dịch vụ hỗ trợ của
ByteBuffer
tạiDeflater
- Các bản cập nhật bảo mật như
X500PrivateCredential
và cập nhật khoá bảo mật
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 về 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ếm và lự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.
![](https://developer.android.com/static/about/versions/15/images/pdf-rendering.png?authuser=9&hl=vi)
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 chỉnh 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. Bạn có thể làm điều này ngay bây giờ
tạo một thực thể FontFamily
từ phông chữ biến 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ị.
Việc sử dụng API mới sẽ giúp đơn giản hoá mã để tạo Typeface
đáng kể:
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 nhiều mã hơn:
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 một Typeface
được tạo bằng cả API cũ và mới
hiển thị:
Trong ví dụ này, Typeface
được tạo bằng API cũ không có
cho phép tạo độ đậm phông chữ chính xác cho cỡ chữ 350, 450, 550 và 650.
Font
để trình kết xuất sẽ quay lại trọng số gần nhất. Do đó, trong
trong trường hợp này, 300 sẽ được kết xuất thay vì 350, 400 được kết xuất thay vì 450 và
v.v. Ngược lại, Typeface
được tạo bằng các API mới sẽ tự động tạo
thực thể Font
cho một trọng số nhất định, do đó trọng số chính xác được hiển thị là 350,
450, 550 và 650.
Kiểm soát ngắt dòng chi tiết
Kể từ Android 15, TextView
và cơ sở
dấu ngắt dòng có thể giữ nguyên phần văn bản đã cho trong cùng một dòng để cải thiện
dễ đọc. Bạn có thể tận dụng khả 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ữ nguyên các từ
dấu gạch nối bằng cách sử dụng thẻ <nohyphen>
hoặc
createNoHyphenationSpan
.
Ví dụ: tài nguyên chuỗi sau đây không bao gồm ngắt dòng và hiển thị với văn bản "Pixel 8 Pro". đột nhập ở nơi 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 bị 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 ví dụ sau hình ảnh:
![](https://developer.android.com/static/about/versions/15/images/line-breaks-none.png?authuser=9&hl=vi)
<nobreak>
.![](https://developer.android.com/static/about/versions/15/images/line-breaks-included.png?authuser=9&hl=vi)
<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 thành phần bổ sung cho hệ thống đồ hoạ Canvas.
Hiện đại hoá quyền truy cập vào GPU của Android
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.](https://developer.android.com/static/about/versions/15/images/angle-vulkan-roadmap.png?authuser=9&hl=vi)
Để 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++.
Những điểm 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 khiclipOutShader
đặ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 thực thi, tối ưu hoá hiệu suất ứng dụng và thu thập thông tin chi tiết về ứng dụng một cách hiệu quả hơn.
Để biết các phương pháp hay nhất về tiết kiệm pin, gỡ lỗi mức sử dụng mạng và nguồn điện, cũng như thông tin chi tiết về cách chúng tôi cải thiện hiệu suất pin của công việc ở 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 công việc ở 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()
vàbeginTransactionWithListenerReadOnly(SQLiteTransactionListener)
để phát hành các giao dịchDEFERRED
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ịchIMMEDIATE
hoặcEXCLUSIVE
. - 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 khigetTotalChangedRowCount()
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.
Bản cập nhật Android Dynamic Performance Framework
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 video 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 điều đó chúng đang được ghi lại. Một lệnh gọi lại sẽ được gọi bất cứ khi nào ứng dụng chuyển đổi giữa video hiển thị hoặc không xuất hiện trong một bản ghi màn hình. Một ứng dụng là được coi là hiển thị nếu các hoạt động thuộc sở hữu của 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, có thể thông báo cho người dùng rằng họ đ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
Bản dựng Android 15 hỗ trợ độ phân giải Intent
chính xác hơn thông qua
UriRelativeFilterGroup
, chứa tập hợp
Các đối tượng UriRelativeFilter
tạo thành một tập hợp Intent
quy tắc so khớp phải được đáp ứng, bao gồm cả tham số truy vấn URL, URL
mảnh và 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
<uri-relative-filter-group>
, có thể tuỳ ý bao gồm
Thẻ android:allow
. Các thẻ này có thể chứa <data>
thẻ sử dụng dữ liệu hiện có
cũng như thuộc tính thẻ android:query
và android: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ư
Không gian riêng tư giúp người dùng tạo không gian riêng trên thiết bị của họ để họ có thể giữ các ứng dụng nhạy cảm tránh xa những cặp mắt tò mò, dưới một lớp bổ sung xác thực. 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ể hãy 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ư sẽ xuất hiện trong một vùng chứa riêng trong trình chạy, và bị ẩn khỏi chế độ xem, thông báo, chế độ cài đặt gần đây và 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ư 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. Trang chia sẻ nội dung của hệ thống và Bạn có thể dùng cô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ư 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 tuỳ chọn cài đặt trong không gian riêng tư để cài đặt ứng dụng bằng bất kỳ cửa hàng ứng dụng nào họ thích. Các ứng dụng trong không gian riêng tư được cài đặt dưới dạng tách riêng các bản sao khỏi mọi ứng dụng trong không gian chính (các 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. Trong khi hồ sơ bị dừng, ứng dụng trong không gian riêng tư không còn hoạt động và không thể hoạt động 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ử không gian riêng tư trong ứng dụng để đảm bảo ứng dụng hoạt động như mong đợi, đặc biệt nếu ứng dụng của bạn rơi vào một trong những trường hợp sau danh mục:
- Ứng dụng có logic cho hồ sơ công việc giả định rằng bất kỳ các bản sao đã cài đặt của ứng dụng không có trong hồ sơ chính nằm trong hồ sơ công việc.
- Ứng dụng y tế
- Ứng dụng trình chạy
- Ứng dụng trên cửa hàng ứng dụng
Truy vấn lựa chọn gần đây nhất của người dùng về Quyền truy cập vào ảnh đã chọn
Giờ đây, các ứng dụng chỉ có thể làm nổi bật những bức ảnh được chọn gần đây nhất
và video khi được cấp quyền truy cập một phần vào nội dung nghe nhìn. Chiến dịch này
có thể cải thiện trải nghiệm người dùng cho những ứng dụng thường xuyên yêu cầu
quyền truy cập vào ảnh và video. Để sử dụng tính năng này trong ứng dụng của bạn, hãy bật
Đối số QUERY_ARG_LATEST_SELECTION_ONLY
khi truy vấn MediaStore
đến 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:
- Mục tiêu hoàn thành xoay quanh lượng calo đã đốt cháy, quãng đường, thời lượng, lặp lại và các bước.
- Mục tiêu về hiệu suất xoay quanh nhiều lần lặp lại nhất có thể (AMRAP), nhịp độ, nhịp tim, năng lượng, tốc độ gắng sức và tốc độ.
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 trao 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 nhằm cải thiện trải nghiệm người dùng trên ứng dụng, hãy xem bài viết Cải thiện trải nghiệm người dùng của ứng dụng Android tại Google I/O.
Xem trước tiện ích phong phú hơn với Generated Previews API
Trước Android 15, cách duy nhất để cung cấp bản xem trước bộ chọn tiện ích là chỉ định tài nguyên hình ảnh hoặc bố cục tĩnh. Các bản xem trước này thường khác nhau đáng kể so với giao diện của tiện ích thực tế khi tiện ích được đặt trên trang chủ màn hình. Ngoài ra, không thể tạo tài nguyên tĩnh bằng Jetpack Glance, vì vậy tính năng Glance nhà phát triển phải chụp ảnh màn hình tiện ích của họ hoặc tạo bố cục XML để có một bản xem trước tiện ích.
Android 15 bổ sung tính năng hỗ trợ cho bản xem trước đã tạo. Điều này có nghĩa là tiện ích ứng dụng
thay vào đó, nhà cung cấp có thể tạo RemoteViews
để dùng làm bản xem trước của bộ chọn
của một tài nguyên tĩnh.
![](https://developer.android.com/static/about/versions/15/images/generated-previews.png?authuser=9&hl=vi)
API Đẩy
Các ứng dụng có thể cung cấp bản xem trước được tạo thông qua API đẩy. Các ứng dụng có thể cung cấp
bản xem trước tại bất kỳ thời điểm 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. Bản xem trước vẫn tồn tại trong AppWidgetService
,
và người tổ chức có thể yêu cầu các quảng cáo đó theo yêu cầu. Ví dụ sau đây tải một tiện ích XML
tài nguyên bố cục 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)
)
Luồng dự kiến là:
- 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 vẫn tồn tại trongAppWidgetService
kèm theo thông tin khác về nhà cung cấp. 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ạiAppWidgetHost.onProvidersChanged
. Để đáp lại, tiện ích này máy chủ lưu trữ tải lại tất cả thông tin về nhà cung cấp của nó.- Khi hiển thị bản xem trước của tiện ích, máy chủ lưu trữ sẽ kiểm tra
AppWidgetProviderInfo.generatedPreviewCategories
và nếu được chọn có sẵn danh mục, hãy gọiAppWidgetManager.getWidgetPreview
tới trả về bản xem trước đã lưu cho ứng dụng nhà cung cấp này.
Thời điểm gọi setWidgetPreview
Do không có lệnh gọi lại để cung cấp bản xem trước, ứng dụng có thể chọn gửi bản xem trước bất kỳ lúc nào khi chúng đang chạy. Tần suất cập nhật bản xem trước phụ thuộc vào trường hợp sử dụng 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 bản xem trước:
- Những nhà cung cấp cho thấy dữ liệu thực trong bản xem trước tiện ích, chẳng hạn như dữ liệu đượ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 đã thực hiện định cấu hình ban đầu trong ứng dụng của họ. Sau đó, họ có thể thiết lập một nhiệm vụ định kỳ để cập nhật bản xem trước theo tần suất họ chọn. Ví dụ về loại tiện ích này có thể là ảnh, lịch, thời tiết hoặc tin tức tiện ích.
- Cá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ị bất kỳ 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 khởi chạy ứng dụng lần đầu tiên. Ví dụ về loại tiện ích này bao gồm trình đơn nhanh tiện ích hành động hoặc tiện ích lối tắt 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ế độ thiết bị trung tâm, nhưng thực tế thông tin trên bộ chọn màn hình chính. Các nhà cung cấp này nên tuân thủ 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 những thay đổi mới về tính năng Hình trong hình (PiP) nhằm đảm bảo tính cân bằng chuyển đổi mượt mà hơn khi chuyển sang chế độ PiP. Điều này sẽ có lợi cho các ứng dụng 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 và chuyển sang chế độ Hình trong hình.
Nhà phát triển dùng lệnh gọi lại onPictureInPictureModeChanged
để xác định logic
bật/tắt chế độ hiển thị các phần tử ở lớp phủ trên giao diện người dùng. Lệnh gọi lại này là
được kích hoạt khi hoàn tất quá trình nhập hoặc thoát ảnh động PiP. Bắt đầu vào
Trên Android 15, lớp PictureInPictureUiState
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ẽ tuân theo
Lệnh gọi lại Activity#onPictureInPictureUiStateChanged
đang được gọi bằng
isTransitioningToPip()
ngay khi ảnh động trong Hình trong hình 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 ứng dụng ở chế độ PiP (Hình trong hình), đối với
thành phần hiển thị hoặc bố cục mẫu bao gồm thông tin như nội dung đề xuất,
video, mức phân loại 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 thành phần 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 các thành phần không liên quan trên giao diện người dùng (đố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.
Cải thiện quy tắc Không làm phiề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àoAutomaticZenRule
để 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àoAutomaticZenRule
, 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 RungEffect cho 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 thiết bị
Android 15 hỗ trợ ứng dụng của bạn khai thác tối đa các kiểu dáng thiết bị của Android, bao gồm màn hình lớn, thiết bị có thể lật và thiết bị có thể gập lại.
Cải thiện tính 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 ứng và Xâ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 để cấp cho ứng dụng của bạn quyền tiếp cận những tiến bộ mới nhất về giao tiếp và công nghệ không dây.
Hỗ trợ 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.
![](https://developer.android.com/static/about/versions/15/images/satellite-notification.png?authuser=9&hl=vi)
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ị nghe nhưng không phản hồi với trình đọc NFC, gửi đối tượng dịch vụ PollingFrame
của ứng dụng để xử lý. Bạn có thể dùng các đối tượng PollingFrame
để xác thực trước lần giao tiếp đầu tiên với trình đọc NFC, cho phép thực hiện giao dịch bằng một lần nhấn trong nhiều trường hợp.
Ngoài ra, giờ đây, các ứng dụng có thể đăng ký bộ lọc trên các thiết bị được hỗ trợ để có thể được thông báo về hoạt động thăm dò vòng lặp, cho phép thao tác suôn sẻ với nhiều ứng dụng nhận biết NFC.
Vai trò trên 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, đồng thời mang lại cho người dùng thông tin minh bạch hơn và nhiều quyền kiểm soát hơn đối với dữ liệu của họ. Xem bài viết Bảo vệ bảo mật 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 thực hiện nhằm cải thiện các biện pháp bảo vệ người dùng và bảo vệ ứng dụng của bạn trước các mối đe doạ mới.
Tích hợp Trình quản lý thông tin xác thực với tính năng tự động điền
Starting with Android 15, developers can link specific views like username or password fields with Credential Manager requests, making it easier to provide a tailored user experience during the sign-in process. When the user focuses on one of these views, a corresponding request is sent to Credential Manager. The resulting credentials are aggregated across providers and displayed in autofill fallback UIs, such as inline suggestions or drop-down suggestions. The Jetpack androidx.credentials library is the preferred endpoint for developers to use and will soon be available to further enhance this feature in Android 15 and higher.
Tích hợp tính năng đăng ký và đăng nhập bằng một lần chạm với lời nhắc sinh trắc học
Credential Manager integrates biometric prompts into the credential creation and sign-in processes, eliminating the need for providers to manage biometric prompts. As a result, credential providers only need to focus on the results of the create and get flows, augmented with the biometric flow result. This simplified process creates a more efficient and streamlined credential creation and retrieval process.
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ọiActivity
: 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à chức năng nhằm bổ sung trải nghiệm người dùng khi sử dụng thiết bị 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.
![](https://developer.android.com/static/about/versions/15/images/cjk-variable-font.png?authuser=9&hl=vi)
Giải thích 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.
![](https://developer.android.com/static/about/versions/15/images/none-japanese.png?authuser=9&hl=vi)
JUSTIFICATION_MODE_NONE
.![](https://developer.android.com/static/about/versions/15/images/none-english.png?authuser=9&hl=vi)
JUSTIFICATION_MODE_NONE
.![](https://developer.android.com/static/about/versions/15/images/inter-word-japanese.png?authuser=9&hl=vi)
JUSTIFICATION_MODE_INTER_WORD
.![](https://developer.android.com/static/about/versions/15/images/inter-word-english.png?authuser=9&hl=vi)
JUSTIFICATION_MODE_INTER_WORD
.![](https://developer.android.com/static/about/versions/15/images/inter-character-japanese.png?authuser=9&hl=vi)
JUSTIFICATION_MODE_INTER_CHARACTER
mới.![](https://developer.android.com/static/about/versions/15/images/inter-character-english.png?authuser=9&hl=vi)
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:
![](https://developer.android.com/static/about/versions/15/images/line-break-auto-short.png?authuser=9&hl=vi)
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:
![](https://developer.android.com/static/about/versions/15/images/line-break-auto-long.png?authuser=9&hl=vi)
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 tiếng Nhật
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.
![](https://developer.android.com/static/about/versions/15/images/hentaigana-font.png?authuser=9&hl=vi)
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.