今天玩的项目是公司的在线升级项目,我就是负责调试Bug,顺带在过程中学点东西。项目到手后我就发现了个问题了,我把System下的apk删除之后,发现as还是无法将Demo运行到真机上。顺带还报了个错误  INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES。好吧,开门不顺


经过漫长的寻找,找到了答案。原因就是因为签名的问题。。。

什么时候会报  INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES这个错误呢?

1) 两个应用,名字相同,签名不同

2) 升级时前一版本签名,后一版本没签名

3) 升级时前一版本为 DEBUG 签名,后一个为自定义签名

4) 升级时前一版本为 Android 源码中的签名,后一个为 DEBUG 签名或自定义签名

5) 安装未签名的程序

6) 安装升级已过有效期的程序



我想我的问题就是第1点,原来真机上的Demo是有数字签名的,而我的Demo是copy过来,创建的新Demo,签名的方式是系统默认的方式。所以就导致了这个安装错误的尴尬!!


以前对Android的签名打包也不是很懂,记得有人问我,签名有什么用,我曹了,想都不想就是签名就是证明这个程序是你写的....现在想想还真是年少无知

平时我们的程序可以在模拟器上安装并运行,是因为在应用程序开发期间,由于是以Debug面试进行编译的,因此ADT根据会自动用默认的密钥和证书来进行签名,而在以发布模式编译时,apk文件就不会得到自动签名,这样就需要进行手工签名。
   为什么要签名

1.防止包名相同的应用来混淆,这么多的APP你能保证你的包名和别人的不同么,而Android中应用的包名是唯一的,所以用签名是为了防止其他应用的混淆、

2.签名对包中每个文件进行处理,以确保包中的内容不被替换(这个说实话,不是很懂)

3.对每个软件的要求


签名的两种方式参考下面的链接:


我用以前的.keystore文件对Demo进行签名后,就可以运行我的as Demo了