- cú pháp:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="string" android:sharedUserId="string" android:sharedUserLabel="string resource" android:sharedUserMaxSdkVersion="integer" android:versionCode="integer" android:versionName="string" android:installLocation=["auto" | "internalOnly" | "preferExternal"] > ... </manifest>
- có trong:
- không có
- phải chứa:
<application>
- có thể chứa:
<compatible-screens>
<instrumentation>
<permission>
<permission-group>
<permission-tree>
<queries>
<supports-gl-texture>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-permission>
<uses-permission-sdk-23>
<uses-sdk>
- mô tả:
- Phần tử gốc của tệp
AndroidManifest.xml
. Phần tử này phải chứa một phần tử<application>
, đồng thời chỉ định các thuộc tínhxmlns:android
vàpackage
. - thuộc tính:
-
xmlns:android
- Xác định không gian tên Android. Thuộc tính này luôn được đặt thành
"http://schemas.android.com/apk/res/android"
. package
- Giá trị của thuộc tính
package
trong tệp kê khai của APK biểu thị mã ứng dụng duy nhất trên toàn ứng dụng của bạn. Mã này được định dạng ở dạng tên gói đầy đủ kiểu ngôn ngữ Java cho ứng dụng Android. Tên này có thể chứa chữ hoa hoặc chữ thường, số và dấu gạch dưới ("_"). Tuy nhiên, mỗi phần của tên gói chỉ có thể bắt đầu bằng chữ cái.Hãy cẩn thận tránh thay đổi giá trị
package
, vì việc đó về cơ bản sẽ tạo một ứng dụng mới. Người dùng phiên bản trước của ứng dụng sẽ không nhận được bản cập nhật cũng như không thể chuyển dữ liệu giữa phiên bản cũ và phiên bản mới.Trong hệ thống xây dựng dựa trên Gradle, kể từ AGP 7.3, bạn không nên đặt trực tiếp giá trị
package
vào tệp kê khai nguồn. Để biết thêm thông tin, hãy xem phần Đặt mã ứng dụng. android:sharedUserId
-
Kể từ API cấp 29, hằng số này không được dùng nữa.
Mã nhận dạng người dùng chung gây ra hành vi không xác định trong trình quản lý gói. Do đó, bạn không nên dùng mã này và nó có thể bị xoá trong phiên bản tương lai của Android. Thay vào đó, hãy dùng cơ chế giao tiếp thích hợp, chẳng hạn như trình cung cấp nội dung và dịch vụ, để hỗ trợ khả năng tương tác giữa các thành phần dùng chung. Các ứng dụng hiện có không thể loại bỏ giá trị này vì hệ thống không hỗ trợ di chuyển khỏi mã nhận dạng người dùng chung. Trong các ứng dụng này, hãy thêmandroid:sharedUserMaxSdkVersion="32"
để tránh sử dụng mã nhận dạng người dùng chung trên lượt cài đặt người dùng mới.Tên của một mã nhận dạng người dùng Linux được chia sẻ với các ứng dụng khác. Theo mặc định, Android chỉ định cho mỗi ứng dụng mã nhận dạng người dùng duy nhất của riêng ứng dụng đó. Tuy nhiên, nếu thuộc tính này được đặt thành cùng một giá trị cho 2 hoặc nhiều ứng dụng, thì tất cả các ứng dụng đó sẽ có chung một mã, miễn là bộ chứng chỉ của chúng giống nhau. Các ứng dụng có cùng mã người dùng có thể truy cập vào dữ liệu của nhau, ngoài ra còn có thể chạy trong cùng một quy trình nếu muốn.
android:targetSandboxVersion
- Target sandbox sử dụng cho ứng dụng này. Mã phiên bản sandbox càng cao thì mức độ bảo mật càng cao.
Giá trị mặc định là
1
; bạn cũng có thể đặt thành2
. Việc đặt thuộc tính này thành2
sẽ chuyển ứng dụng sang một hộp cát SELinux khác.Các hạn chế sau áp dụng cho hộp cát cấp 2:
- Giá trị mặc định của
usesCleartextTraffic
trong Cấu hình bảo mật mạng là false. - Không cho phép chia sẻ mã nhận dạng người dùng.
Đối với Ứng dụng Android tức thì nhắm đến Android 8.0 (API cấp 26) trở lên, thuộc tính này được đặt thành
2
. Bạn có thể đặt hộp cát trong phiên bản đã cài đặt của ứng dụng thành cấp1
ít hạn chế hơn. Tuy nhiên, nếu bạn làm như vậy, ứng dụng sẽ không lưu giữ dữ liệu ứng dụng từ ứng dụng tức thì vào phiên bản đã cài đặt của ứng dụng. Bạn phải đặt giá trị hộp cát của ứng dụng đã cài đặt thành2
để lưu giữ dữ liệu từ ứng dụng tức thì vào phiên bản đã cài đặt.Sau khi cài đặt một ứng dụng, bạn chỉ có thể cập nhật giá trị hộp cát đích lên giá trị cao hơn. Để hạ cấp giá trị hộp cát đích, hãy gỡ cài đặt ứng dụng và thay thế bằng một phiên bản có tệp kê khai chứa giá trị thấp hơn cho thuộc tính này.
- Giá trị mặc định của
android:sharedUserLabel
-
Kể từ API cấp 29, hằng số này không được dùng nữa.
Mã nhận dạng người dùng chung gây ra hành vi không xác định trong trình quản lý gói. Do đó, bạn không nên dùng mã này và nó có thể bị xoá trong phiên bản tương lai của Android. Thay vào đó, hãy dùng cơ chế giao tiếp thích hợp, chẳng hạn như trình cung cấp nội dung và dịch vụ, để hỗ trợ khả năng tương tác giữa các thành phần dùng chung. Các ứng dụng hiện có không thể loại bỏ giá trị này vì hệ thống không hỗ trợ di chuyển khỏi mã nhận dạng người dùng chung.Nhãn mà người dùng đọc được cho mã nhận dạng người dùng chung. Nhãn này được đặt làm tham chiếu đến tài nguyên chuỗi. Chuỗi này không được là chuỗi thô.
Thuộc tính này được ra mắt trong API cấp 3. Thuộc tính này chỉ có ý nghĩa khi bạn cũng đặt thuộc tính
sharedUserId
. android:sharedUserMaxSdkVersion
-
Mã nhận dạng người dùng chung gây ra hành vi không xác định trong trình quản lý gói. Do đó, bạn không nên dùng mã này và nó có thể bị xoá trong phiên bản tương lai của Android. Thay vào đó, hãy dùng cơ chế giao tiếp thích hợp, chẳng hạn như trình cung cấp nội dung và dịch vụ, để hỗ trợ khả năng tương tác giữa các thành phần dùng chung.
Phiên bản SDK tối đa mà hệ thống vẫn sử dụng
android:sharedUserId
. Nếu ứng dụng của bạn mới được cài đặt trên một thiết bị chạy phiên bản SDK cao hơn giá trị đã chỉ định, thì ứng dụng đó sẽ hoạt động như thể bạn chưa từng xác địnhandroid:sharedUserId
.Thuộc tính này được ra mắt trong API cấp 33. Thuộc tính này chỉ có ý nghĩa khi bạn cũng đặt thuộc tính
sharedUserId
. android:versionCode
- Số phiên bản nội bộ. Số này chỉ được dùng để xác định xem một phiên bản có mới hơn phiên bản khác hay không, số cao hơn cho biết phiên bản mới hơn. Số phiên bản này do thuộc tính
versionName
đặt và không hiển thị với người dùng.Giá trị được đặt ở dạng số nguyên dương lớn hơn 0. Bạn có thể xác định dữ liệu này theo ý muốn, miễn là mỗi phiên bản kế tiếp luôn có số cao hơn. Ví dụ: đó có thể là số bản dựng hoặc bạn có thể chuyển đổi số phiên bản ở định dạng "x.y" thành một số nguyên bằng cách mã hoá "x" và "y" riêng biệt trong phạm vi trên và dưới 16 bit. Hoặc bạn có thể tăng thêm một số mỗi lần phát hành phiên bản mới.
android:versionName
- Số phiên bản này hiển thị với người dùng. Thuộc tính này được đặt làm chuỗi thô hoặc làm tham chiếu đến tài nguyên chuỗi. Chuỗi này không có mục đích nào khác ngoài việc hiển thị với người dùng. Thuộc tính
versionCode
chứa số phiên bản quan trọng được sử dụng nội bộ. android:installLocation
- Vị trí cài đặt mặc định cho ứng dụng. Các chuỗi từ khoá sau được chấp nhận:
Giá trị Nội dung mô tả "internalOnly"
Ứng dụng này chỉ cài đặt trên bộ nhớ trong của thiết bị. Nếu bạn đặt giá trị này, ứng dụng sẽ không bao giờ cài đặt trên bộ nhớ ngoài, chẳng hạn như thẻ SD. Nếu bộ nhớ trong đã đầy, hệ thống sẽ không cài đặt ứng dụng đó. Đây sẽ là hành vi mặc định nếu bạn không xác định android:installLocation
."auto"
Ứng dụng có thể cài đặt trên bộ nhớ ngoài, nhưng theo mặc định, hệ thống sẽ cài đặt ứng dụng trên bộ nhớ trong. Nếu bộ nhớ trong đã đầy, hệ thống sẽ cài đặt ứng dụng trên bộ nhớ ngoài. Sau khi cài đặt, người dùng có thể chuyển ứng dụng sang bộ nhớ trong hoặc bộ nhớ ngoài thông qua phần cài đặt hệ thống. "preferExternal"
Ứng dụng muốn được cài đặt trên bộ nhớ ngoài. Không có điều gì đảm bảo rằng hệ thống sẽ đáp ứng yêu cầu này. Ứng dụng có thể cài đặt trên bộ nhớ trong nếu phương tiện nhớ ngoài không dùng được hoặc đã đầy. Sau khi cài đặt, người dùng có thể chuyển ứng dụng sang bộ nhớ trong hoặc bộ nhớ ngoài thông qua phần cài đặt hệ thống. Lưu ý: Theo mặc định, ứng dụng sẽ cài đặt trên bộ nhớ trong và không thể cài đặt trên bộ nhớ ngoài, trừ phi bạn xác định thuộc tính này là
"auto"
hoặc"preferExternal"
.Khi một ứng dụng cài đặt trên bộ nhớ ngoài:
- Tệp APK sẽ được lưu vào bộ nhớ ngoài, nhưng mọi dữ liệu ứng dụng, chẳng hạn như cơ sở dữ liệu, vẫn sẽ lưu vào bộ nhớ trong của thiết bị.
- Vùng chứa lưu tệp APK sẽ được mã hoá bằng một khoá để chỉ cho phép ứng dụng hoạt động trên thiết bị đã cài đặt ứng dụng. Người dùng không thể chuyển thẻ SD sang một thiết bị khác và dùng các ứng dụng đã cài đặt trên thẻ. Bạn có thể dùng nhiều thẻ SD với cùng một thiết bị.
- Theo yêu cầu của người dùng, ứng dụng có thể được chuyển vào bộ nhớ trong.
Người dùng cũng có thể yêu cầu chuyển ứng dụng từ bộ nhớ trong sang bộ nhớ ngoài. Tuy nhiên, hệ thống không cho phép người dùng chuyển ứng dụng sang bộ nhớ ngoài nếu thuộc tính này được đặt là
"internalOnly"
, đây là chế độ cài đặt mặc định.Để biết thêm thông tin về cách sử dụng thuộc tính này, bao gồm cả cách duy trì khả năng tương thích ngược, hãy xem bài viết Vị trí cài đặt ứng dụng.
Ra mắt từ: API cấp 8.
- ra mắt từ:
- API cấp 1 đối với mọi thuộc tính, trừ phi có lưu ý khác trong phần mô tả thuộc tính.
- xem thêm:
-
<application>