Đị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 cài đặt bằng một cửa hàng hoặc trình cài đặt, cửa hàng hoặc trình cài đặt đó được coi là "trình cài đặt của bản ghi", nghĩa là trình cài đặt gần đây nhất 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 của bản ghi và cập nhật ứng dụng mà không cần thông báo cho người dùng.

Trên Android 14, trình cài đặt ban đầu của một ứng dụng có thể tự khai báo là "cập nhật chủ sở hữu" và sở hữu bản cập nhật ứng dụng. Nếu một trình cài đặt khác cố cập nhật ứng dụng, người dùng sẽ có cơ hội chấp thuận bản cập nhật mới trước khi quá trình đó tiến hành.

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 thay đổi về quyền sở hữu cho các gói

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

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

    <application …>
      <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST"
                android:resource="@xml/legacyOwnershipDenylist" />
    </application>
    

    Ví dụ này tham chiếu đến một 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 người cài đặt yêu cầu quyền sở hữu một gói trong danh sách từ chối, sẽ không được cấp quyền sở hữu và gói vẫn được cài đặt nhưng sẽ không được thuộc sở hữu của bất kỳ người cài đặt nào. Ngoài ra, bất kể trình cài đặt là gì, ứng dụng nằm trong danh sách từ chối đều không thuộc quyền sở hữu của bất kỳ ai.

Tập hợp các gói trong danh sách này có thể thay đổi khi cập nhật trình cài đặt APK 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 đòi hỏi sự tương tác của người dùng.

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

Chiến lược phát hành đĩa đơn Ứng dụng mẫu InstallAPKSessionApi.java cũng cho thấy cách xử lý STATUS_PENDING_USER_ACTION.

Thiết lập quyền sở hữu cho ứng dụng được tải trước

Các ứng dụng 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 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.