android的普通安装包是以压缩包(apk)的形式通过安装程序复制在/data/app下的。
如果我们想稳定的升级(将升级包放在sdcard中是一个非常不稳定的方式,因为sdcard随时可能被卸载,放在/data/包名/下也是同样的道理,用户很容易清空这个缓存地址),则要把程序复制到/data/app下,而这个路径在普通的非root手机上是不可以的,必须要通过android系统自带的安装程序进行"复制"(换句话说,普通程序需要root权限才可以做这件事情,这时jar包类似的程序是不可以的,因为这个安装程序无法读取一个Android资源配置文件。
so第一个升级方式,仅限于你的app可以取得root权限的情况,直接复制安装包到/data/app下复制你上个版本的安装程序就可以,像android market中的自动更新就是这么实现的,因为他是系统级别程序。
关于分离一个安装包,系统级别程序有一种类似的方式,像Youtube,Email就是这样的方式,就是把一个程序分离为.apk和.odex,在升级的时候也是直接替换就可以了,但前提也是他有root权限。
最后的总结就是,android是不允许普通程序“静默”安装逻辑代码的。