Mục lục
Tương thích APK theo phiên bản Android quy về hai con số trong manifest của ứng dụng. minSdkVersion là ngưỡng dưới: bản Android của bạn phải bằng hoặc cao hơn nó, nếu không cài đặt thất bại. targetSdkVersion là phiên bản mà nhà phát triển đã kiểm thử, và nó thay đổi hành vi thay vì chặn cài đặt. Android 10 là API 29, Android 15 là API 35, Android 17 là API 37, và mọi APK đều khai báo con số mà nó cần.
Tương thích phiên bản Android hoạt động thế nào
Android kiểm tra manifest trước khi sao chép bất kỳ tệp nào, và phép kiểm tra đó lấy hai trường. minSdkVersion chỉ ra bản Android cũ nhất mà ứng dụng hỗ trợ. targetSdkVersion chỉ ra bản mà ứng dụng được dựng và kiểm thử. Cấp API của thiết bị được so với trường thứ nhất, còn trường thứ hai chỉ ảnh hưởng tới việc những hành vi nền tảng nào được bật.
Ba kết quả nảy ra từ phép so sánh đó:
- Cấp API của thiết bị bằng hoặc cao hơn minSdkVersion. Việc cài đặt tiếp tục sang bước kiểm tra chữ ký và kiến trúc.
- Cấp API của thiết bị thấp hơn minSdkVersion. Trình cài đặt dừng lại. Từ ADB bạn thấy
INSTALL_FAILED_OLDER_SDK; từ Play Store bạn thấy “This app isn’t compatible with your device.” - Cấp API của thiết bị cao hơn targetSdkVersion nhiều. Ứng dụng vẫn cài được, nhưng Android có thể áp dụng các hành vi tương thích mà nhà phát triển chưa từng kiểm thử. Đó là nơi những lần crash trên điện thoại hiện đại thường xuất phát.
Google tài liệu hóa cả hai trường trong tham chiếu phần tử uses-sdk, và các con số API nằm trong bảng bên dưới.
Vì sao APK từ chối cài trên phiên bản Android của bạn
Thông báo bạn thấy cho biết ba phép kiểm tra nào thất bại. Ghép lỗi của bạn với đúng hàng:
| Thông báo hoặc mã lỗi | Phép kiểm tra nào thất bại | Việc cần làm |
|---|---|---|
| “This app isn’t compatible with your device” (Play) | minSdkVersion cao hơn cấp API của bạn | Cài một bản ứng dụng cũ hơn, hoặc cập nhật Android |
INSTALL_FAILED_OLDER_SDK |
Cùng phép kiểm tra, đường sideload | Cập nhật Android hoặc tìm phiên bản hỗ trợ |
INSTALL_FAILED_UPDATE_INCOMPATIBLE |
Xung đột chữ ký với bản đã cài | Gỡ ứng dụng đang có, rồi cài lại |
INSTALL_FAILED_NO_MATCHING_ABIS |
Không có thư viện cho CPU của bạn | Tìm APK arm64 hoặc universal |
INSTALL_FAILED_DEPRECATED_SDK_VERSION |
targetSdk dưới ngưỡng của Android | Sideload bằng adb install --bypass-low-target-sdk-block |
| Ứng dụng cài xong rồi crash khi khởi động | Thay đổi hành vi sau targetSdkVersion | Cập nhật ứng dụng, hoặc xem ghi chú phát hành về yêu cầu hệ thống |
Hàng thứ năm là hàng mới nhất. Android 14 chặn cài các bản nhắm vào API 22 trở xuống, Android 15 nâng ngưỡng lên 23, và mỗi bản phát hành lại đẩy nó lên tiếp. Cờ ADB ở trên là lối thoát có chủ đích cho các bản sao sideload. Hướng dẫn khắc phục sự cố cài đặt đi qua từng mã kèm ảnh chụp màn hình.
Lịch sử phiên bản Android và cấp API
Ứng dụng khai báo cấp API chứ không phải tên tiếp thị, vì các con số không bao giờ đổi. Đây là ánh xạ mà bạn sẽ thấy trích dẫn trên các trang tải về:
| Phiên bản Android | Cấp API | Phát hành | Ghi chú |
|---|---|---|---|
| Android 10 | 29 | ngày 3 tháng 9 năm 2019 | Ngưỡng phổ biến của ứng dụng cũ |
| Android 11 | 30 | ngày 8 tháng 9 năm 2020 | Scoped storage thành mặc định |
| Android 12 | 31 | ngày 4 tháng 10 năm 2021 | Bắt buộc splash screen |
| Android 12L | 32 | ngày 7 tháng 3 năm 2022 | Dành cho máy tính bảng và thiết bị gập |
| Android 13 | 33 | ngày 15 tháng 8 năm 2022 | Thêm quyền thông báo |
| Android 14 | 34 | ngày 4 tháng 10 năm 2023 | Chặn target SDK rất thấp |
| Android 15 | 35 | ngày 15 tháng 10 năm 2024 | Target tối thiểu lại tăng |
| Android 16 | 36 | ngày 10 tháng 6 năm 2025 | Tập trung màn hình lớn và edge-to-edge |
| Android 17 | 37 | ngày 16 tháng 6 năm 2026 | Bản phát hành hiện tại |
Ba chi tiết đáng biết về đuôi của bảng đó. Android 16 ra mắt ngày 10 tháng 6 năm 2025 và Android 17 ngày 16 tháng 6 năm 2026, nên câu trả lời cho “bản Android mới nhất” đổi theo mỗi mùa hè. Fire OS theo cùng cách đánh số: Fire OS 16 tương ứng API 36. Và Play Store giờ gắn quy tắc của mình vào các số nguyên này chứ không phải tên phiên bản.
Cách Fire OS, Wear OS, TV và Automotive đánh số Android
Mỗi bản Android phụ đều báo về cùng các số nguyên API mà Google gán cho từng bản phát hành, nghĩa là Fire OS 16 nghĩa là API 36, các bản Android TV khớp số tự số với bản điện thoại, còn Wear OS và Android Automotive khai báo cùng giá trị minSdkVersion và targetSdkVersion trong manifest. Nhãn thì đổi. Con số thì không.
| Nền tảng | Nhãn phiên bản | Cấp API | Ghi chú cài đặt |
|---|---|---|---|
| Fire OS | Fire OS 16 | 36 | Cùng nền với Android 16 |
| Android TV / Google TV | Android 14 | 34 | Đánh số khớp điện thoại |
| Wear OS | Android version trong Settings, System, About | Cùng các số nguyên | Luồng Play Store riêng |
| Android Automotive | Android version trong cài đặt xe | Cùng các số nguyên | Luồng Play Store riêng |
| Lớp Android trên ChromeOS | Cập nhật theo lịch riêng | Có thể trễ hơn điện thoại | Đọc từ container Android |
Fire OS là ví dụ rõ nhất, vì phiên bản 16 ánh xạ thẳng tới API 36 và Android 16. Wear OS và Android Automotive chạy các luồng Play Store riêng, nên một ứng dụng có thể tồn tại cho điện thoại lại thiếu trên đồng hồ. Một ứng dụng gương thất bại trên Galaxy Watch thường đang vấp đúng chỗ tách biệt đó. Đó là vấn đề danh mục.
Giải thích tương thích xuôi và ngược
Android chạy ứng dụng cũ trên hệ thống mới đáng tin cậy hơn nhiều so với chiều ngược lại. Hai chiều thất bại khác nhau.
Android mới, APK cũ
Ứng dụng cũ thường cài và chạy được. Các thay đổi hành vi được khóa sau targetSdkVersion, nên một ứng dụng dựng cho Android 9 vẫn cư xử như ứng dụng Android 9 trên Android 17. Những thất bại người ta gặp là API đã bị gỡ và giới hạn nền bị siết, biểu hiện thành crash hoặc thông báo không bao giờ đến. Ngoại lệ khẩn cấp tồn tại cho các target rất cũ, được nêu trong bảng lỗi phía trên.
Android cũ, APK mới
Việc cài đặt đơn giản là không xảy ra. minSdkVersion được thực thi trước mọi thứ khác, và không có cách bỏ qua ẩn nào. Các lựa chọn thực sự của bạn:
- Cập nhật Android. Cách sửa lâu dài, với điều kiện thiết bị của bạn vẫn nhận cập nhật.
- Cài một bản ứng dụng cũ hơn. Kho lưu giữ các phiên bản trước, và các bản cũ thường khai báo mức tối thiểu thấp hơn. Hướng dẫn cập nhật APK đề cập cách hạ phiên bản an toàn, gồm cả lý do chữ ký vẫn phải khớp.
- Chạy nó ở nơi khác. Một image trình giả lập, một thiết bị thứ hai, hoặc một phiên Android trên đám mây.
Chính hạn chót của Play Store
Google Play thêm quy tắc thứ ba chồng lên quy tắc kỹ thuật. Ứng dụng mới và bản cập nhật phải nhắm API 36 từ ngày 31 tháng 8 năm 2026 (với phần gia hạn tới ngày 1 tháng 11 năm 2026). Các ứng dụng vẫn dưới API 35 ngừng được đề xuất cho người dùng mới trên thiết bị chạy bản Android mới hơn. Bản cài sẵn có vẫn hoạt động; thứ thay đổi là khả năng khám phá. Google công bố các ngày chính xác trong yêu cầu cấp API mục tiêu.
Dòng thời gian hạn chót target API của Google Play
Google Play yêu cầu mọi ứng dụng mới và mọi bản cập nhật nhắm một cấp API cụ thể, và ngưỡng hiện tại là API 36 từ ngày 31 tháng 8 năm 2026, kèm cửa sổ gia hạn ngắn tới ngày 1 tháng 11 năm 2026 cho nhà phát triển xin thêm thời gian. Hai hạn chót đang quan trọng ngay lúc này.
| Hạn chót | Yêu cầu | Điều gì đổi với ứng dụng dưới ngưỡng |
|---|---|---|
| ngày 31 tháng 8 năm 2025, gia hạn tới ngày 1 tháng 11 năm 2025 | Ứng dụng mới và cập nhật nhắm API 35 | Bản build cũ chỉ tới người dùng mới trên thiết bị bằng hoặc dưới cấp API của chính chúng |
| ngày 31 tháng 8 năm 2026, gia hạn tới ngày 1 tháng 11 năm 2026 | Ứng dụng mới và cập nhật nhắm API 36 | Cùng giới hạn tiếp cận vẫn áp dụng, và ứng dụng dưới API 35 mất hiển thị trước |
Bản cài sẵn có không bao giờ bị gỡ. Google công bố cả hai ngày trong yêu cầu cấp API mục tiêu, và tham chiếu nền tảng tương ứng là tài liệu targetSdkVersion. Một ứng dụng bỏ qua hạn chót vẫn hoạt động với những người đã cài nó.
Các thay đổi hành vi bị khóa bởi targetSdkVersion
targetSdkVersion quyết định Android áp dụng hành vi nền tảng nào cho một ứng dụng, nên một gói dựng cho API 29 cài trên Android 16 nhưng vẫn giữ quy tắc lưu trữ, quy tắc thông báo và giới hạn nền từ thời của chính nó thay vì quy tắc nền tảng mới nhất. Đó là lý do một ứng dụng cũ có thể thất bại trên một chiếc điện thoại hoàn toàn mới.
| Hành vi | Xuất hiện ở | Áp dụng từ targetSdkVersion | Ứng dụng sau đó gặp gì |
|---|---|---|---|
| Scoped storage | Android 11, API 30 | 30 | Ghi thẳng vào thư mục chung thất bại, nên thao tác xuất biến mất |
| Quyền thông báo | Android 13, API 33 | 33 | Cảnh báo bị bỏ cho tới khi POST_NOTIFICATIONS được cấp |
| Lên lịch báo thức chính xác | Android 12, API 31 | 31 | Báo thức lệch giờ, và SCHEDULE_EXACT_ALARM phải được khai báo |
| Loại dịch vụ nền | Android 14, API 34 | 34 | Việc khởi động dịch vụ ném SecurityException nếu chưa khai báo loại |
Không hàng nào trong số đó chặn cài đặt. Ứng dụng tới nơi, khởi động, rồi thất bại ngay khi chạm một API bị hạn chế. Chỉ nhà phát triển mới nâng được targetSdkVersion, nên cập nhật là cách sửa.
Cách kiểm tra phiên bản Android tối thiểu của APK
Bốn phương pháp, xếp theo mức công sức tốn ra.
Đọc trang Store hoặc trang tải về
Google Play hiển thị Requires Android trên mọi trang ứng dụng. Các kho lưu và mirror in cùng giá trị trên trang tải về của họ. Cách này trả lời trong năm giây cho bất cứ thứ gì bạn chưa tải.
Dùng APK Analyzer của Android Studio
Mở Android Studio, chọn File rồi Profile or Debug APK, và đọc minSdkVersion từ bản tóm tắt manifest. Cách này chạy trên mọi tệp cục bộ, kể cả tệp bạn nhận qua một ứng dụng nhắn tin.
Đọc manifest bằng ADB
Cài ứng dụng lên một thiết bị, rồi chạy:
adb shell dumpsys package com.example.app | grep -E "minSdk|targetSdk|versionName"
Nó in ra những giá trị mà Android thực sự đang thực thi cho bản sao đã cài đó.
Kiểm tra kiến trúc cùng lúc
Cùng phép kiểm tra đó nên cho bạn biết những thư viện native nào đi kèm trong gói, điều quan trọng trên Chromebook và PC. Kiến trúc, tên ABI và gói split được đề cập trong kích thước tệp APK và kiến trúc.
APK split, tệp XAPK và adb install-multiple
Google Play biến Android App Bundle thành nhiều APK nhỏ thay vì một tệp, còn lệnh adb install thông thường chỉ nhận một tệp mỗi lần, nên một bundle cần lệnh install-multiple để tới thiết bị một cách đầy đủ. Một tệp không bao giờ là toàn bộ ứng dụng.
| Mảnh | Chứa gì | Cách cài |
|---|---|---|
base.apk |
Mã, manifest, tài nguyên | adb install base.apk |
config.arm64_v8a.apk |
Thư viện native cho một CPU | Cài cùng base bằng adb install-multiple |
config.en.apk |
Một gói ngôn ngữ | Cùng lệnh, mọi tệp trong một lần gọi |
| XAPK | Container chứa base cộng các split | Giải nén, rồi chạy install-multiple trên mọi APK bên trong |
| Universal APK | Mọi ABI trong một tệp | adb install app-universal.apk |
install-multiple nhận mọi đường dẫn trong một lần gọi và coi chúng là một gói, nên các tệp phải khớp nhau. Gửi mỗi lát x86 cho điện thoại arm64 và ADB trả về INSTALL_FAILED_NO_MATCHING_ABIS. Ví dụ lệnh nằm trong kích thước tệp APK và kiến trúc.
Cách kiểm tra phiên bản Android của bạn
Mở Settings, cuộn tới About phone hoặc About tablet, và đọc Android version. Chạm vào số phiên bản nếu bạn muốn Easter egg, nhưng con số đó mới là thứ bạn cần. Ánh xạ nó bằng bảng phía trên.
Trên TV đường đi hơi khác: Settings, rồi Device Preferences hoặc System, rồi About. Trên Wear OS: Settings, rồi System, rồi About. Cùng một số áp dụng ở mọi nơi, vì nó đến từ cùng một nền Android.
Nếu màn hình cài đặt chỉ hiện build number, bạn đang nhìn lệch đúng một dòng. Tương thích đọc phiên bản Android, không phải ngày vá bảo mật.
Nếu APK cần Android mới hơn thì làm gì
Ba lựa chọn theo thứ tự tần suất chúng thường hiệu quả:
- Cập nhật thiết bị. Settings, System, System update. Thiết bị ra mắt trong ba năm qua thường nhận hai tới ba năm cập nhật, nên một điện thoại 2022 có thể đã chạm trần.
- Hạ về một phiên bản ứng dụng cũ hơn. Bản trước thường khai báo mức tối thiểu thấp hơn. Cài nó từ một kho lưu, nhưng giữ chữ ký nhất quán với bản đã có trên thiết bị, hoặc gỡ trước.
- Dùng trình giả lập. Trên máy tính, một image trình giả lập chạy bất kỳ cấp API hiện hành nào, biến nó thành đáp án khi chiếc điện thoại bị kẹt. Xem hướng dẫn PC để dựng.
Đừng cố sửa minSdkVersion bằng cách dựng lại manifest. Một APK đóng gói lại sẽ thất bại bước kiểm tra chữ ký và bị từ chối với INSTALL_FAILED_UPDATE_INCOMPATIBLE.
Cách hạ về một phiên bản ứng dụng trước
Để quay lui một ứng dụng, bạn gỡ bản mới trước, rồi cài một bản cũ hơn ký bằng cùng một khóa, vì Android từ chối đặt một version code thấp hơn lên trên version code cao hơn và Android trả về lỗi INSTALL_FAILED_VERSION_DOWNGRADE khi bạn thử. Gỡ trước làm sạch cả kiểm tra phiên bản lẫn dữ liệu đã lưu.
- Gỡ ứng dụng. Settings, rồi Apps, rồi ứng dụng, rồi Uninstall. Với ứng dụng hệ thống, chọn Uninstall updates, vốn khôi phục bản từ nhà máy.
- Xác nhận khóa ký. Một bản cũ ký bằng khóa khác thất bại với
INSTALL_FAILED_UPDATE_INCOMPATIBLE, đúng những gì xảy ra sau khi nhà phát triển bật Play App Signing. - Cài gói cũ. Chạy
adb install old-app.apk, hoặc mở tệp từ trình quản lý tệp trên điện thoại. - Chấp nhận mất dữ liệu. Gỡ bỏ xóa đăng nhập và tiến trình lưu, nên hãy xuất những gì có thể trước bước một.
Các bản debug cũng chấp nhận cờ adb install -d, vốn nới lỏng kiểm tra phiên bản cho các gói cho phép điều đó. Bản release hiếm khi cho, nên gỡ bỏ vẫn là đường đáng tin cậy. Các phiên bản trước nằm trong kho lưu, và cách cập nhật tệp APK liệt kê thứ tự an toàn.
Nếu APK cần Android cũ hơn thì làm gì
Gần như không phải vấn đề. Ứng dụng khai báo ngưỡng dưới phiên bản của bạn chạy tốt, vì Android chạy ứng dụng mới trên hành vi cũ qua cơ chế khóa theo targetSdkVersion. Những thất bại hiếm gặp là các tính năng phần cứng mà ứng dụng khai báo là bắt buộc, như một camera hay cảm biến cụ thể, vốn là lệch thiết bị chứ không phải lệch phiên bản. Danh sách kiểm tra quyền trong cách kiểm tra quyền APK đề cập phép kiểm tra đó.
Hãy đối chiếu thiết bị của bạn với danh sách hỗ trợ thiết bị đầy đủ, rồi chạy phép kiểm tra phiên bản phía trên trên chính ứng dụng bạn muốn.
Điểm chính
- Hai số trong manifest quyết định tương thích: minSdkVersion chặn cài đặt, targetSdkVersion thay đổi hành vi.
- Android 10 = API 29 đến Android 17 = API 37, phát hành ngày 16 tháng 6 năm 2026.
- INSTALL_FAILED_OLDER_SDK nghĩa là thiết bị của bạn dưới mức tối thiểu của ứng dụng. Không có cách bỏ qua.
- Từ ngày 31 tháng 8 năm 2026, ứng dụng Play Store dưới API 35 mất độ tiếp cận trên thiết bị Android mới hơn.
Các câu hỏi thường gặp
Tôi cần phiên bản Android nào để cài APK?
Bất kỳ phiên bản nào mà ứng dụng khai báo làm mức SDK tối thiểu. Con số đó nằm trên trang Play Store dưới mục Requires Android, và trong manifest của APK dưới dạng minSdkVersion. Nếu bản Android trên thiết bị của bạn cũ hơn, trình cài đặt từ chối gói đó.
Android 10 có cài được APK dựng cho Android 14 không?
Chỉ khi nhà phát triển đặt mức tối thiểu là Android 10 trở xuống. Các ứng dụng khai báo API 34 làm ngưỡng báo INSTALL_FAILED_OLDER_SDK trên Android 10, và không cài đặt nào ghi đè phép kiểm tra đó.
Phiên bản SDK tối thiểu là gì?
minSdkVersion là bản Android cũ nhất mà ứng dụng hỗ trợ. Android so nó với cấp API của thiết bị trước khi cài, và từ chối gói khi thiết bị nằm dưới ngưỡng. Không thể thay đổi sau khi APK đã được dựng.
Phiên bản SDK mục tiêu là gì?
targetSdkVersion là bản Android mà nhà phát triển đã kiểm thử. Nó không chặn cài đặt. Nó bật hoặc tắt các hành vi nền tảng, đó là lý do ứng dụng cũ vẫn chạy được trên Android mới nhưng vẫn có thể vi phạm chính sách Play Store.
Làm sao kiểm tra yêu cầu Android của một APK?
Đọc Requires Android trên trang Play Store, hoặc xem trang tải về trên một kho lưu APK. Với tệp cục bộ, mở nó trong APK Analyzer của Android Studio và đọc giá trị minSdkVersion từ manifest.
Làm sao kiểm tra phiên bản Android của tôi?
Mở Settings, rồi About phone, và đọc mục Android version. Các con số ở dòng kế tiếp, tức build number, không ảnh hưởng tương thích. So phiên bản Android của bạn với bảng trong hướng dẫn này.
Vì sao APK không cài được trên phiên bản Android của tôi?
Nguyên nhân thường gặp là mức SDK tối thiểu cao hơn thiết bị của bạn. Các nguyên nhân khác là xung đột chữ ký với bản đã cài, sai lệch kiến trúc CPU, hoặc target SDK cũ đến mức các bản Android gần đây chặn luôn việc cài.
Tôi có cài APK cũ trên Android mới hơn không?
Thông thường có. Giữ hầu hết ứng dụng cũ chạy được qua các bản phát hành, với các thay đổi hành vi khóa sau targetSdkVersion. Ngoại lệ là ứng dụng dùng các API mà Google đã gỡ, chúng crash hoặc mất tính năng thay vì từ chối cài.
Tôi có cài APK mới trên Android cũ hơn không?
Không, khi mức tối thiểu của APK vượt quá thiết bị của bạn. Trình cài đặt dừng trước khi sao chép một tệp nào. Các lựa chọn của bạn là một bản ứng dụng cũ hơn, một bản cập nhật Android, hoặc chạy nó trong trình giả lập với image mới hơn.
Phiên bản Android nào hỗ trợ mọi APK?
Bản mới nhất, miễn cấp API của nó bằng hoặc vượt mức tối thiểu của mọi ứng dụng. Android 17, API 37, phát hành ngày 16 tháng 6 năm 2026, chạy các bản phát hành hiện tại và hầu hết bản cũ hơn, dù ứng dụng rất cũ có thể hỏng vì các API đã gỡ.
Cấp API là gì?
Cấp API là số nguyên Google gán cho mỗi bản Android, bắt đầu từ 1 và hiện ở 37. Ứng dụng khai báo số API thay vì tên phiên bản, nên minSdkVersion 35 luôn nghĩa là Android 15 bất kể nhãn tiếp thị.
Play Store có chặn ứng dụng cũ không?
Có, và ngày càng nhiều. Từ ngày 31 tháng 8 năm 2026, ứng dụng mới phải nhắm API 36, và ứng dụng vẫn dưới API 35 ngừng được đề xuất cho người dùng mới trên thiết bị chạy bất kỳ bản nào mới hơn target của chúng.