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

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

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


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

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

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


下面直接上代码:

注:

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

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

程序代码:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. import java.io.DataOutputStream;  
  2. import java.io.OutputStream;  
  3.   
  4. import android.app.Activity;  
  5. import android.os.Bundle;  
  6. import android.os.Environment;  
  7. import android.view.Menu;  
  8. import android.view.View;  
  9. 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\n");  
  59.             cmd = String.valueOf(cmd);  
  60.             dos.writeBytes((String) (cmd + "\n"));  
  61.             dos.flush();  
  62.             dos.writeBytes("exit\n");  
  63.             dos.flush();  
  64.             process.waitFor();  
  65.             int result = process.exitValue();  
  66.             return (Integer) result;  
  67.         } catch (Exception localException) {  
  68.             localException.printStackTrace();  
  69.             return -1;  
  70.         }  
  71.     }  
  72.   
  73. }  


软件运行截图:(以金山网址大全为例)

静默安装截图:

其中king.apk为安装apk文件名,安装其他apk时在框中输入相应文件名即可。

点击静默安装即可静默安装应用。


静默卸载截图:

其中com.kingsoft.website为金山网址大全程序的包名,

点击静默卸载,即可静默卸载应用。


本文介绍了静默安装的代码实现,回到豌豆荚和360一键安装、卸载软件,他们的实现方式 也就是监测apk安装包下载完成后执行上面介绍的静默安装命令,一键卸载应该就是将要卸载的程序的包名放到for循环依次执行中自动卸载。


附:静默安装静默卸载 完整代码示例下载链接:

静默安装静默卸载详解SilentInstallDemo.rar

金山网址大全apk下载链接

免积分下载请到我的gihub:

https://github.com/bailiangjin/TestSu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值