静默安装原理:

1.需要获取root的操作权限     2.通过命令式的方式直接进行安装APK。在使用 Android Studio debug安装的时候可以看到控制台上的命令

import android.content.Context;

import android.content.Intent;

import android.content.pm.PackageManager;

import android.net.Uri;

import android.util.Log;

import java.io.DataOutputStream;

import java.io.File;

import java.io.IOException;

import java.io.OutputStream;

/**

*

名称:com.singno.VersionManager

*

描述:

*

* APK版本管理器

* 版本检查,版本更新等

*

*

* @author 鲍建明

* @version 2.1.0

* @date 2015/4/30/16:28

*/

public class VersionManager {

private static final String TAG = VersionManager.class.getName();

private Context context;

public VersionManager(Context context){

this.context = context;

}

/**

* 检查版本号是否相同

* @param versionCode

* @return

*/

public boolean isSameVersion(int versionCode){

return getCurrentVersion() != versionCode ? Boolean.FALSE : Boolean.TRUE;

}

/**

* 静默安装,安装之前必须要获取到ROOT权限

* 原理:1.先获取到ROOT权限

* 2.在通过命令的方式直接安装APK

* @return

*/

public boolean silenceInstall(File file){

Process process = null;

OutputStream out = null;

DataOutputStream dataOutputStream = null;

try {

process = Runtime.getRuntime().exec("su");

out = process.getOutputStream();

dataOutputStream = new DataOutputStream(out);

dataOutputStream.writeBytes("chmod 777 " + file.getPath() + "\n");

dataOutputStream.writeBytes("LD_LIBRARY_PATH=/vendor/lib:/system/lib pm install -r " + file.getPath());

// 提交命令

dataOutputStream.flush();

int value = process.waitFor();

if( value == 0){

return Boolean.TRUE;

}

return Boolean.FALSE;

} catch (Exception e) {

e.printStackTrace();

return Boolean.FALSE;

}finally{

try {

if( dataOutputStream != null ){

dataOutputStream.close();

}

if( out != null ){

out.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 普通的安装应用方式

* @param file 安装包文件

*/

public void installApk(File file){

Intent i = new Intent(Intent.ACTION_VIEW);

i.setDataAndType(Uri.parse("file://" + file.toString()), "application/vnd.android.package-archive");

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

this.context.startActivity(i);

}

/**

* 获取服务端中的版本号

* 这个自行完成

* @return

*/

public int getHttpVersion(){

return 0;

}

/**

* 获取当前APK的版本号

* @return 当前APK的版本号

*/

public int getCurrentVersion(){

try {

return this.context.getPackageManager().getPackageInfo(this.context.getPackageName(), 0).versionCode;

} catch (PackageManager.NameNotFoundException e) {

e.printStackTrace();

Log.e(TAG, "获取版本号失败");

return 0;

}

}

/**

* 下载APK

*/

public void downApk(){

new Thread(new DownApk()).start();

}

/**

* 显示下载进度提示框

*/

private void showDownloadDialog(){

}

/**

* 显示软件更新提示对话框

*/

private void showNoticeDialog(){

}

/**

* 下载APk的类

*/

class DownApk implements Runnable{

@Override

public void run() {

}

}

}

android 静默安装实现,Android 中静默安装实现详解相关推荐

  1. android c++ socket编程,C++ 中 socket编程实例详解

    C++ 中 socket编程实例详解 sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW):基于TCP的soc ...

  2. Android中的四大组件详解

    Android中的四大组件详解 我们都知道Android系统应用层框架中,为开发者提供了四大组件来便于应用的开发,它们是Activity.Service.BroadcastReceiver.Conte ...

  3. python中importlib模块安装_Python中标准模块importlib详解

    Python中标准模块importlib详解 模块简介 Python提供了importlib包作为标准库的一部分.目的就是提供Python中import语句的实现(以及__import__函数).另外 ...

  4. Virtual COM port 该设备的驱动程序未被安装:INF中服务安装段落无效错误的处理办法

    最近研究富士康的RFID读写器,把USB线接入安装Windows 2003系统的电脑后,发现驱动程序安装老是有问题: 驱动安装后截图 错误提示:Virtual COM port 该设备的驱动程序未被安 ...

  5. android studio parcelable,Android中Parcelable的使用详解

    Parcelable与Serializable Serializable是Java为我们提供的一个标准化的序列化接口. Parcelable是Android为我们提供的序列化的接口. 对比: 1.Pa ...

  6. linux tftp客户端安装命令,Linux系统中tftp命令使用详解

    Linux系统中tftp命令主要是传输文件用的.下面由学习啦小编为大家整理了linux系统中tftp命令使用详解,希望对大家有帮助! Linux系统中tftp命令使用详解 语法 tftp [主机名称或 ...

  7. 生成jni的android.mk,Android Studio 3.5版本JNI生成SO文件详解

    学习在于记录,把自己不懂得容易忘记得记录下,才是最好得选择. 废话不多说,想要在Android开发中嵌入c/c++代码,直接开始如下步骤 1.创建需要调用的Java类 在你某个指定的包下创建如下类pa ...

  8. 阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解

    阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解 阿里聚安全的Android应用漏洞扫描器有一个检测项是本地拒绝服务漏洞的检测,采用的是静态分析加动态模糊测试的方法来检测,检测结果准确 ...

  9. android怎么把动图变成视频格式,Android 录制手机屏幕视频生成GIF图片实例详解

    Android 录制手机屏幕视频生成GIF图片实例详解 无图无真相,在我们日常的网络交流中往往需要给交流对象提供直观的显示,而视频是一个很好的方式,但是视频需要播放器,还需要当做文件进行对点传输,并不 ...

  10. Android绘图Canvas十八般武器之Shader详解及实战篇(上)

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有java层的,也有jni层深入到Frame ...

最新文章

  1. 十一届蓝桥杯java组-蓝肽子序列-动态规划
  2. python教学视频下载-董付国老师Python精品教学,视频教程下载
  3. 修改mysql字符集 为utf8_修改mysql数据库字符集为UTF8的
  4. 深度学习框架Caffe, MXNet, TensorFlow, Torch, CNTK性能测试报告
  5. python if elif else_python:通讯录(字典+while+if/else)
  6. Tomcat集群实现源码级别剖析
  7. 来谈谈MySQL事务及事务引发的问题
  8. python培训来袭_从入门到精通!2020年Python最佳学习路线重磅来袭!
  9. Ubuntu 修改hosts
  10. 用深度优先搜索解决最长路径问题
  11. 华为认证双IE网络工程师,花了三天时间整理的OSPF详解,建议收藏
  12. ceres拟合分段函数
  13. 采集全国疫情数据(Python)
  14. 【Excel】用公式提取Excel单元格中的汉字
  15. halcon学习之路
  16. 16进制图片数据转JPG格式和BMP格式
  17. git clone 项目时总是提示输入密码
  18. sql server和mysql都装_mysql和sql server可以同时安装吗
  19. Spark SQL原理及常用方法详解(二)
  20. uni-app真机调试链接不上网易im服务器

热门文章

  1. 安装Office2016卸载WPS后office图标异常解决办法
  2. 安信可分享 | 安信可Wi-Fi模组对接华为云物联网IoT平台的指南。(附带源码)
  3. 08-新闻发布系统数据库-新闻类别数据操作
  4. 飞凌小课堂-RK3399开发板 linux双千兆网口方案-RTL8153
  5. PSPICE仿真数据转MATLAB
  6. 图解 FAT 文件系统之基础知识(一)
  7. asp实现注册登录界面_(01)ASP运行环境的搭建
  8. 启用IIS7配置ASP运行环境的详细方法
  9. 计算机网络原理第五版课后--习题答案
  10. 奇偶校验码海明码循环冗余校验码