summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2022-10-03 19:44:29 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-10-03 19:44:29 +0000
commit33e1b74e88d2a06947d870f67cf021998df9d637 (patch)
tree2843773872f5755bc692c28d28556987c7e3b126
parent4b24b64fa083648134ab124eee00215a54696fec (diff)
parentc87545bf7d2ebb22cdb689b4a0540236b085d98b (diff)
Merge "Add CPU ABI fallback directly into PackageState"
-rw-r--r--services/core/java/com/android/server/pm/AppDataHelper.java3
-rw-r--r--services/core/java/com/android/server/pm/ComputerEngine.java4
-rw-r--r--services/core/java/com/android/server/pm/DeletePackageHelper.java2
-rw-r--r--services/core/java/com/android/server/pm/DexOptHelper.java5
-rw-r--r--services/core/java/com/android/server/pm/InstallPackageHelper.java16
-rw-r--r--services/core/java/com/android/server/pm/OtaDexoptService.java4
-rw-r--r--services/core/java/com/android/server/pm/PackageAbiHelper.java6
-rw-r--r--services/core/java/com/android/server/pm/PackageAbiHelperImpl.java6
-rw-r--r--services/core/java/com/android/server/pm/PackageDexOptimizer.java9
-rw-r--r--services/core/java/com/android/server/pm/PackageSetting.java40
-rw-r--r--services/core/java/com/android/server/pm/ScanPackageUtils.java18
-rw-r--r--services/core/java/com/android/server/pm/Settings.java24
-rw-r--r--services/core/java/com/android/server/pm/dex/ArtUtils.java5
-rw-r--r--services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java12
-rw-r--r--services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java26
-rw-r--r--services/core/java/com/android/server/pm/pkg/PackageState.java2
-rw-r--r--services/core/java/com/android/server/pm/pkg/PackageStateInternal.java20
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java32
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/ScanTests.java4
19 files changed, 127 insertions, 111 deletions
diff --git a/services/core/java/com/android/server/pm/AppDataHelper.java b/services/core/java/com/android/server/pm/AppDataHelper.java
index 0f5d8fd6fefa..b8e1e9ae1832 100644
--- a/services/core/java/com/android/server/pm/AppDataHelper.java
+++ b/services/core/java/com/android/server/pm/AppDataHelper.java
@@ -298,7 +298,8 @@ final class AppDataHelper {
// Create a native library symlink only if we have native libraries
// and if the native libraries are 32 bit libraries. We do not provide
// this symlink for 64 bit libraries.
- String primaryCpuAbi = AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting);
+ String primaryCpuAbi = pkgSetting == null
+ ? AndroidPackageUtils.getRawPrimaryCpuAbi(pkg) : pkgSetting.getPrimaryCpuAbi();
if (primaryCpuAbi != null && !VMRuntime.is64BitAbi(primaryCpuAbi)) {
final String nativeLibPath = pkg.getNativeLibraryDir();
if (!(new File(nativeLibPath).exists())) {
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index da6f042ca462..ed846dbbfc1c 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -1674,8 +1674,8 @@ public class ComputerEngine implements Computer {
ApplicationInfo ai = new ApplicationInfo();
ai.packageName = ps.getPackageName();
ai.uid = UserHandle.getUid(userId, ps.getAppId());
- ai.primaryCpuAbi = ps.getPrimaryCpuAbi();
- ai.secondaryCpuAbi = ps.getSecondaryCpuAbi();
+ ai.primaryCpuAbi = ps.getPrimaryCpuAbiLegacy();
+ ai.secondaryCpuAbi = ps.getSecondaryCpuAbiLegacy();
ai.setVersionCode(ps.getVersionCode());
ai.flags = ps.getFlags();
ai.privateFlags = ps.getPrivateFlags();
diff --git a/services/core/java/com/android/server/pm/DeletePackageHelper.java b/services/core/java/com/android/server/pm/DeletePackageHelper.java
index 7ff91f827db1..6d31121cea44 100644
--- a/services/core/java/com/android/server/pm/DeletePackageHelper.java
+++ b/services/core/java/com/android/server/pm/DeletePackageHelper.java
@@ -573,7 +573,7 @@ final class DeletePackageHelper {
if (deleteCodeAndResources && (outInfo != null)) {
outInfo.mArgs = new InstallArgs(
ps.getPathString(), getAppDexInstructionSets(
- ps.getPrimaryCpuAbi(), ps.getSecondaryCpuAbi()));
+ ps.getPrimaryCpuAbiLegacy(), ps.getSecondaryCpuAbiLegacy()));
if (DEBUG_SD_INSTALL) Slog.i(TAG, "args=" + outInfo.mArgs);
}
}
diff --git a/services/core/java/com/android/server/pm/DexOptHelper.java b/services/core/java/com/android/server/pm/DexOptHelper.java
index cd074c0d4a5d..3f04264714e4 100644
--- a/services/core/java/com/android/server/pm/DexOptHelper.java
+++ b/services/core/java/com/android/server/pm/DexOptHelper.java
@@ -58,7 +58,6 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.logging.MetricsLogger;
import com.android.server.pm.dex.DexManager;
import com.android.server.pm.dex.DexoptOptions;
-import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageStateInternal;
@@ -470,8 +469,8 @@ final class DexOptHelper {
// others will see that the compiled code for the library is up to date.
Collection<SharedLibraryInfo> deps = SharedLibraryUtils.findSharedLibraries(pkgSetting);
final String[] instructionSets = getAppDexInstructionSets(
- AndroidPackageUtils.getPrimaryCpuAbi(p, pkgSetting),
- AndroidPackageUtils.getSecondaryCpuAbi(p, pkgSetting));
+ pkgSetting.getPrimaryCpuAbi(),
+ pkgSetting.getSecondaryCpuAbi());
if (!deps.isEmpty()) {
DexoptOptions libraryOptions = new DexoptOptions(options.getPackageName(),
options.getCompilationReason(), options.getCompilerFilter(),
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index 81d47a0f0a9c..30ecc1cb4e8f 100644
--- a/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -1377,8 +1377,8 @@ final class InstallPackageHelper {
// We moved the entire application as-is, so bring over the
// previously derived ABI information.
- parsedPackage.setPrimaryCpuAbi(ps.getPrimaryCpuAbi())
- .setSecondaryCpuAbi(ps.getSecondaryCpuAbi());
+ parsedPackage.setPrimaryCpuAbi(ps.getPrimaryCpuAbiLegacy())
+ .setSecondaryCpuAbi(ps.getSecondaryCpuAbiLegacy());
}
} else {
@@ -1932,10 +1932,8 @@ final class InstallPackageHelper {
installRequest.getRemovedInfo().mArgs = new InstallArgs(
oldPackage.getPath(),
getAppDexInstructionSets(
- AndroidPackageUtils.getPrimaryCpuAbi(oldPackage,
- deletedPkgSetting),
- AndroidPackageUtils.getSecondaryCpuAbi(oldPackage,
- deletedPkgSetting)));
+ deletedPkgSetting.getPrimaryCpuAbi(),
+ deletedPkgSetting.getSecondaryCpuAbi()));
} else {
installRequest.getRemovedInfo().mArgs = null;
}
@@ -3944,8 +3942,8 @@ final class InstallPackageHelper {
mRemovePackageHelper.cleanUpResources(
new File(pkgSetting.getPathString()),
- getAppDexInstructionSets(pkgSetting.getPrimaryCpuAbi(),
- pkgSetting.getSecondaryCpuAbi()));
+ getAppDexInstructionSets(pkgSetting.getPrimaryCpuAbiLegacy(),
+ pkgSetting.getSecondaryCpuAbiLegacy()));
synchronized (mPm.mLock) {
mPm.mSettings.enableSystemPackageLPw(pkgSetting.getPackageName());
}
@@ -4029,7 +4027,7 @@ final class InstallPackageHelper {
+ parsedPackage.getPath());
mRemovePackageHelper.cleanUpResources(new File(pkgSetting.getPathString()),
getAppDexInstructionSets(
- pkgSetting.getPrimaryCpuAbi(), pkgSetting.getSecondaryCpuAbi()));
+ pkgSetting.getPrimaryCpuAbiLegacy(), pkgSetting.getSecondaryCpuAbiLegacy()));
} else {
// The application on /system is older than the application on /data. Hide
// the application on /system and the version on /data will be scanned later
diff --git a/services/core/java/com/android/server/pm/OtaDexoptService.java b/services/core/java/com/android/server/pm/OtaDexoptService.java
index 5507b447fe7f..56f24939c4e0 100644
--- a/services/core/java/com/android/server/pm/OtaDexoptService.java
+++ b/services/core/java/com/android/server/pm/OtaDexoptService.java
@@ -409,8 +409,8 @@ public class OtaDexoptService extends IOtaDexopt.Stub {
}
final String[] instructionSets = getAppDexInstructionSets(
- AndroidPackageUtils.getPrimaryCpuAbi(pkg, packageState),
- AndroidPackageUtils.getSecondaryCpuAbi(pkg, packageState));
+ packageState.getPrimaryCpuAbi(),
+ packageState.getSecondaryCpuAbi());
final List<String> paths =
AndroidPackageUtils.getAllCodePathsExcludingResourceOnly(pkg);
final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets);
diff --git a/services/core/java/com/android/server/pm/PackageAbiHelper.java b/services/core/java/com/android/server/pm/PackageAbiHelper.java
index 9bea599fa36a..d839b147511f 100644
--- a/services/core/java/com/android/server/pm/PackageAbiHelper.java
+++ b/services/core/java/com/android/server/pm/PackageAbiHelper.java
@@ -22,7 +22,6 @@ import android.util.ArraySet;
import android.util.Pair;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
import com.android.server.pm.parsing.pkg.ParsedPackage;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageStateInternal;
@@ -119,11 +118,6 @@ public interface PackageAbiHelper {
this.secondary = secondary;
}
- Abis(AndroidPackage pkg, PackageSetting pkgSetting) {
- this(AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting),
- AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting));
- }
-
public void applyTo(ParsedPackage pkg) {
pkg.setPrimaryCpuAbi(primary)
.setSecondaryCpuAbi(secondary);
diff --git a/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java b/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java
index 75f5f93b1237..249de3ce45a3 100644
--- a/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java
+++ b/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java
@@ -517,12 +517,12 @@ final class PackageAbiHelperImpl implements PackageAbiHelper {
ps.getPackageName())) {
continue;
}
- if (ps.getPrimaryCpuAbi() == null) {
+ if (ps.getPrimaryCpuAbiLegacy() == null) {
continue;
}
final String instructionSet =
- VMRuntime.getInstructionSet(ps.getPrimaryCpuAbi());
+ VMRuntime.getInstructionSet(ps.getPrimaryCpuAbiLegacy());
if (requiredInstructionSet != null && !requiredInstructionSet.equals(instructionSet)) {
// We have a mismatch between instruction sets (say arm vs arm64) warn about
// this but there's not much we can do.
@@ -548,7 +548,7 @@ final class PackageAbiHelperImpl implements PackageAbiHelper {
// scannedPackage did not require an ABI, in which case we have to adjust
// scannedPackage to match the ABI of the set (which is the same as
// requirer's ABI)
- adjustedAbi = requirer.getPrimaryCpuAbi();
+ adjustedAbi = requirer.getPrimaryCpuAbiLegacy();
} else {
// requirer == null implies that we're updating all ABIs in the set to
// match scannedPackage.
diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
index 178d0ea594b1..d25bca76245b 100644
--- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java
+++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
@@ -265,8 +265,8 @@ public class PackageDexOptimizer {
.getNonNativeUsesLibraryInfos();
final String[] instructionSets = targetInstructionSets != null ?
targetInstructionSets : getAppDexInstructionSets(
- AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting),
- AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting));
+ pkgSetting.getPrimaryCpuAbi(),
+ pkgSetting.getSecondaryCpuAbi());
final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets);
final List<String> paths = AndroidPackageUtils.getAllCodePaths(pkg);
@@ -736,9 +736,8 @@ public class PackageDexOptimizer {
*/
void dumpDexoptState(IndentingPrintWriter pw, AndroidPackage pkg,
PackageStateInternal pkgSetting, PackageDexUsage.PackageUseInfo useInfo) {
- final String[] instructionSets = getAppDexInstructionSets(
- AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting),
- AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting));
+ final String[] instructionSets = getAppDexInstructionSets(pkgSetting.getPrimaryCpuAbi(),
+ pkgSetting.getSecondaryCpuAbi());
final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets);
final List<String> paths = AndroidPackageUtils.getAllCodePathsExcludingResourceOnly(pkg);
diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java
index 9050722ec561..8d6abe05db0e 100644
--- a/services/core/java/com/android/server/pm/PackageSetting.java
+++ b/services/core/java/com/android/server/pm/PackageSetting.java
@@ -33,6 +33,7 @@ import android.content.pm.UserInfo;
import android.content.pm.overlay.OverlayPaths;
import android.os.UserHandle;
import android.service.pm.PackageProto;
+import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.SparseArray;
@@ -42,6 +43,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.CollectionUtils;
import com.android.internal.util.DataClass;
import com.android.server.pm.parsing.pkg.AndroidPackageInternal;
+import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
import com.android.server.pm.permission.LegacyPermissionDataProvider;
import com.android.server.pm.permission.LegacyPermissionState;
import com.android.server.pm.pkg.AndroidPackage;
@@ -1335,6 +1337,34 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
return userState == null ? PackageUserState.DEFAULT : userState;
}
+ @Nullable
+ public String getPrimaryCpuAbi() {
+ if (TextUtils.isEmpty(mPrimaryCpuAbi) && pkg != null) {
+ return AndroidPackageUtils.getRawPrimaryCpuAbi(pkg);
+ }
+
+ return mPrimaryCpuAbi;
+ }
+
+ @Nullable
+ public String getSecondaryCpuAbi() {
+ if (TextUtils.isEmpty(mSecondaryCpuAbi) && pkg != null) {
+ return AndroidPackageUtils.getRawSecondaryCpuAbi(pkg);
+ }
+
+ return mSecondaryCpuAbi;
+ }
+
+ @Nullable
+ public String getPrimaryCpuAbiLegacy() {
+ return mPrimaryCpuAbi;
+ }
+
+ @Nullable
+ public String getSecondaryCpuAbiLegacy() {
+ return mSecondaryCpuAbi;
+ }
+
// Code below generated by codegen v1.0.23.
@@ -1412,16 +1442,6 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
}
@DataClass.Generated.Member
- public @Nullable String getPrimaryCpuAbi() {
- return mPrimaryCpuAbi;
- }
-
- @DataClass.Generated.Member
- public @Nullable String getSecondaryCpuAbi() {
- return mSecondaryCpuAbi;
- }
-
- @DataClass.Generated.Member
public @Nullable String getCpuAbiOverride() {
return mCpuAbiOverride;
}
diff --git a/services/core/java/com/android/server/pm/ScanPackageUtils.java b/services/core/java/com/android/server/pm/ScanPackageUtils.java
index bce6834b8b1b..bd3c7dd0a4b4 100644
--- a/services/core/java/com/android/server/pm/ScanPackageUtils.java
+++ b/services/core/java/com/android/server/pm/ScanPackageUtils.java
@@ -157,8 +157,8 @@ final class ScanPackageUtils {
if (pkgSetting.getPkg() != null && pkgSetting.getPkg().isStub()) {
needToDeriveAbi = true;
} else {
- primaryCpuAbiFromSettings = pkgSetting.getPrimaryCpuAbi();
- secondaryCpuAbiFromSettings = pkgSetting.getSecondaryCpuAbi();
+ primaryCpuAbiFromSettings = pkgSetting.getPrimaryCpuAbiLegacy();
+ secondaryCpuAbiFromSettings = pkgSetting.getSecondaryCpuAbiLegacy();
}
} else {
// Re-scanning a system package after uninstalling updates; need to derive ABI
@@ -229,8 +229,8 @@ final class ScanPackageUtils {
// to null here, only to reset them at a later point.
Settings.updatePackageSetting(pkgSetting, disabledPkgSetting, oldSharedUserSetting,
sharedUserSetting, destCodeFile, parsedPackage.getNativeLibraryDir(),
- AndroidPackageUtils.getPrimaryCpuAbi(parsedPackage, pkgSetting),
- AndroidPackageUtils.getSecondaryCpuAbi(parsedPackage, pkgSetting),
+ pkgSetting.getPrimaryCpuAbi(),
+ pkgSetting.getSecondaryCpuAbi(),
PackageInfoUtils.appInfoFlags(parsedPackage, pkgSetting),
PackageInfoUtils.appInfoPrivateFlags(parsedPackage, pkgSetting),
UserManagerService.getInstance(),
@@ -327,8 +327,8 @@ final class ScanPackageUtils {
// We haven't run dex-opt for this move (since we've moved the compiled output too)
// but we already have this packages package info in the PackageSetting. We just
// use that and derive the native library path based on the new code path.
- parsedPackage.setPrimaryCpuAbi(pkgSetting.getPrimaryCpuAbi())
- .setSecondaryCpuAbi(pkgSetting.getSecondaryCpuAbi());
+ parsedPackage.setPrimaryCpuAbi(pkgSetting.getPrimaryCpuAbiLegacy())
+ .setSecondaryCpuAbi(pkgSetting.getSecondaryCpuAbiLegacy());
}
// Set native library paths again. For moves, the path will be updated based on the
@@ -378,8 +378,8 @@ final class ScanPackageUtils {
if (DEBUG_ABI_SELECTION) {
Log.d(TAG, "Abis for package[" + parsedPackage.getPackageName() + "] are"
- + " primary=" + pkgSetting.getPrimaryCpuAbi()
- + " secondary=" + pkgSetting.getSecondaryCpuAbi()
+ + " primary=" + pkgSetting.getPrimaryCpuAbiLegacy()
+ + " secondary=" + pkgSetting.getSecondaryCpuAbiLegacy()
+ " abiOverride=" + pkgSetting.getCpuAbiOverride());
}
@@ -901,7 +901,7 @@ final class ScanPackageUtils {
PackageSetting ps = sharedUserPackageSettings.valueAt(i);
if (scannedPackage == null
|| !scannedPackage.getPackageName().equals(ps.getPackageName())) {
- if (ps.getPrimaryCpuAbi() != null) {
+ if (ps.getPrimaryCpuAbiLegacy() != null) {
continue;
}
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 0558fbdb6361..f2a7651b4daf 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -837,8 +837,8 @@ public final class Settings implements Watchable, Snappable {
}
p.getPkgState().setUpdatedSystemApp(false);
PackageSetting ret = addPackageLPw(name, p.getRealName(), p.getPath(),
- p.getLegacyNativeLibraryPath(), p.getPrimaryCpuAbi(),
- p.getSecondaryCpuAbi(), p.getCpuAbiOverride(),
+ p.getLegacyNativeLibraryPath(), p.getPrimaryCpuAbiLegacy(),
+ p.getSecondaryCpuAbiLegacy(), p.getCpuAbiOverride(),
p.getAppId(), p.getVersionCode(), p.getFlags(), p.getPrivateFlags(),
p.getUsesSdkLibraries(), p.getUsesSdkLibrariesVersionsMajor(),
p.getUsesStaticLibraries(), p.getUsesStaticLibrariesVersions(), p.getMimeGroups(),
@@ -2796,11 +2796,11 @@ public final class Settings implements Watchable, Snappable {
if (pkg.getLegacyNativeLibraryPath() != null) {
serializer.attribute(null, "nativeLibraryPath", pkg.getLegacyNativeLibraryPath());
}
- if (pkg.getPrimaryCpuAbi() != null) {
- serializer.attribute(null, "primaryCpuAbi", pkg.getPrimaryCpuAbi());
+ if (pkg.getPrimaryCpuAbiLegacy() != null) {
+ serializer.attribute(null, "primaryCpuAbi", pkg.getPrimaryCpuAbiLegacy());
}
- if (pkg.getSecondaryCpuAbi() != null) {
- serializer.attribute(null, "secondaryCpuAbi", pkg.getSecondaryCpuAbi());
+ if (pkg.getSecondaryCpuAbiLegacy() != null) {
+ serializer.attribute(null, "secondaryCpuAbi", pkg.getSecondaryCpuAbiLegacy());
}
if (pkg.getCpuAbiOverride() != null) {
serializer.attribute(null, "cpuAbiOverride", pkg.getCpuAbiOverride());
@@ -2834,11 +2834,11 @@ public final class Settings implements Watchable, Snappable {
if (pkg.getLegacyNativeLibraryPath() != null) {
serializer.attribute(null, "nativeLibraryPath", pkg.getLegacyNativeLibraryPath());
}
- if (pkg.getPrimaryCpuAbi() != null) {
- serializer.attribute(null, "primaryCpuAbi", pkg.getPrimaryCpuAbi());
+ if (pkg.getPrimaryCpuAbiLegacy() != null) {
+ serializer.attribute(null, "primaryCpuAbi", pkg.getPrimaryCpuAbiLegacy());
}
- if (pkg.getSecondaryCpuAbi() != null) {
- serializer.attribute(null, "secondaryCpuAbi", pkg.getSecondaryCpuAbi());
+ if (pkg.getSecondaryCpuAbiLegacy() != null) {
+ serializer.attribute(null, "secondaryCpuAbi", pkg.getSecondaryCpuAbiLegacy());
}
if (pkg.getCpuAbiOverride() != null) {
serializer.attribute(null, "cpuAbiOverride", pkg.getCpuAbiOverride());
@@ -4561,8 +4561,8 @@ public final class Settings implements Watchable, Snappable {
pw.print(prefix); pw.print(" extractNativeLibs=");
pw.println((ps.getFlags() & ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS) != 0
? "true" : "false");
- pw.print(prefix); pw.print(" primaryCpuAbi="); pw.println(ps.getPrimaryCpuAbi());
- pw.print(prefix); pw.print(" secondaryCpuAbi="); pw.println(ps.getSecondaryCpuAbi());
+ pw.print(prefix); pw.print(" primaryCpuAbi="); pw.println(ps.getPrimaryCpuAbiLegacy());
+ pw.print(prefix); pw.print(" secondaryCpuAbi="); pw.println(ps.getSecondaryCpuAbiLegacy());
pw.print(prefix); pw.print(" cpuAbiOverride="); pw.println(ps.getCpuAbiOverride());
}
pw.print(prefix); pw.print(" versionCode="); pw.print(ps.getVersionCode());
diff --git a/services/core/java/com/android/server/pm/dex/ArtUtils.java b/services/core/java/com/android/server/pm/dex/ArtUtils.java
index 77aefc5cf910..160add6fc79c 100644
--- a/services/core/java/com/android/server/pm/dex/ArtUtils.java
+++ b/services/core/java/com/android/server/pm/dex/ArtUtils.java
@@ -42,9 +42,8 @@ public final class ArtUtils {
AndroidPackage pkg, PackageStateInternal pkgSetting) {
return new ArtPackageInfo(
pkg.getPackageName(),
- Arrays.asList(getAppDexInstructionSets(
- AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting),
- AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting))),
+ Arrays.asList(getAppDexInstructionSets(pkgSetting.getPrimaryCpuAbi(),
+ pkgSetting.getSecondaryCpuAbi())),
AndroidPackageUtils.getAllCodePaths(pkg),
getOatDir(pkg, pkgSetting));
}
diff --git a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
index bc3d7a6b6778..be3a4dab6152 100644
--- a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
+++ b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
@@ -487,8 +487,10 @@ public class PackageInfoUtils {
}
info.seInfo = AndroidPackageUtils.getSeInfo(pkg, pkgSetting);
- info.primaryCpuAbi = AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting);
- info.secondaryCpuAbi = AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting);
+ info.primaryCpuAbi = pkgSetting == null ? AndroidPackageUtils.getRawPrimaryCpuAbi(pkg)
+ : pkgSetting.getPrimaryCpuAbi();
+ info.secondaryCpuAbi = pkgSetting == null ? AndroidPackageUtils.getRawSecondaryCpuAbi(pkg)
+ : pkgSetting.getSecondaryCpuAbi();
info.flags |= appInfoFlags(info.flags, pkgSetting);
info.privateFlags |= appInfoPrivateFlags(info.privateFlags, pkgSetting);
@@ -715,8 +717,10 @@ public class PackageInfoUtils {
initForUser(info, pkg, userId);
- info.primaryCpuAbi = AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting);
- info.secondaryCpuAbi = AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting);
+ info.primaryCpuAbi = pkgSetting == null ? AndroidPackageUtils.getRawPrimaryCpuAbi(pkg)
+ : pkgSetting.getPrimaryCpuAbi();
+ info.secondaryCpuAbi = pkgSetting == null ? AndroidPackageUtils.getRawSecondaryCpuAbi(pkg)
+ : pkgSetting.getSecondaryCpuAbi();
info.nativeLibraryDir = pkg.getNativeLibraryDir();
info.secondaryNativeLibraryDir = pkg.getSecondaryNativeLibraryDir();
diff --git a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java
index ca8ba6c32591..a6f1b291178a 100644
--- a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java
+++ b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java
@@ -34,6 +34,7 @@ import com.android.internal.util.ArrayUtils;
import com.android.server.SystemConfig;
import com.android.server.pm.PackageManagerException;
import com.android.server.pm.pkg.AndroidPackage;
+import com.android.server.pm.pkg.PackageState;
import com.android.server.pm.pkg.PackageStateInternal;
import com.android.server.pm.pkg.component.ParsedActivity;
import com.android.server.pm.pkg.component.ParsedInstrumentation;
@@ -271,27 +272,9 @@ public class AndroidPackageUtils {
return true;
}
- public static String getPrimaryCpuAbi(AndroidPackage pkg,
- @Nullable PackageStateInternal pkgSetting) {
- if (pkgSetting == null || TextUtils.isEmpty(pkgSetting.getPrimaryCpuAbi())) {
- return getRawPrimaryCpuAbi(pkg);
- }
-
- return pkgSetting.getPrimaryCpuAbi();
- }
-
- public static String getSecondaryCpuAbi(AndroidPackage pkg,
- @Nullable PackageStateInternal pkgSetting) {
- if (pkgSetting == null || TextUtils.isEmpty(pkgSetting.getSecondaryCpuAbi())) {
- return getRawSecondaryCpuAbi(pkg);
- }
-
- return pkgSetting.getSecondaryCpuAbi();
- }
-
/**
* Returns the primary ABI as parsed from the package. Used only during parsing and derivation.
- * Otherwise prefer {@link #getPrimaryCpuAbi(AndroidPackage, PackageStateInternal)}.
+ * Otherwise prefer {@link PackageState#getPrimaryCpuAbi()}.
*/
public static String getRawPrimaryCpuAbi(AndroidPackage pkg) {
return ((AndroidPackageHidden) pkg).getPrimaryCpuAbi();
@@ -299,10 +282,9 @@ public class AndroidPackageUtils {
/**
* Returns the secondary ABI as parsed from the package. Used only during parsing and
- * derivation. Otherwise prefer
- * {@link #getSecondaryCpuAbi(AndroidPackage, PackageStateInternal)}.
+ * derivation. Otherwise prefer {@link PackageState#getSecondaryCpuAbi()}.
*/
- public static String getRawSecondaryCpuAbi(AndroidPackage pkg) {
+ public static String getRawSecondaryCpuAbi(@NonNull AndroidPackage pkg) {
return ((AndroidPackageHidden) pkg).getSecondaryCpuAbi();
}
diff --git a/services/core/java/com/android/server/pm/pkg/PackageState.java b/services/core/java/com/android/server/pm/pkg/PackageState.java
index a6e60166f69a..fa1a63fc5986 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageState.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageState.java
@@ -154,7 +154,7 @@ public interface PackageState {
/**
* The install time CPU override, if any. This value is written at install time
* and doesn't change during the life of an install. If non-null,
- * {@link #getPrimaryCpuAbi()} will also contain the same value.
+ * {@link #getPrimaryCpuAbiLegacy()} will also contain the same value.
*
* @hide
*/
diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java b/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java
index 8f5795bc47eb..2f4c02774e4d 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java
@@ -83,4 +83,24 @@ public interface PackageStateInternal extends PackageState {
@NonNull
PackageKeySetData getKeySetData();
+
+ /**
+ * Return the exact value stored inside this object for the primary CPU ABI type. This does
+ * not fallback to the inner {@link #getAndroidPackage()}, unlike {@link #getPrimaryCpuAbi()}.
+ *
+ * @deprecated Use {@link #getPrimaryCpuAbi()} if at all possible.
+ *
+ * TODO(b/249779400): Remove and see if the fallback-only API is a usable replacement
+ */
+ @Deprecated
+ @Nullable
+ String getPrimaryCpuAbiLegacy();
+
+ /**
+ * Same behavior as {@link #getPrimaryCpuAbiLegacy()}, but with the secondary ABI.
+ *
+ * @deprecated Use {@link #getSecondaryCpuAbi()} if at all possible.
+ */
+ @Nullable
+ String getSecondaryCpuAbiLegacy();
}
diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
index 39220a429b8c..f3ac246d12e4 100644
--- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
+++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
@@ -749,8 +749,8 @@ public class PackageManagerSettingsTests {
null /*usesStaticLibrariesVersions*/,
null /*mimeGroups*/,
UUID.randomUUID());
- assertThat(testPkgSetting01.getPrimaryCpuAbi(), is("arm64-v8a"));
- assertThat(testPkgSetting01.getSecondaryCpuAbi(), is("armeabi"));
+ assertThat(testPkgSetting01.getPrimaryCpuAbiLegacy(), is("arm64-v8a"));
+ assertThat(testPkgSetting01.getSecondaryCpuAbiLegacy(), is("armeabi"));
assertThat(testPkgSetting01.getFlags(), is(0));
assertThat(testPkgSetting01.getPrivateFlags(), is(0));
final PackageUserState userState = testPkgSetting01.readUserState(0);
@@ -785,8 +785,8 @@ public class PackageManagerSettingsTests {
null /*usesStaticLibrariesVersions*/,
null /*mimeGroups*/,
UUID.randomUUID());
- assertThat(testPkgSetting01.getPrimaryCpuAbi(), is("arm64-v8a"));
- assertThat(testPkgSetting01.getSecondaryCpuAbi(), is("armeabi"));
+ assertThat(testPkgSetting01.getPrimaryCpuAbiLegacy(), is("arm64-v8a"));
+ assertThat(testPkgSetting01.getSecondaryCpuAbiLegacy(), is("armeabi"));
assertThat(testPkgSetting01.getFlags(), is(ApplicationInfo.FLAG_SYSTEM));
assertThat(testPkgSetting01.getPrivateFlags(), is(ApplicationInfo.PRIVATE_FLAG_PRIVILEGED));
final PackageUserState userState = testPkgSetting01.readUserState(0);
@@ -860,8 +860,8 @@ public class PackageManagerSettingsTests {
assertThat(testPkgSetting01.getPackageName(), is(PACKAGE_NAME));
assertThat(testPkgSetting01.getFlags(), is(ApplicationInfo.FLAG_SYSTEM));
assertThat(testPkgSetting01.getPrivateFlags(), is(ApplicationInfo.PRIVATE_FLAG_PRIVILEGED));
- assertThat(testPkgSetting01.getPrimaryCpuAbi(), is("arm64-v8a"));
- assertThat(testPkgSetting01.getSecondaryCpuAbi(), is("armeabi"));
+ assertThat(testPkgSetting01.getPrimaryCpuAbiLegacy(), is("arm64-v8a"));
+ assertThat(testPkgSetting01.getSecondaryCpuAbiLegacy(), is("armeabi"));
// signatures object must be different
assertNotSame(testPkgSetting01.getSignatures(), originalSignatures);
assertThat(testPkgSetting01.getVersionCode(), is(UPDATED_VERSION_CODE));
@@ -901,8 +901,8 @@ public class PackageManagerSettingsTests {
assertThat(testPkgSetting01.getPackageName(), is(PACKAGE_NAME));
assertThat(testPkgSetting01.getFlags(), is(0));
assertThat(testPkgSetting01.getPrivateFlags(), is(0));
- assertThat(testPkgSetting01.getPrimaryCpuAbi(), is("x86_64"));
- assertThat(testPkgSetting01.getSecondaryCpuAbi(), is("x86"));
+ assertThat(testPkgSetting01.getPrimaryCpuAbiLegacy(), is("x86_64"));
+ assertThat(testPkgSetting01.getSecondaryCpuAbiLegacy(), is("x86"));
assertThat(testPkgSetting01.getVersionCode(), is(INITIAL_VERSION_CODE));
// by default, the package is considered stopped
final PackageUserState userState = testPkgSetting01.readUserState(0);
@@ -944,8 +944,8 @@ public class PackageManagerSettingsTests {
assertThat(testPkgSetting01.getPackageName(), is(PACKAGE_NAME));
assertThat(testPkgSetting01.getFlags(), is(0));
assertThat(testPkgSetting01.getPrivateFlags(), is(0));
- assertThat(testPkgSetting01.getPrimaryCpuAbi(), is("x86_64"));
- assertThat(testPkgSetting01.getSecondaryCpuAbi(), is("x86"));
+ assertThat(testPkgSetting01.getPrimaryCpuAbiLegacy(), is("x86_64"));
+ assertThat(testPkgSetting01.getSecondaryCpuAbiLegacy(), is("x86"));
assertThat(testPkgSetting01.getVersionCode(), is(INITIAL_VERSION_CODE));
final PackageUserState userState = testPkgSetting01.readUserState(0);
verifyUserState(userState, false /*notLaunched*/, false /*stopped*/, true /*installed*/);
@@ -987,8 +987,8 @@ public class PackageManagerSettingsTests {
assertThat(testPkgSetting01.getPackageName(), is(PACKAGE_NAME));
assertThat(testPkgSetting01.getFlags(), is(0));
assertThat(testPkgSetting01.getPrivateFlags(), is(0));
- assertThat(testPkgSetting01.getPrimaryCpuAbi(), is("arm64-v8a"));
- assertThat(testPkgSetting01.getSecondaryCpuAbi(), is("armeabi"));
+ assertThat(testPkgSetting01.getPrimaryCpuAbiLegacy(), is("arm64-v8a"));
+ assertThat(testPkgSetting01.getSecondaryCpuAbiLegacy(), is("armeabi"));
assertNotSame(testPkgSetting01.getSignatures(), disabledSignatures);
assertThat(testPkgSetting01.getVersionCode(), is(UPDATED_VERSION_CODE));
final PackageUserState userState = testPkgSetting01.readUserState(0);
@@ -1211,11 +1211,11 @@ public class PackageManagerSettingsTests {
// assertThat(origPkgSetting.pkg, is(testPkgSetting.pkg));
assertThat(origPkgSetting.getFlags(), is(testPkgSetting.getFlags()));
assertThat(origPkgSetting.getPrivateFlags(), is(testPkgSetting.getPrivateFlags()));
- assertSame(origPkgSetting.getPrimaryCpuAbi(), testPkgSetting.getPrimaryCpuAbi());
- assertThat(origPkgSetting.getPrimaryCpuAbi(), is(testPkgSetting.getPrimaryCpuAbi()));
+ assertSame(origPkgSetting.getPrimaryCpuAbiLegacy(), testPkgSetting.getPrimaryCpuAbiLegacy());
+ assertThat(origPkgSetting.getPrimaryCpuAbiLegacy(), is(testPkgSetting.getPrimaryCpuAbiLegacy()));
assertThat(origPkgSetting.getRealName(), is(testPkgSetting.getRealName()));
- assertSame(origPkgSetting.getSecondaryCpuAbi(), testPkgSetting.getSecondaryCpuAbi());
- assertThat(origPkgSetting.getSecondaryCpuAbi(), is(testPkgSetting.getSecondaryCpuAbi()));
+ assertSame(origPkgSetting.getSecondaryCpuAbiLegacy(), testPkgSetting.getSecondaryCpuAbiLegacy());
+ assertThat(origPkgSetting.getSecondaryCpuAbiLegacy(), is(testPkgSetting.getSecondaryCpuAbiLegacy()));
assertSame(origPkgSetting.getSignatures(), testPkgSetting.getSignatures());
assertThat(origPkgSetting.getSignatures(), is(testPkgSetting.getSignatures()));
assertThat(origPkgSetting.getLastModifiedTime(), is(testPkgSetting.getLastModifiedTime()));
diff --git a/services/tests/servicestests/src/com/android/server/pm/ScanTests.java b/services/tests/servicestests/src/com/android/server/pm/ScanTests.java
index 6f3249e3ec4b..4d03749d2759 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ScanTests.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ScanTests.java
@@ -211,8 +211,8 @@ public class ScanTests {
assertBasicPackageScanResult(scanResult, DUMMY_PACKAGE_NAME, false /*isInstant*/);
- assertThat(scanResult.mPkgSetting.getPrimaryCpuAbi(), is("primaryCpuAbi"));
- assertThat(scanResult.mPkgSetting.getSecondaryCpuAbi(), is("secondaryCpuAbi"));
+ assertThat(scanResult.mPkgSetting.getPrimaryCpuAbiLegacy(), is("primaryCpuAbi"));
+ assertThat(scanResult.mPkgSetting.getSecondaryCpuAbiLegacy(), is("secondaryCpuAbi"));
assertThat(scanResult.mPkgSetting.getCpuAbiOverride(), nullValue());
assertPathsNotDerived(scanResult);