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 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.
- 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ínhrequired
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í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
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ứ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.- 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
là"true"
. - Việc khai báo
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ụ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ả 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>
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 đượ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 rõ ràng theo cách sau:
- 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 rõ ràng 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 cơ chế lọc dựa theo đó.
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 rõ ràng 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á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ínhandroid: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>
.
minSdkVersion là ... |
targetSdkVersion là |
Kết quả |
---|---|---|
<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ử
- Kết quả: Google Play không lọc ứng dụng khỏi bất kỳ thiết bị nào.
<uses-feature>
.
<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 mục tiêu
Cấp độ API "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ả các thiết bị không báo cáo hỗ trợ Bluetooth, bao gồm 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
- Kết quả: Google Play vô hiệu hoá cơ chế lọc dựa trên Bluetooth dành cho tất cả các thiết bị.
android:required="false"
.
<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.
Để dùng công cụ này, hãy làm theo các bước sau:
- 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:
- Mở dự án và chọn Run > Edit Configurations (Chạy > 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" (APK chưa được ký) vào Name (Tên).
- Chọn mô-đun của bạn trong mục Gradle project (Dự án Gradle).
- Nhập "assemble" (tập hợp) trong Tasks (Tác vụ).
- Chọn OK để hoàn tất quá trình định cấu hình mới.
- Đả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ý").
<ProjectName>/app/build/outputs/apk/
. - 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ấyaapt2
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. - 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ặ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) 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
. Camera 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) 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ậpCAMERA
, hãy chỉ rõ rằng ứng dụng của bạn dùng tính năngcamera
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ùngandroid.hardware.camera
. Camera 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 rõ ràngandroid.hardware.camera
bằngandroid.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á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 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ùngandroid.hardware.camera
. Camera 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. Để 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ậpCAMERA
, 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.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 đ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í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 ứ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í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) 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ằngandroid: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êmandroid: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ằ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ị 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ớiandroid: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ầuandroid.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ằ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à 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ợ điện toán Vulkan cấp 0, hãy khai báo tính năng sau:
Để biết thêm thông tin chi tiết về phiên bản tính năng, hãy xem<uses-feature android:name="android.hardware.vulkan.compute" android:version="0" android:required="true" />
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:
Để biết thêm thông tin về phiên bản tính năng, hãy xem<uses-feature android:name="android.hardware.vulkan.level" android:version="0" android:required="true" />
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:
Để biết thêm thông tin chi tiết về phiên bản tính năng, hãy xem<uses-feature android:name="android.hardware.vulkan.version" android:version="0x400003" android:required="true" />
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ằ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ỉ 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 dành cho Android 5.0 (API cấp 21) trở lên và sử dụng quyền 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 một cách rõ ràng 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 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 |
|
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 |