Google Play sử dụng các phần tử <uses-feature> đã khai báo trong tệp kê khai ứng dụng để lọc ứng dụng khỏi các thiết bị không đáp ứng yêu cầu về tính năng phần cứng và phần mềm của ứng dụng.

Bằng cách chỉ định các tính năng mà ứng dụng yêu cầu, bạn cho phép Google Play chỉ hiển thị ứng dụng với những người dùng có thiết bị đáp ứng các yêu cầu về tính năng của ứng dụng đó, thay vì hiển thị ứng dụng cho tất cả người dùng.

Để biết thông tin quan trọng về cách Google Play sử dụng các tính năng làm cơ sở cho việc lọc, vui lòng đọc phần Google Play và cơ chế lọc dựa trên tính năng dưới đây.

cú pháp:
<uses-feature
  android:name="string"
  android:required=["true" | "false"]
  android:glEsVersion="integer" />
có trong:
<manifest>
mô tả:
Khai báo một tính năng phần cứng hoặc phần mềm mà ứng dụng sẽ sử dụng.

Mục đích của việc khai báo <uses-feature> là để thông báo cho mọi thực thể bên ngoài về tập hợp tính năng phần cứng và phần mềm mà ứng dụng phụ thuộc vào đó. Phần tử này cung cấp một thuộc tính required cho phép bạn chỉ định liệu có phải ứng dụng cần đến và không thể hoạt động nếu không có tính năng đã khai báo hay không, hoặc có phải ứng dụng muốn có tính năng này nhưng có thể hoạt động mà không cần tính năng đó hay không. Vì việc hỗ trợ tính năng có thể thay đổi tuỳ theo thiết bị Android, nên phần tử <uses-feature> đóng vai trò quan trọng trong việc cho phép ứng dụng mô tả các tính năng phụ thuộc vào thiết bị có trên ứng dụng đó.

Tập hợp các tính năng có sẵn mà ứng dụng khai báo phải tương ứng với tập hợp hằng số tính năng do PackageManager của Android cung cấp. Bạn có thể xem danh sách các hằng số tính năng trong phần Tài liệu tham khảo về tính năng ở cuối tài liệu này.

Bạn phải chỉ định từng tính năng trong một phần tử <uses-feature> riêng. Như vậy, nếu yêu cầu nhiều tính năng, ứng dụng sẽ phải khai báo nhiều phần tử <uses-feature>. Ví dụ: một ứng dụng yêu cầu cả tính năng Bluetooth và máy ảnh trong thiết bị sẽ khai báo hai phần tử sau:

<uses-feature android:name="android.hardware.bluetooth" android:required="true" />
<uses-feature android:name="android.hardware.camera.any" android:required="true" />

Nhìn chung, bạn phải luôn khai báo các phần tử <uses-feature> cho tất cả tính năng mà ứng dụng yêu cầu.

Các phần tử <uses-feature> đã khai báo chỉ mang tính chất cung cấp thông tin, nghĩa là hệ thống Android không tự kiểm tra xem thiết bị có hỗ trợ tính năng trên hay không trước khi cài đặt ứng dụng. Tuy nhiên, các dịch vụ khác (chẳng hạn như Google Play) hoặc các ứng dụng có thể kiểm tra phần khai báo <uses-feature> của ứng dụng trong quá trình xử lý hoặc tương tác với ứng dụng. Vì lý do này, việc khai báo tất cả tính năng (trong danh sách bên dưới) mà ứng dụng sử dụng là rất quan trọng.

Đối với một số tính năng, có thể có một thuộc tính cụ thể cho phép bạn xác định phiên bản của tính năng đó, chẳng hạn như phiên bản của Open GL được sử dụng (khai báo bằng glEsVersion). Các tính năng khác có hoặc không có trên thiết bị (chẳng hạn như máy ảnh) được khai báo bằng thuộc tính name.

Mặc dù phần tử <uses-feature> chỉ được kích hoạt cho các thiết bị chạy API cấp độ 4 trở lên, nhưng bạn nên đưa những phần tử này vào tất cả các ứng dụng, ngay cả khi minSdkVersion từ "3" trở xuống. Các thiết bị đang chạy những phiên bản cũ của nền tảng sẽ bỏ qua phần tử này.

Lưu ý: Khi khai báo một tính năng, hãy nhớ rằng bạn cũng phải yêu cầu quyền truy cập tương ứng. Ví dụ: bạn vẫn phải yêu cầu quyền truy cập CAMERA để ứng dụng có thể truy cập vào API máy ảnh. Khi bạn yêu cầu quyền, ứng dụng sẽ có quyền truy cập vào phần cứng và phần mềm thích hợp. Việc khai báo các tính năng mà ứng dụng sẽ dùng đảm bảo khả năng tương thích với thiết bị phù hợp.

thuộc tính:
android:name
Chỉ định một tính năng phần cứng hoặc phần mềm mà ứng dụng sử dụng dưới dạng chuỗi đặc tả (descriptor string). Các giá trị thuộc tính hợp lệ được liệt kê trong phần Tính năng phần cứngTính năng phần mềm. Các giá trị thuộc tính này phân biệt chữ hoa chữ thường.
android:required
Giá trị Boolean cho biết ứng dụng có yêu cầu tính năng được chỉ định trong android:name hay không.
  • Khi khai báo android:required="true" cho một tính năng, bạn đang chỉ định rằng ứng dụng không thể hoạt động hoặc không được thiết kế để hoạt động nếu thiết bị không có tính năng được chỉ định.
  • Khi khai báo android:required="false" cho một tính năng, điều đó có nghĩa là ứng dụng sẽ ưu tiên sử dụng tính năng này nếu có trên thiết bị, nhưng ứng dụng đó cũng được thiết kế để hoạt động mà không cần tính năng được chỉ định nếu cần thiết.

Giá trị mặc định của android:required nếu không được khai báo là "true".

android:glEsVersion
Phiên bản OpenGL ES mà ứng dụng yêu cầu. Số 16 bit cao hơn đại diện cho số chính và 16 bit thấp hơn đại diện cho số phụ. Ví dụ: để chỉ định OpenGL ES 2.0, bạn sẽ đặt giá trị là "0x00020000" hoặc để chỉ định OpenGL ES 3.2, bạn sẽ đặt giá trị là "0x00030002".

Ứng dụng phải chỉ định nhiều nhất một thuộc tính android:glEsVersion trong tệp kê khai. Nếu ứng dụng chỉ định nhiều thuộc tính thì sẽ sử dụng android:glEsVersion có giá trị (số) cao nhất và bỏ qua các giá trị khác.

Nếu ứng dụng không chỉ định thuộc tính android:glEsVersion, thì mặc định rằng ứng dụng đó chỉ yêu cầu OpenGL ES phiên bản 1.0 được hỗ trợ trên tất cả thiết bị chạy Android.

Ứng dụng có thể giả định rằng nếu một nền tảng hỗ trợ một phiên bản OpenGL ES nhất định, thì ứng dụng đó cũng hỗ trợ tất cả phiên bản OpenGL ES có số thấp hơn. Do đó, một ứng dụng yêu cầu cả OpenGL ES 1.0 và OpenGL ES 2.0 thì phải chỉ định rằng ứng dụng đó yêu cầu OpenGL ES 2.0.

Một ứng dụng có thể hoạt động với bất kỳ phiên bản OpenGL ES nào và chỉ cần chỉ định phiên bản (số) thấp nhất của OpenGL ES mà ứng dụng yêu cầu. (Ứng dụng này có thể kiểm tra trong thời gian chạy xem có phiên bản OpenGL ES cao hơn hay không.)

Để biết thêm thông tin về cách sử dụng OpenGL ES, bao gồm cách kiểm tra phiên bản OpenGL ES được hỗ trợ trong thời gian chạy, hãy xem phần hướng dẫn API OpenGL ES.

ra mắt từ:
API cấp độ 4
xem thêm:

Google Play và cơ chế lọc dựa trên tính năng

Google Play lọc ứng dụng mà người dùng thấy để họ chỉ có thể xem và tải các ứng dụng tương thích với thiết bị của họ xuống. Một trong những cách để lọc ứng dụng là lọc theo khả năng tương thích.

Để xác định khả năng tương thích tính năng của ứng dụng với một thiết bị của người dùng nhất định, Google Play so sánh:

  • Các tính năng mà ứng dụng yêu cầu — một ứng dụng khai báo tính năng trong các phần tử <uses-feature> trong tệp kê khai
    bằng...
  • Các tính năng có sẵn trên thiết bị, bao gồm cả tính năng phần cứng hoặc phần mềm — thiết bị báo cáo các tính năng mà thiết bị hỗ trợ dưới dạng thông tin cơ bản của hệ thống chỉ đọc.

Để so sánh chính xác các tính năng, Trình quản lý gói Android cung cấp một tập hợp hằng số tính năng dùng chung mà cả ứng dụng lẫn thiết bị sử dụng nhằm khai báo các yêu cầu và sự hỗ trợ về tính năng. Bạn có thể xem danh sách các hằng số tính năng có sẵn trong phần Tài liệu tham khảo về tính năng ở cuối tài liệu này và trong tài liệu về lớp PackageManager.

Khi người dùng khởi chạy Google Play, ứng dụng sẽ truy vấn Trình quản lý gói để lấy danh sách tính năng có trên thiết bị bằng cách gọi getSystemAvailableFeatures(). Sau đó, ứng dụng lưu trữ sẽ truyền danh sách tính năng lên cho Google Play khi thiết lập phiên truy cập cho người dùng.

Mỗi lần bạn tải một ứng dụng lên Google Play Console, Google Play sẽ quét tệp kê khai của ứng dụng đó. Google Play sẽ tìm các phần tử <uses-feature> và đánh giá chúng cùng với các phần tử khác chẳng hạn như các phần tử <uses-sdk><uses-permission> trong một số trường hợp. Sau khi thiết lập nhóm tính năng bắt buộc của ứng dụng, Google Play sẽ lưu trữ nội bộ danh sách dưới dạng siêu dữ liệu liên kết với .apk ứng dụng và phiên bản ứng dụng.

Khi người dùng tìm kiếm hoặc duyệt tìm ứng dụng trên ứng dụng Google Play, dịch vụ này sẽ so sánh các tính năng cần thiết của từng ứng dụng với các tính năng có sẵn trên thiết bị của người dùng. Nếu thiết bị có tất cả tính năng bắt buộc của ứng dụng, thì Google Play sẽ cho phép người dùng xem ứng dụng và có thể tải ứng dụng đó xuống. Nếu thiết bị không hỗ trợ một trong bất kỳ tính năng bắt buộc nào, Google Play sẽ lọc ứng dụng đó ra và không hiển thị cũng như cho phép người dùng tải ứng dụng đó xuống.

Vì các tính năng mà bạn khai báo trong phần tử <uses-feature> trực tiếp ảnh hưởng cách Google Play lọc ứng dụng, nên việc hiểu cách Google Play đánh giá tệp kê khai của ứng dụng và thiết lập nhóm tính năng bắt buộc là rất quan trọng. Hãy đọc các phần dưới đây để biết thêm thông tin.

Lọc dựa trên các tính năng khai báo tường minh

Tính năng khai báo tường minh (explicitly declared feature) là tính năng mà ứng dụng khai báo trong phần tử <uses-feature>. Nội dung khai báo tính năng có thể bao gồm thuộc tính android:required=["true" | "false"] (nếu bạn đang biên dịch sang API cấp 5 trở lên) mà cho phép bạn chỉ định liệu ứng dụng có hoàn toàn cần tính năng đó và không thể hoạt động đúng cách nếu không có hay không ("true") hoặc liệu ứng dụng có ưu tiên sử dụng tính năng này hay không nếu có mặc dù được thiết kế để chạy mà không cần có ("false").

Google Play xử lý các tính năng được khai báo tường minh theo cách này:

  • Nếu một tính năng được khai báo tường minh là cần thiết, Google Play sẽ thêm tính năng đó vào danh sách tính năng cần thiết cho ứng dụng. Sau đó, Google Play sẽ lọc ứng dụng khỏi người dùng trên các thiết bị không cung cấp tính năng đó. Ví dụ:
    <uses-feature android:name="android.hardware.camera.any" android:required="true" />
    
  • Nếu một tính năng được khai báo tường minh là không cần thiết, Google Play không thêm tính năng đó vào danh sách các tính năng cần thiết. Vì lý do đó, Google Play sẽ không bao giờ xem xét tính năng không bắt buộc được khai báo tường minh khi lọc ứng dụng. Ngay cả khi thiết bị không cung cấp tính năng đã khai báo, Google Play vẫn sẽ giả định rằng ứng dụng tương thích với thiết bị và sẽ hiển thị ứng dụng đó cho người dùng trừ phi các quy tắc lọc khác được áp dụng. Ví dụ:
    <uses-feature android:name="android.hardware.camera" android:required="false" />
    
  • Nếu một tính năng được khai báo tường minh nhưng không có thuộc tính android:required, thì Google Play sẽ giả định rằng tính năng đó là bắt buộc và thiết lập bộ lọc cho tính năng đó.

Nhìn chung, nếu ứng dụng được thiết kế để chạy trên các phiên bản Android 1.6 trở xuống, thuộc tính android:required sẽ không xuất hiện trong API và Google Play sẽ giả định rằng phải khai báo tất cả <uses-feature>.

Lưu ý: Bằng cách khai báo tường minh một tính năng và bao gồm thuộc tính android:required="false", bạn có thể tắt tất cả cơ chế lọc trên Google Play cho tính năng đã chỉ định.

Lọc dựa trên các tính năng ngầm ẩn

Tính năng ngầm ẩn (implicit) là tính năng mà ứng dụng yêu cầu để hoạt động đúng cách, nhưng không được khai báo trong phần tử <uses-feature> trong tệp kê khai tệp. Nói một cách chính xác, mọi ứng dụng phải luôn khai báo tất cả tính năng mà ứng dụng dùng hoặc cần đến. Vì vậy, việc không khai báo một tính năng mà ứng dụng dùng sẽ được coi là một lỗi. Tuy nhiên, để bảo vệ người dùng và nhà phát triển, Google Play sẽ tìm kiếm các tính năng ngầm ẩn trong mỗi ứng dụng và thiết lập các bộ lọc cho các tính năng đó giống như với một tính năng được khai báo tường minh.

Ứng dụng có thể yêu cầu một tính năng nhưng không khai báo vì:

  • Ứng dụng này được biên dịch dựa trên phiên bản thư viện Android cũ (Android 1.5 trở xuống) và không có phần tử <uses-feature>.
  • Nhà phát triển giả định không chính xác rằng tính năng này sẽ hiển thị trên tất cả thiết bị và việc khai báo là không cần thiết.
  • Nhà phát triển vô tình bỏ qua phần khai báo tính năng.
  • Nhà phát triển đã khai báo tường minh tính năng này, nhưng thông tin khai báo không hợp lệ. Ví dụ: lỗi chính tả trong tên phần tử <uses-feature> hoặc giá trị chuỗi không được công nhận cho thuộc tính android:name dẫn đến kết quả khai báo tính năng không hợp lệ.

Để lý giải cho các trường hợp trên, Google Play cố gắng phát hiện các yêu cầu tính năng ngầm ẩn của ứng dụng bằng cách kiểm tra các phần tử khác được khai báo trong tệp kê khai, cụ thể là các phần tử <uses-permission>.

Nếu một ứng dụng yêu cầu quyền truy cập liên quan đến phần cứng, thì Google Play sẽ giả định rằng ứng dụng dùng các tính năng phần cứng cơ bản nên cần những tính năng đó, mặc dù có thể không có <uses-feature> tương ứng nào được khai báo. Đối với những quyền như vậy, Google Play sẽ thêm các tính năng phần cứng cơ bản vào siêu dữ liệu mà Google Play lưu trữ cho ứng dụng và thiết lập các bộ lọc cho chúng.

Ví dụ: nếu một ứng dụng yêu cầu quyền truy cập vào CAMERA, thì Google Play sẽ cho rằng ứng dụng đó cần máy ảnh sau (quay ra ngoài) ngay cả khi ứng dụng không khai báo phần tử <uses-feature> cho android.hardware.camera. Do vậy, Google Play sẽ lọc các thiết bị không có máy ảnh sau.

Nếu bạn không muốn Google Play lọc dựa trên một tính năng ngầm ẩn cụ thể, hãy khai báo tường minh tính năng đó trong phần tử <uses-feature> và bổ sung thuộc tính android:required="false". Ví dụ: để vô hiệu hoá tính năng lọc mà quyền truy cập CAMERA ngụ ý, hãy khai báo các tính năng sau đây:

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

Thận trọng: Các quyền truy cập mà bạn yêu cầu trong phần tử <uses-permission> có thể ảnh hưởng trực tiếp đến cách Google Play lọc ứng dụng của bạn. Phần tham khảo Các quyền truy cập ngụ ý yêu cầu về tính năng liệt kê toàn bộ quyền truy cập ngụ ý các yêu cầu về tính năng và kích hoạt tính năng lọc.

Cách xử lý đặc biệt cho tính năng Bluetooth

Google Play áp dụng các quy tắc hơi khác so với mô tả ở trên khi xác định bộ lọc cho Bluetooth.

Nếu ứng dụng khai báo quyền truy cập Bluetooth trong phần tử <uses-permission>, nhưng không khai báo tường minh tính năng Bluetooth trong phần tử <uses-feature>, thì Google Play sẽ kiểm tra (các) phiên bản của Nền tảng Android mà ứng dụng được thiết kế để chạy như được chỉ định trong phần tử <uses-sdk>.

Như trong bảng bên dưới, Google Play chỉ lọc tính năng Bluetooth nếu ứng dụng khai báo nền tảng được nhắm mục tiêu hoặc nền tảng thấp nhất là Android 2.0 (API cấp 5) trở lên. Tuy nhiên, hãy lưu ý rằng Google Play áp dụng các quy tắc thông thường để lọc khi ứng dụng này khai báo tường minh tính năng Bluetooth trong một phần tử <uses-feature>.

Bảng 1. Cách Google Play xác định yêu cầu về tính năng Bluetooth cho một ứng dụng yêu cầu quyền truy cập Bluetooth nhưng không khai báo tính năng Bluetooth trong phần tử <uses-feature>.

Nếu minSdkVersion là ... hoặc targetSdkVersion Kết quả
<=4 (hoặc uses-sdk không được khai báo) <=4 Google Play sẽ không lọc ứng dụng khỏi bất kỳ thiết bị nào dựa trên khả năng hỗ trợ tính năng android.hardware.bluetooth.
<=4 >=5 Google Play sẽ lọc ứng dụng khỏi mọi thiết bị không hỗ trợ tính năng android.hardware.bluetooth (bao gồm cả các bản phát hành trước đó).
>=5 >=5

Các ví dụ bên dưới minh hoạ nhiều hiệu ứng lọc, dựa trên cách Google Play xử lý tính năng Bluetooth.

Trong ví dụ đầu tiên, một ứng dụng được thiết kế để chạy ở các cấp API cũ sẽ khai báo quyền truy cập Bluetooth, nhưng không khai báo tính năng Bluetooth trong phần tử <uses-feature>.
Kết quả: Google Play không lọc ứng dụng khỏi bất kỳ thiết bị nào.
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" />
    ...
</manifest>
Trong ví dụ thứ hai, ứng dụng tương tự cũng khai báo cấp API mục tiêu là "5".
Kết quả: Google Play hiện giả định rằng tính năng này là bắt buộc và sẽ lọc ứng dụng từ tất cả thiết bị không hỗ trợ Bluetooth, bao gồm cả các thiết bị chạy phiên bản cũ của nền tảng.
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
Ở đây, ứng dụng tương tự hiện giờ cũng khai báo cụ thể tính năng Bluetooth.
Kết quả: Giống hệt với ví dụ trước (có áp dụng lọc).
<manifest ...>
    <uses-feature android:name="android.hardware.bluetooth" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
Cuối cùng, trong ví dụ dưới đây, ứng dụng đó sẽ thêm thuộc tính android:required="false".
Kết quả: Google Play tắt tính năng lọc dựa trên khả năng hỗ trợ tính năng Bluetooth cho tất cả thiết bị.
<manifest ...>
    <uses-feature android:name="android.hardware.bluetooth" android:required="false" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>

Kiểm thử những tính năng mà ứng dụng cần đến

Bạn có thể sử dụng công cụ aapt (có trong SDK Android) để xác định cách Google Play lọc ứng dụng dựa trên các quyền truy cập và tính năng đã khai báo của ứng dụng. Để làm như vậy, hãy chạy aapt bằng lệnh dump badging. Việc này sẽ khiến aapt phân tích cú pháp tệp kê khai của ứng dụng và áp dụng các quy tắc tương tự như quy tắc mà Google Play sử dụng để xác định các tính năng mà ứng dụng yêu cầu.

Để sử dụng công cụ này, hãy làm theo các bước sau:

  1. Trước tiên, hãy tạo và xuất ứng dụng dưới dạng .apk chưa được ký (unsigned). Nếu bạn dùng Android Studio, hãy tạo ứng dụng bằng Gradle:
    1. Mở dự án và chọn Run (Chạy) > Edit Configurations (Chỉnh sửa cấu hình).
    2. Chọn dấu cộng gần góc trên cùng bên trái của cửa sổ Chạy/Gỡ lỗi cấu hình (Run/Debug Configurations).
    3. Chọn Gradle.
    4. Nhập Unsigned APK trong Name (Tên).
    5. Chọn mô-đun trong phần Gradle project (Dự án Gradle).
    6. Nhập assemble trong Tasks (Nhiệm vụ).
    7. Chọn OK để hoàn tất quá trình định cấu hình mới.
    8. Hãy đảm bảo rằng bạn đã chọn cấu hình chạy APK chưa chứng thực trong thanh công cụ và chọn Run > Run 'Unsigned APK' (Chạy > Chạy "APK chưa ký").
    Bạn có thể tìm thấy .apk chưa ký trong thư mục <ProjectName>/app/build/outputs/apk/.
  2. Tiếp theo, hãy tìm công cụ aapt, nếu công cụ này chưa có trong PATH. Nếu đang sử dụng Bộ công cụ SDK (SDK Tools) r8 trở lên, bạn có thể tìm thấy aapt trong thư mục <SDK>/build-tools/<tools version number>.

    Lưu ý: Bạn phải sử dụng phiên bản aapt được cung cấp cho thành phần Build-Tools mới nhất hiện có. Nếu bạn không có thành phần Build-Tools mới nhất, hãy tải xuống bằng Android SDK Manager (Trình quản lý SDK của Android).

  3. Chạy aapt bằng cú pháp sau:
$ aapt dump badging <path_to_exported_.apk>

Sau đây là ví dụ minh hoạ kết quả thu được từ lệnh đối với ví dụ thứ hai về Bluetooth ở trên:

$ ./aapt dump badging BTExample.apk
package: name='com.example.android.btexample' versionCode='' versionName=''
uses-permission:'android.permission.BLUETOOTH_ADMIN'
uses-feature:'android.hardware.bluetooth'
sdkVersion:'3'
targetSdkVersion:'5'
application: label='BT Example' icon='res/drawable/app_bt_ex.png'
launchable activity name='com.example.android.btexample.MyActivity'label='' icon=''
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'small' 'normal' 'large'
locales: '--_--'
densities: '160'

Tài liệu tham khảo về tính năng

Những phần sau cung cấp thông tin tham khảo về các tính năng phần cứng, tính năng phần mềm và tập hợp quyền truy cập ngụ ý yêu cầu cụ thể về tính năng.

Tính năng phần cứng

Phần này giới thiệu các tính năng phần cứng được bản phát hành mới nhất trên nền tảng hỗ trợ. Để chỉ báo rằng ứng dụng sử dụng hoặc cần một tính năng phần cứng, hãy khai báo giá trị tương ứng (bắt đầu bằng "android.hardware") trong thuộc tính android:name. Mỗi lần bạn khai báo một tính năng phần cứng, hãy sử dụng một phần tử <uses-feature> riêng biệt.

Tính năng phần cứng âm thanh

android.hardware.audio.low_latency
Ứng dụng sử dụng quy trình âm thanh có độ trễ thấp của thiết bị để giảm độ trễ khi xử lý tín hiệu âm thanh đầu vào hoặc đầu ra.
android.hardware.audio.output
Ứng dụng truyền âm thanh bằng loa, giắc cắm âm thanh, chức năng phát trực tuyến qua Bluetooth hoặc một cơ chế tương tự.
android.hardware.audio.pro
Ứng dụng sử dụng chức năng âm thanh và khả năng phát âm thanh Hi-end.
android.hardware.microphone
Ứng dụng ghi âm bằng micrô của thiết bị.

Tính năng phần cứng Bluetooth

android.hardware.bluetooth
Ứng dụng sử dụng các tính năng Bluetooth của thiết bị, thường để kết nối với thiết bị khác có hỗ trợ Bluetooth.
android.hardware.bluetooth_le
Ứng dụng dùng tính năng phát thanh qua Bluetooth năng lượng thấp của thiết bị.

Tính năng phần cứng máy ảnh

Lưu ý: Để Google Play chỉ lọc ứng dụng của bạn khi cần thiết, hãy thêm android:required="false" vào bất kỳ tính năng máy ảnh nào không ảnh hưởng đến khả năng hoạt động của ứng dụng. Nếu không, Google Play sẽ giả định rằng tính năng mang tính bắt buộc và ngăn những thiết bị không hỗ trợ tính năng đó truy cập vào ứng dụng.

Sự hỗ trợ của thiết bị có màn hình lớn

Một số thiết bị có màn hình lớn không hỗ trợ tất cả tính năng máy ảnh. Chromebook thường không có máy ảnh sau (quay ra ngoài), tính năng tự động lấy nét hoặc đèn flash. Tuy nhiên, Chromebook có máy ảnh trước (quay về phía người dùng) và thường kết nối với các máy ảnh ngoài.

Để hỗ trợ máy ảnh ở mức cơ bản và phân phối ứng dụng của bạn cho nhiều thiết bị nhất có thể, hãy thêm các chế độ cài đặt sau đây về tính năng máy ảnh vào tệp kê khai ứng dụng:

<uses-feature android:name="android.hardware.camera.any" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />

Điều chỉnh chế độ cài đặt tính năng để hỗ trợ các trường hợp sử dụng của ứng dụng. Tuy nhiên, để phân phối ứng dụng của bạn cho nhiều thiết bị nhất, hãy luôn thêm thuộc tính required nhằm chỉ định tường minh xem một tính năng có phải là bắt buộc hay không.

Danh sách tính năng
android.hardware.camera.any

Ứng dụng dùng một trong các máy ảnh của thiết bị hoặc máy ảnh bên ngoài kết nối với thiết bị. Hãy dùng tính năng này thay cho android.hardware.camera hoặc android.hardware.camera.front nếu ứng dụng của bạn không yêu cầu máy ảnh phải là máy ảnh sau (quay ra ngoài) hoặc máy ảnh trước (quay về phía người dùng) một cách tương ứng.

Quyền truy cập CAMERA ngụ ý rằng ứng dụng của bạn cũng dùng android.hardware.camera. Máy ảnh sau là một tính năng bắt buộc, trừ phi android.hardware.camera được khai báo bằng android:required="false".

android.hardware.camera

Ứng dụng dùng máy ảnh sau (quay ra ngoài) của thiết bị.

Thận trọng: Các thiết bị như Chromebook chỉ có máy ảnh trước (quay về phía người dùng) không hỗ trợ tính năng này. Hãy dùng android.hardware.camera.any nếu ứng dụng của bạn có thể dùng một máy ảnh bất kỳ (máy ảnh trước hay máy ảnh sau).

Lưu ý: Quyền truy cập CAMERA ngụ ý rằng máy ảnh sau là một tính năng bắt buộc. Để lọc đúng cách trên Google Play khi tệp kê khai ứng dụng bổ sung quyền truy cậpCAMERA, hãy chỉ định một cách tường minh rằng ứng dụng của bạn dùng tính năng camera và cho biết đó là tính năng bắt buộc, chẳng hạn như:
<uses-feature android:name="android.hardware.camera" android:required="false" />

android.hardware.camera.front

Ứng dụng dùng máy ảnh trước của thiết bị (quay về phía người dùng).

Quyền truy cập CAMERA ngụ ý rằng ứng dụng của bạn cũng dùng android.hardware.camera. Máy ảnh sau là một tính năng bắt buộc, trừ phi android.hardware.camera được khai báo bằng android:required="false".

Thận trọng: Nếu ứng dụng của bạn dùng android.hardware.camera.front nhưng không khai báo tường minh android.hardware.camera bằng android.required="false", thì thiết bị không có máy ảnh sau (chẳng hạn như Chromebook) sẽ bị Google Play lọc ra. Nếu ứng dụng của bạn chỉ hỗ trợ máy ảnh trước, hãy khai báo android.hardware.camera cùng với android.required="false" để tránh trường hợp lọc không cần thiết.

android.hardware.camera.external

Ứng dụng sẽ giao tiếp với máy ảnh bên ngoài mà người dùng kết nối với thiết bị. Tính năng này không đảm bảo rằng ứng dụng của bạn sẽ sử dụng được máy ảnh bên ngoài.

Quyền truy cập CAMERA ngụ ý rằng ứng dụng của bạn cũng dùng android.hardware.camera. Máy ảnh sau là một tính năng bắt buộc, trừ phi android.hardware.camera được khai báo bằng android:required="false".

android.hardware.camera.autofocus

Ứng dụng dùng tính năng tự động lấy nét mà máy ảnh của thiết bị hỗ trợ.

Lưu ý: Quyền truy cập CAMERA ngụ ý rằng tự động lấy nét là một tính năng bắt buộc. Để lọc đúng cách trên Google Play khi tệp kê khai ứng dụng bổ sung quyền truy cập CAMERA, hãy chỉ định một cách tường minh rằng ứng dụng của bạn dùng tính năng tự động lấy nét và cho biết đó có phải là tính năng bắt buộc hay không, chẳng hạn như:
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

android.hardware.camera.flash

Ứng dụng dùng tính năng flash mà máy ảnh của thiết bị hỗ trợ.

android.hardware.camera.capability.manual_post_processing

Ứng dụng dùng tính năng MANUAL_POST_PROCESSING mà máy ảnh của thiết bị hỗ trợ.

Tính năng này cho phép ứng dụng ghi đè chức năng tự động cân bằng trắng của máy ảnh. Hãy sử dụng android.colorCorrection.transform, android.colorCorrection.gainsandroid.colorCorrection.mode của TRANSFORM_MATRIX.

android.hardware.camera.capability.manual_sensor

Ứng dụng dùng tính năng MANUAL_SENSOR mà máy ảnh của thiết bị hỗ trợ.

Tính năng này ngụ ý việc hỗ trợ tính năng khoá phơi sáng tự động (android.control.aeLock), cho phép máy ảnh duy trì thời gian phơi sáng và độ sáng ở mức nhất định.

android.hardware.camera.capability.raw

Ứng dụng dùng tính năng RAW mà máy ảnh của thiết bị hỗ trợ.

Tính năng này ngụ ý việc thiết bị có thể lưu các tệp DNG (thô). Máy ảnh của thiết bị cung cấp siêu dữ liệu liên quan đến DNG cần thiết để ứng dụng trực tiếp xử lý những hình ảnh thô này.

android.hardware.camera.level.full
Ứng dụng dùng cấp độ hỗ trợ chụp ảnh FULL mà tối thiểu một trong các máy ảnh của thiết bị cung cấp. Cấp độ hỗ trợ chụp ảnh FULL cho phép chụp liên tục, kiểm soát theo từng khung hình và kiểm soát thủ công trong công đoạn chỉnh sửa. Hãy xem phần INFO_SUPPORTED_HARDWARE_LEVEL_FULL.

Tính năng phần cứng cho giao diện người dùng của thiết bị

android.hardware.type.automotive

Ứng dụng được thiết kế để hiển thị giao diện người dùng trên một nhóm màn hình trong xe. Người dùng tương tác với ứng dụng bằng các nút cứng, chạm, bộ điều khiển xoay và giao diện tương tác như dùng chuột. Màn hình trong xe thường xuất hiện tại bảng điều khiển trung tâm hoặc cụm công cụ của xe. Các màn hình này thường có kích thước và độ phân giải hạn chế.

Lưu ý: Vì người dùng lái xe trong khi sử dụng loại giao diện người dùng này, nên ứng dụng phải hạn chế tối đa việc làm ảnh hưởng đến sự tập trung của họ.

android.hardware.type.television

(Không dùng nữa; chuyển sang dùng android.software.leanback.)

Ứng dụng được thiết kế để hiển thị giao diện người dùng trên TV. Tính năng này mặc định rằng việc xem "truyền hình" diễn ra trong phòng khách thông thường: hiển thị trên màn hình lớn, người dùng ngồi ở xa và hình thức truyền tín hiệu đầu vào chính là thông qua thiết bị như d-pad và thường không sử dụng chuột, con trỏ hoặc thiết bị cảm ứng.

android.hardware.type.watch
Ứng dụng được thiết kế để hiển thị giao diện người dùng trên đồng hồ. Đồng hồ đeo trên cơ thể, chẳng hạn như trên cổ tay. Người dùng ở rất gần thiết bị trong khi tương tác với thiết bị.

Tính năng phần cứng xử lý vân tay

android.hardware.fingerprint
Ứng dụng đọc vân tay bằng phần cứng sinh trắc học của thiết bị.

Tính năng phần cứng tay điều khiển trò chơi

android.hardware.gamepad
Ứng dụng sẽ lấy tín hiệu đầu vào của bộ điều khiển trò chơi, từ chính thiết bị đó hoặc từ một tay điều khiển trò chơi đã kết nối khác.

Tính năng phần cứng hồng ngoại

android.hardware.consumerir
Ứng dụng sử dụng chức năng hồng ngoại (IR) của thiết bị, thường để giao tiếp với các thiết bị điện tử tiêu dùng hồng ngoại khác.

Tính năng phần cứng xác định vị trí

android.hardware.location
Ứng dụng sử dụng một hoặc nhiều tính năng trên thiết bị để xác định vị trí, chẳng hạn như vị trí GPS, vị trí mạng hoặc vị trí điện thoại.
android.hardware.location.gps

Ứng dụng sử dụng các toạ độ vị trí chính xác lấy từ bộ thu Hệ thống định vị toàn cầu (GPS) trên thiết bị.

Khi sử dụng tính năng này, ứng dụng sẽ cho biết rằng nó cũng sử dụng tính năng android.hardware.location, trừ phi tính năng mẹ này được khai báo bằng thuộc tính android:required="false".

android.hardware.location.network

Ứng dụng sử dụng các toạ độ vị trí thô lấy từ hệ thống vị trí định vị vị trí dựa trên mạng mà thiết bị hỗ trợ.

Khi sử dụng tính năng này, ứng dụng sẽ cho biết rằng nó cũng sử dụng tính năng android.hardware.location, trừ phi tính năng mẹ này được khai báo bằng thuộc tính android:required="false".

Tính năng phần cứng NFC

android.hardware.nfc
Ứng dụng sử dụng tính năng Giao tiếp phạm vi gần (NFC) trên thiết bị.
android.hardware.nfc.hce

Ứng dụng sử dụng quy trình mô phỏng thẻ NFC được lưu trữ trên thiết bị.

Tính năng phần cứng OpenGL ES

android.hardware.opengles.aep
Ứng dụng sử dụng Gói tiện ích Android OpenGL ES đã được cài đặt trên thiết bị.

Tính năng phần cứng cảm biến

android.hardware.sensor.accelerometer
Ứng dụng sử dụng tính năng đọc chuyển động của gia tốc kế trên thiết bị để phát hiện hướng hiện tại của thiết bị. Ví dụ: ứng dụng có thể sử dụng kết quả đọc của gia tốc kế để xác định thời điểm chuyển đổi giữa hướng dọc và ngang.
android.hardware.sensor.ambient_temperature
Ứng dụng sử dụng cảm biến nhiệt độ môi trường. Ví dụ: ứng dụng thời tiết có thể đo nhiệt độ trong nhà hoặc ngoài trời.
android.hardware.sensor.barometer
Ứng dụng sử dụng áp kế của thiết bị. Ví dụ: ứng dụng thời tiết có thể đo áp suất không khí.
android.hardware.sensor.compass
Ứng dụng sử dụng từ kế (la bàn) của thiết bị. Ví dụ: ứng dụng chỉ đường có thể hiển thị phương hướng hiện tại của người dùng.
android.hardware.sensor.gyroscope
Ứng dụng sử dụng con quay hồi chuyển của thiết bị để phát hiện thao tác xoay và xoắn, cho phép tạo ra một hệ thống phương hướng sáu trục. Khi sử dụng cảm biến này, ứng dụng có thể xác định thuận tiên hơn liệu có cần chuyển đổi giữa hướng dọc và ngang hay không.
android.hardware.sensor.hifi_sensors
Ứng dụng sử dụng cảm biến có độ chân thực cao (Hi-Fi) trên thiết bị. Ví dụ: ứng dụng trò chơi có thể phát hiện chuyển động có độ chính xác cao của người dùng.
android.hardware.sensor.heartrate
Ứng dụng sử dụng thiết bị đo nhịp tim. Ví dụ: ứng dụng thể dục có thể đo lường và báo cáo diễn biến nhịp tim của người dùng theo thời gian.
android.hardware.sensor.heartrate.ecg
Ứng dụng sử dụng cảm biến nhịp tim điện tâm đồ (ECG) trên thiết bị. Ví dụ: ứng dụng thể dục có thể đưa ra thông tin chi tiết hơn về nhịp tim của người dùng.
android.hardware.sensor.light
Ứng dụng sử dụng cảm biến ánh sáng của thiết bị. Ví dụ: ứng dụng có thể hiển thị một trong hai bảng phối màu khác nhau dựa trên điều kiện ánh sáng xung quanh.
android.hardware.sensor.proximity
Ứng dụng sử dụng cảm biến độ gần trên thiết bị. Ví dụ: ứng dụng điện thoại có thể tắt màn hình của thiết bị khi ứng dụng đó phát hiện người dùng đưa thiết bị lại gần cơ thể họ.
android.hardware.sensor.relative_humidity
Ứng dụng sử dụng cảm biến đo độ ẩm tương đối của thiết bị. Ví dụ: ứng dụng thời tiết có thể sử dụng độ ẩm để tính toán và báo cáo nhiệt độ điểm sương hiện tại.
android.hardware.sensor.stepcounter
Ứng dụng sử dụng bộ đếm bước của thiết bị. Ví dụ: ứng dụng thể dục có thể báo cáo số bước mà người dùng cần thực hiện để đạt được mục tiêu về số bước hằng ngày.
android.hardware.sensor.stepdetector
Ứng dụng sử dụng trình phát hiện bước chân. Ví dụ: ứng dụng thể dục có thể sử dụng khoảng thời gian giữa các bước chân để dự đoán loại bài tập thể dục mà người dùng đang tập.

Tính năng phần cứng màn hình

android.hardware.screen.landscape
android.hardware.screen.portrait

Ứng dụng yêu cầu thiết bị sử dụng hướng dọc hoặc ngang. Nếu ứng dụng hỗ trợ cả hai hướng, thì bạn không cần phải khai báo cả hai tính năng.

Ví dụ: nếu ứng dụng yêu cầu hướng dọc, bạn khai báo tính năng sau để chỉ những thiết bị hỗ trợ hướng dọc (luôn hỗ trợ hoặc theo lựa chọn của người dùng) mới có thể chạy ứng dụng:

<uses-feature android:name="android.hardware.screen.portrait" />

Theo mặc định, cả hai hướng đều được giả định là không bắt buộc. Do đó, bạn có thể cài đặt ứng dụng của mình trên các thiết bị hỗ trợ một hoặc cả hai hướng. Tuy nhiên, nếu một trong bất kỳ yêu cầu hoạt động nào chạy bằng một hướng cụ thể thông qua thuộc tính android:screenOrientation, thì phần khai báo này sẽ cho biết rằng ứng dụng yêu cầu hướng đó. Ví dụ: nếu bạn khai báo android:screenOrientation với "landscape", "reverseLandscape" hoặc "sensorLandscape" thì ứng dụng sẽ chỉ có thể sử dụng trên thiết bị hỗ trợ hướng ngang.

Tốt nhất là bạn vẫn nên khai báo yêu cầu về hướng này bằng phần tử <uses-feature>. Nếu bạn khai báo hướng cho hoạt động của mình bằng android:screenOrientation, nhưng không thực sự yêu cầu hướng đó, thì bạn có thể tắt yêu cầu bằng cách khai báo hướng thông qua phần tử <uses-feature> và bao gồm android:required="false".

Để tương thích ngược, mọi thiết bị chạy Android 3.1 (API cấp 12) trở xuống đều hỗ trợ cả hướng ngang và dọc.

Tính năng phần cứng điện thoại

android.hardware.telephony
Ứng dụng sử dụng các tính năng điện thoại của thiết bị, chẳng hạn như radio điện thoại kèm theo dịch vụ giao tiếp dữ liệu.
android.hardware.telephony.cdma

Ứng dụng sử dụng hệ thống vô tuyến điện thoại Đa truy cập phân chia theo mã (CDMA).

Khi sử dụng tính năng này, ứng dụng sẽ cho biết rằng nó cũng sử dụng tính năng android.hardware.telephony, trừ phi tính năng mẹ này được khai báo bằng android:required="false".

android.hardware.telephony.gsm

Ứng dụng sử dụng hệ thống vô tuyến điện thoại thông tin di động toàn cầu (GSM).

Khi sử dụng tính năng này, ứng dụng sẽ cho biết rằng nó cũng sử dụng tính năng android.hardware.telephony, trừ phi tính năng mẹ này được khai báo bằng android:required="false".

Tính năng phần cứng màn hình cảm ứng

android.hardware.faketouch

Ứng dụng sử dụng các sự kiện tương tác chạm cơ bản, chẳng hạn như nhấn và kéo.

Khi khai báo theo yêu cầu, tính năng này cho biết ứng dụng chỉ tương thích với một thiết bị khi thiết bị đó mô phỏng màn hình cảm ứng (giao diện cảm ứng giả) hoặc có màn hình cảm ứng thực tế.

Thiết bị có giao diện cảm ứng giả sẽ cung cấp hệ thống hoạt động đầu vào của người dùng mà mô phỏng một số tính năng của màn hình cảm ứng. Ví dụ: con chuột hoặc điều khiển từ xa có thể di chuyển một con trỏ trên màn hình. Nếu ứng dụng yêu cầu tương tác trỏ và nhấp cơ bản (nói cách khác, ứng dụng sẽ không hoạt động chỉ với bộ điều khiển d-pad) thì bạn nên khai báo tính năng này. Vì đây là mức tương tác chạm tối thiểu nên bạn cũng có thể dùng một ứng dụng mà khai báo tính năng này trên các thiết bị có giao diện cảm ứng phức tạp hơn.

Lưu ý: Theo mặc định, các ứng dụng yêu cầu phải có tính năng android.hardware.faketouch. Nếu muốn ứng dụng của mình chỉ có thể được dùng trên các thiết bị có màn hình cảm ứng, bạn phải khai báo tường minh rằng màn hình cảm ứng là bắt buộc để sử dụng ứng dụng như sau:

<uses-feature android:name="android.hardware.touchscreen"
    android:required="true" />

Tất cả ứng dụng không đưa ra yêu cầu rõ ràng rằng cần android.hardware.touchscreen cũng sẽ hoạt động trên các thiết bị có android.hardware.faketouch.

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
android.hardware.faketouch.multitouch.distinct

Ứng dụng theo dõi hai hoặc nhiều "ngón tay" riêng biệt trên giao diện cảm ứng giả. Đây là siêu tập hợp của tính năng android.hardware.faketouch. Khi khai báo theo yêu cầu, tính năng này cho biết ứng dụng chỉ tương thích với một thiết bị nếu thiết bị đó mô phỏng hoạt động theo dõi riêng biệt cử chỉ của hai ngón tay trở lên hoặc có màn hình cảm ứng thực tế.

Không giống như tính năng cảm ứng đa điểm khác biệt do android.hardware.touchscreen.multitouch.distinct xác định, các thiết bị đầu vào hỗ trợ tính năng cảm ứng đa điểm riêng biệt có giao diện cảm ứng giả không hỗ trợ tất cả cử chỉ dùng 2 ngón tay vì tín hiệu đầu vào đã được chuyển đổi thành chuyển động của con trỏ trên màn hình. Điều đó nghĩa là các cử chỉ một ngón tay trên thiết bị di chuyển con trỏ, thao tác vuốt bằng 2 ngón tay sẽ kích hoạt các sự kiện chạm bằng một ngón tay và các cử chỉ dùng 2 ngón tay khác kích hoạt sự kiện chạm bằng 2 ngón tay tương ứng.

Thiết bị cung cấp bàn di chuột cảm ứng 2 ngón tay để di chuyển con trỏ có thể hỗ trợ tính năng này.

android.hardware.faketouch.multitouch.jazzhand

Ứng dụng theo dõi năm hoặc nhiều "ngón tay" riêng biệt trên giao diện cảm ứng giả. Đây là siêu tập hợp của tính năng android.hardware.faketouch. Khi khai báo theo yêu cầu, tính năng này cho biết ứng dụng chỉ tương thích với một thiết bị nếu thiết bị đó mô phỏng hoạt động theo dõi riêng biệt cử chỉ từ 5 ngón tay trở lên hoặc có màn hình cảm ứng thực tế.

Không giống như tính năng cảm ứng đa điểm riêng biệt do android.hardware.touchscreen.multitouch.jazzhand xác định, các thiết bị đầu vào hỗ trợ cảm ứng đa điểm jazzhand có giao diện cảm ứng giả không hỗ trợ hết tất cả cử chỉ dùng 5 ngón tay vì tín hiệu đầu vào đã được chuyển đổi thành chuyển động của con trỏ trên màn hình. Điều đó có nghĩa là các cử chỉ dùng một ngón tay trên thiết bị di chuyển con trỏ, các cử chỉ dùng nhiều ngón tay kích hoạt các sự kiện chạm một ngón tay và các cử chỉ dùng nhiều ngón tay khác kích hoạt sự kiện chạm bằng nhiều ngón tay tương ứng.

Thiết bị cung cấp bàn di chuột cảm ứng 5 ngón tay để di chuyển con trỏ có thể hỗ trợ tính năng này.

android.hardware.touchscreen

Ứng dụng sử dụng các tính năng màn hình cảm ứng cho các cử chỉ mang tính tương tác nhiều hơn so với các sự kiện chạm cơ bản, chẳng hạn như cử chỉ hất. Đây là siêu tập hợp của tính năng android.hardware.faketouch.

Theo mặc định, ứng dụng sẽ yêu cầu tính năng này. Do đó, ứng dụng sẽ không được sử dụng trên các thiết bị chỉ cung cấp giao diện cảm ứng mô phỏng ("cảm ứng giả") theo mặc định. Nếu muốn cung cấp ứng dụng trên các thiết bị có giao diện cảm ứng giả (hoặc thậm chí trên các thiết bị chỉ có bộ điều khiển d-pad), bạn phải khai báo tường minh rằng màn hình cảm ứng là không bắt buộc bằng cách khai báo android.hardware.touchscreen với android:required="false". Bạn nên thêm phần khai báo này nếu ứng dụng sử dụng nhưng không yêu cầu giao diện màn hình cảm ứng thực. Tất cả ứng dụng không yêu cầu android.hardware.touchscreen một cách tường minh cũng sẽ hoạt động trên các thiết bị có android.hardware.faketouch.

Nếu ứng dụng thực sự yêu cầu giao diện cảm ứng (để thực hiện các thao tác chạm nâng cao hơn, chẳng hạn như hất), thì bạn không cần phải khai báo bất kỳ tính năng giao diện cảm ứng nào vì chúng được yêu cầu theo mặc định. Tuy nhiên, tốt nhất là bạn nên khai báo tường minh tất cả tính năng mà ứng dụng sử dụng.

Nếu yêu cầu thao tác chạm phức tạp hơn, chẳng hạn như các cử chỉ nhiều ngón tay, thì bạn nên khai báo rằng ứng dụng sử dụng các tính năng cảm ứng nâng cao.

android.hardware.touchscreen.multitouch

Ứng dụng sử dụng các tính năng cảm ứng 2 điểm cơ bản của thiết bị, chẳng hạn như cử chỉ chụm, nhưng ứng dụng không cần theo dõi các thao tác chạm một cách độc lập. Đây là siêu tập hợp của tính năng android.hardware.touchscreen.

Khi sử dụng tính năng này, ứng dụng sẽ cho biết rằng nó cũng sử dụng tính năng android.hardware.touchscreen, trừ phi tính năng mẹ này được khai báo bằng android:required="false".

android.hardware.touchscreen.multitouch.distinct

Ứng dụng sử dụng các tính năng cảm ứng đa điểm nâng cao của thiết bị để theo dõi hai hoặc nhiều điểm độc lập. Tính năng này là siêu tập hợp của tính năng android.hardware.touchscreen.multitouch.

Khi sử dụng tính năng này, ứng dụng sẽ cho biết rằng nó cũng sử dụng tính năng android.hardware.touchscreen.multitouch, trừ phi tính năng mẹ này được khai báo bằng android:required="false".

android.hardware.touchscreen.multitouch.jazzhand

Ứng dụng sử dụng tính năng cảm ứng đa điểm nâng cao của thiết bị để theo dõi 5 điểm trở lên một cách độc lập. Tính năng này là siêu tập hợp của tính năng android.hardware.touchscreen.multitouch.

Khi sử dụng tính năng này, ứng dụng sẽ cho biết rằng nó cũng sử dụng tính năng android.hardware.touchscreen.multitouch, trừ phi tính năng mẹ này được khai báo bằng android:required="false".

Tính năng phần cứng USB

android.hardware.usb.accessory
Ứng dụng hoạt động như một thiết bị USB và USB host.
android.hardware.usb.host
Ứng dụng sử dụng phụ kiện USB được kết nối với thiết bị. Thiết bị này đóng vai trò là USB host.

Tính năng phần cứng Vulkan

android.hardware.vulkan.compute
Ứng dụng sử dụng các tính năng điện toán Vulkan. Tính năng này cho biết ứng dụng đòi hỏi việc triển khai Vulkan tăng tốc phần cứng. Phiên bản tính năng cho biết cấp tính năng điện toán tuỳ chọn yêu cầu mà ứng dụng yêu cầu vượt quá các yêu cầu Vulkan 1.0. Ví dụ: nếu ứng dụng yêu cầu hỗ trợ Vulkan điện toán cấp 0, bạn nên khai báo tính năng sau:
<uses-feature
    android:name="android.hardware.vulkan.compute"
    android:version="0"
    android:required="true" />
Xem FEATURE_VULKAN_HARDWARE_COMPUTE để biết thêm thông tin chi tiết về phiên bản tính năng.
android.hardware.vulkan.level
Ứng dụng sử dụng các cấp tính năng Vulkan. Tính năng này cho biết ứng dụng đòi hỏi việc triển khai Vulkan tăng tốc phần cứng. Phiên bản tính năng cho biết cấp phần cứng không bắt buộc mà ứng dụng yêu cầu. Ví dụ: nếu ứng dụng yêu cầu hỗ trợ phần cứng Vulkan cấp 0, bạn nên khai báo tính năng sau:
<uses-feature
    android:name="android.hardware.vulkan.level"
    android:version="0"
    android:required="true" />
Xem FEATURE_VULKAN_HARDWARE_LEVEL để biết thêm thông tin chi tiết về phiên bản tính năng.
android.hardware.vulkan.version
Ứng dụng sử dụng Vulkan. Tính năng này cho biết ứng dụng yêu cầu cài đặt Vulkan tăng tốc phần cứng. Phiên bản tính năng cho biết phiên bản hỗ trợ API Vulkan tối thiểu mà ứng dụng yêu cầu. Ví dụ: nếu ứng dụng yêu cầu hỗ trợ Vulkan 1.0, bạn nên khai báo tính năng sau:
<uses-feature
    android:name="android.hardware.vulkan.version"
    android:version="0x400003"
    android:required="true" />
Xem FEATURE_VULKAN_HARDWARE_VERSION để biết thêm thông tin chi tiết về phiên bản tính năng.

Tính năng phần cứng Wi-Fi

android.hardware.wifi
Ứng dụng sử dụng tính năng kết nối mạng 802.11 (Wi-Fi) trên thiết bị.
android.hardware.wifi.direct
Ứng dụng sử dụng các tính năng kết nối Wi-Fi Direct trên thiết bị.

Tính năng phần mềm

Phần này giới thiệu các tính năng phần mềm do bản phát hành mới nhất trên nền tảng hỗ trợ. Để chỉ báo rằng ứng dụng sử dụng hoặc cần một tính năng phần mềm, hãy khai báo giá trị tương ứng (bắt đầu bằng "android.software") trong thuộc tính android:name. Mỗi lần bạn khai báo một tính năng phần mềm, hãy sử dụng một phần tử <uses-feature> riêng biệt.

Tính năng phần mềm giao tiếp

android.software.sip
Ứng dụng sử dụng các dịch vụ Giao thức khởi tạo phiên (SIP). Khi sử dụng SIP, ứng dụng có thể hỗ trợ các thao tác qua điện thoại qua Internet, chẳng hạn như hội nghị truyền hình và nhắn tin nhanh.
android.software.sip.voip

Ứng dụng sử dụng các dịch vụ Truyền giọng nói trên giao thức mạng Internet (VoIP) dựa trên SIP. Bằng cách sử dụng VoIP, ứng dụng này có thể hỗ trợ các hoạt động điện thoại qua Internet theo thời gian thực, chẳng hạn như hội nghị truyền hình hai chiều.

Khi sử dụng tính năng này, ứng dụng sẽ cho biết rằng nó cũng sử dụng tính năng android.software.sip, trừ phi tính năng mẹ này được khai báo bằng android:required="false".

android.software.webview
Ứng dụng hiển thị nội dung từ Internet.

Tính năng phần mềm nhập tuỳ chỉnh

android.software.input_methods
Ứng dụng sử dụng phương thức nhập mới mà nhà phát triển xác định trong InputMethodService.

Tính năng phần mềm quản lý thiết bị

android.software.backup
Ứng dụng bao gồm logic để xử lý thao tác sao lưu và khôi phục.
android.software.device_admin
Ứng dụng sử dụng quản trị viên thiết bị để thực thi chính sách thiết bị.
android.software.managed_users
Ứng dụng hỗ trợ người dùng phụ và hồ sơ được quản lý.
android.software.securely_removes_users
Ứng dụng có thể xoá vĩnh viễn người dùng và dữ liệu liên quan của họ.
android.software.verified_boot
Ứng dụng bao gồm logic để xử lý kết quả từ tính năng xác minh quy trình khởi động của thiết bị mà cho phép phát hiện xem cấu hình của thiết bị có thay đổi trong quá trình khởi động lại hay không.

Tính năng phần mềm nội dung đa phương tiện

android.software.midi
Ứng dụng kết nối với các trình phát nhạc hoặc phát ra âm thanh bằng giao thức Giao diện kỹ thuật số dành cho nhạc cụ (MIDI)
android.software.print
Ứng dụng bao gồm các lệnh in hiển thị trên thiết bị.
android.software.leanback
Ứng dụng được thiết kế để chạy trên các thiết bị Android TV.
android.software.live_tv
Ứng dụng phát trực tiếp các chương trình truyền hình.

Tính năng phần mềm giao diện màn hình

android.software.app_widgets
Ứng dụng dùng hoặc cung cấp Tiện ích ứng dụng và chỉ nên được cài đặt trên các thiết bị có Màn hình chính hay vị trí tương tự nơi người dùng có thể nhúng Tiện ích ứng dụng.
android.software.home_screen
Ứng dụng hoạt động thay thế Màn hình chính của thiết bị.
android.software.live_wallpaper
Ứng dụng dùng hoặc cung cấp hình nền có chứa ảnh động.

Quyền truy cập ngụ ý tính chất bắt buộc của tính năng

Một vài hằng số tính năng phần cứng và phần mềm được cung cấp cho các ứng dụng sau khi API tương ứng được thêm vào, chẳng hạn như trường hợp tính năng android.hardware.bluetooth được thêm vào Android 2.2 (API cấp độ 8), nhưng Bluetooth API mà tính năng tham chiếu được thêm từ phiên bản Android 2.0 (API cấp độ 5). Do đó, một số ứng dụng có thể sử dụng API trước khi có thể khai báo rằng các ứng dụng đó yêu cầu API thông qua hệ thống <uses-feature>.

Để ngăn những ứng dụng đó vô tình được cung cấp, Google Play giả định rằng việc yêu cầu quyền truy cập nhất định liên quan đến phần cứng có nghĩa là các tính năng phần cứng cơ bản cũng sẽ được yêu cầu theo mặc định. Ví dụ: các ứng dụng sử dụng Bluetooth phải yêu cầu quyền truy cập BLUETOOTH trong phần tử <uses-permission>. Đối với các ứng dụng cũ, Google Play giả định rằng việc khai báo quyền truy cập có nghĩa là tính năng android.hardware.bluetooth cơ bản cũng được ứng dụng yêu cầu và bộ lọc sẽ được thiết lập dựa trên tính năng đó. Bảng 2 liệt kê các quyền truy cập mà bao hàm các yêu cầu về tính năng tương đương với các quyền truy cập được khai báo trong các phần tử <uses-feature>.

Lưu ý rằng các khai báo <uses-feature>, bao gồm mọi thuộc tính android:required được khai báo, luôn được ưu tiên hơn các tính năng ngầm ẩn trong các quyền truy cập liệt kê ở bảng 2. Đối với bất kỳ quyền truy cập nào trong số này, bạn có thể tắt bộ lọc dựa trên tính năng được ngụ ý bằng cách khai báo tường minh tính năng ở phần tử <uses-feature>, trong đó thuộc tính required được đặt thành false. Ví dụ: để vô hiệu hoá việc lọc dựa trên quyền truy cập CAMERA, hãy thêm các khai báo <uses-feature> sau đây vào tệp kê khai:

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

Thận trọng: Nếu ứng dụng dành cho Android 5.0 (API cấp độ 21) trở lên và sử dụng quyền truy cập ACCESS_COARSE_LOCATION hoặc ACCESS_FINE_LOCATION để nhận thông báo cập nhật vị trí từ mạng hoặc GPS, thì bạn cũng phải khai báo tường minh rằng ứng dụng dùng các tính năng phần cứng android.hardware.location.network hoặc android.hardware.location.gps.

Bảng 2. Các quyền truy cập thiết bị bao hàm việc sử dụng phần cứng thiết bị.

Danh mục Quyền truy cập Yêu cầu tính năng ngầm ẩn
Bluetooth BLUETOOTH android.hardware.bluetooth

(Xem Xử lý đặc biệt cho tính năng Bluetooth để biết thêm chi tiết.)

BLUETOOTH_ADMIN android.hardware.bluetooth
Máy ảnh CAMERA android.hardware.camera
android.hardware.camera.autofocus
Vị trí ACCESS_MOCK_LOCATION android.hardware.location
ACCESS_LOCATION_EXTRA_COMMANDS android.hardware.location
INSTALL_LOCATION_PROVIDER android.hardware.location
ACCESS_COARSE_LOCATION

android.hardware.location

android.hardware.location.network (Chỉ khi cấp độ API mục tiêu từ 20 trở xuống.)

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps (Chỉ khi cấp độ API mục tiêu từ 20 trở xuống.)

Micrô RECORD_AUDIO android.hardware.microphone
Điện thoại CALL_PHONE android.hardware.telephony
CALL_PRIVILEGED android.hardware.telephony
MODIFY_PHONE_STATE android.hardware.telephony
PROCESS_OUTGOING_CALLS android.hardware.telephony
READ_SMS android.hardware.telephony
RECEIVE_SMS android.hardware.telephony
RECEIVE_MMS android.hardware.telephony
RECEIVE_WAP_PUSH android.hardware.telephony
SEND_SMS android.hardware.telephony
WRITE_APN_SETTINGS android.hardware.telephony
WRITE_SMS android.hardware.telephony
Wi-Fi ACCESS_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_MULTICAST_STATE android.hardware.wifi