Bộ lọc trên Google Play

Khi người dùng tìm kiếm hoặc duyệt tìm ứng dụng để tải từ Google Play xuống, kết quả sẽ được lọc dựa trên những ứng dụng tương thích với thiết bị. Ví dụ: nếu ứng dụng yêu cầu máy ảnh, Google Play sẽ không hiển thị ứng dụng đó với thiết bị không có máy ảnh. Quá trình lọc này giúp nhà phát triển quản lý việc phân phối ứng dụng và giúp đảm bảo trải nghiệm người dùng tốt nhất có thể.

Việc lọc trong Google Play dựa trên một số loại siêu dữ liệu ứng dụng và tuỳ chọn cài đặt cấu hình, bao gồm cả việc khai báo tệp kê khai, các thư viện cần thiết, phần phụ thuộc vào kiến trúc và tuỳ chọn kiểm soát phân phối trong Google Play Console, chẳng hạn như tuỳ chọn nhắm mục tiêu theo địa lý, giá cả và các thông tin khác.

Hoạt động lọc của Google Play dựa trên một phần của nội dung khai báo tệp kê khai và các khía cạnh khác của khung Android, tuy nhiên hành vi lọc thực tế sẽ khác biệt với khung và không bị ràng buộc với các cấp độ API cụ thể. Tài liệu này đề cập tới các quy tắc lọc hiện tại mà Google Play sử dụng.

Cách bộ lọc hoạt động trên Google Play

Google Play sử dụng hạn chế về bộ lọc được mô tả bên dưới để xác định khả năng hiển thị ứng dụng cho người dùng đang duyệt web hoặc tìm kiếm ứng dụng trên ứng dụng Google Play.

Để xác định có hiển thị ứng dụng hay không, Google Play sẽ kiểm tra yêu cầu về phần cứng và phần mềm của thiết bị, cũng như nhà mạng, vị trí và các đặc điểm khác. Sau đó, Google Play so sánh với các hạn chế và phần phụ thuộc của tệp kê khai và thông tin phát hành chi tiết của ứng dụng.

Nếu ứng dụng tương thích với thiết bị theo quy tắc bộ lọc, Google Play sẽ hiển thị ứng dụng đó cho người dùng. Nếu không, Google Play sẽ ẩn ứng dụng của bạn khỏi kết quả tìm kiếm và duyệt xem theo danh mục, ngay cả khi người dùng yêu cầu cụ thể ứng dụng bằng cách nhấp vào một đường liên kết sâu trỏ trực tiếp tới mã nhận dạng ứng dụng trong Google Play.

Bạn có thể sử dụng bất cứ tổ hợp bộ lọc có sẵn nào cho ứng dụng. Ví dụ: bạn có thể đặt yêu cầu minSdkVersion"4" và đặt smallScreens="false" trong ứng dụng, sau đó khi tải ứng dụng lên Google Play, bạn chỉ có thể nhắm mục tiêu là các quốc gia (các nhà mạng) châu Âu. Do đó, các bộ lọc của Google Play sẽ ngăn ứng dụng xuất hiện trên bất cứ thiết bị nào không khớp với cả ba yêu cầu này.

Tất cả hạn chế về việc lọc đều được liên kết với phiên bản của ứng dụng và bạn có thể thay đổi giữa các phiên bản. Ví dụ: nếu người dùng đã cài đặt ứng dụng của bạn và bạn phát hành một bản cập nhật khiến ứng dụng đó không hiển thị với người dùng, thì người dùng sẽ không thấy có bản cập nhật.

Lọc trên trang web của Google Play

Khi người dùng duyệt qua trang web trên Google Play, họ có thể thấy tất cả ứng dụng đã phát hành. Tuy nhiên, trang web Google Play sẽ so sánh các yêu cầu về ứng dụng với từng thiết bị mà người dùng đã đăng ký để đảm bảo khả năng tương thích. Đồng thời, Google Play sẽ chỉ cho phép họ cài đặt nếu ứng dụng đó tương thích với thiết bị của họ.

Lọc dựa trên tệp kê khai ứng dụng

Hầu hết các bộ lọc được kích hoạt bởi các phần tử trong tệp kê khai của ứng dụng, AndroidManifest.xml (mặc dù không phải tất cả nội dung trong tệp kê khai đều có thể kích hoạt tính năng lọc). Bảng 1 liệt kê các phần tử trong tệp kê khai mà bạn nên sử dụng để kích hoạt tính năng lọc và giải thích cách bộ lọc hoạt động cho mỗi phần tử.

Bảng 1. Các phần tử tệp kê khai kích hoạt tính năng lọc trên Google Play.

Phần tử tệp kê khai Tên bộ lọc Cách thức hoạt động
<supports-screens> Kích thước màn hình

Một ứng dụng cho biết kích thước màn hình mà ứng dụng này có thể hỗ trợ bằng cách thiết lập các thuộc tính của phần tử <supports-screens>. Khi ứng dụng được xuất bản, Google Play sẽ sử dụng các thuộc tính đó để xác định xem có hiển thị ứng dụng cho người dùng hay không, dựa trên kích thước màn hình của thiết bị.

Theo nguyên tắc chung, Google Play giả định rằng nền tảng trên thiết bị có thể điều chỉnh các bố cục nhỏ cho phù hợp với màn hình lớn hơn, nhưng không thể điều chỉnh các bố cục lớn hơn cho màn hình nhỏ hơn. Do đó, nếu một ứng dụng chỉ khai báo hỗ trợ kích thước màn hình "bình thường", Google Play sẽ cung cấp ứng dụng đó cho cả thiết bị có màn hình thông thường và màn hình lớn, và lọc ứng dụng để không hiển thị cho thiết bị có màn hình nhỏ.

Nếu một ứng dụng không khai báo thuộc tính cho <supports-screens>, Google Play sẽ sử dụng giá trị mặc định cho các thuộc tính đó. Những thuộc tính này thay đổi theo Cấp độ API. Cụ thể:

  • Đối với ứng dụng đặt android: minSdkVersion hoặc android: targetSdkVersion thành 3 trở xuống thì phần tử <supports-screens> chưa được xác định và không có thuộc tính nào sẵn có. Trong trường hợp này, Google Play sẽ giả định rằng ứng dụng được thiết kế cho màn hình có kích thước bình thường và hiển thị ứng dụng đó cho thiết bị có màn hình kích thước bình thường hoặc lớn hơn.

  • Khi bạn đặt android: minSdkVersion hoặc android: targetSdkVersion thành 4 trở lên, thì giá trị mặc định của tất cả thuộc tính sẽ là "true". Như vậy, ứng dụng được coi là hỗ trợ tất cả kích thước màn hình theo mặc định.

Ví dụ 1:
Tệp kê khai khai báo <uses-sdk android:minSdkVersion="3"> và không bao gồm phần tử <supports-screens>. Kết quả: Google Play sẽ không hiển thị ứng dụng cho người dùng thiết bị có màn hình nhỏ mà sẽ hiển thị cho người dùng thiết bị có kích thước màn hình thông thường và lớn, trừ khi bộ lọc khác được áp dụng.

Ví dụ 2:
Tệp kê khai khai báo <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"> và không bao gồm phần tử <supports-screens>. Kết quả: Google Play sẽ hiển thị ứng dụng cho người dùng trên mọi thiết bị, trừ khi bộ lọc khác được áp dụng.

Ví dụ 3:
Tệp kê khai khai báo <uses-sdk android:minSdkVersion="4"> và không bao gồm phần tử <supports-screens>. Kết quả: Google Play sẽ hiển thị ứng dụng cho tất cả người dùng, trừ khi bộ lọc khác được áp dụng.

Để biết thêm thông tin về cách khai báo hỗ trợ cho kích thước màn hình trong ứng dụng, hãy xem <supports-screens> và phần Hỗ trợ nhiều màn hình.

<uses-configuration> Cấu hình thiết bị:
bàn phím, thanh điều hướng, màn hình cảm ứng

Một ứng dụng có thể yêu cầu một số tính năng phần cứng nhất định và Google Play sẽ chỉ hiển thị ứng dụng trên thiết bị có phần cứng được yêu cầu.

Ví dụ 1:
Tệp kê khai bao gồm <uses-configuration android:reqFiveWayNav="true" /> và người dùng đang tìm kiếm ứng dụng trên thiết bị không có tuỳ chọn kiểm soát điều hướng năm chiều. Kết quả: Google Play sẽ không hiển thị ứng dụng với người dùng.

Ví dụ 2:
Tệp kê khai không bao gồm phần tử <uses-configuration>. Kết quả: Google Play sẽ hiển thị ứng dụng với tất cả người dùng, trừ khi bộ lọc khác được áp dụng.

Để biết thêm thông tin, hãy xem <uses-configuration>.

<uses-feature> Tính năng của thiết bị
(name)

Ứng dụng có thể yêu cầu thiết bị phải có một số tính năng nhất định. Chức năng này đã được giới thiệu trong Android 2.0 (API cấp 5).

Ví dụ 1:
Tệp kê khai bao gồm <uses-feature android:name="android.hardware.sensor.light" /> và người dùng đang tìm kiếm ứng dụng trên thiết bị không có cảm biến ánh sáng. Kết quả: Google Play sẽ không hiển thị ứng dụng với người dùng.

Ví dụ 2:
Tệp kê khai không bao gồm phần tử <uses-feature>. Kết quả: Google Play sẽ hiển thị ứng dụng với tất cả người dùng, trừ khi bộ lọc khác được áp dụng.

Để biết toàn bộ thông tin, hãy xem <uses-feature> .

Lọc theo các tính năng ngụ ý: Trong một số trường hợp, Google Play diễn giải các quyền được yêu cầu thông qua các phần tử <uses-permission> là những yêu cầu về tính năng tương đương với các yêu cầu được khai báo trong phần tử <uses-feature>. Xem <uses-permission>, dưới đây.

Phiên bản OpenGL-ES
(openGlEsVersion)

Một ứng dụng có thể yêu cầu rằng thiết bị phải hỗ trợ phiên bản OpenGL-ES cụ thể bằng cách sử dụng thuộc tính <uses-feature android:openGlEsVersion="int">.

Ví dụ 1:
Một ứng dụng yêu cầu nhiều phiên bản OpenGL-ES bằng cách chỉ định openGlEsVersion nhiều lần trong tệp kê khai. Kết quả: Google Play giả định rằng ứng dụng này yêu cầu phiên bản mới nhất được biểu thị.

Ví dụ 2:
Một ứng dụng yêu cầu OpenGL-ES phiên bản 1.1 và người dùng đang tìm kiếm ứng dụng trên thiết bị hỗ trợ OpenGL-ES phiên bản 2.0. Kết quả: Google Play sẽ hiển thị ứng dụng với người dùng, trừ khi bộ lọc khác được áp dụng. Nếu thiết bị báo cáo rằng có hỗ trợ phiên bản OpenGL-ES X, thì Google Play sẽ giả định rằng thiết bị đó cũng hỗ trợ mọi phiên bản cũ hơn X.

Ví dụ 3:
Người dùng đang tìm kiếm ứng dụng trên thiết bị không có phiên bản OpenGL-ES (ví dụ: thiết bị chạy Android 1.5 trở xuống). Kết quả: Google Play giả định rằng thiết bị chỉ hỗ trợ OpenGL-ES phiên bản 1.0. Google Play sẽ chỉ hiển thị cho người dùng ứng dụng không chỉ định openGlEsVersion hoặc ứng dụng không chỉ định OpenGL-ES phiên bản mới hơn 1.0.

Ví dụ 4:
Tệp kê khai không chỉ định openGlEsVersion. Kết quả: Google Play sẽ hiển thị ứng dụng với tất cả người dùng, trừ khi bộ lọc khác được áp dụng.

Để biết thêm thông tin, hãy xem <uses-feature>.

<uses-library> Thư viện phần mềm

Một ứng dụng có thể đòi hỏi thiết bị phải có một số thư viện chia sẻ cụ thể.

Ví dụ 1:
Một ứng dụng đòi hỏi có thư viện com.google.android.maps và người dùng đang tìm kiếm ứng dụng trên thiết bị không có thư viện com.google.android.maps. Kết quả: Google Play sẽ không hiển thị ứng dụng với người dùng.

Ví dụ 2:
Tệp kê khai không bao gồm phần tử <uses-library>. Kết quả: Google Play sẽ hiển thị ứng dụng với tất cả người dùng, trừ khi bộ lọc khác được áp dụng.

Để biết thêm thông tin, hãy xem <uses-library>.

<uses-permission>  

Google Play tuyệt đối không lọc dựa trên các phần tử <uses-permission>. Tuy nhiên, Google Play sẽ đọc các phần tử để xác định xem ứng dụng có bất cứ yêu cầu về tính năng phần cứng nào chưa được khai báo đúng cách trong phần tử <uses-feature> hay không. Ví dụ: nếu một ứng dụng yêu cầu quyền CAMERA nhưng không khai báo phần tử <uses-feature> cho android.hardware.camera, thì Google Play sẽ coi như ứng dụng đó cần có máy ảnh và không nên hiển thị cho người dùng sở hữu thiết bị không có máy ảnh.

Nhìn chung, nếu một ứng dụng yêu cầu quyền liên quan đến phần cứng, thì Google Play sẽ giả định rằng ứng dụng đó yêu cầu tính năng cơ bản dành cho phần cứng, mặc dù có thể không có nội dung khai báo tương ứng với <uses-feature>. Sau đó, Google Play sẽ thiết lập bộ lọc dựa trên tính năng được ngụ ý trong phần khai báo <uses-feature>.

Để nắm được danh sách các quyền ngụ ý về tính năng phần cứng, hãy xem tài liệu cho phần tử <uses-feature>.

<uses-sdk> Phiên bản khung tối thiểu (minSdkVersion)

Một ứng dụng có thể yêu cầu một cấp độ API tối thiểu.

Ví dụ 1:
Tệp kê khai bao gồm <uses-sdk android:minSdkVersion="3"> và ứng dụng sử dụng API đã được giới thiệu trong API cấp 3. Người dùng đang tìm kiếm ứng dụng trên thiết bị có API cấp 2. Kết quả: Google Play sẽ không hiển thị ứng dụng với người dùng.

Ví dụ 2:
Tệp kê khai không bao gồm minSdkVersion và ứng dụng sử dụng API đã được giới thiệu trong API cấp 3. Người dùng đang tìm kiếm ứng dụng trên thiết bị có API cấp 2. Kết quả: Google Play giả định rằng minSdkVersion là "1" và ứng dụng này tương thích với mọi phiên bản Android. Google Play hiển thị ứng dụng với người dùng và cho phép người dùng tải ứng dụng xuống. Ứng dụng gặp sự cố trong thời gian chạy.

Vì muốn tránh tình huống thứ hai này, bạn luôn nên khai báo minSdkVersion. Để biết chi tiết, hãy xem android:minSdkVersion.

Phiên bản khung tối đa (maxSdkVersion)

Không dùng nữa. Android 2.1 trở lên không kiểm tra hoặc thực thi thuộc tính maxSdkVersion, và SDK sẽ không biên dịch nếu đã thiết lập maxSdkVersion trong tệp kê khai của ứng dụng. Đối với thiết bị đã biên soạn bằng maxSdkVersion, Google Play sẽ tôn trọng và sử dụng hàm đó để lọc.

Bạn không nên khai báo maxSdkVersion. Để biết chi tiết, hãy xem android:maxSdkVersion.

Bộ lọc tệp kê khai nâng cao

Ngoài phần tử tệp kê khai trong bảng 1, Google Play cũng có thể lọc các ứng dụng dựa trên phần tử tệp kê khai nâng cao trong bảng 2.

Các phần tử tệp kê khai này và bộ lọc mà chúng kích hoạt chỉ dành cho trường hợp sử dụng ngoại lệ. Các ứng dụng này được thiết kế dành cho một số loại trò chơi đòi hỏi hiệu suất cao và các ứng dụng tương tự có yêu cầu nghiêm ngặt về các tuỳ chọn kiểm soát việc phân phối ứng dụng. Hầu hết ứng dụng không bao giờ sử dụng các bộ lọc này.

Bảng 2. Các phần tử tệp kê khai nâng cao cho bộ lọc Google Play.

Phần tử tệp kê khaiTóm tắt
<compatible-screens>

Google Play sẽ lọc ứng dụng nếu kích thước và mật độ màn hình của thiết bị không khớp với bất kỳ cấu hình màn hình nào (do phần tử <screen> khai báo) trong phần tử <compatible-screens>.

Cảnh báo: Thông thường, bạn không nên sử dụng phần tử tệp kê khai này. Việc sử dụng phần tử này có thể làm giảm đáng kể cơ sở người dùng tiềm năng cho ứng dụng vì loại trừ tất cả tổ hợp kích thước và mật độ màn hình mà bạn chưa liệt kê. Bạn nên sử dụng phần tử tệp kê khai <supports-screens> (được mô tả ở trên trong bảng 1) để bật chế độ tương thích màn hình cho cấu hình màn hình mà bạn chưa tính đến bằng các tài nguyên thay thế.

<supports-gl-texture>

Google Play lọc ứng dụng trừ khi một hoặc nhiều định dạng nén cấu trúc GL được cả ứng dụng và thiết bị hỗ trợ.

Các bộ lọc khác

Google Play sử dụng các đặc điểm khác của ứng dụng để xác định xem nên hiển thị hay ẩn ứng dụng cho một người dùng cụ thể trên một thiết bị nhất định như được mô tả trong bảng dưới đây.

Bảng 3. Ứng dụng và các đặc điểm phát hành ảnh hưởng tới việc lọc trên Google Play.

Tên bộ lọc Cách thức hoạt động
Trạng thái phát hành

Chỉ các ứng dụng đã phát hành mới xuất hiện trong nội dung tìm kiếm và nội dung duyệt trong Google Play.

Ngay cả khi chưa được phát hành, ứng dụng có thể được cài đặt nếu người dùng có thể thấy ứng dụng đó trong khu vực Downloads (Tệp đã tải xuống) cùng với ứng dụng đã mua, hoặc ứng dụng mới được gỡ cài đặt gần đây.

Nếu một ứng dụng bị tạm ngưng, người dùng sẽ không thể cài đặt lại hoặc cập nhật ứng dụng, ngay cả khi ứng dụng đó xuất hiện trong phần Downloads (Tệp đã tải xuống).

Trạng thái giá

Không phải tất cả người dùng đều có thể thấy ứng dụng có tính phí. Để hiển thị ứng dụng có tính phí, thiết bị phải chạy Android 1.1 trở lên và thiết bị đó phải ở quốc gia có cung cấp ứng dụng có tính phí. Nếu thiết bị có thẻ SIM, nhà mạng sẽ xác định xem ứng dụng có tính phí có sẵn hay không. Nếu thiết bị không có thẻ SIM, thì địa chỉ IP của thiết bị sẽ được dùng để xác định xem thiết bị có ở quốc gia cung cấp ứng dụng có tính phí hay không.

Nhắm mục tiêu theo quốc gia

Khi tải ứng dụng lên Google Play, bạn có thể chọn các quốc gia nơi sẽ phân phối ứng dụng trong phần Pricing and Distribution (Giá cả và phân phối). Sau đó, ứng dụng này sẽ chỉ được cung cấp cho người dùng ở những quốc gia bạn chọn.

Kiến trúc CPU (ABI)

Một ứng dụng bao gồm các thư viện gốc nhắm mục tiêu một cấu trúc CPU cụ thể (ví dụ: ARM EABI v7 hoặc x86) chỉ xuất hiện trên các thiết bị hỗ trợ cấu trúc đó. Để biết thông tin chi tiết về NDK và sử dụng thư viện gốc, hãy xem phần Android NDK là gì?

Ứng dụng được bảo vệ bản quyền

Google Play không còn hỗ trợ tính năng Bảo vệ bản quyền trong Play Console và không còn lọc các ứng dụng dựa trên tính năng này. Thay vào đó để bảo mật ứng dụng, vui lòng sử dụng Cấp phép ứng dụng. Hãy xem phần Tính năng thay thế để bảo vệ bản quyền để biết thêm thông tin.

Phát hành nhiều APK với các bộ lọc khác nhau

Một số bộ lọc cụ thể của Google Play cho phép bạn phát hành nhiều APK cho cùng một ứng dụng để cung cấp APK khác nhau cho các cấu hình thiết bị khác nhau. Ví dụ: nếu bạn đang tạo một trò chơi điện tử sử dụng các thành phần đồ hoạ có độ trung thực cao, bạn có thể muốn tạo 2 APK để mỗi APK hỗ trợ các định dạng nén hoạ tiết khác nhau. Bằng cách này, bạn có thể giảm kích thước của tệp APK bằng cách chỉ bao gồm các hoạ tiết bắt buộc cho mỗi cấu hình của thiết bị. Tuỳ thuộc vào khả năng hỗ trợ của từng thiết bị cho các định dạng nén hoạ tiết của bạn, Google Play sẽ phân phối APK mà bạn đã khai báo để hỗ trợ thiết bị đó.

Hiện tại, Google Play chỉ cho phép bạn phát hành nhiều APK cho cùng một ứng dụng khi mỗi APK cung cấp bộ lọc khác nhau dựa trên cấu hình sau:

  • Định dạng nén hoạ tiết OpenGL

    Bằng cách sử dụng phần tử <supports-gl-texture>.

  • Kích thước màn hình (và theo tuỳ chọn, mật độ màn hình)

    Bằng cách sử dụng phần tử <supports-screens> hoặc <compatible-screens>.

  • Cấp độ API

    Bằng cách sử dụng phần tử <uses-sdk>.

  • Kiến trúc CPU (ABI)

    Bằng cách đưa vào các thư viện gốc được xây dựng bằng Android NDK nhắm mục tiêu là một cấu trúc CPU cụ thể (ví dụ: ARM EABI v7 hoặc x86).

Tất cả bộ lọc khác vẫn hoạt động như bình thường, nhưng bốn bộ lọc này là các bộ lọc duy nhất có thể phân biệt một APK với một APK khác trong cùng trang thông tin ứng dụng trên Google Play. Ví dụ: bạn không thể phát hành nhiều APK cho cùng một ứng dụng nếu các APK này chỉ phân biệt với nhau dựa trên việc thiết bị có máy ảnh hay không.

Cảnh báo: Việc phát hành nhiều APK cho cùng một ứng dụng được coi là một tính năng nâng cao và hầu hết ứng dụng chỉ nên phát hành một APK để hỗ trợ cho nhiều cấu hình thiết bị. Việc phát hành nhiều APK yêu cầu bạn phải tuân thủ các quy tắc cụ thể trong bộ lọc và bạn nên chú ý hơn đến mã phiên bản cho từng APK để đảm bảo rằng các đường dẫn cập nhật phù hợp cho từng cấu hình.

Nếu bạn cần thêm thông tin về cách phát hành nhiều APK trên Google Play, hãy đọc phần Hỗ trợ nhiều APK.

Xem thêm

  1. Khả năng tương thích với Android
  2. Hỗ trợ nhiều APK