Adroid开发中,我们有时会遇到一些特殊功能的实现,有些功能并没有太高技术难度,但是如果之前没有接触过就需要花好多时间去研究解决。

今天,总结介绍一下 获取Root权限之后的静默安装和进门卸载功能的实现。


众所周知,Android的手机在获取Root权限之后几乎可以进行你想要的任何操作,而静默安装便是其中比较常见的一个需求:

豌豆荚、360手机助手等应用下载软件一般都有一个应用一键自动更新功能,一键批量卸载软件,他们是如何实现的呢?

一般这类软件,实现自动更新功能都需要请求root权限,在被授予了root权限后便可批量安装卸载软件,其实,这个并没有太高难度,其过程就是一个获取了Root权限之后的静默安装和卸载:


下面直接上代码:

注:

静默安装和卸载的shell 命令格式分别为:

private String cmd_install = "pm install -r +安装apk包路径";//静默安装命令
private String cmd_uninstall = "pm uninstall +程序包名";//静默卸载命令

程序代码:

import java.io.DataOutputStream;import java.io.OutputStream; import android.app.Activity;import android.os.Bundle;import android.os.Environment;import android.view.Menu;import android.view.View;import android.widget.EditText;/** * 静默安装 卸载 Demo *  * @author blj *  */public class MainActivity extends Activity {     private EditText et_packagename;    private String cmd_install = "pm install -r ";    private String cmd_uninstall = "pm uninstall ";    String apkLocation = Environment.getExternalStorageDirectory().toString()            + "/";     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        et_packagename = (EditText) findViewById(R.id.et_packagename);    }     @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }     public void onClick_install(View view) {        String cmd = cmd_install + apkLocation                + et_packagename.getText().toString().trim();        System.out.println("静默安装命令:" + cmd);        excuteSuCMD(cmd);    }     public void onClick_uninstall(View view) {        String cmd = cmd_uninstall + et_packagename.getText().toString().trim();        // String cmd = cmd_uninstall + "com.kingsoft.website";        System.out.println("静默卸载命令:" + cmd);        excuteSuCMD(cmd);    }        //执行shell命令    protected int excuteSuCMD(String cmd) {        try {            Process process = Runtime.getRuntime().exec("su");            DataOutputStream dos = new DataOutputStream(                    (OutputStream) process.getOutputStream());            // 部分手机Root之后Library path 丢失,导入library path可解决该问题            dos.writeBytes((String) "export LD_LIBRARY_PATH=/vendor/lib:/system/lib\n");            cmd = String.valueOf(cmd);            dos.writeBytes((String) (cmd + "\n"));            dos.flush();            dos.writeBytes("exit\n");            dos.flush();            process.waitFor();            int result = process.exitValue();            return (Integer) result;        } catch (Exception localException) {            localException.printStackTrace();            return -1;        }    } }


更多相关文章

  1. 在Ubuntu下获取Android4.0源代码并编译
  2. Android(安卓)- 系统应用源码开发入门
  3. android监听自身被卸载的方法
  4. Android(安卓)apk安装过程及Java、JNI读取安装包内assets资源文
  5. Android…又摸出来玩了下。
  6. Myeclispe 8.5下断网安装ADT和Android(安卓)SDK
  7. 【Tech】android真机测试——小米3
  8. android app卸载以后弹出用户反馈界面
  9. android设备静默升级

随机推荐

  1. Project Volta 让 Android(安卓)续航提升
  2. android:id="@+id/title"、android:id="@
  3. Android多点触控
  4. android企业级商城源码、360°全景图VR源
  5. Android渗透测试Android渗透测试入门教程
  6. android状态栏工具类
  7. Android知识图谱:我们到底需要学习哪些And
  8. android自带图标
  9. Android必备:Android(安卓)UI控件的了解与
  10. 独立的android开发者开发app如何盈利