From 968fa77746f3380a0a1d83aaba7f723465964f0d Mon Sep 17 00:00:00 2001 From: Kelvin Zhang Date: Fri, 16 Apr 2021 10:28:09 -0400 Subject: [PATCH] Add API to ApexManager for compressed APEX Test: th Change-Id: I26b77cf61716882e8620ece7e10e0bc93d30599c --- .../com/android/server/pm/ApexManager.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/services/core/java/com/android/server/pm/ApexManager.java b/services/core/java/com/android/server/pm/ApexManager.java index c6a55b43d3fd4..cb0af11172418 100644 --- a/services/core/java/com/android/server/pm/ApexManager.java +++ b/services/core/java/com/android/server/pm/ApexManager.java @@ -25,6 +25,7 @@ import android.apex.ApexInfo; import android.apex.ApexInfoList; import android.apex.ApexSessionInfo; import android.apex.ApexSessionParams; +import android.apex.CompressedApexInfoList; import android.apex.IApexService; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; @@ -356,6 +357,21 @@ public abstract class ApexManager { */ public abstract void markBootCompleted(); + /** + * Estimate how much storage space is needed on /data/ for decompressing apexes + * @param infoList List of apexes that are compressed in target build. + * @return Size, in bytes, the amount of space needed on /data/ + */ + public abstract long calculateSizeForCompressedApex(CompressedApexInfoList infoList) + throws RemoteException; + + /** + * Reserve space on /data so that apexes can be decompressed after OTA + * @param infoList List of apexes that are compressed in target build. + */ + public abstract void reserveSpaceForCompressedApex(CompressedApexInfoList infoList) + throws RemoteException; + /** * Dumps various state information to the provided {@link PrintWriter} object. * @@ -898,6 +914,18 @@ public abstract class ApexManager { } } + @Override + public long calculateSizeForCompressedApex(CompressedApexInfoList infoList) + throws RemoteException { + return waitForApexService().calculateSizeForCompressedApex(infoList); + } + + @Override + public void reserveSpaceForCompressedApex(CompressedApexInfoList infoList) + throws RemoteException { + waitForApexService().reserveSpaceForCompressedApex(infoList); + } + /** * Dump information about the packages contained in a particular cache * @param packagesCache the cache to print information about. @@ -1149,6 +1177,16 @@ public abstract class ApexManager { // No-op } + @Override + public long calculateSizeForCompressedApex(CompressedApexInfoList infoList) { + throw new UnsupportedOperationException(); + } + + @Override + public void reserveSpaceForCompressedApex(CompressedApexInfoList infoList) { + throw new UnsupportedOperationException(); + } + @Override void dump(PrintWriter pw, String packageName) { // No-op