Định cấu hình và xử lý quyền sở hữu bản cập nhật cho ứng dụng

Khi một ứng dụng được một cửa hàng hoặc trình cài đặt cài đặt, cửa hàng hoặc trình cài đặt đó được coi là "trình cài đặt bản ghi" (nghĩa là trình cài đặt bản ghi cuối cù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 bản ghi 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 quá trình này diễn ra.

Chọn sử dụng các 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 tệp XML sysconfig cho mỗi 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 để 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 áp dụng các thay đổi về quyền sở hữu cho gói

Bạn có thể thiết lập cửa hàng hoặc trình cài đặt chọn một tập hợp con các gói không cho phép thay đổi chủ sở hữu cập nhật bằng cách cung cấp một danh sách từ chối trong APK. Khi bạn đưa một gói vào danh sách này, không có 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 cho phép cửa hàng hoặc trình cài đặt khác cập nhật gói:

  1. Đưa thuộc tính sau vào tệp AndroidManifest.xml của cửa hàng gốc hoặc trình cài đặt:

    <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.

  2. Tạo danh sách từ chối dưới dạng tài nguyên XML thô có đị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 trên 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 quyền sở hữu của bất kỳ trình cài đặt nào. Ngoài ra, không ai có thể sở hữu một ứng dụng trong danh sách từ chối, bất kể trình cài đặt là gì.

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 tệp 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 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ì cửa hàng hoặc 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 quyền 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 tải trước

Ứng dụng tải trước 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 trước 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 phần Chọn gói để cập nhật quyền sở hữu.