<uses-feature>

Google Play sử dụng các phần tử <uses-feature> đã khai báo trong tệp kê khai ứng dụng của bạn để 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 ứng dụng yêu cầu, bạn cho phép Google Play chỉ hiển thị ứng dụng cho 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.

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ử 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. Phần tử này cung cấp thuộc tính required cho phép bạn chỉ định rằng ứng dụng buộc phải có tính năng đã khai báo thì mới hoạt động được, hoặc rằng ứng dụng nên có tính năng đó nhưng vẫn hoạt động được nếu không có.

Vì khả năng 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ị mà ứng dụng sử 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 ở phần Tài liệu tham khảo về tính năng trong 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 2 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 cần phải khai báo các phần tử <uses-feature> cho tất cả cá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ụ (chẳng hạn như Google Play) hoặc ứng dụng khác 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, bạn cần phải khai báo tất cả các tính năng mà ứng dụng sử dụ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 OpenGL được 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 là 3 trở xuống. Các thiết bị đang chạy những phiên bản cũ hơn 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 cần yêu cầu quyền 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 giúp đảm bảo khả năng tương thích phù hợp của thiết bị.

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 mục 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.
  • Việc khai báo android:required="true" cho một tính năng cho biết rằng ứng dụng không thể hoạt động hoặc không được thiết kế để hoạt động khi tính năng được chỉ định không có trên thiết bị.
  • Việc khai báo android:required="false" cho một tính năng cho biết rằng ứng dụng sẽ sử dụng tính năng này nếu có trên thiết bị. Tuy nhiên, ứng dụng được thiết kế để hoạt động mà không có tính năng này, nếu cần.

Giá trị mặc định của android:required"true".

android:glEsVersion
Phiên bản OpenGL ES mà ứng dụng yêu cầu. Số 16 bit lớn hơn đại diện cho số chính và số 16 bit nhỏ hơn đại diện cho số phụ. Ví dụ: để chỉ định phiên bản 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".

Một ứng dụng chỉ định tối đa một thuộc tính android:glEsVersion trong tệp kê khai. Nếu chỉ định nhiều thuộc tính thì ứng dụng 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ả cá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ì nền tảng đó cũng hỗ trợ mọi phiên bản OpenGL ES có số thấp hơn. Do đó, đối với ứng dụng yêu cầu cả OpenGL ES 1.0 và OpenGL ES 2.0, hãy nêu rõ rằng ứng dụng yêu cầu OpenGL ES 2.0.

Đối với ứng dụng có thể hoạt động với một số phiên bản OpenGL ES, bạn chỉ cần chỉ định phiên bản OpenGL ES có số thấp nhất mà ứng dụng yêu cầu. Ứng dụng có thể kiểm tra trong thời gian chạy xem có phiên bản OpenGL ES nào 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ả 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 về 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ỉ xem và tải được các ứng dụng tương thích với thiết bị của mình. Một trong những cách để lọc ứng dụng là lọc theo khả năng tương thích tính năng.

Để 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, như được khai báo trong các phần tử <uses-feature> trong tệp kê khai của ứng dụng.
  • Các tính năng có sẵn trên thiết bị (trong phần cứng hoặc phần mềm) như đã báo cáo bằng cách sử dụng các thuộc tính hệ thống chỉ có thể đọc.

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

Khi người dùng 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 Cửa hàng 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 được 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ả các tính năng mà ứng dụng yêu cầu, thì Google Play sẽ hiển thị ứng dụng cho người dùng và người dùng có thể tải ứng dụng đó xuống.

Nếu có bất kỳ tính năng nào ứng dụng yêu cầu mà thiết bị không hỗ trợ, thì Google Play sẽ lọc ứng dụng để người dùng không thấy cũng như không tải được ứ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. Các mục sau đây sẽ cung cấp thêm thông tin.

Lọc dựa trên các tính năng được khai báo rõ ràng

Tính năng được khai báo rõ ràng là tính năng mà ứng dụng của bạn 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 dựa trên API cấp 5 trở lên.

Điều này cho phép bạn chỉ rõ liệu ứng dụng có yêu cầu phải có tính năng và không thể hoạt động bình thường nếu không có ("true") hay ứng dụng sẽ sử dụng tính năng (nếu có) nhưng vẫn chạy được nếu không 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 rõ ràng là cần phải có, như trong ví dụ sau, thì Google Play sẽ thêm tính năng đó vào danh sách tính năng bắt buộc của ứng dụng. Sau đó, Google Play sẽ lọc ứng dụng để ứng dụng không hiển thị với những người dùng trên các thiết bị không cung cấp tính năng đó.
    <uses-feature android:name="android.hardware.camera.any" android:required="true" />
    
  • Nếu một tính năng được khai báo rõ ràng là không cần phải có, như trong ví dụ sau, thì Google Play sẽ không thêm tính năng đó vào danh sách các tính năng bắt buộc. Vì lý do đó, Google Play sẽ không xem xét tính năng được khai báo rõ ràng là không bắt buộc 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 xem là ứng dụng tương thích với thiết bị và hiển thị ứng dụng với người dùng, trừ phi các quy tắc lọc khác được áp dụng.
    <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 Android 1.6 trở xuống, thì thuộc tính android:required sẽ không xuất hiện trong API và Google Play sẽ giả định rằng tất cả các nội dung khai báo <uses-feature> đều là bắt buộc.

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 là tính năng mà ứng dụng yêu cầu phải có để hoạt động bình thường nhưng không được khai báo trong phần tử <uses-feature> của tệp kê khai. Nói một cách chính xác, tốt nhất là luôn khai báo tất cả các tính năng mà ứng dụng dùng hoặc cần đến và việc không khai báo một tính năng mà ứng dụng sử dụng có thể bị coi là 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 từng ứng dụng và thiết lập bộ lọc cho các tính năng đó giống như với các tính năng được khai báo rõ ràng.

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

  • Ứng dụng được biên dịch dựa trên phiên bản thư viện Android cũ (Android 1.5 trở xuống) không có phần tử <uses-feature>.
  • Nhà phát triển giả định nhầm rằng tính năng này hiện diện trên tất cả cá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 việc khai báo tính năng.
  • Nhà phát triển khai báo tính năng này một cách rõ ràng 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ệ.

Do tính đến các trường hợp trên nên Google Play cố gắng phát hiện các yêu cầu ngầm ẩn của ứng dụng về tính nă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 các quyền 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 các tính năng đó, mặc dù có thể không có nội dung khai báo <uses-feature> tương ứng. Đối với các 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ó camera 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 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. Mục Các quyền ngụ ý tính chất bắt buộc của tính năng liệt kê toàn bộ các quyền ngụ ý tính chất bắt buộc của tính năng, và theo đó kích hoạt cơ chế lọc.

Cách xử lý chuyên dụng đối với tính năng Bluetooth

Google Play áp dụng các quy tắc có phần khác so với mô tả trong ví dụ trước khi xác định cơ chế 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 rõ ràng 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 trên đó, như được chỉ định trong phần tử <uses-sdk>.

Như minh hoạ trong bảng sau, Google Play sẽ chỉ kích hoạt cơ chế lọc cho tính năng Bluetooth nếu ứng dụng khai báo nền tảng 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 cho cơ chế lọc khi ứng dụng khai báo rõ ràng tính năng Bluetooth trong 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 đòi hỏi phải có quyền truy cập vào Bluetooth nhưng không khai báo tính năng Bluetooth trong phần tử <uses-feature>.

Nếu minSdkVersion là ... targetSdkVersion Kết quả
<=4 hoặc <uses-sdk> không được khai báo <=4 Google Play 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ợ được báo cáo cho 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ụ sau minh hoạ các kết quả lọc khác nhau 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ũ hơn 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, cũng chính ứng dụng đó khai báo cấp độ API mục tiêu là "5".
Kết quả: Giờ thì Google Play sẽ giả định rằng tính năng này là bắt buộc và lọc ứng dụng khỏi 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ũ hơn 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, cùng một ứng dụng giờ khai báo cụ thể tính năng Bluetooth.
Kết quả: Giống hệt với ví dụ trước: cơ chế lọc được áp dụng.
<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 trường hợp sau, vẫn chính ứng dụng đó sẽ thêm thuộc tính android:required="false".
Kết quả: Google Play vô hiệu hoá cơ chế 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ủa bạn yêu cầu

Bạn có thể sử dụng công cụ aapt2 có trong SDK Android để xác định cách Google Play lọc ứng dụng của bạn dựa trên các tính năng và quyền đã khai báo. Để làm vậy, hãy chạy aapt2 bằng lệnh dump badging. Thao tác này sẽ yêu cầu aapt2 phân tích cú pháp tệp kê khai của ứng dụng và áp dụng cùng các 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. Tạo và xuất ứng dụng dưới dạng APK chưa được ký. Nếu bạn dùng Android Studio, hãy tạo ứng dụng bằng Gradle như sau:
    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" (APK chưa được ký) vào Name (Tên).
    5. Chọn mô-đun trong phần Gradle project (Dự án Gradle).
    6. Nhập "assemble" (tập hợp) trong Tasks (Tác vụ).
    7. Chọn OK để hoàn tất quá trình định cấu hình mới.
    8. Đảm bảo bạn đã chọn cấu hình chạy Unsigned APK (APK chưa được ký) trong thanh công cụ, sau đó chọn Run > Run 'Unsigned APK' (Chạy > Chạy "APK chưa được ký").
    Bạn có thể tìm thấy tệp APK chưa được ký trong thư mục <ProjectName>/app/build/outputs/apk/.
  2. Tìm công cụ aapt2 nếu công cụ này chưa có trong PATH của bạn. Nếu đang sử dụng Bộ công cụ SDK r8 trở lên, thì bạn có thể tìm thấy aapt2 trong thư mục <SDK>/build-tools/<tools version number>.

    Lưu ý: Bạn phải sử dụng phiên bản aapt2 được cung cấp cho thành phần Build-Tools (Công cụ tạo) 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 thành phần này xuống bằng Trình quản lý SDK Android.

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

Dưới đây là ví dụ về kết quả của lệnh cho ví dụ thứ hai về Bluetooth được trình bày trước đó:

$ ./aapt2 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

Mục 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 của nền tảng hỗ trợ. Để cho biết ứng dụng sử dụng hoặc yêu cầu 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) 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. Camera 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) sẽ 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 camera sau là một tính năng bắt buộc. Để giúp đảm bảo lọc chính xác trên Google Play khi tệp kê khai ứng dụng bao gồm các quyền truy cập CAMERA, hãy chỉ rõ rằng ứng dụng của bạn dùng tính năng camera và cho biết liệu tính năng này có bắt buộc hay không, 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 (quay về phía người dùng) của thiết bị.

Quyền truy cập CAMERA ngụ ý rằng ứng dụng của bạn cũng dùng android.hardware.camera. Camera 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 rõ ràng android.hardware.camera bằng android.required="false", thì các thiết bị không có máy ảnh sau (như Chromebook) sẽ bị Google Play lọc ra. Nếu ứng dụng của bạn hỗ trợ cả thiết bị chỉ có 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 sẽ có máy ảnh bên ngoài để ứng dụng của bạn sử 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. Camera 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. Để giúp đảm bảo lọc chính xác trên Google Play khi tệp kê khai ứng dụng của bạn bao gồm quyền truy cập CAMERA, hãy chỉ định rõ ràng 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ụ ý rằng 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ý hình ảnh thô.

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 đang lái xe trong khi sử dụng loại giao diện người dùng này của ứng dụng, 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" thường diễn ra trong phòng khách: ứng dụng hiển thị trên màn hình lớn, người dùng ngồi ở xa và hình thức nhập tín hiệu đầu vào chủ yếu là hình thức kiểu như D-pad, thay vì 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ị.
android.hardware.type.pc

Ứng dụng được thiết kế để hiển thị giao diện người dùng trên Chromebook. Tính năng này vô hiệu hoá chế độ mô phỏng thao tác đầu vào bằng chuột và bàn di chuột vì Chromebook sử dụng phần cứng chuột và bàn di chuột. Hãy xem bài viết Thao tác đầu vào bằng chuột.

Lưu ý: Hãy đặt required="false" cho phần tử này; nếu không, Cửa hàng Google Play sẽ không cung cấp ứng dụng của bạn cho các thiết bị không phải là Chromebook.

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 ứng dụng 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 ứng dụng 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) xung quanh của thiết bị. Ví dụ: ứng dụng thời tiết có thể cho biết nhiệt độ trong nhà hoặc ngoài trời.
android.hardware.sensor.barometer
Ứng dụng sử dụng khí áp kế của thiết bị. Ví dụ: ứng dụng thời tiết có thể cho biết á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 dễ dàng hơn thời điểm cần chuyển đổi giữa hướng dọc và ngang.
android.hardware.sensor.hifi_sensors
Ứng dụng sử dụng các 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 trên thiết bị để đo điện tâm đồ (ECG). 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 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 đ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 của thiết bị. 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, thì bạn sẽ 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 đó, ứng dụng của bạn có thể cài đặt trên các thiết bị hỗ trợ một hoặc cả hai hướng. Tuy nhiên, nếu bất kỳ hoạt động nào yêu cầu phải chạy ở một hướng cụ thể, thông qua thuộc tính android:screenOrientation, thì nội dung khai báo này sẽ cho biết ứ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.

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

Để có khả năng 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à hướng 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ị nếu thiết bị đó có màn hình cảm ứng mô phỏng "cảm ứng giả" hoặc có màn hình cảm ứng thực.

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ụ: 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 của bạn yêu cầu hoạt động tương tác trỏ và nhấp cơ bản nhưng không hoạt động với bộ điều khiển D-pad, hãy 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 sẽ khai báo tính năng này trên các thiết bị có giao diện cảm ứng tinh vi hơn.

Các ứng dụng cần có tính năng android.hardware.faketouch theo mặc định. Nếu muốn ứng dụng của mình chỉ dùng được trên các thiết bị có màn hình cảm ứng, bạn phải khai báo một cách rõ ràng rằng bắt buộc phải có màn hình cảm ứng như sau:

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

Tất cả ứng dụng không yêu cầu android.hardware.touchscreen một cách rõ ràng, như trong ví dụ sau, cũng 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 2 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 2 hoặc nhiều ngón tay hoặc có màn hình cảm ứng thực.

Không giống như tính năng cảm ứng đa điểm riêng 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ì hoạt động đầ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.

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ợ tính năng 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ì hoạt động đầ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à tập mẹ của tính năng android.hardware.faketouch.

Theo mặc định, tất cả các ứng dụng đều yêu cầu tính năng này nên tính năng này sẽ không có sẵn cho các thiết bị chỉ cung cấp giao diện "cảm ứng giả" được mô phỏng. Bạn có thể cung cấp ứng dụng của mình trên các thiết bị dùng 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ằng cách dùng android.hardware.touchscreen với android:required="false" để khai báo một cách rõ ràng rằng không bắt buộc phải có màn hình cảm ứng. Thêm phần khai báo này nếu ứng dụng của bạn sử dụng nhưng không bắt buộc phải có giao diện màn hình cảm ứng thực. Tất cả các ứng dụng không yêu cầu android.hardware.touchscreen một cách rõ ràng 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ư thao tác 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 một cách rõ ràng tất cả các tính năng mà ứng dụng sử dụng.

Nếu bạn 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, hãy 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 dùng các tính năng đa điểm cơ bản cho 2 điểm 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à tập mẹ 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à kết nối với USB host.
android.hardware.usb.host
Ứng dụng 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 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 không bắt buộc 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 tính toán cấp 0, hãy khai báo tính năng sau:
<uses-feature
    android:name="android.hardware.vulkan.compute"
    android:version="0"
    android:required="true" />
Để biết thêm thông tin về phiên bản tính năng, hãy xem FEATURE_VULKAN_HARDWARE_COMPUTE.
android.hardware.vulkan.level
Ứng dụng dùng các tính năng cấp 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, hãy khai báo tính năng sau:
<uses-feature
    android:name="android.hardware.vulkan.level"
    android:version="0"
    android:required="true" />
Để biết thêm thông tin về phiên bản phần cứng, hãy xem FEATURE_VULKAN_HARDWARE_LEVEL.
android.hardware.vulkan.version
Ứng dụng dù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 phiên bản tối thiểu hỗ trợ API Vulkan mà ứng dụng yêu cầu. Ví dụ: nếu ứng dụng yêu cầu hỗ trợ Vulkan 1.0, hãy khai báo tính năng sau:
<uses-feature
    android:name="android.hardware.vulkan.version"
    android:version="0x400003"
    android:required="true" />
Để biết thêm thông tin về phiên bản tính năng, hãy xem FEATURE_VULKAN_HARDWARE_VERSION.

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ợ. Để cho biết ứng dụng sử dụng hoặc yêu cầu 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ỉ dành cho 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 ngầm ẩn các yêu cầu tính năng

Một vài hằng số của tính năng phần cứng và phần mềm sẽ được cung cấp cho các ứng dụng sau API tương ứng. Do đó, một số ứng dụng có thể sử dụng API trước khi khai báo rằng chúng cần có API đó bằng 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 dùng Bluetooth phải yêu cầu quyền BLUETOOTH trong phần tử <uses-permission>.

Đối với các ứng dụng cũ, Google Play giả định rằng nội dung khai báo quyền có nghĩa là ứng dụng yêu cầu tính năng android.hardware.bluetooth cơ bản và thiết lập bộ lọc dựa trên tính năng đó. Bảng 2 liệt kê các quyền ngầm ẩn các yêu cầu về tính năng tương đương với các quyền được khai báo trong phần tử <uses-feature>.

Các nội dung 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 nêu ở 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 ngầm ẩn bằng cách khai báo một cách rõ ràng 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 CAMERA, hãy thêm các nội dung 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 của bạn nhắm đến Android 5.0 (API cấp 21) trở lên và dùng quyền ACCESS_COARSE_LOCATION hoặc ACCESS_FINE_LOCATION để nhận thông tin cập nhật vị trí từ mạng hoặc GPS tương ứng, thì bạn cũng phải khai báo rõ ràng rằng ứng dụng sử dụng 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 bài viết Quá trình xử lý đặc biệt với tính năng Bluetooth để biết thông tin chi tiết.

BLUETOOTH_ADMIN android.hardware.bluetooth
Camera 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