Khi bạn tải một tệp APK lên, tệp này phải đáp ứng các yêu cầu về cấp độ API mục tiêu của Google Play.
Kể từ ngày 31 tháng 8 năm 2026:
- Để được gửi lên Google Play, các ứng dụng mới và bản cập nhật ứng dụng phải nhắm đến Android 16 (cấp độ API 36) trở lên; ngoại trừ ứng dụng Wear OS và Android Automotive OS thì phải nhắm đến Android 15 (cấp độ API 35) trở lên, còn ứng dụng Android TV và Android XR thì phải nhắm đến Android 14 (cấp độ API 34) trở lên.
- Các ứng dụng hiện có phải nhắm đến Android 15 (API cấp 35) trở lên để có thể tiếp tục được người dùng mới phát hiện trên thiết bị chạy hệ điều hành Android cao hơn cấp độ API mục tiêu của ứng dụng. Các ứng dụng nhắm đến Android 14 (API cấp 34) trở xuống, bao gồm cả Android 13 (API cấp 33) trở xuống đối với Wear OS, Android TV và Android XR, cũng như Android 12 (API cấp 31) trở xuống đối với Android Automotive OS, sẽ chỉ được cung cấp trên thiết bị chạy hệ điều hành Android bằng hoặc thấp hơn cấp độ API mục tiêu của ứng dụng.
Nếu cần thêm thời gian để cập nhật ứng dụng, bạn có thể yêu cầu gia hạn đến ngày 1 tháng 11 năm 2026. Sắp tới trong năm nay, bạn có thể truy cập biểu mẫu gia hạn cho ứng dụng của mình trên Play Console.
Những yêu cầu này có một số ngoại lệ sau đây:
- Ứng dụng riêng tư vĩnh viễn chỉ dành cho người dùng trong một tổ chức cụ thể và chỉ nhằm phân phối nội bộ.
Tại sao nên nhắm mục tiêu đến các SDK mới hơn?
Mỗi phiên bản Android mới đều có các thay đổi nhằm cải thiện hiệu suất và bảo mật, đồng thời nâng cao trải nghiệm người dùng Android. Một số thay đổi này chỉ áp dụng cho những ứng dụng tuyên bố rõ ràng là có hỗ trợ thông qua thuộc tính tệp kê khai targetSdkVersion của ứng dụng (còn được gọi là cấp độ API mục tiêu).
Việc định cấu hình ứng dụng để nhắm đến một cấp độ API gần đây giúp đảm bảo rằng người dùng có thể hưởng lợi từ những điểm cải tiến này, trong khi ứng dụng của bạn vẫn có thể chạy trên những phiên bản Android cũ. Việc nhắm đến một cấp độ API gần đây cũng cho phép ứng dụng của bạn tận dụng các tính năng mới nhất của nền tảng để làm hài lòng người dùng. Hơn nữa, kể từ Android 10 (API cấp 29), người dùng sẽ thấy một cảnh báo khi khởi động ứng dụng lần đầu nếu ứng dụng đó nhắm đến Android 5.1 (API cấp 22) hoặc thấp hơn.
Tài liệu này nêu bật những điểm quan trọng bạn cần phải biết khi cập nhật cấp độ API mục tiêu để đáp ứng yêu cầu của Google Play. Hãy xem hướng dẫn trong các phần sau, tuỳ thuộc vào phiên bản mà bạn đang di chuyển đến.
Lưu ý: Nếu tệp Gradle của bạn có chứa các mục trong tệp kê khai, bạn có thể xác nhận hoặc thay đổi giá trị hiện tại của targetSdkVersion trong tệp Gradle của ứng dụng, như mô tả trong phần Định cấu hình bản dựng của bạn. Ngoài ra, bạn có thể sử dụng thuộc tính android:targetSdkVersion trong tệp kê khai, như mô tả trong tài liệu cho phần tử tệp kê khai <uses-sdk>.Di chuyển từ Android 12 trở lên (cấp độ API 31) sang phiên bản gần đây hơn
Để cập nhật ứng dụng nhắm đến một phiên bản Android gần đây hơn, hãy làm theo danh sách các thay đổi về hành vi có liên quan:
- Các thay đổi về hành vi của Android 13
- Các thay đổi về hành vi trên Android 14
- Các thay đổi về hành vi trong Android 15
- Các thay đổi về hành vi trên Android 16
Di chuyển từ Android 11 (API cấp 30) sang Android 12 (API cấp 31)
Tính bảo mật và quyền truy cập
- Bluetooth: Bạn phải thay thế phần khai báo cho quyền BLUETOOTH và BLUETOOTH_ADMIN bằng quyền BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE hoặc BLUETOOTH_CONNECT. Bạn không cần yêu cầu cấp quyền khi bắt đầu chạy đối với LOCATION cho các hoạt động Bluetooth nữa.
- Vị trí: Người dùng có thể yêu cầu các ứng dụng chỉ truy xuất thông tin vị trí ước chừng. Bạn phải yêu cầu quyền ACCESS_COARSE_LOCATION bất cứ khi nào bạn yêu cầu ACCESS_FINE_LOCATION.
- Bộ lọc ý định: Nếu ứng dụng của bạn chứa các hoạt động, dịch vụ hoặc broadcast receiver sử dụng bộ lọc ý định, bạn phải khai báo rõ ràng thuộc tính android:exported cho các thành phần này.
- Ngủ đông: Các ứng dụng có thể chuyển sang chế độ ngủ đông nếu không được sử dụng trong một khoảng thời gian. Ở chế độ ngủ đông, quyền khi bắt đầu chạy và bộ nhớ đệm của ứng dụng sẽ được đặt lại và bạn không thể chạy công việc hoặc cảnh báo. Bạn có thể kiểm tra trạng thái ngủ đông của ứng dụng.
- Khả năng biến đổi của ý định đang chờ xử lý: Bạn phải chỉ định khả năng biến đổi của từng đối tượng PendingIntent mà ứng dụng của bạn tạo ra.
Trải nghiệm người dùng
- Thông báo tuỳ chỉnh: Thông báo có khung hiển thị nội dung tuỳ chỉnh sẽ không còn sử dụng toàn bộ khu vực thông báo; thay vào đó, hệ thống sẽ áp dụng một mẫu chuẩn. Mẫu này đảm bảo rằng thông báo tuỳ chỉnh có cách trang trí giống như các thông báo khác ở tất cả các trạng thái. Hành vi này gần giống với hành vi của Notification.DecoratedCustomViewStyle.
- Các thay đổi đối với quy trình xác minh Đường liên kết trong ứng dụng Android: Khi sử dụng tính năng xác minh Đường liên kết trong ứng dụng Android, hãy đảm bảo rằng bộ lọc ý định của bạn bao gồm danh mục BROWSABLE và hỗ trợ lược đồ HTTPS.
Hiệu suất
Các hạn chế khi khởi động dịch vụ trên nền trước: Để nhắm đến Android 12 trở lên, ứng dụng của bạn không thể bắt đầu các dịch vụ trên nền trước trong khi chạy ở chế độ nền, ngoại trừ một vài trường hợp đặc biệt. Nếu một ứng dụng cố gắng bắt đầu một dịch vụ trên nền trước trong khi chạy ở chế độ nền, thì sẽ có ngoại lệ (ngoại trừ một vài trường hợp đặc biệt).
Cân nhắc sử dụng WorkManager để lên lịch và bắt đầu công việc ưu tiên trong khi ứng dụng của bạn chạy ở chế độ nền. Để hoàn tất các thao tác cần chính xác về thời gian mà người dùng yêu cầu, hãy bắt đầu các dịch vụ trên nền trước trong phạm vi chuông báo chính xác.
Hạn chế về thành phần phản hồi với thao tác nhấn vào thông báo (notification trampoline): Khi người dùng nhấn vào thông báo, một số ứng dụng sẽ phản hồi bằng cách chạy một thành phần ứng dụng bắt đầu hoạt động mà người dùng nhìn thấy và tương tác. Thành phần ứng dụng này được gọi là thành phần phản hồi với thao tác nhấn vào thông báo.
Ứng dụng không được bắt đầu hoạt động từ các dịch vụ hoặc broadcast receiver dùng làm thành phần phản hồi với thao tác nhấn vào thông báo. Sau khi người dùng nhấn vào một thông báo hoặc nút hành động trong thông báo, ứng dụng của bạn sẽ không thể gọi startActivity() bên trong một dịch vụ hoặc bộ nhận tín hiệu truyền tin.
Xem toàn bộ các thay đổi ảnh hưởng đến ứng dụng nhắm đến Android 12 (API cấp 31).
Hiện đại hoá ứng dụng
Khi cập nhật cấp độ API mục tiêu cho ứng dụng, hãy cân nhắc việc áp dụng các tính năng gần đây của nền tảng để hiện đại hoá ứng dụng của bạn và làm hài lòng người dùng.
- Hãy cân nhắc sử dụng CameraX (đang trong giai đoạn thử nghiệm) để khai thác tối đa việc sử dụng camera.
- Sử dụng các thành phần Jetpack để giúp bạn thực hiện các phương pháp tối ưu nhất mà không phải viết các mã nguyên mẫu, đồng thời đơn giản hoá các tác vụ phức tạp để bạn có thể tập trung vào các mã mà bạn quan tâm.
- Sử dụng Kotlin để viết ứng dụng tốt hơn nhanh hơn và với ít mã hơn.
- Hãy đảm bảo bạn tuân thủ các phương pháp tối ưu và các yêu cầu về quyền riêng tư.
- Thêm tính năng hỗ trợ giao diện tối vào ứng dụng.
- Thêm tuỳ chọn hỗ trợ thao tác bằng cử chỉ vào các ứng dụng của bạn.
- Di chuyển ứng dụng từ dịch vụ Gửi thông báo qua đám mây của Google (GCM) sang phiên bản mới nhất của Giải pháp gửi thông báo qua đám mây của Firebase.
- Tận dụng tính năng quản lý cửa sổ nâng cao.
- Hỗ trợ tỷ lệ khung hình lớn hơn (hơn 16:9) để tận dụng những tiến bộ gần đây về phần cứng. Hãy đảm bảo rằng ứng dụng của bạn đổi kích thước để lấp đầy không gian màn hình còn trống. Chỉ khai báo tỷ lệ khung hình tối đa khi không còn cách nào khác. Để biết thêm thông tin về tỷ lệ khung hình tối đa, hãy xem phần Khai báo hỗ trợ màn hình ở mức hạn chế.
- Thêm tính năng hỗ trợ nhiều cửa sổ để giúp ứng dụng tăng năng suất và quản lý nhiều màn hình.
- Nếu việc trải nghiệm ứng dụng thu nhỏ tuyệt vời có thể giúp cải thiện trải nghiệm người dùng, hãy thêm tính năng hỗ trợ Hình trong hình.
- Tối ưu hoá cho các thiết bị có thiết kế vết cắt trên màn hình.
- Đừng ước đoán chiều cao của thanh trạng thái. Thay vào đó, hãy sử dụng WindowInsets và View.OnApplyWindowInsetsListener. Để tìm hiểu thêm, hãy xem video droidcon NYC 2017 để biết nội dung giải thích.
- Đừng giả định rằng ứng dụng sẽ choán toàn bộ cửa sổ. Thay vào đó, hãy xác nhận vị trí của cửa sổ bằng cách sử dụng View.getLocationInWindow(), chứ không phải bằng View.getLocationOnScreen(). * Khi xử lý MotionEvent, hãy sử dụng MotionEvent.getX() và MotionEvent.getY(), đừng sử dụng MotionEvent.getRawX(), MotionEvent.getRawY().
Kiểm tra và cập nhật SDK cũng như thư viện của bạn
Hãy đảm bảo rằng các phần phụ thuộc SDK bên thứ ba của bạn hỗ trợ API 31: Một số nhà cung cấp SDK phát hành nội dung này trong tệp kê khai của họ; số khác sẽ cần phải điều tra thêm. Nếu bạn sử dụng một SDK không hỗ trợ API 31, hãy ưu tiên làm việc với nhà cung cấp SDK để giải quyết vấn đề này.
Ngoài ra, xin lưu ý rằng targetSdkVersion của ứng dụng hoặc trò chơi có thể hạn chế quyền truy cập vào thư viện nền tảng Android riêng tư; xem phần Các ứng dụng NDK liên kết với thư viện nền tảng để biết chi tiết.
Bạn cũng nên xác minh mọi hạn chế có thể tồn tại trong phiên bản Thư viện hỗ trợ Android mà bạn đang sử dụng. Như mọi khi, bạn phải đảm bảo khả năng tương thích giữa phiên bản lớn của Thư viện hỗ trợ Android và compileSdkVersion của ứng dụng.
Bạn nên chọn targetSdkVersion nhỏ hơn hoặc bằng phiên bản lớn của Thư viện hỗ trợ. Chúng tôi khuyến khích bạn cập nhật lên phiên bản Thư viện hỗ trợ tương thích gần đây để tận dụng các tính năng tương thích mới nhất và các bản sửa lỗi.
Kiểm thử ứng dụng
Sau khi cập nhật cấp độ API của ứng dụng và các tính năng phù hợp, bạn nên kiểm thử một số trường hợp sử dụng chính. Các đề xuất sau đây không mang tính toàn diện mà chỉ nhằm mục đích hướng dẫn quy trình thử nghiệm của bạn. Bạn nên kiểm tra xem:
- Ứng dụng của bạn biên dịch thành API 29 mà không gặp phải lỗi hoặc cảnh báo.
Ứng dụng của bạn có chiến lược cho các trường hợp người dùng từ chối yêu cầu cấp quyền và nhắc người dùng cấp quyền. Cách thực hiện:
- Chuyển đến màn hình Thông tin ứng dụng của ứng dụng và vô hiệu hóa từng quyền.
- Mở ứng dụng và đảm bảo rằng không xảy ra sự cố.
- Thực hiện các thử nghiệm trường hợp sử dụng chính và đảm bảo rằng các quyền bắt buộc được nhắc lại.
Xử lý chế độ Nghỉ với kết quả dự kiến và không có lỗi.
- Sử dụng adb, đặt thiết bị thử nghiệm của bạn ở chế độ Nghỉ trong khi ứng dụng của bạn đang chạy.
- Kiểm thử bất kỳ trường hợp sử dụng nào kích hoạt thông báo qua Giải pháp gửi thông báo qua đám mây của Firebase.
- Thử nghiệm bất kỳ trường hợp sử dụng nào có dùng đến Báo thức hoặc Công việc.
- Loại bỏ bất kỳ phần phụ thuộc nào có trên các dịch vụ nền.
- Đặt ứng dụng của bạn ở Chế độ chờ ứng dụng
- Kiểm thử bất kỳ trường hợp sử dụng nào kích hoạt thông báo qua Giải pháp gửi thông báo qua đám mây của Firebase.
- Kiểm thử bất kỳ trường hợp sử dụng nào có dùng đến Chuông báo.
- Sử dụng adb, đặt thiết bị thử nghiệm của bạn ở chế độ Nghỉ trong khi ứng dụng của bạn đang chạy.
Xử lý ảnh / video mới đang được chụp hoặc quay
- Kiểm tra để đảm bảo ứng dụng của bạn xử lý các nội dung truyền phát ACTION_NEW_PICTURE và ACTION_NEW_VIDEO bị hạn chế một cách chính xác (tức là được chuyển thành công việc của JobScheduler).
- Đảm bảo rằng mọi trường hợp sử dụng quan trọng phụ thuộc vào những sự kiện này vẫn hoạt động.
Xử lý việc chia sẻ tệp với các ứng dụng khác - Kiểm thử mọi trường hợp sử dụng có chia sẻ dữ liệu tệp với bất kỳ ứng dụng nào khác (kể cả một ứng dụng khác của cùng nhà phát triển)
- Thử nghiệm nội dung hiển thị trong ứng dụng khác và không gây ra sự cố.
Thông tin khác
Chọn nhận email trong Google Play Console để chúng tôi có thể gửi cho bạn các thông tin cập nhật và thông báo quan trọng từ Android và Google Play, bao gồm cả bản tin hằng tháng của chúng tôi về đối tác.