From 2dc941678f7c914ff7a1941965b984b959c39c58 Mon Sep 17 00:00:00 2001 From: Pedro Loureiro Date: Thu, 28 Apr 2022 12:37:46 +0000 Subject: [PATCH] Pass APK_IN_APEX flag when parsing apk in apexes Not caught in unit tests because this is more an integration failure (detected when writing e2e tests). Bug: 208239394 Test: the actual e2e test will be published when this is submitted Test: m ApkInApexTest Change-Id: I8b62e473e2b3613cf290ff05963a47ba86140d99 --- .../java/android/content/pm/parsing/ApkLiteParseUtils.java | 7 ++++++- .../content/pm/parsing/FrameworkParsingPackageUtils.java | 1 + .../android/server/pm/pkg/parsing/ParsingPackageUtils.java | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java index cb55e303e7781..20a4fdf658c6c 100644 --- a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java +++ b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java @@ -567,9 +567,14 @@ public class ApkLiteParseUtils { targetCode = minCode; } + boolean allowUnknownCodenames = false; + if ((flags & FrameworkParsingPackageUtils.PARSE_APK_IN_APEX) != 0) { + allowUnknownCodenames = true; + } + ParseResult targetResult = FrameworkParsingPackageUtils.computeTargetSdkVersion( targetVer, targetCode, SDK_CODENAMES, input, - /* allowUnknownCodenames= */ false); + allowUnknownCodenames); if (targetResult.isError()) { return input.error(targetResult); } diff --git a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java index 6d74b819301d6..d2d00b237a0da 100644 --- a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java +++ b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java @@ -58,6 +58,7 @@ public class FrameworkParsingPackageUtils { private static final int MAX_FILE_NAME_SIZE = 223; public static final int PARSE_IGNORE_OVERLAY_REQUIRED_SYSTEM_PROPERTY = 1 << 7; + public static final int PARSE_APK_IN_APEX = 1 << 9; /** * Check if the given name is valid. diff --git a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java index 9897c42e4cec6..3799dbb630f09 100644 --- a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java +++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java @@ -392,6 +392,9 @@ public class ParsingPackageUtils { if ((flags & PARSE_FRAMEWORK_RES_SPLITS) != 0) { liteParseFlags = flags; } + if ((flags & PARSE_APK_IN_APEX) != 0) { + liteParseFlags |= PARSE_APK_IN_APEX; + } final ParseResult liteResult = ApkLiteParseUtils.parseClusterPackageLite(input, packageDir, frameworkSplits, liteParseFlags);