Merge "Preserve order of shared library files"
This commit is contained in:
@@ -325,6 +325,7 @@ import java.util.Date;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -9846,7 +9847,8 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addSharedLibraryLPr(ArraySet<String> usesLibraryFiles, SharedLibraryEntry file,
|
private void addSharedLibraryLPr(Set<String> usesLibraryFiles,
|
||||||
|
SharedLibraryEntry file,
|
||||||
PackageParser.Package changingLib) {
|
PackageParser.Package changingLib) {
|
||||||
if (file.path != null) {
|
if (file.path != null) {
|
||||||
usesLibraryFiles.add(file.path);
|
usesLibraryFiles.add(file.path);
|
||||||
@@ -9875,7 +9877,10 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
if (pkg == null) {
|
if (pkg == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ArraySet<String> usesLibraryFiles = null;
|
// The collection used here must maintain the order of addition (so
|
||||||
|
// that libraries are searched in the correct order) and must have no
|
||||||
|
// duplicates.
|
||||||
|
Set<String> usesLibraryFiles = null;
|
||||||
if (pkg.usesLibraries != null) {
|
if (pkg.usesLibraries != null) {
|
||||||
usesLibraryFiles = addSharedLibrariesLPw(pkg.usesLibraries,
|
usesLibraryFiles = addSharedLibrariesLPw(pkg.usesLibraries,
|
||||||
null, null, pkg.packageName, changingLib, true, null);
|
null, null, pkg.packageName, changingLib, true, null);
|
||||||
@@ -9896,10 +9901,10 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private ArraySet<String> addSharedLibrariesLPw(@NonNull List<String> requestedLibraries,
|
private Set<String> addSharedLibrariesLPw(@NonNull List<String> requestedLibraries,
|
||||||
@Nullable int[] requiredVersions, @Nullable String[] requiredCertDigests,
|
@Nullable int[] requiredVersions, @Nullable String[] requiredCertDigests,
|
||||||
@NonNull String packageName, @Nullable PackageParser.Package changingLib,
|
@NonNull String packageName, @Nullable PackageParser.Package changingLib,
|
||||||
boolean required, @Nullable ArraySet<String> outUsedLibraries)
|
boolean required, @Nullable Set<String> outUsedLibraries)
|
||||||
throws PackageManagerException {
|
throws PackageManagerException {
|
||||||
final int libCount = requestedLibraries.size();
|
final int libCount = requestedLibraries.size();
|
||||||
for (int i = 0; i < libCount; i++) {
|
for (int i = 0; i < libCount; i++) {
|
||||||
@@ -9944,7 +9949,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (outUsedLibraries == null) {
|
if (outUsedLibraries == null) {
|
||||||
outUsedLibraries = new ArraySet<>();
|
// Use LinkedHashSet to preserve the order of files added to
|
||||||
|
// usesLibraryFiles while eliminating duplicates.
|
||||||
|
outUsedLibraries = new LinkedHashSet<>();
|
||||||
}
|
}
|
||||||
addSharedLibraryLPr(outUsedLibraries, libEntry, changingLib);
|
addSharedLibraryLPr(outUsedLibraries, libEntry, changingLib);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user