解析程序包出现问题(更新下载apk)
最近在做更新功能
由于公司的项目是没有上线的,所以不能借助APP商店来更新。
我的大致思路是:
1.校验APP的版本号
2.下载最新版本
3.安装apk包
1.校验APP的版本号
由于公司后台比较忙,没时间帮我写这个接口。我自己写了一个json文件丢到Tomcat的root文件夹下面(必须是root下面,不能包裹一层文件夹。应该是要改Tomcat的一些配置才行,具体没有研究)。
这样我就有接口可以用了(将就着用)。同理,apk包也丢到root文件下。
在闪屏界面中发出校验请求,在返回的json中有一个versionName字段,将这个字段与本地的versionNaem进行对比(当然你也可以用versioncode校验)。如果返回的版本号大于本地的版本号则需要更新(下载最新版本),相同则不作处理。
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0); String oldVersionName = packageInfo.versionName; String newVersionName = response.body().getData().getVersionName();
2.下载最新版本
返回的json中有一个apkUrl字段(apk包的下载地址),用这个字段向服务器发起请求。文件(apk包)会以输入流的形式返回给你。将它写入指定路径的指定文件中就完成了下载。
public File saveFile(Response response) throws IOException {InputStream is = null; byte[] buf = new byte[2048]; int len = 0; FileOutputStream fos = null; try {is = response.body().byteStream(); final long total = response.body().contentLength(); long sum = 0; File dir = new File(destFileDir); if (!dir.exists()){dir.mkdirs(); }File file = new File(dir, destFileName); fos = new FileOutputStream(file); while ((len = is.read(buf)) != -1){sum += len; fos.write(buf, 0, len); final long finalSum = sum; }fos.flush(); return file; } finally {try {if (is != null) is.close(); } catch (IOException e){}try {if (fos != null) fos.close(); } catch (IOException e){}} }
3.安装apk包
你可以将文件(apk包),保存到SD卡中,也可以保存到包名路径下的文件中。博主这里是保存到包名路径下的。这里你会遇到一个问题。你会发现你下载的apk无法安装(左图)。博主通过模拟器的文件管理找到了文件,一看这个文件只有读写权限。于是百度一番,找到了解决方案。
跳转到安装界面属于别的应用程序,是没有权限对只有读写权限的安装包进行解析的。
通过在代码中写入Linux指令,修改此apk文件的权限。改为全局可读可写可执行。
String[] command = {"chmod", "777", file.getPath() }; ProcessBuilder builder = new ProcessBuilder(command); try {builder.start(); } catch (IOException e) {e.printStackTrace(); }
之后在进行调试就没问题了。通过文件管理系统,可以观察到下图中的情况(权限都补齐了)。
解析程序包出现问题(更新下载apk)相关推荐
- 已解决(转)关于android - apk(解析错误)解析程序包时出现问题
如果开发的应用用户较多,那么必须保证应用在多个版本不同的设备上能够正确的运行.这就要求对各个版本比较熟悉,知道在什么版本中加入了什么新的功能或特性.但是Android的版本太多了,是个令人头疼的问题. ...
- unity打包的安卓无法解析_我是UNITY3D 打包成APK ,安装到手机上就直接报无法解析程序包。...
粘出报错信息, 如果是这个报错:Error building Player: UnityException: No platforms found 就用android的sdk manager更新and ...
- 安卓更新下载apk 并安装
github https://github.com/AriaLyy/Aria 或者 github https://github.com/maning0303/MNUpdateAPK compile ...
- 如何下载Office365离线安装程序包并手动安装?
如何下载Office365离线安装包并手动安装? ©Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者 博客:https://blog.51cto.co ...
- Android 自己实现更新下载自动安装
1.一些公司开发完一款App之后可能并不会去上架App商店,但事后期也需要定时进行维护更新,所以会选择把打包好的apk 发布到自己的服务器,然后在数据库建一个版本号的表,然后剩下的就交给你androi ...
- Windows 程序包管理器 1.0 正式发布
在 Microsoft Build 2021 开发者大会上,微软正式发布 Windows Package Manager(程序包管理器)1.0 正式版,目前在 GitHub 上已有超过 1600 个程 ...
- 200多个恶意NPM程序包针对Azure 开发人员,发动供应链攻击
聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全 ...
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)...
[强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天才在于积累!) --通过知识共享树立个人品牌. 继上七篇: [推荐]ORACLE P ...
- Chrome插件安装及程序包无效的解决方法
安装程序包的方法 1.下载找到的Chrome插件文件,以crx后缀结尾,打开Chrome浏览器的工具–扩展程序–打开开发者模式,将.crx后缀的文件直接拖拽到浏览器中即可,该方法对于发布时间较近的新插 ...
- chrome添加charset插件;解决插件安装时出现的“程序包无效”问题
这篇文章完成两件事情 1.添加charset编码插件 2.解决安装时出现的"程序包无效"问题 1.下载charset.crx文件(这个百度搜索"charset下载&quo ...
最新文章
- [IOS] 'Double' is not convertible to 'CGFloat'
- 什么叫系统的可扩展性?
- List类集接口-ArrayList
- 第六章 PX4-Sensors解析
- 全球地区资料json 含中英文 经纬度_爬虫实战(三)使用百度API获取经纬度/地址...
- SpringCloud Greenwich(二)注册中心之consul、Zuul和 gateway网关配置
- 酒桌上的规矩,社会的潜规则
- 信息学奥赛C++语言:滔滔吃苹果
- Linux上安装ZooKeeper并设置开机启动(CentOS7+ZooKeeper3.4.10)
- 在大项目中,实施顾问主要负责什么具体工作?
- 不使用手机代理,进行手机抓包
- mt3dgis 视频教程
- 照片尺寸及像素对应表
- VGG16网络结构要点
- 计算机控制系统a卷-答案,微型计算机控制技术试卷附标准答案A
- HTML5 学习总结(一)——HTML5概要与新增标签
- QT 错误:Unable to create a debugging engine解决
- 大一微积分笔记整理_大一微积分知识点总结
- C# Action 使用
- stm32f103mini IO