Khi một cửa hàng hoặc trình cài đặt cài đặt một ứng dụng, cửa hàng hoặc trình cài đặt đó sẽ được coi là "trình cài đặt chính thức" (tức là trình cài đặt cuối cùng của ứng dụng). Trước Android 14, Android cho phép một cửa hàng hoặc trình cài đặt ứng dụng khác trở thành trình cài đặt chính thức và cập nhật ứng dụng mà không thông báo cho người dùng.
Trong Android 14, trình cài đặt ban đầu của một ứng dụng có thể tự khai báo là "chủ sở hữu bản cập nhật" và sở hữu các bản cập nhật cho ứng dụng đó. Nếu một trình cài đặt khác cố gắng cập nhật ứng dụng, người dùng sẽ có cơ hội phê duyệt bản cập nhật mới trước khi bản cập nhật đó được tiến hành.
Chọn tham gia gói để cập nhật quyền sở hữu
Để khai báo rằng một cửa hàng hoặc trình cài đặt sở hữu một gói ứng dụng, hãy thêm thẻ update-ownership vào XML sysconfig cho từng gói như sau:
<update-ownership package="com.example.application" installer="com.example.installer" />
Trong ví dụ này, com.example.application là gói ứng dụng cần sở hữu và com.example.installer là chủ sở hữu của gói đó. Khi một gói được chọn tham gia để cập nhật quyền sở hữu, các cửa hàng hoặc trình cài đặt đặc quyền khác phải
xử lý chủ sở hữu bản cập nhật và lấy sự đồng ý của người dùng để cập nhật ứng dụng.
Chọn không tham gia gói để thay đổi quyền sở hữu
Bạn có thể yêu cầu cửa hàng hoặc trình cài đặt chọn một nhóm con của các gói không tham gia thay đổi chủ sở hữu bản cập nhật bằng cách cung cấp danh sách từ chối trong APK. Bằng cách thêm một gói vào danh sách này, không cửa hàng hoặc trình cài đặt nào có thể yêu cầu quyền sở hữu bản cập nhật của gói đó.
Cách chọn không tham gia gói để không thể cập nhật bằng một cửa hàng hoặc trình cài đặt khác:
Thêm thuộc tính sau vào tệp
AndroidManifest.xmlcủa cửa hàng hoặc trình cài đặt ban đầu:<application …> <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST" android:resource="@xml/legacyOwnershipDenylist" /> </application>Ví dụ này tham chiếu đến danh sách từ chối XML có tên là
legacyOwnershipDenylist.Tạo danh sách từ chối dưới dạng tài nguyên XML thô theo định dạng sau:
<deny-ownership>com.example.app1</deny-ownership> <deny-ownership>com.example.app2</deny-ownership>
Nếu một cửa hàng hoặc trình cài đặt yêu cầu quyền sở hữu một gói trong danh sách từ chối, thì quyền sở hữu sẽ không được cấp và gói đó vẫn được cài đặt nhưng sẽ không thuộc sở hữu của bất kỳ trình cài đặt nào. Ngoài ra, bất kể trình cài đặt nào, không ai có thể sở hữu một ứng dụng trong danh sách từ chối.
Tập hợp các gói trong danh sách này có thể thay đổi thông qua bản cập nhật cho APK trình cài đặt cung cấp danh sách đó. Mọi quyền sở hữu được đặt cho một gói sau đó được đưa vào danh sách từ chối sẽ bị xoá khi trình cài đặt được cập nhật. Do đó, các bản cập nhật tiếp theo của gói ứng dụng trong danh sách từ chối sẽ không yêu cầu người dùng tương tác.
Xử lý chủ sở hữu bản cập nhật và lấy sự đồng ý của người dùng
Với Android 14, ngay cả khi một cửa hàng hoặc trình cài đặt ứng dụng có quyền
android.permission.INSTALL_PACKAGES thì trình cài đặt đó vẫn cần xử lý trạng thái
STATUS_PENDING_USER_ACTION
nếu muốn cập nhật một ứng dụng mà bản cập nhật thuộc sở hữu của một cửa hàng hoặc trình cài đặt khác.
Ứng dụng mẫu
InstallAPKSessionApi.java cũng cho biết cách xử lý STATUS_PENDING_USER_ACTION.
Thiết lập quyền sở hữu cho các ứng dụng được tải sẵn
Các ứng dụng được tải sẵn thường không thuộc sở hữu của một trình cài đặt cụ thể. Thay vào đó, các ứng dụng được tải sẵn sẽ được chỉ định một chủ sở hữu mới bằng cách sử dụng cấu hình hệ thống như minh hoạ trong Chọn tham gia gói để cập nhật quyền sở hữu.