Populate activeApexChanged in ActiveApexInfo

PackageManager and ART wants to know whether a different version of an
APEX was activated during this boot compared to the last boot. This
change populates this field from binder call to apexd.

In a follow up CL PackageManager will use that information to drop
apk-in-apex cache on APEX updates.

Test: atest ApexManagerTest
Bug: 225435110
Change-Id: I0ecdf758567fb8677a676d7c39f6b35cdc1208ac
Merged-In: I0ecdf758567fb8677a676d7c39f6b35cdc1208ac
(cherry picked from commit fdef4b6afd)
This commit is contained in:
Nikita Ioffe
2022-05-12 00:24:28 +00:00
committed by Jiakai Zhang
parent 54c3414ab9
commit d4838ac4d9
2 changed files with 18 additions and 3 deletions

View File

@@ -121,17 +121,19 @@ public abstract class ApexManager {
public final File apexDirectory;
public final File preInstalledApexPath;
public final File apexFile;
public final boolean activeApexChanged;
private ActiveApexInfo(File apexDirectory, File preInstalledApexPath, File apexFile) {
this(null, apexDirectory, preInstalledApexPath, apexFile);
this(null, apexDirectory, preInstalledApexPath, apexFile, false);
}
private ActiveApexInfo(@Nullable String apexModuleName, File apexDirectory,
File preInstalledApexPath, File apexFile) {
File preInstalledApexPath, File apexFile, boolean activeApexChanged) {
this.apexModuleName = apexModuleName;
this.apexDirectory = apexDirectory;
this.preInstalledApexPath = preInstalledApexPath;
this.apexFile = apexFile;
this.activeApexChanged = activeApexChanged;
}
private ActiveApexInfo(ApexInfo apexInfo) {
@@ -140,7 +142,8 @@ public abstract class ApexManager {
new File(Environment.getApexDirectory() + File.separator
+ apexInfo.moduleName),
new File(apexInfo.preinstalledModulePath),
new File(apexInfo.modulePath));
new File(apexInfo.modulePath),
apexInfo.activeApexChanged);
}
}

View File

@@ -546,6 +546,18 @@ public class ApexManagerTest {
assertThat(backingApexFile).isNull();
}
@Test
public void testActiveApexChanged() throws RemoteException {
ApexInfo apex1 = createApexInfo(
"com.apex1", 37, true, true, new File("/data/apex/active/com.apex@37.apex"));
apex1.activeApexChanged = true;
apex1.preinstalledModulePath = apex1.modulePath;
when(mApexService.getActivePackages()).thenReturn(new ApexInfo[]{apex1});
final ApexManager.ActiveApexInfo activeApex = mApexManager.getActiveApexInfos().get(0);
assertThat(activeApex.apexModuleName).isEqualTo("com.apex1");
assertThat(activeApex.activeApexChanged).isTrue();
}
private ApexInfo createApexInfoForTestPkg(boolean isActive, boolean isFactory, int version) {
File apexFile = extractResource(TEST_APEX_PKG, TEST_APEX_FILE_NAME);
ApexInfo apexInfo = new ApexInfo();