Android获取Root权限之后的静默安装实现代码示例分析
转:http://blog.csdn.net/jiankeufo/article/details/43795015
Adroid开发中,我们有时会遇到一些特殊功能的实现,有些功能并没有太高技术难度,但是如果之前没有接触过就需要花好多时间去研究解决。
今天,总结介绍一下 获取Root权限之后的静默安装和进门卸载功能的实现。
众所周知,Android的手机在获取Root权限之后几乎可以进行你想要的任何操作,而静默安装便是其中比较常见的一个需求:
豌豆荚、360手机助手等应用下载软件一般都有一个应用一键自动更新功能,一键批量卸载软件,他们是如何实现的呢?
一般这类软件,实现自动更新功能都需要请求root权限,在被授予了root权限后便可批量安装卸载软件,其实,这个并没有太高难度,其过程就是一个获取了Root权限之后的静默安装和卸载:
下面直接上代码:
注:
静默安装和卸载的shell 命令格式分别为:
private String cmd_install = "pm install -r +安装apk包路径";//静默安装命令
private String cmd_uninstall = "pm uninstall +程序包名";//静默卸载命令
程序代码:
01.
import
java.io.DataOutputStream;
02.
import
java.io.OutputStream;
03.
04.
import
android.app.Activity;
05.
import
android.os.Bundle;
06.
import
android.os.Environment;
07.
import
android.view.Menu;
08.
import
android.view.View;
09.
import
android.widget.EditText;
10.
/**
11.
* 静默安装 卸载 Demo
12.
*
13.
* @author blj
14.
*
15.
*/
16.
public
class
MainActivity
extends
Activity {
17.
18.
private
EditText et_packagename;
19.
private
String cmd_install =
"pm install -r "
;
20.
private
String cmd_uninstall =
"pm uninstall "
;
21.
String apkLocation = Environment.getExternalStorageDirectory().toString()
22.
+
"/"
;
23.
24.
@Override
25.
protected
void
onCreate(Bundle savedInstanceState) {
26.
super
.onCreate(savedInstanceState);
27.
setContentView(R.layout.activity_main);
28.
et_packagename = (EditText) findViewById(R.id.et_packagename);
29.
}
30.
31.
@Override
32.
public
boolean
onCreateOptionsMenu(Menu menu) {
33.
// Inflate the menu; this adds items to the action bar if it is present.
34.
getMenuInflater().inflate(R.menu.main, menu);
35.
return
true
;
36.
}
37.
38.
public
void
onClick_install(View view) {
39.
String cmd = cmd_install + apkLocation
40.
+ et_packagename.getText().toString().trim();
41.
System.out.println(
"静默安装命令:"
+ cmd);
42.
excuteSuCMD(cmd);
43.
}
44.
45.
public
void
onClick_uninstall(View view) {
46.
String cmd = cmd_uninstall + et_packagename.getText().toString().trim();
47.
// String cmd = cmd_uninstall + "com.kingsoft.website";
48.
System.out.println(
"静默卸载命令:"
+ cmd);
49.
excuteSuCMD(cmd);
50.
}
51.
//执行shell命令
52.
protected
int
excuteSuCMD(String cmd) {
53.
try
{
54.
Process process = Runtime.getRuntime().exec(
"su"
);
55.
DataOutputStream dos =
new
DataOutputStream(
56.
(OutputStream) process.getOutputStream());
57.
// 部分手机Root之后Library path 丢失,导入library path可解决该问题
58.
dos.writeBytes((String) "export LD_LIBRARY_PATH=/vendor/lib:/system/lib
59.
");
60.
cmd = String.valueOf(cmd);
61.
dos.writeBytes((String) (cmd + "
62.
"));
63.
dos.flush();
64.
dos.writeBytes("exit
65.
");
66.
dos.flush();
67.
process.waitFor();
68.
int
result = process.exitValue();
69.
return
(Integer) result;
70.
}
catch
(Exception localException) {
71.
localException.printStackTrace();
72.
return
-
1
;
73.
}
74.
}
75.
76.
}
软件运行截图:(以金山网址大全为例)
静默安装截图:
其中king.apk为安装apk文件名,安装其他apk时在框中输入相应文件名即可。
点击静默安装即可静默安装应用。
静默卸载截图:
其中com.kingsoft.website为金山网址大全程序的包名,
点击静默卸载,即可静默卸载应用。
本文介绍了静默安装的代码实现,回到豌豆荚和360一键安装、卸载软件,他们的实现方式 也就是监测apk安装包下载完成后执行上面介绍的静默安装命令,一键卸载应该就是将要卸载的程序的包名放到for循环依次执行中自动卸载。
http://www.it165.net/uploadfile/files/2014/0222/SilentInstallDemo.rar
Android获取Root权限之后的静默安装实现代码示例分析的更多相关文章
- Android获取ROOT权限的通用方法
背景 自从Android问世以后,给手机获取ROOT权限变成了玩机爱好者老生常谈的话题.拥有手机,却不能拥有操作手机的最高权限,这对于手机爱好者而言,这怎么可以忍?所以无论Android升到什么什么版 ...
- Android获取ROOT权限
获取Android的ROOT权限其实很简单,只要在Runtime下执行命令"su"就可以了. // 获取ROOT权限 public void get_root(){ if (is_ ...
- Android 获取ROOT权限原理解析
一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android玩家中常说的“越狱”有一个更深层次的认识. 二. Root的介绍 1. Root 的目的 可以让 ...
- Android 获取 root权限
在进行android 开发的时候,经常用真机进行调试,有时候需要把手机中的sqlite数据复制出来.这时候就需要获取手机的root权限.通过 adb shell 命令可以获取权限. 1. 运行cmd ...
- 转:Android 获取Root权限
来自:http://blog.csdn.net/twoicewoo/article/details/7228940 import java.io.DataOutputStream; import an ...
- [Android Pro] Android fastboot刷机和获取Root权限
参考文章: https://developers.google.com/android/nexus/images 转载自: http://www.inexus.co/article-1280-1 ...
- Debian普通用户获取root权限|sudo的安装与配置
Debian系统的普通用户需要安装软件时,往往会收到“Permission denied”的提示,这时候需要root权限.那么如何在不登陆超级管理员账户的前提下拥有root权限呢?对于大多数Linux ...
- Delphi编写的Android程序获取Root权限实现(2015.4.15更新,支持Android 4.4)
借助谷歌,并经过本大侠施展坑.蒙.拐.骗.偷五大绝技,终于成功实现在Delphi下获取Root权限并将其扩展为一个完整功能更加完整的TQAndroidShell记录,在华为荣耀2(Android 4. ...
- android中获取root权限的方法以及原理(转)
一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. 二. Root 的介绍 1. Root 的目的 可以让我们拥有 ...
随机推荐
- git——commit之后一直出现一个>
在网上搜了半天,也没见过有类似的情况,忘记具体是怎么解决的了,我记得是重新add了一遍,再commit就OK了 更新: 感谢@月下初拥的评论,找到了原因,可能是由于commit的注释结构有误造成的,比 ...
- 【版本】Spring Cloud 版本
Spring Cloud 版本 Spring Cloud没有数字版本号,而是对应一个开发代号 Cloud代号 Boot版本(train) Boot版本(tested) lifecycle Angle ...
- 【NOI2019模拟2019.6.29】字符串(SA|SAM+主席树)
Description: 1<=n<=5e4 题解: 考虑\(f\)这个东西应该是怎样算的? 不妨建出SA,然后按height从大到小启发式合并,显然只有相邻的才可能成为最优答案.这样的只 ...
- 线段树维护线性基并——17西安icpc a
#include<bits/stdc++.h> using namespace std; #define N 10005 int a[N],n,k,q; struct LB{ ]; LB( ...
- DLL中使用字符串时的注意事项。
library dll1; uses SysUtils, Classes; {$R *.res} function TESTDLL:string;stdcall; begin Result:='tes ...
- AcWing 138. 兔子与兔子 hash打卡
很久很久以前,森林里住着一群兔子. 有一天,兔子们想要研究自己的 DNA 序列. 我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母). 然后我们每 ...
- svn启动服务
bin目录添加到环境变量classpathsvn --version 查看版本svnadmin create D:\\xx 创建本地中央仓库启动svn服务 cmd命令 svnserve -d -r D ...
- 使用java.util.Properties工具制作自定义访问配置文件信息
import ch.qos.logback.classic.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; im ...
- Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试
文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...
- HTTP协议的消息头:Content-Type和Accept的作用 转载https://www.cnblogs.com/lexiaofei/p/7289436.html
一.背景知识 1.概述 Http报头分为通用报头,请求报头,响应报头和实体报头. 请求方的http报头结构:通用报头|请求报头|实体报头 响应方的http报头结构:通用报头|响应报头|实体报头 Acc ...