admin管理员组

文章数量:1634981

Android获取Root权限之后的静默安装实现代码示例分析

作者:  发布日期:2014-02-22 22:42:55 我来说两句(0) 0 Tag标签: Android   获取   Root  
  • Adroid开发中,我们有时会遇到一些特殊功能的实现,有些功能并没有太高技术难度,但是如果之前没有接触过就需要花好多时间去研究解决。

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

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

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

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

    下面直接上代码:

    注:

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

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

    程序代码:

    view source print ? 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/uploadfile/files/2014/0222/SilentInstallDemo.rar

本文标签: 示例权限代码androidroot