From 5ee5a5b9cc7f7064b1be522ab30b3c72c8a36380 Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Thu, 11 May 2023 13:01:58 -0700 Subject: [PATCH] Better error message in case of multiple splits. Bug: 281197001 Test: atest CtsPackageInstallTestCases Change-Id: I1f57e491ffe99698b89b7108a9feda93526053a7 --- .../content/pm/parsing/ApkLiteParseUtils.java | 58 ++++++++++--------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java index 820bb1b84ce08..4f6bcb6f0be5b 100644 --- a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java +++ b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java @@ -185,37 +185,41 @@ public class ApkLiteParseUtils { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "parseApkLite"); try { for (File file : files) { - if (isApkFile(file)) { - final ParseResult result = parseApkLite(input, file, flags); - if (result.isError()) { - return input.error(result); - } + if (!isApkFile(file)) { + continue; + } - final ApkLite lite = result.getResult(); - // Assert that all package names and version codes are - // consistent with the first one we encounter. - if (packageName == null) { - packageName = lite.getPackageName(); - versionCode = lite.getVersionCode(); - } else { - if (!packageName.equals(lite.getPackageName())) { - return input.error(PackageManager.INSTALL_PARSE_FAILED_BAD_MANIFEST, - "Inconsistent package " + lite.getPackageName() + " in " + file - + "; expected " + packageName); - } - if (versionCode != lite.getVersionCode()) { - return input.error(PackageManager.INSTALL_PARSE_FAILED_BAD_MANIFEST, - "Inconsistent version " + lite.getVersionCode() + " in " + file - + "; expected " + versionCode); - } - } + final ParseResult result = parseApkLite(input, file, flags); + if (result.isError()) { + return input.error(result); + } - // Assert that each split is defined only oncuses-static-libe - if (apks.put(lite.getSplitName(), lite) != null) { + final ApkLite lite = result.getResult(); + // Assert that all package names and version codes are + // consistent with the first one we encounter. + if (packageName == null) { + packageName = lite.getPackageName(); + versionCode = lite.getVersionCode(); + } else { + if (!packageName.equals(lite.getPackageName())) { return input.error(PackageManager.INSTALL_PARSE_FAILED_BAD_MANIFEST, - "Split name " + lite.getSplitName() - + " defined more than once; most recent was " + file); + "Inconsistent package " + lite.getPackageName() + " in " + file + + "; expected " + packageName); } + if (versionCode != lite.getVersionCode()) { + return input.error(PackageManager.INSTALL_PARSE_FAILED_BAD_MANIFEST, + "Inconsistent version " + lite.getVersionCode() + " in " + file + + "; expected " + versionCode); + } + } + + // Assert that each split is defined only once + ApkLite prev = apks.put(lite.getSplitName(), lite); + if (prev != null) { + return input.error(PackageManager.INSTALL_PARSE_FAILED_BAD_MANIFEST, + "Split name " + lite.getSplitName() + + " defined more than once; most recent was " + file + + ", previous was " + prev.getPath()); } } baseApk = apks.remove(null);