blob: d69737aef98f759e0f4bce66d85067708d3ec0a4 [file] [log] [blame]
/*
* Copyright (C) 2014 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.android.server.pm;
import android.annotation.IntDef;
import android.content.pm.PackageManager;
import com.android.server.pm.Installer.InstallerException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/** {@hide} */
public class PackageManagerException extends Exception {
public static final int INTERNAL_ERROR_NATIVE_LIBRARY_COPY = -1;
public static final int INTERNAL_ERROR_MOVE = -2;
public static final int INTERNAL_ERROR_MISSING_SETTING_FOR_MOVE = -3;
public static final int INTERNAL_ERROR_DERIVING_ABI = -4;
public static final int INTERNAL_ERROR_VERITY_SETUP = -5;
public static final int INTERNAL_ERROR_SHARED_LIB_INSTALLED_TWICE = -6;
public static final int INTERNAL_ERROR_STORAGE_INVALID_PACKAGE_UNKNOWN = -7;
public static final int INTERNAL_ERROR_STORAGE_INVALID_VOLUME_UNKNOWN = -8;
public static final int INTERNAL_ERROR_STORAGE_INVALID_NOT_INSTALLED_FOR_USER = -9;
public static final int INTERNAL_ERROR_STORAGE_INVALID_SHOULD_NOT_HAVE_STORAGE = -10;
public static final int INTERNAL_ERROR_DECOMPRESS_STUB = -11;
public static final int INTERNAL_ERROR_UPDATED_VERSION_BETTER_THAN_SYSTEM = -12;
public static final int INTERNAL_ERROR_DUP_STATIC_SHARED_LIB_PROVIDER = -13;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_VERSION_CODES_ORDER = -14;
public static final int INTERNAL_ERROR_SYSTEM_OVERLAY_STATIC = -15;
public static final int INTERNAL_ERROR_OVERLAY_LOW_TARGET_SDK = -16;
public static final int INTERNAL_ERROR_OVERLAY_SIGNATURE1 = -17;
public static final int INTERNAL_ERROR_OVERLAY_SIGNATURE2 = -18;
public static final int INTERNAL_ERROR_NOT_PRIV_SHARED_USER = -19;
public static final int INTERNAL_ERROR_INSTALL_MISSING_CHILD_SESSIONS = -20;
public static final int INTERNAL_ERROR_VERIFY_MISSING_CHILD_SESSIONS = -21;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_LOW_SDK = -22;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_INSTANT = -23;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_RENAMED = -24;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_DYNAMIC = -25;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_SHARED_USER = -26;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_ACTIVITY = -27;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_SERVICE = -28;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_CONTENT_PROVIDER = -29;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_BROADCAST_RECEIVER = -30;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_PERMISSION_GROUP = -31;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_FEATURE = -32;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_PERMISSION = -33;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_PROTECTED_BROADCAST = -34;
public static final int INTERNAL_ERROR_STATIC_SHARED_LIB_OVERLAY_TARGETS = -35;
public static final int INTERNAL_ERROR_APEX_NOT_DIRECTORY = -36;
public static final int INTERNAL_ERROR_APEX_MORE_THAN_ONE_FILE = -37;
public static final int INTERNAL_ERROR_MISSING_USER = -38;
@IntDef(prefix = { "INTERNAL_ERROR_" }, value = {
INTERNAL_ERROR_NATIVE_LIBRARY_COPY,
INTERNAL_ERROR_MOVE,
INTERNAL_ERROR_MISSING_SETTING_FOR_MOVE,
INTERNAL_ERROR_DERIVING_ABI,
INTERNAL_ERROR_VERITY_SETUP,
INTERNAL_ERROR_SHARED_LIB_INSTALLED_TWICE,
INTERNAL_ERROR_STORAGE_INVALID_PACKAGE_UNKNOWN,
INTERNAL_ERROR_STORAGE_INVALID_VOLUME_UNKNOWN,
INTERNAL_ERROR_STORAGE_INVALID_NOT_INSTALLED_FOR_USER,
INTERNAL_ERROR_STORAGE_INVALID_SHOULD_NOT_HAVE_STORAGE,
INTERNAL_ERROR_DECOMPRESS_STUB,
INTERNAL_ERROR_UPDATED_VERSION_BETTER_THAN_SYSTEM,
INTERNAL_ERROR_DUP_STATIC_SHARED_LIB_PROVIDER,
INTERNAL_ERROR_STATIC_SHARED_LIB_VERSION_CODES_ORDER,
INTERNAL_ERROR_SYSTEM_OVERLAY_STATIC,
INTERNAL_ERROR_OVERLAY_LOW_TARGET_SDK,
INTERNAL_ERROR_OVERLAY_SIGNATURE1,
INTERNAL_ERROR_OVERLAY_SIGNATURE2,
INTERNAL_ERROR_NOT_PRIV_SHARED_USER,
INTERNAL_ERROR_INSTALL_MISSING_CHILD_SESSIONS,
INTERNAL_ERROR_VERIFY_MISSING_CHILD_SESSIONS,
INTERNAL_ERROR_STATIC_SHARED_LIB_LOW_SDK,
INTERNAL_ERROR_STATIC_SHARED_LIB_INSTANT,
INTERNAL_ERROR_STATIC_SHARED_LIB_RENAMED,
INTERNAL_ERROR_STATIC_SHARED_LIB_DYNAMIC,
INTERNAL_ERROR_STATIC_SHARED_LIB_SHARED_USER,
INTERNAL_ERROR_STATIC_SHARED_LIB_ACTIVITY,
INTERNAL_ERROR_STATIC_SHARED_LIB_SERVICE,
INTERNAL_ERROR_STATIC_SHARED_LIB_CONTENT_PROVIDER,
INTERNAL_ERROR_STATIC_SHARED_LIB_BROADCAST_RECEIVER,
INTERNAL_ERROR_STATIC_SHARED_LIB_PERMISSION_GROUP,
INTERNAL_ERROR_STATIC_SHARED_LIB_FEATURE,
INTERNAL_ERROR_STATIC_SHARED_LIB_PERMISSION,
INTERNAL_ERROR_STATIC_SHARED_LIB_PROTECTED_BROADCAST,
INTERNAL_ERROR_STATIC_SHARED_LIB_OVERLAY_TARGETS,
INTERNAL_ERROR_APEX_NOT_DIRECTORY,
INTERNAL_ERROR_APEX_MORE_THAN_ONE_FILE,
INTERNAL_ERROR_MISSING_USER
})
@Retention(RetentionPolicy.SOURCE)
public @interface InternalErrorCode {}
public final int error;
public final int internalErrorCode;
/**
* Default constructor without specifying the public return code of this exception.
* The public error code will be {@link PackageManager.INSTALL_FAILED_INTERNAL_ERROR}.
*
* Note for developers: if you use this constructor, assuming you have a different case where
* the exception should be thrown with {@link PackageManager.INSTALL_FAILED_INTERNAL_ERROR},
* please create a new {@link InternalErrorCode} constant.
*
* @param detailMessage Details about the cause of the exception.
* @param internalErrorCode Used for logging and analysis.
*/
public static PackageManagerException ofInternalError(String detailMessage,
@InternalErrorCode int internalErrorCode) {
return new PackageManagerException(
PackageManager.INSTALL_FAILED_INTERNAL_ERROR, detailMessage, internalErrorCode);
}
protected PackageManagerException(int error, String detailMessage, int internalErrorCode) {
super(detailMessage);
this.error = error;
this.internalErrorCode = internalErrorCode;
}
public PackageManagerException(int error, String detailMessage) {
super(detailMessage);
this.error = error;
this.internalErrorCode = 0;
}
public PackageManagerException(int error, String detailMessage, Throwable throwable) {
super(detailMessage, throwable);
this.error = error;
this.internalErrorCode = 0;
}
public PackageManagerException(Throwable e) {
super(e);
this.error = PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
this.internalErrorCode = 0;
}
public static PackageManagerException from(InstallerException e)
throws PackageManagerException {
throw new PackageManagerException(PackageManager.INSTALL_FAILED_INTERNAL_ERROR,
e.getMessage(), e.getCause());
}
}