http://www.eoeandroid.com/forum.php?mod=viewthread&tid=328636
这几天在弄安装的事情,发现很多安装包不能安装成功。IPackageInstallObserver会用回调函数packageInstalled(String packageName, int returnCode)告诉我们returnCode安装结果。
安卓 源码中是这么定义这些returnCode的:public static final int INSTALL_SUCCEEDED = 1;
/**
* Installation return code: this is passed to the { @link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if the package is
* already installed.
* @hide
*/
public static final int INSTALL_FAILED_ALREADY_EXISTS = -1;
/**
* Installation return code: this is passed to the {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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
*/
public static final int INSTALL_FAILED_TEST_ONLY = -15;
/**
* Installation return code: this is passed to the {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
* the package being installed contains native code, but none that is
* compatible with the the device's CPU_ABI.
* @hide
*/
public static final int INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16;
/**
* Installation return code: this is passed to the {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} 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 parse return code: this is passed to the {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
* 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
* 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
* 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
* 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
* 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
* 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
* 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
* 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
* 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
* 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 {@link IPackageInstallObserver} by
* {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
* if the system failed to install the package because of system issues.
* @hide
*/
public static final int INSTALL_FAILED_INTERNAL_ERROR = -110;
下面一一来看一下每个对应的意义:
《1》
public static final int INSTALL_SUCCEEDED = 1;
这个自不用说,就是你安装成功了。
《-1》public static final int INSTALL_FAILED_ALREADY_EXISTS = -1;
大侠,我都已经安装了啊,你还装
《-2》public static final int INSTALL_FAILED_INVALID_APK = -2;
文件无效啊,请看看路径是否对,再看看权限是不是rw-rw-rw-啊
《-3》 public static final int INSTALL_FAILED_INVALID_URI = -3;
靠,这个文件路径根本无法解析嘛!请用英文命名你的apk包。
《-4》public static final int INSTALL_FAILED_INSUFFICIENT_STORAGE = -4;
装了你我就满了,拿什么装其他东西,fk
《-5》 public static final int INSTALL_FAILED_DUPLICATE_PACKAGE = -5;
已经有和我名字一样的一共用了,请把那个冒牌货删除好吗?
《-6》public static final int INSTALL_FAILED_NO_SHARED_USER = -6;
共享用户都不存在,你搞什么哦
《-7》public static final int INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7;
不能更新,请卸载原来的版本,并把data剩余的东西弄干净
《-8》public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8;
我们是共享用户啊,为什么给我的签名不一样
《-9》 public static final int INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9;
老子的LIBRARY呢,去哪里了?
《-10》public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10;
LIBRARY有是有,但是用不了额。。。
《-11》public static final int INSTALL_FAILED_DEXOPT = -11;
空间不足或者验证失败了
《-12》public static final int INSTALL_FAILED_OLDER_SDK = -12;
安装包要求的安卓版本太高了啊,4.5的平台滚粗,还是1.6好
《-13》public static final int INSTALL_FAILED_CONFLICTING_PROVIDER = -13;
Provider已经被别人定义了啊,你换个名字吧亲
《-14》public static final int INSTALL_FAILED_NEWER_SDK = -14;
哥,你还真把1.6的应用往4.4的手机上装啊。
《-15》public static final int INSTALL_FAILED_TEST_ONLY = -15;
只供测试,你哪来的包?
《-16》 public static final int INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16;
哥,你调底层的东西,手机cpu办不到啊。。。
《-17》public static final int INSTALL_FAILED_MISSING_FEATURE = -17;
你要的效果我没有,请把对应部分注释掉
《-18》 public static final int INSTALL_FAILED_CONTAINER_ERROR = -18;
你说装哪就装哪?还是给系统一个选择吧,用auto最好了
《-19》 public static final int INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19;
路径不对
《-20》public static final int INSTALL_FAILED_MEDIA_UNAVAILABLE = -20;
你把我当U盘用,还要同时在我上面装东西,你还有良心吗
《-100》 public static final int INSTALL_PARSE_FAILED_NOT_APK = -100;
这个好像是zip,不是apk
《-101》public static final int INSTALL_PARSE_FAILED_BAD_MANIFEST = -101;
MANIFEST啊,多少次死在你手里
《-102》public static final int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102;
解析失败了,也许你是把txt文件改成.apk文件了,但是本质是不会变的
《-103》public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103;
你会签名吗。。。
《-104》 public static final int INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104;
签名是会签了,但是要一致哦
《-105》public static final int INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105;
签名解码失败
《-106》 public static final int INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106;
有包名吗,正确吗
《-107》public static final int INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107;
共享用户有吗,名字对吗
《-108》 public static final int INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108;
在检查检查MANIFEST吧
《-109》public static final int INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109;
我靠,你这个应用啥也么木有啊。
《-110》public static final int INSTALL_FAILED_INTERNAL_ERROR = -110;