版本更新时出现解析包错误

 问题场景是:软件从 1.2.4 升级到 1.3.0 的过程中出现了如题的问题即下载后安装时出现“解析包时出现问题”的错误后停止。而且不是所有的手机都会出现这个问题,在华为 2.2 系统的测试机上是可以成功安装的,而用魅族 2X 就不行。

       首先我怀疑下载的apk包的时候出现了问题,或许是在数据流传输的过程中丢包了,造成apk文件不完整。于是我查看了一下下载方法。发现程序中是用File.createTempFile的方法进行下载的,而使用File.createTempFile方法下载的文件,在不同Android系统下文件的存储位置不同。

       在android1.6android2.2android2.3.x系统下,用File.createTempFile方法创建的文件会存放到sd卡上;在android 4.1.1系统下,则会将临时文件存放到/data/data/应用包名/cache目录下,而这个目录仅对本应用程序有读写权限,所以当程序下载成功后发送意图(Intent)给系统安装时,系统安装程序没有访问该文件的权限,于是系统就会打印“ Permission denied ”的log,弹出“解析包时出现错误”。

       因为魅族2XFlyme2.0系统是基于Android4.1系统修改的,所以会出现这个问题。

那么我们如何解决这个问题呢,我的解决方法是,让系统自带的浏览器去下载,如此一来下载下来的apk包文件就不会存在权限不足的问题了。


我这里使用的是HttpUtils.download进行下载的这个方法参数的意义:


/**
                 * 参数一:下载地址,参数二:下载到的本地的路径,
                 * 参数三:如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。
                 * 参数四:如果从请求返回信息中获取到文件名,下载完成后自动重命名。
                 */


[java] view plain copy
  1. Intent intent = new Intent();  
  2. intent.setAction("android.intent.action.VIEW");  
  3. Uri content_url = Uri.parse(url);  
  4. intent.setData(content_url);  
  5. startActivity(intent); 


      很有可能是因为路径问题,最好不要写成sdcard/Download/,这样就可能出现解析包错误,建议改成 Environment.getExternalStorageDirectory()+"/Download/",就不会出现解析包的问题了版本更新时出现解析包错误_第1张图片


你可能感兴趣的:(版本更新时出现解析包错误)