安装APK错误码-ADB

本文详细列举了Android系统中APK安装过程中可能遇到的各种错误码及其含义,从安装成功到各种失败情况,帮助开发者快速定位并解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装APK的错误码,定义在Android源码中的这个文件中:
frameworks\base\core\Java\android\content\pm\PackageManager.java

参考链接 http://blog.youkuaiyun.com/gaojinshan/article/details/7954680

/**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} on success.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_SUCCEEDED = 1;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the package is already installed.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_ALREADY_EXISTS = -1;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the package archive file is invalid.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_INVALID_APK = -2;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the URI passed in is invalid.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_INVALID_URI = -3;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the package manager service found that
     * the device didn't have enough storage space to install the app.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_INSUFFICIENT_STORAGE = -4;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if a package is already installed with
     * the same name.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_DUPLICATE_PACKAGE = -5;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the requested shared user does not
     * exist.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_NO_SHARED_USER = -6;

    /**
     * Installation return code: this is passed to the
     * {@link 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
     */
    @SystemApi
    public static final int INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the new package is requested a shared
     * user which is already installed on the device and does not have matching
     * signature.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the new package uses a shared library
     * that is not available.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the new package uses a shared library
     * that is not available.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10;

    /**
     * Installation return code: this is passed to the
     * {@link 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
     */
    @SystemApi
    public static final int INSTALL_FAILED_DEXOPT = -11;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the new package failed because the
     * current SDK version is older than that required by the package.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_OLDER_SDK = -12;

    /**
     * Installation return code: this is passed to the
     * {@link 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
     */
    @SystemApi
    public static final int INSTALL_FAILED_CONFLICTING_PROVIDER = -13;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the new package failed because the
     * current SDK version is newer than that required by the package.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_NEWER_SDK = -14;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the new package failed because it has
     * specified that it is a test-only package and the caller has not supplied
     * the {@link #INSTALL_ALLOW_TEST} flag.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_TEST_ONLY = -15;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the package being installed contains
     * native code, but none that is compatible with the device's CPU_ABI.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the new package uses a feature that is
     * not available.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_MISSING_FEATURE = -17;

    // ------ Errors related to sdcard
    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if a secure container mount point
     * couldn't be accessed on external media.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_CONTAINER_ERROR = -18;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the new package couldn't be installed
     * in the specified install location.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the new package couldn't be installed
     * in the specified install location because the media is not available.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_MEDIA_UNAVAILABLE = -20;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the new package couldn't be installed
     * because the verification timed out.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_VERIFICATION_TIMEOUT = -21;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the new package couldn't be installed
     * because the verification did not succeed.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_VERIFICATION_FAILURE = -22;

    /**
     * Installation return code: this is passed to the
     * {@link IPackageInstallObserver} if the package changed from what the
     * calling program expected.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_PACKAGE_CHANGED = -23;

    /**
     * Installation return code: this is passed to the
     * {@link 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
     * {@link 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
     * {@link 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
     */
    @SystemApi
    public static final int INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE = -26;

    /**
     * Installation parse return code: this is passed to the
     * {@link IPackageInstallObserver} if the parser was given a path that is
     * not a file, or does not end with the expected '.apk' extension.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_PARSE_FAILED_NOT_APK = -100;

    /**
     * Installation parse return code: this is passed to the
     * {@link IPackageInstallObserver} if the parser was unable to retrieve the
     * AndroidManifest.xml file.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_PARSE_FAILED_BAD_MANIFEST = -101;

    /**
     * Installation parse return code: this is passed to the
     * {@link IPackageInstallObserver} if the parser encountered an unexpected
     * exception.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102;

    /**
     * Installation parse return code: this is passed to the
     * {@link IPackageInstallObserver} if the parser did not find any
     * certificates in the .apk.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103;

    /**
     * Installation parse return code: this is passed to the
     * {@link IPackageInstallObserver} if the parser found inconsistent
     * certificates on the files in the .apk.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104;

    /**
     * Installation parse return code: this is passed to the
     * {@link IPackageInstallObserver} if the parser encountered a
     * CertificateEncodingException in one of the files in the .apk.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105;

    /**
     * Installation parse return code: this is passed to the
     * {@link IPackageInstallObserver} if the parser encountered a bad or
     * missing package name in the manifest.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106;

    /**
     * Installation parse return code: this is passed to the
     * {@link IPackageInstallObserver} if the parser encountered a bad shared
     * user id name in the manifest.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107;

    /**
     * Installation parse return code: this is passed to the
     * {@link IPackageInstallObserver} if the parser encountered some structural
     * problem in the manifest.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108;

    /**
     * Installation parse return code: this is passed to the
     * {@link IPackageInstallObserver} if the parser did not find any actionable
     * tags (instrumentation or application) in the manifest.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109;

    /**
     * Installation failed return code: this is passed to the
     * {@link IPackageInstallObserver} if the system failed to install the
     * package because of system issues.
     *
     * @hide
     */
    @SystemApi
    public static final int INSTALL_FAILED_INTERNAL_ERROR = -110;

    /**
     * Installation failed return code: this is passed to the
     * {@link 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
     * {@link 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 {@link PackageInstallObserver}, if any, as the
     * {@link #EXTRA_FAILURE_EXISTING_PACKAGE} string extra; and the name of the
     * permission being redefined is passed in the
     * {@link #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
     * {@link 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;
<think>好的,我现在需要帮助用户解决Android应用安装时出现的INSTALL_FAILED_VERSION_DOWNGRADE错误。首先,我要理解这个错误的原因。根据用户提供的引用内容,这个错误是因为当前安装APK版本号(versionCode)低于设备上已安装的版本。versionCode是Android用来管理应用升级的一个整数值,每次更新必须比之前的高才能正常安装。 接下来,我需要按照用户的指示来组织回答。用户希望结构清晰,分步骤解决问题,并且引用相关的资料。首先,我需要列出具体的解决步骤,每个步骤都要有对应的操作方法和引用来源。比如,检查versionCode,修改并提高这个值,使用adb命令覆盖安装,或者卸载旧版本再安装新版本。 然后,我需要确保回答符合系统级指令,比如正确使用LaTeX格式,不过在这个问题中可能用到的数学表达式不多,但如果有的话,比如提到版本号数值,可能需要用行内公式,不过这里可能不需要。另外,生成相关问题也是必须的,我需要想几个用户可能会进一步提出的问题,比如如何避免这种错误,或者versionCode和versionName的区别。 还要注意引用格式,每个步骤末尾需要自然地添加引用标识。例如,在提到检查versionCode的时候,引用[4]和[1]。使用adb命令安装时引用[5]和[2]。同时,用户提供的引用中有多个解决方案,需要综合起来,给出不同的解决方法,比如修改versionCode、使用-r -d参数,或者卸载应用。 另外,用户提到自己已经尝试调高versionCode但依然失败,可能需要提醒检查是否正确修改了build.gradle文件,并重新构建APK。或者是否安装了其他渠道的APK导致版本冲突。这些细节需要涵盖在步骤中,确保用户全面检查可能的问题点。 最后,生成的相关问题需要围绕这个错误的预防、相关概念区分以及adb的其他安装参数,这样用户如果有进一步疑问,可以引导他们探索更多内容。 总结一下,回答的结构应该是先解释错误原因,再分步骤给出解决方法,每个步骤附带引用,然后列出相关问题。需要确保语言简洁明了,步骤可操作,引用正确。</think>### 如何修复 Android INSTALL_FAILED_VERSION_DOWNGRADE 错误? #### 错误原因 此错误表示当前安装APK 的版本号(`versionCode`)低于设备上已安装的同包名应用的版本号。Android 系统通过 `versionCode` 判断应用版本新旧,若新安装的版本号更低,则会拒绝安装[^3][^4]。 --- #### 解决步骤 1. **检查并提高 `versionCode`** - 打开项目的 `build.gradle` 文件,找到 `versionCode` 字段。 - 确保其值 **大于** 设备上已安装版本的 `versionCode`。例如,若已安装版本为 `3`,则修改为 `4` 或更高[^1]。 - 重新构建 APK 并尝试安装。 2. **通过 ADB 强制覆盖安装** - 使用以下命令绕过版本号限制(需保留用户数据): ```bash adb install -r -d your_app.apk ``` 参数说明: - `-r`:覆盖安装 - `-d`:允许版本降级(仅限调试场景)[^5][^2] 3. **卸载旧版本后安装新版本** - 若无需保留数据,可直接卸载旧版本: ```bash adb uninstall your.package.name ``` -安装APK--- #### 注意事项 - **版本号定义规则**:`versionCode` 是整数(如 `1`, `2`),而 `versionName` 是字符串(如 `"1.0"`),仅 `versionCode` 影响安装判断[^4]。 - **多设备同步**:若通过不同设备测试,需确保所有设备的已安装版本号均低于新版本。 - **构建流程**:修改 `versionCode` 后,需重新执行 **Clean Project → Rebuild** 以生效。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值