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

Commit f51d9b51 authored by Jiakai Zhang's avatar Jiakai Zhang Committed by Automerger Merge Worker
Browse files

Revert^2 "Fail adb install on external profile errors." am: 1dde3e7f am:...

Revert^2 "Fail adb install on external profile errors." am: 1dde3e7f am: b785772c am: af206077 am: 99b6b234

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2786681



Change-Id: I112486ff1d18be16a5e03362bf3371e9c34d45bf
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 62ed5ceb 99b6b234
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
// limitations under the License.

aconfig_srcjars = [
    ":android.content.pm.flags-aconfig-java{.generated_srcjars}",
    ":android.hardware.biometrics.flags-aconfig-java{.generated_srcjars}",
    ":android.nfc.flags-aconfig-java{.generated_srcjars}",
    ":android.os.flags-aconfig-java{.generated_srcjars}",
@@ -145,6 +146,26 @@ java_aconfig_library {
    defaults: ["framework-minus-apex-aconfig-java-defaults"],
}

// Package Manager
aconfig_declarations {
    name: "android.content.pm.flags-aconfig",
    package: "android.content.pm",
    srcs: ["core/java/android/content/pm/flags.aconfig"],
}

java_aconfig_library {
    name: "android.content.pm.flags-aconfig-java",
    aconfig_declarations: "android.content.pm.flags-aconfig",
    defaults: ["framework-minus-apex-aconfig-java-defaults"],
}

java_aconfig_library {
    name: "android.content.pm.flags-aconfig-java-host",
    aconfig_declarations: "android.content.pm.flags-aconfig",
    host_supported: true,
    defaults: ["framework-minus-apex-aconfig-java-defaults"],
}

// Biometrics
aconfig_declarations {
    name: "android.hardware.biometrics.flags-aconfig",
+7 −0
Original line number Diff line number Diff line
@@ -344,6 +344,13 @@ public class PackageInstaller {
    public static final String EXTRA_RESOLVED_BASE_PATH =
            "android.content.pm.extra.RESOLVED_BASE_PATH";

    /**
     * A list of warnings that occurred during installation.
     *
     * @hide
     */
    public static final String EXTRA_WARNINGS = "android.content.pm.extra.WARNINGS";

    /**
     * Streaming installation pending.
     * Caller should make sure DataLoader is able to prepare image and reinitiate the operation.
+8 −0
Original line number Diff line number Diff line
package: "android.content.pm"

flag {
    name: "use_art_service_v2"
    namespace: "package_manager_service"
    description: "Feature flag to enable the features that rely on new ART Service APIs that are in the VIC version of the ART module."
    bug: "304741685"
}
+44 −13
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import static android.content.pm.PackageManager.INSTALL_SCENARIO_DEFAULT;
import static android.content.pm.PackageManager.INSTALL_SUCCEEDED;
import static android.os.Process.INVALID_UID;

import static com.android.server.art.model.DexoptResult.DexContainerFileDexoptResult;
import static com.android.server.art.model.DexoptResult.PackageDexoptResult;
import static com.android.server.pm.PackageManagerService.SCAN_AS_INSTANT_APP;
import static com.android.server.pm.PackageManagerService.TAG;

@@ -30,6 +32,7 @@ import android.annotation.Nullable;
import android.apex.ApexInfo;
import android.app.AppOpsManager;
import android.content.pm.DataLoaderType;
import android.content.pm.Flags;
import android.content.pm.IPackageInstallObserver2;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
@@ -52,6 +55,7 @@ import com.android.server.pm.pkg.parsing.ParsingPackageUtils;

import java.io.File;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;

final class InstallRequest {
@@ -130,6 +134,9 @@ final class InstallRequest {

    private int mDexoptStatus;

    @NonNull
    private ArrayList<String> mWarnings = new ArrayList<>();

    // New install
    InstallRequest(InstallingSession params) {
        mUserId = params.getUser().getIdentifier();
@@ -615,6 +622,11 @@ final class InstallRequest {
        return mDexoptStatus;
    }

    @NonNull
    public ArrayList<String> getWarnings() {
        return mWarnings;
    }

    public void setScanFlags(int scanFlags) {
        mScanFlags = scanFlags;
    }
@@ -757,6 +769,10 @@ final class InstallRequest {
        }
    }

    public void addWarning(@NonNull String warning) {
        mWarnings.add(warning);
    }

    public void onPrepareStarted() {
        if (mPackageMetrics != null) {
            mPackageMetrics.onStepStarted(PackageMetrics.STEP_PREPARE);
@@ -806,23 +822,38 @@ final class InstallRequest {
    }

    public void onDexoptFinished(DexoptResult dexoptResult) {
        if (mPackageMetrics == null) {
            return;
        // Only report external profile warnings when installing from adb. The goal is to warn app
        // developers if they have provided bad external profiles, so it's not beneficial to report
        // those warnings in the normal app install workflow.
        if (isInstallFromAdb() && Flags.useArtServiceV2()) {
            var externalProfileErrors = new LinkedHashSet<String>();
            for (PackageDexoptResult packageResult : dexoptResult.getPackageDexoptResults()) {
                for (DexContainerFileDexoptResult fileResult :
                        packageResult.getDexContainerFileDexoptResults()) {
                    externalProfileErrors.addAll(fileResult.getExternalProfileErrors());
                }
        mDexoptStatus = dexoptResult.getFinalStatus();
        if (mDexoptStatus != DexoptResult.DEXOPT_PERFORMED) {
            return;
            }
            if (!externalProfileErrors.isEmpty()) {
                addWarning("Error occurred during dexopt when processing external profiles:\n  "
                        + String.join("\n  ", externalProfileErrors));
            }
        }

        // Report dexopt metrics.
        if (mPackageMetrics != null) {
            mDexoptStatus = dexoptResult.getFinalStatus();
            if (mDexoptStatus == DexoptResult.DEXOPT_PERFORMED) {
                long durationMillis = 0;
        for (DexoptResult.PackageDexoptResult packageResult :
                dexoptResult.getPackageDexoptResults()) {
            for (DexoptResult.DexContainerFileDexoptResult fileResult :
                for (PackageDexoptResult packageResult : dexoptResult.getPackageDexoptResults()) {
                    for (DexContainerFileDexoptResult fileResult :
                            packageResult.getDexContainerFileDexoptResults()) {
                        durationMillis += fileResult.getDex2oatWallTimeMillis();
                    }
                }
                mPackageMetrics.onStepFinished(PackageMetrics.STEP_DEXOPT, durationMillis);
            }
        }
    }

    public void onInstallCompleted() {
        if (getReturnCode() == INSTALL_SUCCEEDED) {
+4 −0
Original line number Diff line number Diff line
@@ -4931,6 +4931,10 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
            if (!TextUtils.isEmpty(existing)) {
                fillIn.putExtra(PackageInstaller.EXTRA_OTHER_PACKAGE_NAME, existing);
            }
            ArrayList<String> warnings = extras.getStringArrayList(PackageInstaller.EXTRA_WARNINGS);
            if (!ArrayUtils.isEmpty(warnings)) {
                fillIn.putStringArrayListExtra(PackageInstaller.EXTRA_WARNINGS, warnings);
            }
        }
        try {
            final BroadcastOptions options = BroadcastOptions.makeBasic();
Loading