Adroid开发中,我们有时会遇到一些特殊功能的实现,有些功能并没有太高技术难度,但是如果之前没有接触过就需要花好多时间去研究解决。 今天,总结介绍一下 获取Root权限之后的静默安装和进门卸载功能的实现。 众所周知,Android的手机在获取Root权限之后几乎可以进行你想要的任何操作,而静默安装便是其中比较常见的一个需求: 豌豆荚、360手机助手等应用下载软件一般都有一个应用一键自动更新功能,一键批量卸载软件,他们是如何实现的呢? 一般这类软件,实现自动更新功能都需要请求root权限,在被授予了root权限后便可批量安装卸载软件,其实,这个并没有太高难度,其过程就是一个获取了Root权限之后的静默安装和卸载: 下面直接上代码: 注: 静默安装和卸载的shell 命令格式分别为:
private String cmd_install = "pm install -r +安装apk包路径";//静默安装命令 程序代码: 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./uploadfile/files/2014/0222/SilentInstallDemo.rar |
|