Rào cản gây khó chịu
Đó là một vấn đề gây đau đầu thường gặp: bạn nhấn vào biểu tượng ứng dụng, nhưng thay vì màn hình tải, một cửa sổ bật lên ngăn cản bạn. Điều này thường xảy ra nhất với các ứng dụng dựa trên hệ sinh thái của Google, chẳng hạn như Google Maps, Firebase hoặc AdMob. Bạn sẽ thấy thông báo này:
"App" won't run unless you update Google Play services.
Đây không chỉ là một lời gợi ý. Ứng dụng thực sự đã gặp bế tắc vì nó không tìm thấy các công cụ chạy nền cụ thể cần thiết để hoạt động. Cho đến khi các dịch vụ đó được cập nhật, ứng dụng sẽ tiếp tục bị khóa.
Tại sao điều này lại xảy ra?
Thủ phạm thường là do khoảng cách phiên bản. Ứng dụng bạn đang cố sử dụng được xây dựng bằng một phiên bản Google Client Library cụ thể—ví dụ: phiên bản 23.0.0—nhưng thiết bị của bạn đang chạy phiên bản cũ hơn, như 21.4.0. Các nguyên nhân phổ biến bao gồm:
- Bản cập nhật "ma": Điện thoại của bạn đã ngoại tuyến hoặc ở chế độ tiết kiệm pin, khiến nó bỏ lỡ các bản cập nhật nền quan trọng.
- Sự không tương thích của trình giả lập: Bạn là một nhà phát triển đang chạy thiết bị ảo (AVD) hoàn toàn thiếu khung làm việc của Play Store.
- Siêu dữ liệu cũ: Ứng dụng Google Play Store đã lưu trữ thông tin cũ và không nhận ra rằng có bản cập nhật mới.
- Hạn chế khu vực: Trong một số trường hợp, các ứng dụng được cài đặt từ bên ngoài (side-loaded) yêu cầu các phiên bản GMS chưa được triển khai tại khu vực cụ thể của bạn.
Các bước khắc phục từng bước
1. Buộc cập nhật thủ công
Google Play Services là một ứng dụng hệ thống "ẩn". Bạn sẽ không tìm thấy nó bằng cách tìm kiếm trên Play Store theo cách thông thường. Để vượt qua điều này, bạn cần sử dụng một liên kết sâu (deep link) trực tiếp để kích hoạt giao diện cập nhật.
Mở trình duyệt Android của bạn và truy cập: https://play.google.com/store/apps/details?id=com.google.android.gms
Liên kết này buộc Play Store mở trang quản lý cụ thể cho Services. Nếu bạn thấy nút Cập nhật, hãy nhấn vào đó ngay lập tức. Nếu bạn chỉ thấy "Hủy kích hoạt", điện thoại của bạn nghĩ rằng nó đã được cập nhật và bạn nên chuyển sang bước tiếp theo.
2. Xóa bộ nhớ đệm và dữ liệu GMS
Đôi khi bản cập nhật đã có sẵn, nhưng việc ghi chép nội bộ của điện thoại bị xáo trộn. Việc xóa dữ liệu sẽ buộc hệ thống phải lập chỉ mục lại các phiên bản của mình.
- Mở Cài đặt > Ứng dụng > Xem tất cả ứng dụng.
- Cuộn xuống Google Play services.
- Nhấn vào Bộ nhớ và bộ nhớ đệm.
- Nhấn vào Xóa bộ nhớ đệm.
- Chọn Quản lý không gian và sau đó là Xóa tất cả dữ liệu.
- Khởi động lại điện thoại. Điều này buộc thiết bị thực hiện một quy trình "bắt tay" mới với máy chủ của Google.
3. Khắc phục cho nhà phát triển: Bẫy trình giả lập
Nếu bạn gặp lỗi này trên thiết bị ảo Android (AVD), hãy kiểm tra System Image của bạn. Nhiều nhà phát triển vô tình chọn hình ảnh "Google APIs", vốn bao gồm các thư viện của Google nhưng không bao gồm bản thân ứng dụng Play Store. Không có Play Store, trình giả lập không thể cập nhật các dịch vụ của nó.
- Mở Device Manager trong Android Studio.
- Tìm biểu tượng Play Store bên cạnh định nghĩa thiết bị của bạn.
- Nếu thiếu, hãy tạo một AVD mới. Chọn một định nghĩa phần cứng (như Pixel 7) có logo Play Store.
- Chọn một System Image có nhãn "Google Play" thay vì chỉ "Google APIs."
4. Kiểm tra bằng mã nguồn (Dành cho người tạo ứng dụng)
Đừng để ứng dụng của người dùng bị lỗi. Bạn có thể kiểm tra tính tương thích ngay khi ứng dụng khởi động. Sử dụng lớp GoogleApiAvailability để xử lý tình huống một cách mượt mà.
private void ensureGooglePlayServices() {
GoogleApiAvailability api = GoogleApiAvailability.getInstance();
int status = api.isGooglePlayServicesAvailable(this);
if (status != ConnectionResult.SUCCESS) {
if (api.isUserResolvableError(status)) {
// Hiển thị một hộp thoại Google tiêu chuẩn, đẹp mắt với nút 'Cập nhật'
api.getErrorDialog(this, status, 9000).show();
} else {
Toast.makeText(this, "This device is not supported", Toast.LENGTH_LONG).show();
finish();
}
}
}
Đặt đoạn mã này vào phương thức onCreate() của bạn. Nó thay thế một vụ sập ứng dụng thông thường bằng một hướng dẫn thân thiện với người dùng.
Xác minh: Cách để biết lỗi đã được khắc phục
Kiểm tra kết quả bằng cách xem các con số. Đi tới Cài đặt > Ứng dụng > Google Play services và cuộn xuống dưới cùng. Bạn sẽ thấy một chuỗi phiên bản như version 24.08.12.
So sánh thông số này với tệp build.gradle của bạn. Nếu ứng dụng của bạn sử dụng implementation 'com.google.android.gms:play-services-maps:18.2.0', thiết bị cần một phiên bản GMS hỗ trợ SDK cụ thể đó. Nếu cửa sổ bật lên biến mất và bản đồ của bạn tải được, bạn đã thu hẹp khoảng cách thành công.
Mẹo chuyên nghiệp để phòng ngừa
- Sử dụng phụ thuộc thận trọng: Không phải lúc nào cũng nên sử dụng phiên bản "mới nhất" trong
build.gradle. Nếu ứng dụng của bạn hoạt động tốt trên phiên bản 16.0.0, hãy giữ nguyên ở đó. Điều này đảm bảo người dùng sử dụng điện thoại cũ không bị chặn. - Phương án dự phòng: Nếu thiếu Google Play Services (thường gặp trên các thiết bị Huawei mới hơn), hãy để ứng dụng của bạn chuyển sang một giải pháp thay thế mã nguồn mở như OpenStreetMap.
- Kiểm thử CI/CD: Luôn chạy các bài kiểm tra tự động trên trình giả lập với các phiên bản GMS khác nhau để phát hiện các rào cản này trước khi chúng đến tay người dùng.

