【声明:】本文是作者(蘑菇v5)原创,版权归作者 蘑菇v5所有,侵权必究。本文首发在简书。如若转发,请注明作者和来源地址!未经授权,严禁私自转载!

当服务器上有新版本的应用时,客户端程序发送https请求,服务器端在接受到请求以后,给客户端返回数据(json,xml),json数据从数据库中读取出来,读取数据拼接成json,语法规则如下:

服务器端json数据

{

"version_name": "2.0",

"version_code": 2,

"description": "最新版xxx,快来下载体验吧!",

"download_url": "http://10.0.2.2:8080/xx2.0.apk"

}

注意: 保存文本为 "UTF-8 无BOM" 格式

客户端通过获取本地的版本号,检测升级(本地版本号

获取版本信息

//获取版本信息

private String getVersion() {

PackageManager pm = getPackageManager();

try {

PackageInfo info = pm.getPackageInfo(getPackageName(), 0);

String versionName = info.versionName;

int versionCode = info.versionCode;

return versionName;

} catch (NameNotFoundException e) {

e.printStackTrace();

}

return "";

}

当服务器版本号大于本地版本的时候,则需要本地弹出是否更新的对话框,当点击更新的时候,下载服务器最新版本的apk.

下载apk

使用xutils框架进行下载

// 下载apk

protected void downloadApk() {

//判断SDcard是否挂载

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath()

+File.separator+"xx.apk";

HttpUtils httpUtils = new HttpUtils();

//(下载地址,下载应用存放位置(sd卡),下载过程中方法的回调)

httpUtils.download(

mDownloadUrl, sdPath,

new RequestCallBack() {

@Override

public void onSuccess(ResponseInfo responseInfo) {

Log.i(tag, "下载成功");

//下载过后从服务端获取到的apk

File file = responseInfo.result;

//安装apk过程,android源码中找到apk安装过程,android系统在安装应用,开启一个activity,

installApk(file);

}

@Override

public void onFailure(HttpException arg0, String arg1) {

Log.i(tag, "下载失败");

}

@Override

public void onLoading(long total, long current,

boolean isUploading) {

super.onLoading(total, current, isUploading);

Log.i(tag, "下载过程中");

}

@Override

public void onStart() {

super.onStart();

Log.i(tag, "下载开始");

}

});

}

}

卸载apk

public void uninstall(View v){

Intent intent = new Intent();

intent.setAction(Intent.ACTION_DELETE);

intent.setData(Uri.parse("package:com.njupt.htmlui1"));

startActivity(intent);

}

安装apk

查看PackageInstaller源码, 查看AndroidManifest.xml文件中Activity的配置, 从而决定在跳转系统安装界面的Activity时应该传哪些参数.

// 安装apk

public void installApk(File file) {

//通过隐式意图去开启activity

Intent intent = new Intent();

intent.setAction("android.intent.action.VIEW");

intent.addCategory("android.intent.category.DEFAULT");

/*intent.setData(Uri.fromFile(file));

intent.setType("application/vnd.android.package-archive");*/

//这一句话中,第一个参数是要安装的apk的路径,第二个参数是apk

// 所对应的类型。可以在tomcat的安装目录下的conf目录下的web.xml中找到

intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");

//startActivity(intent);

startActivityForResult(intent,0);

}

//接收后一个界面返回结果的方法

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

enterHome();

super.onActivityResult(requestCode, resultCode, data);

}

/**

* 进入应用程序主界面

*/

public void enterHome() {

//activity跳转

Intent intent = new Intent(this,HomeActivity.class);

startActivity(intent);

finish();

}

安装失败

在Android手机里不允许有两个应用程序有相同的包名;

假设A应用的包名:com.xxx.xxA;

A应用已经在系统中存在了。

这个时候再去安装一个应用B ,他的包名也叫 con.xxx.xxA

系统就会去检查这两应用的签名是否相同。如果相同,B会把A给覆盖安装掉;

如果不相同 B安装失败;

要想自动安装成功,必须保证应用程序不同版本的签名完成一样。

签名

默认签名

直接在studio里运行项目是, 会采用默认签名debug.keystore. 查找方式: Window->Preference->Android->Build, 可以看到默认签名文件的路径, 默认是: C:\Users\tt\.android\debug.keystore

默认签名的特点:

1. 不同电脑,默认签名文件都不一样

2. 有效期比较短, 默认是1年有效期

3. 有默认密码: android, 别名:androiddebugkey

正式签名

正式签名特点:

1. 发布应用市场时, 统一使用一个签名文件

2. 有效期比较长, 一般25年以上

3. 正式签名文件比较重要,需要开发者妥善保存签名文件和密码

使用正式签名文件,分别打包1.0和2.0, 安装运行1.0版本,测试升级是否成功

签名文件丢失后, 肿么办?

1. 让用户卸载旧版本, 重新在应用市场上下载最新版本, 会导致用户流失

2. 更换包名, 重新发布, 会出现两个xx, 运行新版xx, 卸载旧版本

3. 作为一名有经验的开发人员, 最好不要犯这种低级错误!

中午不睡,下午崩溃...it's truth..

android 系统重新安装程序,Android应用程序更新时的安装与卸载(调用系统方法)...相关推荐

  1. 第二讲:Android系统构架分析和应用程序目录结构分析

    2019独角兽企业重金招聘Python工程师标准>>> 本讲内容: Android系统构架简介 Android应用程序结构分析 点这里下载:Android学习指南第二讲源代码 一.A ...

  2. 【Android 系统开发】 Android 系统启动流程简介

    作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3889548 ...

  3. android系统recovery模式,Android系统Recovery模式中文详细说明

    Recovery具体功能: 1.刷系统:新下载好的rom,,直接放sd卡上刷(进nand),,无需windows! 2.像电脑的ghost,,允许用户随意将系统和里面的个人资料备份成一个文件,,并允许 ...

  4. [转] Android系统版本号和Android API level对应表

    平时总会去查 Android系统版本号和Android API level对应关系,有时候上不了Google,网上搜的又不全.这里翻译记录下,顺便给出原文网址:https://developer.an ...

  5. Android系统如何修改默认打开程序

    Android系统的手机或者平板,需要添加一些程序,然后默认打开.例如:word类文档,可以指定用wps的Android版本打开.但是有的时候,由于我们新安装了例如手机百度,那么点开以后,默认程序都是 ...

  6. 欢迎关注公众号:Android系统攻城狮 原创持续更新中!!!

    公众号:Android系统攻城狮 简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案.音视频.编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列[原创干 ...

  7. 【Android 系统开发】Android框架 与 源码结构

    一. Android 框架 Android框架层级 : Android 自下 而 上 分为 4层; -- Linux内核层; -- 各种库 和 Android运行环境层; -- 应用框架层; -- 应 ...

  8. ios 原生android系统下载地址,Android/iOS已有原生项目集成ReactNative

    背景 近期由于项目需要,在已经开发了几个版本的原生App中集成了ReactNative,新版的模块都使用RN开发. 此次集成的工作大部分是参照RN中文文档进行的,但是中文文档也有一些坑和描述不充分的地 ...

  9. Android系统篇之—-Android中的run-as命令引出升降权限的安全问题(Linux中的setuid和setgid)

    一.前言 最近一周比较忙,没时间写东西了,今天继续开始我们今天的话题:run-as命令,在上周的开发中,遇到一个问题,就是在使用run-as命令的时候出现了一个错误,不过当时因为工作进度的问题,这问题 ...

  10. android系统关机广播,android关机方法汇总

    有段时间做系统hook时需要用到系统重启,找了几种重启的方法,还有几种关机的方法,总结一下. 一,发送广播 Broadcast, Intent.ACTION_REQUEST_SHUTDOWN关机广播 ...

最新文章

  1. C#给串口设备发送脉冲指令。DTR和RTS指令
  2. Java -- JDBC 学习--数据库连接池
  3. Python有哪些好用的语言翻译方法
  4. 速查100 WebServers
  5. k8s - 如何变更CNI网络插件IP池?
  6. 关闭IOS更新功能(ios4/5/6)
  7. python列表转换成数字_python 字母转成数字Python操作列表的常用方法总结
  8. 邮箱附件、QQ、微信等社交工具大文件传输解决方案
  9. Golang笔记——方法
  10. element 保存 点击链接_保存微信表情!
  11. *pdb时出错;请检查是否是磁盘空间不足、路径无效或权限不够
  12. 709. To Lower Case
  13. 关于大学生睡眠时间及质量的问卷调查
  14. html向下三角箭头,CSS制作三角箭头(兼容IE6)
  15. html swf转mp4,swf怎么转换成mp4 swf视频转换成mp4格式没有声音|转换成MP4格式没有画面...
  16. python怎么让矩阵内所有元素自己平方_python numpy库中矩阵用法指南
  17. 关于怎么解决org.apache.ibatis.binding.BindingException: Mapper method attempted to return null from a met
  18. 无货源开店已确认违法
  19. 第一章:2030.5、CSIP、Rule21简介 and 本项目内容介绍
  20. 挖掘肖特基二极管保护电路的小窍门

热门文章

  1. Hadoop从零开始的搭建(伪分布式)
  2. nacos is starting with cluster
  3. 已解决:axios 发送post请求,报403错误
  4. 2017个人工作感悟
  5. 受难周第五日-团契日
  6. 有关人、社会的本质的思考--现代的捕蛇者说
  7. php mud游戏源码,mud手游源码,mud安卓端源码,谁与争锋mud源码:关于MUD纯文字游戏架设(回答得好加分100)(开源mud游戏框架)-南开游戏网...
  8. #3,Android Studio Android开发APP的开发语言和APP连接的数据库 总结
  9. codeforces A. Parity
  10. 计算机硬件有问题,计算机硬件有哪些