/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.lody.virtual.server.pm.installer; import android.annotation.TargetApi; import android.content.pm.PackageInstaller; import android.os.Build; /** * Constants used internally between the PackageManager * and media container service transports. * Some utility methods to invoke MountService api. */ @TargetApi(Build.VERSION_CODES.LOLLIPOP) public class PackageHelper { /** * Installation return code: this is passed to the * IPackageInstallObserver on success. * * @hide */ public static final int INSTALL_SUCCEEDED = 1; /** * Installation return code: this is passed to the * IPackageInstallObserver if the package is already installed. * * @hide */ public static final int INSTALL_FAILED_ALREADY_EXISTS = -1; /** * Installation return code: this is passed to the * IPackageInstallObserver if the package archive file is invalid. * * @hide */ public static final int INSTALL_FAILED_INVALID_APK = -2; /** * Installation return code: this is passed to the * IPackageInstallObserver if the URI passed in is invalid. * * @hide */ public static final int INSTALL_FAILED_INVALID_URI = -3; /** * Installation return code: this is passed to the * IPackageInstallObserver if the package manager service found that * the device didn't have enough storage space to install the app. * * @hide */ public static final int INSTALL_FAILED_INSUFFICIENT_STORAGE = -4; /** * Installation return code: this is passed to the * IPackageInstallObserver if a package is already installed with * the same name. * * @hide */ public static final int INSTALL_FAILED_DUPLICATE_PACKAGE = -5; /** * Installation return code: this is passed to the * IPackageInstallObserver if the requested shared user does not * exist. * * @hide */ public static final int INSTALL_FAILED_NO_SHARED_USER = -6; /** * Installation return code: this is passed to the * IPackageInstallObserver if a previously installed package of the * same name has a different signature than the new package (and the old * package's data was not removed). * * @hide */ public static final int INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package is requested a shared * user which is already installed on the device and does not have matching * signature. * * @hide */ public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package uses a shared library * that is not available. * * @hide */ public static final int INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package uses a shared library * that is not available. * * @hide */ public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package failed while * optimizing and validating its dex files, either because there was not * enough storage or the validation failed. * * @hide */ public static final int INSTALL_FAILED_DEXOPT = -11; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package failed because the * current SDK version is older than that required by the package. * * @hide */ public static final int INSTALL_FAILED_OLDER_SDK = -12; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package failed because it * contains a content provider with the same authority as a provider already * installed in the system. * * @hide */ public static final int INSTALL_FAILED_CONFLICTING_PROVIDER = -13; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package failed because the * current SDK version is newer than that required by the package. * * @hide */ public static final int INSTALL_FAILED_NEWER_SDK = -14; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package failed because it has * specified that it is a test-only package and the caller has not supplied * the NSTALL_ALLOW_TEST flag. * * @hide */ public static final int INSTALL_FAILED_TEST_ONLY = -15; /** * Installation return code: this is passed to the * IPackageInstallObserver if the package being installed contains * native code, but none that is compatible with the device's CPU_ABI. * * @hide */ public static final int INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package uses a feature that is * not available. * * @hide */ public static final int INSTALL_FAILED_MISSING_FEATURE = -17; // ------ Errors related to sdcard /** * Installation return code: this is passed to the * IPackageInstallObserver if a secure container mount point * couldn't be accessed on external media. * * @hide */ public static final int INSTALL_FAILED_CONTAINER_ERROR = -18; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package couldn't be installed * in the specified install location. * * @hide */ public static final int INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package couldn't be installed * in the specified install location because the media is not available. * * @hide */ public static final int INSTALL_FAILED_MEDIA_UNAVAILABLE = -20; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package couldn't be installed * because the verification timed out. * * @hide */ public static final int INSTALL_FAILED_VERIFICATION_TIMEOUT = -21; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package couldn't be installed * because the verification did not succeed. * * @hide */ public static final int INSTALL_FAILED_VERIFICATION_FAILURE = -22; /** * Installation return code: this is passed to the * IPackageInstallObserver if the package changed from what the * calling program expected. * * @hide */ public static final int INSTALL_FAILED_PACKAGE_CHANGED = -23; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package is assigned a * different UID than it previously held. * * @hide */ public static final int INSTALL_FAILED_UID_CHANGED = -24; /** * Installation return code: this is passed to the * IPackageInstallObserver if the new package has an older version * code than the currently installed package. * * @hide */ public static final int INSTALL_FAILED_VERSION_DOWNGRADE = -25; /** * Installation return code: this is passed to the * IPackageInstallObserver if the old package has target SDK high * enough to support runtime permission and the new package has target SDK * low enough to not support runtime permissions. * * @hide */ public static final int INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE = -26; /** * Installation parse return code: this is passed to the * IPackageInstallObserver if the parser was given a path that is * not a file, or does not end with the expected '.apk' extension. * * @hide */ public static final int INSTALL_PARSE_FAILED_NOT_APK = -100; /** * Installation parse return code: this is passed to the * IPackageInstallObserver if the parser was unable to retrieve the * AndroidManifest.xml file. * * @hide */ public static final int INSTALL_PARSE_FAILED_BAD_MANIFEST = -101; /** * Installation parse return code: this is passed to the * IPackageInstallObserver if the parser encountered an unexpected * exception. * * @hide */ public static final int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102; /** * Installation parse return code: this is passed to the * IPackageInstallObserver if the parser did not find any * certificates in the .apk. * * @hide */ public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103; /** * Installation parse return code: this is passed to the * IPackageInstallObserver if the parser found inconsistent * certificates on the files in the .apk. * * @hide */ public static final int INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104; /** * Installation parse return code: this is passed to the * IPackageInstallObserver if the parser encountered a * CertificateEncodingException in one of the files in the .apk. * * @hide */ public static final int INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105; /** * Installation parse return code: this is passed to the * IPackageInstallObserver if the parser encountered a bad or * missing package name in the manifest. * * @hide */ public static final int INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106; /** * Installation parse return code: this is passed to the * IPackageInstallObserver if the parser encountered a bad shared * user id name in the manifest. * * @hide */ public static final int INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107; /** * Installation parse return code: this is passed to the * IPackageInstallObserver if the parser encountered some structural * problem in the manifest. * * @hide */ public static final int INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108; /** * Installation parse return code: this is passed to the * IPackageInstallObserver if the parser did not find any actionable * tags (instrumentation or application) in the manifest. * * @hide */ public static final int INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109; /** * Installation failed return code: this is passed to the * IPackageInstallObserver if the system failed to install the * package because of system issues. * * @hide */ public static final int INSTALL_FAILED_INTERNAL_ERROR = -110; /** * Installation failed return code: this is passed to the * IPackageInstallObserver if the system failed to install the * package because the user is restricted from installing apps. * * @hide */ public static final int INSTALL_FAILED_USER_RESTRICTED = -111; /** * Installation failed return code: this is passed to the * IPackageInstallObserver if the system failed to install the * package because it is attempting to define a permission that is already * defined by some existing package. * <p> * The package name of the app which has already defined the permission is * passed to a PackageInstallObserver, if any, as the * EXTRA_FAILURE_EXISTING_PACKAGE string extra; and the name of the * permission being redefined is passed in the * EXTRA_FAILURE_EXISTING_PERMISSION string extra. * * @hide */ public static final int INSTALL_FAILED_DUPLICATE_PERMISSION = -112; /** * Installation failed return code: this is passed to the * IPackageInstallObserver if the system failed to install the * package because its packaged native code did not match any of the ABIs * supported by the system. * * @hide */ public static final int INSTALL_FAILED_NO_MATCHING_ABIS = -113; /** * Internal return code for NativeLibraryHelper methods to indicate that the package * being processed did not contain any native code. This is placed here only so that * it can belong to the same value space as the other install failure codes. * * @hide */ public static final int NO_NATIVE_LIBRARIES = -114; /** {@hide} */ public static final int INSTALL_FAILED_ABORTED = -115; /** * Installation failed return code: ephemeral app installs are incompatible with some * other installation flags supplied for the operation; or other circumstances such * as trying to upgrade a system app via an ephemeral install. * @hide */ public static final int INSTALL_FAILED_EPHEMERAL_INVALID = -116; /** * Return code for when package deletion succeeds. This is passed to the * IPackageDeleteObserver if the system succeeded in deleting the * package. * * @hide */ public static final int DELETE_SUCCEEDED = 1; /** * Deletion failed return code: this is passed to the * IPackageDeleteObserver if the system failed to delete the package * for an unspecified reason. * * @hide */ public static final int DELETE_FAILED_INTERNAL_ERROR = -1; /** * Deletion failed return code: this is passed to the * IPackageDeleteObserver if the system failed to delete the package * because it is the active DevicePolicy manager. * * @hide */ public static final int DELETE_FAILED_DEVICE_POLICY_MANAGER = -2; /** * Deletion failed return code: this is passed to the * IPackageDeleteObserver if the system failed to delete the package * since the user is restricted. * * @hide */ public static final int DELETE_FAILED_USER_RESTRICTED = -3; /** * Deletion failed return code: this is passed to the * IPackageDeleteObserver if the system failed to delete the package * because a profile or device owner has marked the package as * uninstallable. * * @hide */ public static final int DELETE_FAILED_OWNER_BLOCKED = -4; /** {@hide} */ public static final int DELETE_FAILED_ABORTED = -5; /** * Return code that is passed to the IPackageMoveObserver when the * package has been successfully moved by the system. * * @hide */ public static final int MOVE_SUCCEEDED = -100; /** * Error code that is passed to the IPackageMoveObserver when the * package hasn't been successfully moved by the system because of * insufficient memory on specified media. * * @hide */ public static final int MOVE_FAILED_INSUFFICIENT_STORAGE = -1; /** * Error code that is passed to the IPackageMoveObserver if the * specified package doesn't exist. * * @hide */ public static final int MOVE_FAILED_DOESNT_EXIST = -2; /** * Error code that is passed to the IPackageMoveObserver if the * specified package cannot be moved since its a system package. * * @hide */ public static final int MOVE_FAILED_SYSTEM_PACKAGE = -3; /** * Error code that is passed to the IPackageMoveObserver if the * specified package cannot be moved since its forward locked. * * @hide */ public static final int MOVE_FAILED_FORWARD_LOCKED = -4; /** * Error code that is passed to the IPackageMoveObserver if the * specified package cannot be moved to the specified location. * * @hide */ public static final int MOVE_FAILED_INVALID_LOCATION = -5; /** * Error code that is passed to the IPackageMoveObserver if the * specified package cannot be moved to the specified location. * * @hide */ public static final int MOVE_FAILED_INTERNAL_ERROR = -6; /** * Error code that is passed to the IPackageMoveObserver if the * specified package already has an operation pending in the queue. * * @hide */ public static final int MOVE_FAILED_OPERATION_PENDING = -7; /** * Error code that is passed to the IPackageMoveObserver if the * specified package cannot be moved since it contains a device admin. * * @hide */ public static final int MOVE_FAILED_DEVICE_ADMIN = -8; public static String installStatusToString(int status, String msg) { final String str = installStatusToString(status); if (msg != null) { return str + ": " + msg; } else { return str; } } /** {@hide} */ public static String installStatusToString(int status) { switch (status) { case INSTALL_SUCCEEDED: return "INSTALL_SUCCEEDED"; case INSTALL_FAILED_ALREADY_EXISTS: return "INSTALL_FAILED_ALREADY_EXISTS"; case INSTALL_FAILED_INVALID_APK: return "INSTALL_FAILED_INVALID_APK"; case INSTALL_FAILED_INVALID_URI: return "INSTALL_FAILED_INVALID_URI"; case INSTALL_FAILED_INSUFFICIENT_STORAGE: return "INSTALL_FAILED_INSUFFICIENT_STORAGE"; case INSTALL_FAILED_DUPLICATE_PACKAGE: return "INSTALL_FAILED_DUPLICATE_PACKAGE"; case INSTALL_FAILED_NO_SHARED_USER: return "INSTALL_FAILED_NO_SHARED_USER"; case INSTALL_FAILED_UPDATE_INCOMPATIBLE: return "INSTALL_FAILED_UPDATE_INCOMPATIBLE"; case INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: return "INSTALL_FAILED_SHARED_USER_INCOMPATIBLE"; case INSTALL_FAILED_MISSING_SHARED_LIBRARY: return "INSTALL_FAILED_MISSING_SHARED_LIBRARY"; case INSTALL_FAILED_REPLACE_COULDNT_DELETE: return "INSTALL_FAILED_REPLACE_COULDNT_DELETE"; case INSTALL_FAILED_DEXOPT: return "INSTALL_FAILED_DEXOPT"; case INSTALL_FAILED_OLDER_SDK: return "INSTALL_FAILED_OLDER_SDK"; case INSTALL_FAILED_CONFLICTING_PROVIDER: return "INSTALL_FAILED_CONFLICTING_PROVIDER"; case INSTALL_FAILED_NEWER_SDK: return "INSTALL_FAILED_NEWER_SDK"; case INSTALL_FAILED_TEST_ONLY: return "INSTALL_FAILED_TEST_ONLY"; case INSTALL_FAILED_CPU_ABI_INCOMPATIBLE: return "INSTALL_FAILED_CPU_ABI_INCOMPATIBLE"; case INSTALL_FAILED_MISSING_FEATURE: return "INSTALL_FAILED_MISSING_FEATURE"; case INSTALL_FAILED_CONTAINER_ERROR: return "INSTALL_FAILED_CONTAINER_ERROR"; case INSTALL_FAILED_INVALID_INSTALL_LOCATION: return "INSTALL_FAILED_INVALID_INSTALL_LOCATION"; case INSTALL_FAILED_MEDIA_UNAVAILABLE: return "INSTALL_FAILED_MEDIA_UNAVAILABLE"; case INSTALL_FAILED_VERIFICATION_TIMEOUT: return "INSTALL_FAILED_VERIFICATION_TIMEOUT"; case INSTALL_FAILED_VERIFICATION_FAILURE: return "INSTALL_FAILED_VERIFICATION_FAILURE"; case INSTALL_FAILED_PACKAGE_CHANGED: return "INSTALL_FAILED_PACKAGE_CHANGED"; case INSTALL_FAILED_UID_CHANGED: return "INSTALL_FAILED_UID_CHANGED"; case INSTALL_FAILED_VERSION_DOWNGRADE: return "INSTALL_FAILED_VERSION_DOWNGRADE"; case INSTALL_PARSE_FAILED_NOT_APK: return "INSTALL_PARSE_FAILED_NOT_APK"; case INSTALL_PARSE_FAILED_BAD_MANIFEST: return "INSTALL_PARSE_FAILED_BAD_MANIFEST"; case INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: return "INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION"; case INSTALL_PARSE_FAILED_NO_CERTIFICATES: return "INSTALL_PARSE_FAILED_NO_CERTIFICATES"; case INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES: return "INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES"; case INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING: return "INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING"; case INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME: return "INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME"; case INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID: return "INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID"; case INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: return "INSTALL_PARSE_FAILED_MANIFEST_MALFORMED"; case INSTALL_PARSE_FAILED_MANIFEST_EMPTY: return "INSTALL_PARSE_FAILED_MANIFEST_EMPTY"; case INSTALL_FAILED_INTERNAL_ERROR: return "INSTALL_FAILED_INTERNAL_ERROR"; case INSTALL_FAILED_USER_RESTRICTED: return "INSTALL_FAILED_USER_RESTRICTED"; case INSTALL_FAILED_DUPLICATE_PERMISSION: return "INSTALL_FAILED_DUPLICATE_PERMISSION"; case INSTALL_FAILED_NO_MATCHING_ABIS: return "INSTALL_FAILED_NO_MATCHING_ABIS"; case INSTALL_FAILED_ABORTED: return "INSTALL_FAILED_ABORTED"; default: return Integer.toString(status); } } /** {@hide} */ public static int installStatusToPublicStatus(int status) { switch (status) { case INSTALL_SUCCEEDED: return PackageInstaller.STATUS_SUCCESS; case INSTALL_FAILED_ALREADY_EXISTS: return PackageInstaller.STATUS_FAILURE_CONFLICT; case INSTALL_FAILED_INVALID_APK: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_FAILED_INVALID_URI: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_FAILED_INSUFFICIENT_STORAGE: return PackageInstaller.STATUS_FAILURE_STORAGE; case INSTALL_FAILED_DUPLICATE_PACKAGE: return PackageInstaller.STATUS_FAILURE_CONFLICT; case INSTALL_FAILED_NO_SHARED_USER: return PackageInstaller.STATUS_FAILURE_CONFLICT; case INSTALL_FAILED_UPDATE_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_CONFLICT; case INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_CONFLICT; case INSTALL_FAILED_MISSING_SHARED_LIBRARY: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE; case INSTALL_FAILED_REPLACE_COULDNT_DELETE: return PackageInstaller.STATUS_FAILURE_CONFLICT; case INSTALL_FAILED_DEXOPT: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_FAILED_OLDER_SDK: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE; case INSTALL_FAILED_CONFLICTING_PROVIDER: return PackageInstaller.STATUS_FAILURE_CONFLICT; case INSTALL_FAILED_NEWER_SDK: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE; case INSTALL_FAILED_TEST_ONLY: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_FAILED_CPU_ABI_INCOMPATIBLE: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE; case INSTALL_FAILED_MISSING_FEATURE: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE; case INSTALL_FAILED_CONTAINER_ERROR: return PackageInstaller.STATUS_FAILURE_STORAGE; case INSTALL_FAILED_INVALID_INSTALL_LOCATION: return PackageInstaller.STATUS_FAILURE_STORAGE; case INSTALL_FAILED_MEDIA_UNAVAILABLE: return PackageInstaller.STATUS_FAILURE_STORAGE; case INSTALL_FAILED_VERIFICATION_TIMEOUT: return PackageInstaller.STATUS_FAILURE_ABORTED; case INSTALL_FAILED_VERIFICATION_FAILURE: return PackageInstaller.STATUS_FAILURE_ABORTED; case INSTALL_FAILED_PACKAGE_CHANGED: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_FAILED_UID_CHANGED: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_FAILED_VERSION_DOWNGRADE: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_NOT_APK: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_BAD_MANIFEST: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_NO_CERTIFICATES: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_PARSE_FAILED_MANIFEST_EMPTY: return PackageInstaller.STATUS_FAILURE_INVALID; case INSTALL_FAILED_INTERNAL_ERROR: return PackageInstaller.STATUS_FAILURE; case INSTALL_FAILED_USER_RESTRICTED: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE; case INSTALL_FAILED_DUPLICATE_PERMISSION: return PackageInstaller.STATUS_FAILURE_CONFLICT; case INSTALL_FAILED_NO_MATCHING_ABIS: return PackageInstaller.STATUS_FAILURE_INCOMPATIBLE; case INSTALL_FAILED_ABORTED: return PackageInstaller.STATUS_FAILURE_ABORTED; default: return PackageInstaller.STATUS_FAILURE; } } public static String deleteStatusToString(boolean status) { return status ? "DELETE_SUCCEEDED" : "DELETE_FAILED"; } }