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ínhrequired
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ínhname
.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ả khiminSdkVersion
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ứng và Tí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"
. - Khi khai báo
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ụngandroid: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>
và <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ínhandroid: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>
.
minSdkVersion là ... |
targetSdkVersion là |
Kết quả |
---|---|---|
<=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:
- 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:- Mở dự án và chọn Run (Chạy) > Edit Configurations (Chỉnh sửa cấu hình).
- 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).
- Chọn Gradle.
- Nhập
Unsigned APK
trong Name (Tên). - Chọn mô-đun trong phần Gradle project (Dự án Gradle).
- Nhập
assemble
trong Tasks (Nhiệm vụ). - Chọn OK để hoàn tất quá trình định cấu hình mới.
- 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ý").
.apk
chưa ký trong thư mục<ProjectName>/app/build/outputs/apk/
. - 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ấyaapt
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). - 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ặcandroid.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ùngandroid.hardware.camera
. Máy ảnh sau là một tính năng bắt buộc, trừ phiandroid.hardware.camera
được khai báo bằngandroid: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ăngcamera
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ùngandroid.hardware.camera
. Máy ảnh sau là một tính năng bắt buộc, trừ phiandroid.hardware.camera
được khai báo bằngandroid: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 minhandroid.hardware.camera
bằngandroid.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áoandroid.hardware.camera
cùng vớiandroid.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ùngandroid.hardware.camera
. Máy ảnh sau là một tính năng bắt buộc, trừ phiandroid.hardware.camera
được khai báo bằngandroid: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ậ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 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.gains
vàandroid.colorCorrection.mode
củaTRANSFORM_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 ảnhFULL
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ầnINFO_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ínhandroid: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ínhandroid: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áoandroid: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ằngandroid: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ồmandroid: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ằngandroid: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ằngandroid: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ớiandroid: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ầuandroid.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ằngandroid: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ằngandroid: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ằngandroid: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" />
XemFEATURE_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" />
XemFEATURE_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" />
XemFEATURE_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ằngandroid: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 |
|
|
ACCESS_FINE_LOCATION |
|
|
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 |