Better error message in case of multiple splits.

Bug: 281197001
Test: atest CtsPackageInstallTestCases
Change-Id: I1f57e491ffe99698b89b7108a9feda93526053a7
This commit is contained in:
Alex Buynytskyy
2023-05-11 13:01:58 -07:00
parent 7cc9a4bbc1
commit 5ee5a5b9cc

View File

@@ -185,37 +185,41 @@ public class ApkLiteParseUtils {
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "parseApkLite");
try {
for (File file : files) {
if (isApkFile(file)) {
final ParseResult<ApkLite> 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<ApkLite> 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);