最近在做更新功能

由于公司的项目是没有上线的,所以不能借助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)相关推荐

  1. 已解决(转)关于android - apk(解析错误)解析程序包时出现问题

    如果开发的应用用户较多,那么必须保证应用在多个版本不同的设备上能够正确的运行.这就要求对各个版本比较熟悉,知道在什么版本中加入了什么新的功能或特性.但是Android的版本太多了,是个令人头疼的问题. ...

  2. unity打包的安卓无法解析_我是UNITY3D 打包成APK ,安装到手机上就直接报无法解析程序包。...

    粘出报错信息, 如果是这个报错:Error building Player: UnityException: No platforms found 就用android的sdk manager更新and ...

  3. 安卓更新下载apk 并安装

    github https://github.com/AriaLyy/Aria 或者  github https://github.com/maning0303/MNUpdateAPK compile ...

  4. 如何下载Office365离线安装程序包并手动安装?

    如何下载Office365离线安装包并手动安装? ©Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者 博客:https://blog.51cto.co ...

  5. Android 自己实现更新下载自动安装

    1.一些公司开发完一款App之后可能并不会去上架App商店,但事后期也需要定时进行维护更新,所以会选择把打包好的apk 发布到自己的服务器,然后在数据库建一个版本号的表,然后剩下的就交给你androi ...

  6. Windows 程序包管理器 1.0 正式发布

    在 Microsoft Build 2021 开发者大会上,微软正式发布 Windows Package Manager(程序包管理器)1.0 正式版,目前在 GitHub 上已有超过 1600 个程 ...

  7. 200多个恶意NPM程序包针对Azure 开发人员,发动供应链攻击

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全 ...

  8. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)...

    [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天才在于积累!) --通过知识共享树立个人品牌.   继上七篇:            [推荐]ORACLE P ...

  9. Chrome插件安装及程序包无效的解决方法

    安装程序包的方法 1.下载找到的Chrome插件文件,以crx后缀结尾,打开Chrome浏览器的工具–扩展程序–打开开发者模式,将.crx后缀的文件直接拖拽到浏览器中即可,该方法对于发布时间较近的新插 ...

  10. chrome添加charset插件;解决插件安装时出现的“程序包无效”问题

    这篇文章完成两件事情 1.添加charset编码插件 2.解决安装时出现的"程序包无效"问题 1.下载charset.crx文件(这个百度搜索"charset下载&quo ...

最新文章

  1. [IOS] 'Double' is not convertible to 'CGFloat'
  2. 什么叫系统的可扩展性?
  3. List类集接口-ArrayList
  4. 第六章 PX4-Sensors解析
  5. 全球地区资料json 含中英文 经纬度_爬虫实战(三)使用百度API获取经纬度/地址...
  6. SpringCloud Greenwich(二)注册中心之consul、Zuul和 gateway网关配置
  7. 酒桌上的规矩,社会的潜规则
  8. 信息学奥赛C++语言:滔滔吃苹果
  9. Linux上安装ZooKeeper并设置开机启动(CentOS7+ZooKeeper3.4.10)
  10. 在大项目中,实施顾问主要负责什么具体工作?
  11. 不使用手机代理,进行手机抓包
  12. mt3dgis 视频教程
  13. 照片尺寸及像素对应表
  14. VGG16网络结构要点
  15. 计算机控制系统a卷-答案,微型计算机控制技术试卷附标准答案A
  16. HTML5 学习总结(一)——HTML5概要与新增标签
  17. QT 错误:Unable to create a debugging engine解决
  18. 大一微积分笔记整理_大一微积分知识点总结
  19. C# Action 使用
  20. stm32f103mini IO

热门文章

  1. 让devcpp支持c++11
  2. dp uva11584
  3. 文献调研(九):基于rough set理论和深度学习算法的建筑能耗预测模型
  4. MySQL实战45讲读后感:一条SQL查询语句是如何执行的?
  5. 计算机老师为什么不用伽卡他卡做文件服务器?
  6. xlsx表格怎么筛选重复数据_excel表格如何过滤筛选重复项内容
  7. mocha——单元测试
  8. mocha-only和skip的用法
  9. 如何成为很厉害的程序员?- 读《精进》
  10. 深入了解ElasticSearch的Nested数据类型