zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    SSM学习(三)--集成spring mvc
    SSM学习(二)mybatis和spring的集成
    SSM学习(一)搭建基础框架
    (转)Maven依赖的jar包下载不了、jar更新不了的解决办法
    maven安装配置及使用maven创建一个web项目
    JavaWeb -- Servlet+JSP+JavaBean(MVC)模式
    JavaWeb -- JSP+JavaBean模式
    JavaWeb -- Jsp 和 JavaBean
    JavaScript -- 练习 window 流氓广告
    上网代理
  • 原文地址:https://www.cnblogs.com/wangle1001986/p/4360393.html
Copyright © 2011-2022 走看看