Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 977ac984 authored by Songchun Fan's avatar Songchun Fan
Browse files

[pm] derive correct abi override during prepare package

This is needed so that the ABI values in parsedPkg will be correct
before they are copied to pkgSetting during scan package.

BUG: 163888243
Test: atest android.extractnativelibs.cts.CtsExtractNativeLibsHostTestAbiOverride
Change-Id: I48947c5170ea0b732d3e961c9735b3a218f9a81b
parent c04c6be6
Loading
Loading
Loading
Loading
+9 −6
Original line number Original line Diff line number Diff line
@@ -11680,8 +11680,9 @@ public class PackageManagerService extends IPackageManager.Stub
        if (DEBUG_ABI_SELECTION) {
        if (DEBUG_ABI_SELECTION) {
            Slog.d(TAG, "Resolved nativeLibraryRoot for " + parsedPackage.getPackageName()
            Slog.d(TAG, "Resolved nativeLibraryRoot for " + parsedPackage.getPackageName()
                    + " to root=" + parsedPackage.getNativeLibraryRootDir() + ", isa="
                    + " to root=" + parsedPackage.getNativeLibraryRootDir()
                    + parsedPackage.isNativeLibraryRootRequiresIsa());
                    + ", to dir=" + parsedPackage.getNativeLibraryDir()
                    + ", isa=" + parsedPackage.isNativeLibraryRootRequiresIsa());
        }
        }
        // Push the derived path down into PackageSettings so we know what to
        // Push the derived path down into PackageSettings so we know what to
@@ -11689,9 +11690,10 @@ public class PackageManagerService extends IPackageManager.Stub
        pkgSetting.legacyNativeLibraryPathString = parsedPackage.getNativeLibraryRootDir();
        pkgSetting.legacyNativeLibraryPathString = parsedPackage.getNativeLibraryRootDir();
        if (DEBUG_ABI_SELECTION) {
        if (DEBUG_ABI_SELECTION) {
            Log.d(TAG, "Abis for package[" + parsedPackage.getPackageName() + "] are" +
            Log.d(TAG, "Abis for package[" + parsedPackage.getPackageName() + "] are"
                    " primary=" + AndroidPackageUtils.getRawPrimaryCpuAbi(parsedPackage) +
                    + " primary=" + pkgSetting.primaryCpuAbiString
                    " secondary=" + AndroidPackageUtils.getRawSecondaryCpuAbi(parsedPackage));
                    + " secondary=" + pkgSetting.primaryCpuAbiString
                    + " abiOverride=" + pkgSetting.cpuAbiOverrideString);
        }
        }
        if ((scanFlags & SCAN_BOOTING) == 0 && pkgSetting.sharedUser != null) {
        if ((scanFlags & SCAN_BOOTING) == 0 && pkgSetting.sharedUser != null) {
@@ -17610,12 +17612,13 @@ public class PackageManagerService extends IPackageManager.Stub
                }
                }
                boolean isUpdatedSystemAppFromExistingSetting = pkgSetting != null
                boolean isUpdatedSystemAppFromExistingSetting = pkgSetting != null
                        && pkgSetting.getPkgState().isUpdatedSystemApp();
                        && pkgSetting.getPkgState().isUpdatedSystemApp();
                final String abiOverride = deriveAbiOverride(args.abiOverride, pkgSetting);
                AndroidPackage oldPackage = mPackages.get(pkgName);
                AndroidPackage oldPackage = mPackages.get(pkgName);
                boolean isUpdatedSystemAppInferred = oldPackage != null && oldPackage.isSystem();
                boolean isUpdatedSystemAppInferred = oldPackage != null && oldPackage.isSystem();
                final Pair<PackageAbiHelper.Abis, PackageAbiHelper.NativeLibraryPaths>
                final Pair<PackageAbiHelper.Abis, PackageAbiHelper.NativeLibraryPaths>
                        derivedAbi = mInjector.getAbiHelper().derivePackageAbi(parsedPackage,
                        derivedAbi = mInjector.getAbiHelper().derivePackageAbi(parsedPackage,
                        isUpdatedSystemAppFromExistingSetting || isUpdatedSystemAppInferred,
                        isUpdatedSystemAppFromExistingSetting || isUpdatedSystemAppInferred,
                        args.abiOverride);
                        abiOverride);
                derivedAbi.first.applyTo(parsedPackage);
                derivedAbi.first.applyTo(parsedPackage);
                derivedAbi.second.applyTo(parsedPackage);
                derivedAbi.second.applyTo(parsedPackage);
            } catch (PackageManagerException pme) {
            } catch (PackageManagerException pme) {