diff options
| author | 2022-10-03 19:44:29 +0000 | |
|---|---|---|
| committer | 2022-10-03 19:44:29 +0000 | |
| commit | 33e1b74e88d2a06947d870f67cf021998df9d637 (patch) | |
| tree | 2843773872f5755bc692c28d28556987c7e3b126 | |
| parent | 4b24b64fa083648134ab124eee00215a54696fec (diff) | |
| parent | c87545bf7d2ebb22cdb689b4a0540236b085d98b (diff) | |
Merge "Add CPU ABI fallback directly into PackageState"
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); |