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.* 静默安装 卸载 Demo12.*13.* @author blj14.*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.@Override25.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.@Override32.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 + apkLocation40.+ 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/lib59.");60.cmd = String.valueOf(cmd);61.dos.writeBytes((String) (cmd + "62."));63.dos.flush();64.dos.writeBytes("exit65.");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 的目的 可以让我们拥有 ...
随机推荐
- macOS添加字体
打开macOS的Applications文件夹: 双击其中的Font Book: 把下载的字体解压后的_文件夹_ 拖进来,字体就安装好了.
- Go基础之基本数据类型
Go基础之基本数据类型 基本数据类型 整形 int8.int16.int32.int64 无符号整形:uint8.uint16.uint32.uint64 uint8就是我们熟知的byte型 类型 描 ...
- clickhouse高可用-节点宕机数据一致性方案-热扩容
1. 集群节点及服务分配 说明: 1.1. 在每个节点上启动两个clickhouse服务(后面会详细介绍如何操作这一步),一个数据分片,一个数据备份,为了确保宕机数据一致性,数据分片和数据备份不能同一 ...
- web自动化框架抽取示例【Java+selenium】
web自动化测试框架抽取示例 例子:测试登录模块,对登录的账号和密码进行不同的case校验. 1.1.1 无优化代码login_1 package com.lee.auto.testFrome; im ...
- Shiro学习(5)编码、加密
在涉及到密码存储问题上,应该加密/生成密码摘要存储,而不是存储明文密码.比如之前的600w csdn账号泄露对用户可能造成很大损失,因此应加密/生成不可逆的摘要方式存储. 5.1 编码/解码 Shir ...
- docker的备份和迁移
备份与迁移 容器保存为镜像 我们可以通过以下命令将容器保存为镜像 docker commit pyg_nginx mynginx pyg_nginx是容器名称 mynginx是新的镜像名称 此镜像的内 ...
- [bzoj2729][HNOI2012]排队 题解 (排列组合 高精)
Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不 ...
- 网页压缩--gzip和deflate的区别
我们在配置网站GZip压缩的时候,会发现有两个模块可以设置的,一个是GZip模块的参数配置,另一个是Deflate模块的参数配置,他们的设置方法是一样的.刚开始时我不太明白,这两地方有什么不同?网站开 ...
- POJ 3468 A Simple Problem with Integers (分块)
Description You have \(N\) integers, \(A_1, A_2, ... , A_N\). You need to deal with two kinds of ope ...
- PAT_A1096#Consecutive Factors
Source: PAT A1096 Consecutive Factors (20 分) Description: Among all the factors of a positive intege ...