android 版本升级,从服务器下载的apk,包解析失败问题解决
来源:互联网 发布:网络教育是怎么回事 编辑:程序博客网 时间:2024/04/29 17:08
今天做了一个android 的版本升级,从服务器上面下载下来的apk总是在安装的时候 报解析失败,包不能解析。
开始找问题,发现 下载下来的文件和实际服务器中的文件大小不一致。 这应该就是问题的根源了。
我以前的写文件的方法如下:
byte[] buffer=new byte[1024]; while(input.read(buffer)!=-1){ output.write(buffer); }
我的理解:
这种读写方式 就会导致文件在最后生成的时候会有很多空字节,因为循环读1024个字节,在最后的时候1024未必会读满。所以改进代码如下:
byte[] buffer=new byte[1024]; int l=0; while((l=input.read(buffer))!=-1){ output.write(buffer,0,l); }
int size=input.read(byte[]); 他返回的size就是以整数形式返回实际读取的字节数。 所以在write的时候 写入他的有效字节数就避免了此问题。
全部代码为:
public boolean download(String urlStr,String version){ //String urlStr="http://172.17.54.91:8080/download/1.mp3"; String path="file"; String fileName="demo_"+version+".apk"; OutputStream output=null; try { /* * 通过URL取得HttpURLConnection * 要网络连接成功,需在AndroidMainfest.xml中进行权限配置 * <uses-permission android:name="android.permission.INTERNET" /> */ URL url=new URL(urlStr); HttpURLConnection conn=(HttpURLConnection)url.openConnection(); //取得inputStream,并将流中的信息写入SDCard /* * 写前准备 * 1.在AndroidMainfest.xml中进行权限配置 * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> * 取得写入SDCard的权限 * 2.取得SDCard的路径: Environment.getExternalStorageDirectory() * 3.检查要保存的文件上是否已经存在 * 4.不存在,新建文件夹,新建文件 * 5.将input流中的信息写入SDCard * 6.关闭流 */ String SDCard= Environment.getExternalStorageDirectory()+""; String pathName=SDCard+"/"+path+"/"+fileName;//文件存储路径 //String pathName="F:\\"+"/"+path+"/"+fileName;//文件存储路径 File file=new File(pathName); InputStream input=conn.getInputStream(); if(file.exists()){ System.out.println("exits"); file.delete(); } String dir=SDCard+"/"+path; new File(dir).mkdir();//新建文件夹 file.createNewFile();//新建文件 output=new FileOutputStream(file); //读取大文件 byte[] buffer=new byte[1024]; int l=0; while((l=input.read(buffer))!=-1){ output.write(buffer,0,l); } input.close(); output.close(); conn.disconnect(); } catch (MalformedURLException e) { e.printStackTrace(); return false; } catch (IOException e) { e.printStackTrace(); return false; } return true; }
转载请标明原著:http://blog.csdn.net/qq_34155601/article/details/72651714
阅读全文
3 0
- android 版本升级,从服务器下载的apk,包解析失败问题解决
- Android 从服务器下载apk
- android 获得安装apk包的版本信息 和 版本升级 代码
- Android 7.0版本升级解析包错误
- [android] apk 版本升级
- 关于从服务器下载的新版apk更新失败的问题
- 解决APK下载到Cache目录安装提示“解析安装包失败”的问题
- Android 版本升级(APK下载和安装)
- Android的APK升级以及下载安装
- Android 版本更新下载自动安装APK,并解决Android6.0安装失败的问题
- Android 版本更新下载自动安装APK,并解决Android6.0,7.0安装失败的问题
- android之apk自动更新解析包失败问题
- 从服务器下载&&OTA升级&&JSON文件解析
- 升级Android内置apk版本
- Android APK版本升级设计
- Android 开发XML解析,从服务器下载
- Android----- 版本更新和 服务器下载新版本APK并安装
- android 从服务器上获取APK下载安装
- angular常用模块
- MySQL数据库(34)
- 串口流控
- CocosBuilder回调事件失败问题
- C++容器与noncopyable
- android 版本升级,从服务器下载的apk,包解析失败问题解决
- 【Dlib+Python+Ubuntu】人脸landmark
- Mysql联合查询union和union all的使用介绍
- 蓝桥杯java第五届决赛第四题--排列序数
- Redis 与 数据库处理数据的两种模式
- 常用sql语句参考
- db2 row_number() over()
- iOS学习之路01
- 2017(第二届)3D打印技术与产业应用大会即将于6月召开!