android 系统重新安装程序,Android应用程序更新时的安装与卸载(调用系统方法)...
【声明:】本文是作者(蘑菇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应用程序更新时的安装与卸载(调用系统方法)...相关推荐
- 第二讲:Android系统构架分析和应用程序目录结构分析
2019独角兽企业重金招聘Python工程师标准>>> 本讲内容: Android系统构架简介 Android应用程序结构分析 点这里下载:Android学习指南第二讲源代码 一.A ...
- 【Android 系统开发】 Android 系统启动流程简介
作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3889548 ...
- android系统recovery模式,Android系统Recovery模式中文详细说明
Recovery具体功能: 1.刷系统:新下载好的rom,,直接放sd卡上刷(进nand),,无需windows! 2.像电脑的ghost,,允许用户随意将系统和里面的个人资料备份成一个文件,,并允许 ...
- [转] Android系统版本号和Android API level对应表
平时总会去查 Android系统版本号和Android API level对应关系,有时候上不了Google,网上搜的又不全.这里翻译记录下,顺便给出原文网址:https://developer.an ...
- Android系统如何修改默认打开程序
Android系统的手机或者平板,需要添加一些程序,然后默认打开.例如:word类文档,可以指定用wps的Android版本打开.但是有的时候,由于我们新安装了例如手机百度,那么点开以后,默认程序都是 ...
- 欢迎关注公众号:Android系统攻城狮 原创持续更新中!!!
公众号:Android系统攻城狮 简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案.音视频.编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列[原创干 ...
- 【Android 系统开发】Android框架 与 源码结构
一. Android 框架 Android框架层级 : Android 自下 而 上 分为 4层; -- Linux内核层; -- 各种库 和 Android运行环境层; -- 应用框架层; -- 应 ...
- ios 原生android系统下载地址,Android/iOS已有原生项目集成ReactNative
背景 近期由于项目需要,在已经开发了几个版本的原生App中集成了ReactNative,新版的模块都使用RN开发. 此次集成的工作大部分是参照RN中文文档进行的,但是中文文档也有一些坑和描述不充分的地 ...
- Android系统篇之—-Android中的run-as命令引出升降权限的安全问题(Linux中的setuid和setgid)
一.前言 最近一周比较忙,没时间写东西了,今天继续开始我们今天的话题:run-as命令,在上周的开发中,遇到一个问题,就是在使用run-as命令的时候出现了一个错误,不过当时因为工作进度的问题,这问题 ...
- android系统关机广播,android关机方法汇总
有段时间做系统hook时需要用到系统重启,找了几种重启的方法,还有几种关机的方法,总结一下. 一,发送广播 Broadcast, Intent.ACTION_REQUEST_SHUTDOWN关机广播 ...
最新文章
- C#给串口设备发送脉冲指令。DTR和RTS指令
- Java -- JDBC 学习--数据库连接池
- Python有哪些好用的语言翻译方法
- 速查100 WebServers
- k8s - 如何变更CNI网络插件IP池?
- 关闭IOS更新功能(ios4/5/6)
- python列表转换成数字_python 字母转成数字Python操作列表的常用方法总结
- 邮箱附件、QQ、微信等社交工具大文件传输解决方案
- Golang笔记——方法
- element 保存 点击链接_保存微信表情!
- *pdb时出错;请检查是否是磁盘空间不足、路径无效或权限不够
- 709. To Lower Case
- 关于大学生睡眠时间及质量的问卷调查
- html向下三角箭头,CSS制作三角箭头(兼容IE6)
- html swf转mp4,swf怎么转换成mp4 swf视频转换成mp4格式没有声音|转换成MP4格式没有画面...
- python怎么让矩阵内所有元素自己平方_python numpy库中矩阵用法指南
- 关于怎么解决org.apache.ibatis.binding.BindingException: Mapper method attempted to return null from a met
- 无货源开店已确认违法
- 第一章:2030.5、CSIP、Rule21简介 and 本项目内容介绍
- 挖掘肖特基二极管保护电路的小窍门
热门文章
- Hadoop从零开始的搭建(伪分布式)
- nacos is starting with cluster
- 已解决:axios 发送post请求,报403错误
- 2017个人工作感悟
- 受难周第五日-团契日
- 有关人、社会的本质的思考--现代的捕蛇者说
- php mud游戏源码,mud手游源码,mud安卓端源码,谁与争锋mud源码:关于MUD纯文字游戏架设(回答得好加分100)(开源mud游戏框架)-南开游戏网...
- #3,Android Studio Android开发APP的开发语言和APP连接的数据库 总结
- codeforces A. Parity
- 计算机硬件有问题,计算机硬件有哪些