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

Commit 6bdede0a authored by Narayan Kamath's avatar Narayan Kamath Committed by Android (Google) Code Review
Browse files

Merge "Fix multiArch installs where only some archs are available." into lmp-dev

parents 53727410 f5f1828d
Loading
Loading
Loading
Loading
+19 −35
Original line number Diff line number Diff line
@@ -5428,11 +5428,8 @@ public class PackageManagerService extends IPackageManager.Stub {
                        }
                    }
                    if (abi32 < 0 && abi32 != PackageManager.NO_NATIVE_LIBRARIES) {
                        throw new PackageManagerException(INSTALL_FAILED_INTERNAL_ERROR,
                                "Error unpackaging 32 bit native libs for multiarch app, errorCode="
                                + abi32);
                    }
                    maybeThrowExceptionForMultiArchCopy(
                            "Error unpackaging 32 bit native libs for multiarch app.", abi32);
                    if (Build.SUPPORTED_64_BIT_ABIS.length > 0) {
                        if (isAsec) {
@@ -5443,11 +5440,8 @@ public class PackageManagerService extends IPackageManager.Stub {
                        }
                    }
                    if (abi64 < 0 && abi64 != PackageManager.NO_NATIVE_LIBRARIES) {
                        throw new PackageManagerException(INSTALL_FAILED_INTERNAL_ERROR,
                                "Error unpackaging 64 bit native libs for multiarch app, errorCode="
                                + abi32);
                    }
                    maybeThrowExceptionForMultiArchCopy(
                            "Error unpackaging 64 bit native libs for multiarch app.", abi64);
                    if (abi64 >= 0) {
                        pkg.applicationInfo.primaryCpuAbi = Build.SUPPORTED_64_BIT_ABIS[abi64];
@@ -6240,9 +6234,6 @@ public class PackageManagerService extends IPackageManager.Stub {
            if (info.primaryCpuAbi != null) {
                info.nativeLibraryDir = new File(info.nativeLibraryRootDir,
                        VMRuntime.getInstructionSet(info.primaryCpuAbi)).getAbsolutePath();
            } else {
                Slog.w(TAG, "Package " + info.packageName
                        + " missing ABI; unable to derive nativeLibraryDir");
            }
        } else {
            info.nativeLibraryDir = info.nativeLibraryRootDir;
@@ -9264,29 +9255,13 @@ public class PackageManagerService extends IPackageManager.Stub {
                    if (Build.SUPPORTED_32_BIT_ABIS.length > 0) {
                        copyRet = copyNativeLibrariesForInternalApp(handle, libraryRoot,
                                Build.SUPPORTED_32_BIT_ABIS, true /* use isa specific subdirs */);
                        if (copyRet < 0 && copyRet != PackageManager.NO_NATIVE_LIBRARIES) {
                            Slog.w(TAG, "Failure copying 32 bit native libraries [errorCode=" + copyRet + "]");
                            return copyRet;
                        }
                    }
                    if (DEBUG_ABI_SELECTION && copyRet >= 0) {
                        Log.d(TAG, "Installed 32 bit libraries under: " + codeFile + " abi=" +
                                Build.SUPPORTED_32_BIT_ABIS[copyRet]);
                        maybeThrowExceptionForMultiArchCopy("Failure copying 32 bit native libraries", copyRet);
                    }
                    if (Build.SUPPORTED_64_BIT_ABIS.length > 0) {
                        copyRet = copyNativeLibrariesForInternalApp(handle, libraryRoot,
                                Build.SUPPORTED_64_BIT_ABIS, true /* use isa specific subdirs */);
                        if (copyRet < 0 && copyRet != PackageManager.NO_NATIVE_LIBRARIES) {
                            Slog.w(TAG, "Failure copying 64 bit native libraries [errorCode=" + copyRet + "]");
                            return copyRet;
                        }
                    }
                    if (DEBUG_ABI_SELECTION && copyRet >= 0) {
                        Log.d(TAG, "Installed 64 bit libraries under: " + codeFile + " abi=" +
                                Build.SUPPORTED_64_BIT_ABIS[copyRet]);
                        maybeThrowExceptionForMultiArchCopy("Failure copying 64 bit native libraries", copyRet);
                    }
                } else {
                    String[] abiList = (abiOverride != null) ?
@@ -9303,14 +9278,13 @@ public class PackageManagerService extends IPackageManager.Stub {
                        Slog.w(TAG, "Failure copying native libraries [errorCode=" + copyRet + "]");
                        return copyRet;
                    }
                    if (DEBUG_ABI_SELECTION && copyRet >= 0) {
                        Log.d(TAG, "Installed libraries under: " + codeFile + " abi=" + abiList[copyRet]);
                    }
                }
            } catch (IOException e) {
                Slog.e(TAG, "Copying native libraries failed", e);
                ret = PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
            } catch (PackageManagerException pme) {
                Slog.e(TAG, "Copying native libraries failed", pme);
                ret = pme.error;
            } finally {
                IoUtils.closeQuietly(handle);
            }
@@ -9459,6 +9433,16 @@ public class PackageManagerService extends IPackageManager.Stub {
        return !asecPath.startsWith(mAsecInternalPath);
    }
    private static void maybeThrowExceptionForMultiArchCopy(String message, int copyRet) throws
            PackageManagerException {
        if (copyRet < 0) {
            if (copyRet != PackageManager.NO_NATIVE_LIBRARIES &&
                    copyRet != PackageManager.INSTALL_FAILED_NO_MATCHING_ABIS) {
                throw new PackageManagerException(copyRet, message);
            }
        }
    }
    /**
     * Extract the MountService "container ID" from the full code path of an
     * .apk.