Add CPU ABI fallback directly into PackageState
To simplify the external API, the raw package ABI won't be exposed, only the overridden/device configured value available through the PackageState object. However, changing the default fallback behavior would also change the value that existing callers get within system server. It's difficult to audit whether or not each caller needs the fallback or not, so the behavior was maintained with separate getPrimaryCpuAbiLegacy and getSecondaryCpuAbiLegacy methods. These should gradually be removed as the callers' needs can be identified. Bug: 225395398 Test: atest PackageManagerSettingsTests Test: atest ScanTests Change-Id: Ibdf49d700ab6f21afa5a61c66f47dc2844b6cd45
This commit is contained in:
@@ -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())) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
@@ -1411,16 +1441,6 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
|
||||
return mLoadingProgress;
|
||||
}
|
||||
|
||||
@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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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()));
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user