转: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权限之后的静默安装实现代码示例分析的更多相关文章

  1. Android获取ROOT权限的通用方法

    背景 自从Android问世以后,给手机获取ROOT权限变成了玩机爱好者老生常谈的话题.拥有手机,却不能拥有操作手机的最高权限,这对于手机爱好者而言,这怎么可以忍?所以无论Android升到什么什么版 ...

  2. Android获取ROOT权限

    获取Android的ROOT权限其实很简单,只要在Runtime下执行命令"su"就可以了. // 获取ROOT权限 public void get_root(){ if (is_ ...

  3. Android 获取ROOT权限原理解析

    一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android玩家中常说的“越狱”有一个更深层次的认识. 二. Root的介绍 1.       Root 的目的 可以让 ...

  4. Android 获取 root权限

    在进行android 开发的时候,经常用真机进行调试,有时候需要把手机中的sqlite数据复制出来.这时候就需要获取手机的root权限.通过 adb shell 命令可以获取权限. 1. 运行cmd ...

  5. 转:Android 获取Root权限

    来自:http://blog.csdn.net/twoicewoo/article/details/7228940 import java.io.DataOutputStream; import an ...

  6. [Android Pro] Android fastboot刷机和获取Root权限

    参考文章: https://developers.google.com/android/nexus/images 转载自:    http://www.inexus.co/article-1280-1 ...

  7. Debian普通用户获取root权限|sudo的安装与配置

    Debian系统的普通用户需要安装软件时,往往会收到“Permission denied”的提示,这时候需要root权限.那么如何在不登陆超级管理员账户的前提下拥有root权限呢?对于大多数Linux ...

  8. Delphi编写的Android程序获取Root权限实现(2015.4.15更新,支持Android 4.4)

    借助谷歌,并经过本大侠施展坑.蒙.拐.骗.偷五大绝技,终于成功实现在Delphi下获取Root权限并将其扩展为一个完整功能更加完整的TQAndroidShell记录,在华为荣耀2(Android 4. ...

  9. android中获取root权限的方法以及原理(转)

    一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. 二. Root 的介绍 1. Root 的目的 可以让我们拥有 ...

随机推荐

  1. 【2017 Multi-University Training Contest - Team 8】Hybrid Crystals

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6140 [Description] 等价于告诉你有n个物品,每个物品的价值为-a[i]或a[i],或 ...

  2. BZOJ 4698: Sdoi2008 Sandy的卡片(后缀数组+差分+二分答案)

    传送门 解题思路 看到一个子串加一个数字到另一个子串,自然可以想到差分.然后要把所有串都拼起来,求出\(height\)数组后可以二分答案来做,每次二分一个答案后统计一下连续的\(height> ...

  3. [7.22NOIP模拟测试7]方程的解 题解(扩展欧几里得)

    Orz 送分比较慷慨的一道题,疯狂特判能拿不少分. 对于$a>0,b>0$的情况: 用exgcd求出方程通解,然后通过操作得到最小正整数解和最大正整数解 他们以及他们之间的解满足等差数列性 ...

  4. 【Shiro】一、Apache Shiro简介

    一.Apache Shiro简介 1.简介 一个安全性框架 特点:功能丰富.使用简单.运行独立 核心功能: Authentication(认证):你是谁? Authorization(授权):谁能干什 ...

  5. python_way day15 HTML-DAY2、 回顾HTML-CSS 标签(css强制生效),JS(数据类型,时间处理,作用域)

    python_way day15 HTML-DAY2 html-css回顾 javascript 一.html-css回顾 增加默认值: . 强制生效,就算在上面,被覆盖上了也会生效 解决缩小页面混乱 ...

  6. 31. Flexible static memory controller (FSMC)

    31.1 FSMC main features FSMC块能够与同步和异步内存和16位PC存储卡.其主要目的是: 将AHB事务转换为适当的外部设备协议 满足外部设备的访问定时要求 所有外部存储器与控制 ...

  7. Codeforces 1189A Keanu Reeves

    题目链接:http://codeforces.com/problemset/problem/1189/A 思路:统计1 和 0 的个数,不相等拆开字符串,否则不拆. AC代码: #include< ...

  8. PostgreSQL——服务器基本设置与操作

    一.编译安装: 环境准备: GNU make 版本 >=3.8 (make --version) ISO/ANSI C 编译器,至少須兼容 C89 标准,GCC 或 intel 編译器等均可 g ...

  9. 转载:vue-cli 脚手架 安装

    声明:本文转载自https://www.cnblogs.com/loveyaxin/p/7094089.html 一. node安装 1)如果不确定自己是否安装了node,可以在命令行工具内执行: n ...

  10. 反射与类加载之ClassLoader与类加载器(二)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从以下几个内容来阐述反射与类加载: [动态代理模式] [Android ...