android 静默安装实现,Android 中静默安装实现详解
静默安装原理:
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 中静默安装实现详解相关推荐
- android c++ socket编程,C++ 中 socket编程实例详解
C++ 中 socket编程实例详解 sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW):基于TCP的soc ...
- Android中的四大组件详解
Android中的四大组件详解 我们都知道Android系统应用层框架中,为开发者提供了四大组件来便于应用的开发,它们是Activity.Service.BroadcastReceiver.Conte ...
- python中importlib模块安装_Python中标准模块importlib详解
Python中标准模块importlib详解 模块简介 Python提供了importlib包作为标准库的一部分.目的就是提供Python中import语句的实现(以及__import__函数).另外 ...
- Virtual COM port 该设备的驱动程序未被安装:INF中服务安装段落无效错误的处理办法
最近研究富士康的RFID读写器,把USB线接入安装Windows 2003系统的电脑后,发现驱动程序安装老是有问题: 驱动安装后截图 错误提示:Virtual COM port 该设备的驱动程序未被安 ...
- android studio parcelable,Android中Parcelable的使用详解
Parcelable与Serializable Serializable是Java为我们提供的一个标准化的序列化接口. Parcelable是Android为我们提供的序列化的接口. 对比: 1.Pa ...
- linux tftp客户端安装命令,Linux系统中tftp命令使用详解
Linux系统中tftp命令主要是传输文件用的.下面由学习啦小编为大家整理了linux系统中tftp命令使用详解,希望对大家有帮助! Linux系统中tftp命令使用详解 语法 tftp [主机名称或 ...
- 生成jni的android.mk,Android Studio 3.5版本JNI生成SO文件详解
学习在于记录,把自己不懂得容易忘记得记录下,才是最好得选择. 废话不多说,想要在Android开发中嵌入c/c++代码,直接开始如下步骤 1.创建需要调用的Java类 在你某个指定的包下创建如下类pa ...
- 阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解
阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解 阿里聚安全的Android应用漏洞扫描器有一个检测项是本地拒绝服务漏洞的检测,采用的是静态分析加动态模糊测试的方法来检测,检测结果准确 ...
- android怎么把动图变成视频格式,Android 录制手机屏幕视频生成GIF图片实例详解
Android 录制手机屏幕视频生成GIF图片实例详解 无图无真相,在我们日常的网络交流中往往需要给交流对象提供直观的显示,而视频是一个很好的方式,但是视频需要播放器,还需要当做文件进行对点传输,并不 ...
- Android绘图Canvas十八般武器之Shader详解及实战篇(上)
本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有java层的,也有jni层深入到Frame ...
最新文章
- 十一届蓝桥杯java组-蓝肽子序列-动态规划
- python教学视频下载-董付国老师Python精品教学,视频教程下载
- 修改mysql字符集 为utf8_修改mysql数据库字符集为UTF8的
- 深度学习框架Caffe, MXNet, TensorFlow, Torch, CNTK性能测试报告
- python if elif else_python:通讯录(字典+while+if/else)
- Tomcat集群实现源码级别剖析
- 来谈谈MySQL事务及事务引发的问题
- python培训来袭_从入门到精通!2020年Python最佳学习路线重磅来袭!
- Ubuntu 修改hosts
- 用深度优先搜索解决最长路径问题
- 华为认证双IE网络工程师,花了三天时间整理的OSPF详解,建议收藏
- ceres拟合分段函数
- 采集全国疫情数据(Python)
- 【Excel】用公式提取Excel单元格中的汉字
- halcon学习之路
- 16进制图片数据转JPG格式和BMP格式
- git clone 项目时总是提示输入密码
- sql server和mysql都装_mysql和sql server可以同时安装吗
- Spark SQL原理及常用方法详解(二)
- uni-app真机调试链接不上网易im服务器