Chuyển đến nội dung
Cập nhật ứng dụng

Target API level 36 trên Google Play: gia hạn đến 1/11/2026 và cách sửa cho Expo, Flutter, React Native

Lỡ hạn chót 31/8? Xem bản gia hạn đến 1/11/2026 còn giúp được gì, rồi nâng Expo, Flutter hoặc React Native lên API 36 mà không làm hỏng điều hướng quay lại hay bố cục.

Trả lời ngắn gọn

Quy định target API level 36 nói rằng từ ngày 31/8/2026, mọi ứng dụng mới và bản cập nhật gửi lên Google Play đều phải nhắm mục tiêu Android 16 (API 36). Nhà phát triển có ứng dụng nhận cảnh báo chính sách có thể xin gia hạn đến ngày 1/11/2026 từ trang Policy status. Khi hết gia hạn, Play sẽ chặn bản cập nhật cho đến khi bạn tải lên bản build có targetSdk 36. Expo SDK 54+, Flutter 3.38+ và React Native 0.81+ mặc định nhắm mục tiêu API 36.

Điểm chính
  • Từ ngày 31/8/2026, ứng dụng mới và bản cập nhật trên Google Play phải nhắm mục tiêu Android 16 (API level 36). Wear OS và Automotive cần API 35, còn Android TV và XR cần API 34.
  • Bản gia hạn chỉ kéo dài đến ngày 1/11/2026. Liên kết đến biểu mẫu được gửi tới các ứng dụng chưa tuân thủ qua mục Notifications trong Play Console và trên trang chi tiết cảnh báo ở Policy status.
  • Nếu một ứng dụng điện thoại hiện có nhắm mục tiêu API 35 trở lên, ứng dụng vẫn hiển thị với người dùng mới. Lỡ hạn chót sẽ chặn bản cập nhật của bạn, không gỡ trang ứng dụng hiện tại.
  • Expo SDK 54 (React Native 0.81) và Flutter 3.38 mặc định nhắm mục tiêu API 36. Nâng cấp thường hiệu quả hơn việc sửa tay con số này.
  • Khi ứng dụng nhắm mục tiêu API 36, Android không còn gọi onBackPressed và bỏ qua khóa hướng màn hình trên màn hình rộng từ 600dp trở lên. Hãy kiểm thử điều hướng quay lại và bố cục máy tính bảng trước khi tải lên.
API 36 hoặc không thể cập nhật

Yêu cầu target API level 36 trên Google Play có nghĩa là bản phát hành được build cho bất kỳ phiên bản nào thấp hơn Android 16 đều không thể phát hành. Tính đến tháng 10/2026, Play từ chối mọi ứng dụng mới và mọi bản cập nhật nhắm mục tiêu cấp thấp hơn, thường kèm thông báo Target SDK of artifact is too low. Các ứng dụng đã nhận cảnh báo chính sách có thể xin thêm thời gian, nhưng bản gia hạn kết thúc vào ngày 1/11/2026. Hướng dẫn này giải thích bản gia hạn còn giúp được gì, cách đưa Expo, Flutter và React Native lên API 36, và những gì thường bị hỏng sau khi làm vậy.

Yêu cầu target API level 36 thực sự chặn những gì?

Nó chặn việc gửi bản build. Từ ngày 31/8/2026, bạn không thể tải lên ứng dụng điện thoại mới hoặc bản cập nhật trừ khi nó nhắm mục tiêu API 36. Các ứng dụng đang có mặt trên cửa hàng và nhắm mục tiêu API 35 trở lên vẫn hiển thị đầy đủ, kể cả với người dùng mới.

Theo yêu cầu về target API level của Google, "Ứng dụng mới và bản cập nhật ứng dụng phải nhắm mục tiêu Android 16 (API level 36) trở lên để được gửi lên Google Play." Yêu cầu khác nhau theo loại thiết bị, và ngoại lệ hoàn toàn duy nhất dành cho các ứng dụng riêng tư vĩnh viễn, chỉ phân phối nội bộ trong một tổ chức.

Loại thiết bịỨng dụng mới và bản cập nhật (từ 31/8/2026)Ứng dụng hiện có vẫn hiển thị đầy đủ nếu nhắm mục tiêu
Điện thoại, máy tính bảng, Android AutoAPI 36API 35 trở lên
Wear OSAPI 35API 34 trở lên
Android Automotive OSAPI 35API 32 trở lên
Android TVAPI 34API 33 trở lên
Android XRAPI 34API 34 trở lên

Một ứng dụng hiện có thấp hơn các mức này "sẽ chỉ hiển thị trên các thiết bị chạy hệ điều hành Android bằng hoặc thấp hơn target API level của ứng dụng." Những người đã cài đặt vẫn dùng bình thường như trước. Tuy nhiên, người dùng điện thoại đời mới hơn sẽ được thông báo rằng ứng dụng "được tạo cho phiên bản Android cũ hơn."

Bạn còn xin được gia hạn trước ngày 1/11/2026 không?

Chỉ khi Play đã gửi cảnh báo chính sách cho ứng dụng của bạn và biểu mẫu yêu cầu vẫn còn hiển thị. Ngay cả khi đó, bản gia hạn cũng chỉ kéo dài muộn nhất đến ngày 1/11/2026, nên đây chỉ là vài ngày thêm cho một bản sửa gần xong, không phải một kế hoạch mới.

Google cho biết họ gửi "liên kết đến biểu mẫu yêu cầu gia hạn qua mục Notifications" tới các ứng dụng bị ảnh hưởng, và biểu mẫu này "có sẵn trên trang chi tiết của cảnh báo hoặc vấn đề tại trang Policy status." Google không hiển thị biểu mẫu cho các ứng dụng đã tuân thủ.

  1. Mở Play Console và chọn ứng dụng.
  2. Tìm thông báo về target API level trong Inbox hoặc Notifications. Nếu có, hãy mở liên kết trong đó.
  3. Nếu không có, vào Policy status, mở cảnh báo hoặc vấn đề về target API level và tìm biểu mẫu yêu cầu gia hạn trên trang chi tiết.
  4. Điền biểu mẫu cho từng ứng dụng bị ảnh hưởng. Mỗi ứng dụng có cảnh báo riêng.
  5. Dù được gia hạn hay không, hãy lên kế hoạch tải lên bản build API 36 trước ngày 1/11/2026. Sau ngày đó, mọi bản cập nhật đều cần API 36.

Cách nâng Expo, Flutter và React Native lên API 36

Cách gọn gàng nhất là nâng cấp lên phiên bản framework đã mặc định nhắm mục tiêu API 36: Expo SDK 54, React Native 0.81 hoặc Flutter 3.38. Nếu chưa nâng cấp được, bạn có thể tăng con số này thủ công, nhưng khi đó bạn cũng phải tự xử lý các thay đổi hành vi của Android 16.

Nền tảngMặc định nhắm mục tiêu API 36 từNơi đặt con sốCách thủ công nếu chưa nâng cấp được
Expo (managed / CNG)SDK 54 (React Native 0.81)Được tạo bởi prebuild; ghi đè bằng expo-build-propertiestargetSdkVersion: 36 và compileSdkVersion: 36 trong plugin expo-build-properties
React Native (bare)0.81android/build.gradleĐặt compileSdk và targetSdk thành 36, rồi tắt predictive back trong manifest
Flutter3.38 (flutter.targetSdkVersion = 36)android/app/build.gradle(.kts)Thay giá trị 35 viết cứng bằng 36 hoặc bằng flutter.targetSdkVersion

Expo. Changelog của SDK 54 cho biết SDK 54 và React Native 0.81 "hiện đã nhắm mục tiêu Android 16." Nâng cấp bằng npx expo install expo@^54.0.0 --fix, chạy npx expo-doctor@latest, và nếu bạn dùng Continuous Native Generation thì "Xóa thư mục android và ios nếu bạn đã tạo chúng cho phiên bản SDK trước." Trên SDK 53, bạn có thể thử đặt targetSdkVersion: 36 qua plugin expo-build-properties, nhưng React Native 0.79 vẫn xử lý thao tác quay lại qua onBackPressed, nên hãy đọc phần tiếp theo trước khi phát hành.

Flutter. Ghi chú phát hành Flutter 3.38 liệt kê giá trị mặc định là flutter.compileSdkVersion (API 36) và flutter.targetSdkVersion (API 36), đồng thời "đặc biệt khuyến khích bạn dùng các biến API level do Flutter SDK cung cấp trong file build." Phiên bản 3.38 cũng yêu cầu tối thiểu Java 17. Nếu targetSdk = 35 được viết cứng trong module ứng dụng, việc nâng cấp Flutter sẽ không thay đổi nó, nên hãy kiểm tra file.

React Native bare. Đặt compileSdkVersion và targetSdkVersion thành 36 trong android/build.gradle. Từ 0.81 trở đi, gần như bạn đã xong. Với các phiên bản cũ hơn, hãy thêm android:enableOnBackInvokedCallback="false" vào <application> trong AndroidManifest.xml. Nếu không, nút quay lại vật lý và cử chỉ quay lại sẽ bỏ qua điều hướng JavaScript của bạn.

Những gì bị hỏng khi ứng dụng bắt đầu nhắm mục tiêu Android 16?

Điều hướng quay lại và bố cục màn hình lớn là hai thứ hỏng thường xuyên nhất. Khi nhắm mục tiêu API 36, Android ngừng gọi onBackPressed, không cho phép tắt chế độ edge-to-edge, và bỏ qua khóa hướng màn hình cũng như khóa thay đổi kích thước trên màn hình rộng từ 600dp trở lên.

Những thay đổi quan trọng nhất với ứng dụng đa nền tảng, theo tài liệu thay đổi hành vi của Android 16 của Google:

  • Predictive back: "onBackPressed không được gọi và KeyEvent.KEYCODE_BACK không còn được gửi đi nữa." Đặt android:enableOnBackInvokedCallback="false" là cách tắt tạm thời.
  • Edge-to-edge: windowOptOutEdgeToEdgeEnforcement "đã bị ngừng hỗ trợ và vô hiệu hóa", nên header hoặc nút ở cuối màn hình có thể bị che dưới thanh trạng thái hoặc thanh cử chỉ.
  • Màn hình lớn: trên màn hình rộng từ 600dp trở lên, screenOrientation, resizableActivity và giới hạn tỷ lệ khung hình bị bỏ qua, có thể làm giãn bố cục chỉ hỗ trợ chiều dọc. Game được miễn. PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY là cách tắt tạm thời và "sẽ không còn áp dụng khi nhắm mục tiêu API level 37."
  • Văn bản: elegantTextHeight bị bỏ qua, có thể làm thay đổi chiều cao dòng với chữ Ả Rập, Thái, Tamil và một số hệ chữ khác.
  • Cảm biến sức khỏe: BODY_SENSORS được thay bằng các quyền sức khỏe chi tiết như READ_HEART_RATE.

Các nhà phát triển khác đã gặp vấn đề gì khi chuyển sang API 36?

Các báo cáo công khai đến nay cho thấy hai kiểu sự cố: hành vi nút quay lại thay đổi mà không có lỗi nào, và các thư viện khiến target level trong bundle mà Play nhận được khác với những gì file dự án ghi.

Audius (React Native 0.79). Trong pull request #14635, đội Audius cho biết Google Play đã từ chối cả hai lần tải lên phiên bản Android 1.5.186 với lỗi Target SDK of artifact is too low. Họ chuyển compileSdk và targetSdk từ 35 lên 36, đặt build tools thành 36.0.0 và thêm android.suppressUnsupportedCompileSdk=36, vì "RN 0.79 cố định AGP 8.8". Họ cũng đặt enableOnBackInvokedCallback="false", vì nếu không thì thao tác quay lại "sẽ bỏ qua React Navigation." Một PR sau đó đã gỡ cấu hình tắt này khi họ chuyển lên React Native 0.81, phiên bản tự đăng ký OnBackPressedCallback.

Một ứng dụng Flutter 3.35.2. Trong Flutter issue #174516, một nhà phát triển đã đặt targetSdk 36 trong Gradle và manifest, nhưng Play Console vẫn báo "Your bundle targets SDK 34, but uses a Play Core library that cannot be used with that version." Gỡ thư viện cũ com.google.android.play:core:1.10.3 lại dẫn đến lỗi R8 "Missing classes". Sửa xong lỗi đó thì lại gặp "You can't rollout this release because it doesn't allow any existing users to upgrade to the newly added app bundles." Bundle cuối cùng được chấp nhận sau khi họ thêm quy tắc keep cho ProGuard, đặt minSdk rõ ràng và tắt chia tách theo ngôn ngữ, mật độ màn hình và ABI, đổi lại dung lượng tải xuống lớn hơn.

Bài học chung: đổi con số trong Gradle chưa phải là xong việc. Audius phải sửa hành vi lúc chạy, còn nhà phát triển Flutter phải sửa một dependency làm thay đổi những gì Play đọc từ bundle. Hãy kiểm tra artifact đã build và kiểm thử trên thiết bị Android 16, không chỉ xem file cấu hình.

Cách kiểm tra bản build API 36 trước khi tải lên

Đọc target level trực tiếp từ bundle phát hành, rồi đưa bundle lên kênh internal testing hoặc closed testing và thử điều hướng quay lại, insets và bố cục máy tính bảng trên Android 16. Một lần bị từ chối hoặc một lỗi trên production tốn thời gian hơn nhiều so với các bước kiểm tra này.

Ví dụ thực tế: một ứng dụng Expo SDK 53 nhắm mục tiêu API 35 và cần thêm một bản cập nhật.

  1. Chạy npx expo install expo@^54.0.0 --fix, sau đó npx expo-doctor@latest, và sửa mọi vấn đề được báo cáo.
  2. Nếu dự án dùng Continuous Native Generation, hãy xóa thư mục android và ios cũ rồi build lại. Nếu không, hãy áp dụng thủ công các thay đổi native khi nâng cấp.
  3. Build AAB phát hành, ví dụ bằng eas build -p android --profile production.
  4. Xác nhận target bằng bundletool dump manifest --bundle app.aab --xpath /manifest/uses-sdk/@android:targetSdkVersion. Kết quả phải là 36.
  5. Tải lên internal testing. Trên điện thoại Android 16, nhấn quay lại ở mọi màn hình lồng nhau, kiểm tra header và nút ở cuối màn hình không bị che dưới thanh hệ thống, và xoay máy tính bảng hoặc trình giả lập có thể thay đổi kích thước.
  6. Đưa lên production với ghi chú phát hành có nhắc đến các bản sửa cho Android 16.

Để kiểm thử nhanh hơn, hãy dùng cách thiết lập tester trong hướng dẫn closed testing trên Google Play của chúng tôi, và tham khảo cách viết nội dung cập nhật từ các ví dụ ghi chú phát hành. Nếu bạn muốn giao lại việc phát hành, dịch vụ gửi ứng dụng lên App Store của chúng tôi bao gồm cả Play Console và App Store Connect với giá $599 cho cả hai cửa hàng. Phí tài khoản nhà phát triển tính riêng.

Câu hỏi thường gặp

Điều gì xảy ra nếu tôi lỡ hạn gia hạn target API ngày 1/11/2026?

Trang ứng dụng hiện tại của bạn vẫn còn. Ứng dụng điện thoại nhắm mục tiêu API 35 trở lên vẫn hiển thị với người dùng hiện có và người dùng mới. Play Console sẽ từ chối mọi bản phát hành mới, kể cả bản sửa lỗi khẩn cấp, cho đến khi bundle nhắm mục tiêu Android 16 (API 36). Ứng dụng dưới API 35 chỉ có thể cài trên thiết bị chạy phiên bản Android đó hoặc cũ hơn.

Ứng dụng Wear OS và Android TV có cần nhắm mục tiêu API 36 không?

Không. Tính đến tháng 10/2026, ứng dụng mới và bản cập nhật cho Wear OS và Android Automotive OS phải nhắm mục tiêu API 35, còn ứng dụng Android TV và Android XR phải nhắm mục tiêu API 34. Chỉ ứng dụng điện thoại, máy tính bảng và Android Auto mới cần API 36. Ngoại lệ hoàn toàn duy nhất là ứng dụng riêng tư vĩnh viễn được phân phối nội bộ trong một tổ chức.

Tôi có thể nhắm mục tiêu API 36 mà không nâng cấp Expo SDK không?

Trên SDK 53, bạn có thể đặt targetSdkVersion và compileSdkVersion thành 36 trong plugin expo-build-properties, và một số nhà phát triển đã làm vậy. React Native 0.79, phiên bản SDK 53 sử dụng, vẫn xử lý thao tác quay lại qua onBackPressed, trong khi Android 16 không còn gọi hàm này ở API 36. Bạn sẽ cần tắt tính năng bằng cách đặt enableOnBackInvokedCallback thành false. Nâng cấp lên SDK 54 là cách được hỗ trợ chính thức.

compileSdkVersion và targetSdkVersion khác nhau thế nào?

compileSdkVersion là phiên bản Android API mà mã của bạn được biên dịch dựa trên. targetSdkVersion cho Android biết ứng dụng của bạn đã áp dụng hành vi của phiên bản nào, và Google Play bắt buộc giá trị này. compileSdk phải bằng hoặc cao hơn targetSdk, nên chuyển sang target 36 nghĩa là phải biên dịch với API 36 trở lên. Ví dụ, Expo SDK 58 biên dịch với 37 và nhắm mục tiêu 36.

Vì sao Play Console vẫn báo ứng dụng nhắm mục tiêu API level cũ sau khi tôi đã sửa build.gradle?

Play đọc target level từ bundle bạn tải lên, không phải từ file mã nguồn. Một giá trị viết cứng trong module khác, một plugin lỗi thời hoặc một thư viện như Play Core cũ có thể làm thay đổi manifest sau khi hợp nhất. Hãy chạy bundletool dump manifest trên AAB phát hành để xem targetSdkVersion thực tế, và đảm bảo bạn đã tải lên bản build mới chứ không phải artifact cũ.

Nguồn & tài liệu tham khảo

Chính sách có thể thay đổi. Hãy kiểm tra tài liệu chính thức trước khi nộp.

Mang bản build đến. Hoặc ý tưởng.

Cùng đưa ứng dụng của bạn về đích.

Một cuộc gọi tập trung để tìm ra điều gì đang ngăn ứng dụng của bạn lên store.

Đặt lịch gọi ↗