zoukankan      html  css  js  c++  java
  • Android 请求root权限实现静默安装

    这几天在做一个新的功能,需要用到静默安装,所以在网上找了一些静默安装的资料就在这里记录一下吧。其实实现静默安装的原理就是请求Android手机的root权限,通过执行Linux命令来安装APK到手机系统,其实代码不是很多,就在这里列一下吧,以后用的时候可以直接翻出来:

     1     public class MyThread extends Thread {
     2         private String path;
     3 
     4         public MyThread(String path) {
     5             // TODO Auto-generated constructor stub
     6             this.path = path;
     7         }
     8 
     9         @Override
    10         public void run() {
    11             // TODO Auto-generated method stub
    12             super.run();
    13 
    14             Process process = null;
    15             OutputStream out = null;
    16             InputStream in = null;
    17 
    18             try {
    19                 process = Runtime.getRuntime().exec("su");
    20                 out = process.getOutputStream();
    21 
    22                 out.write(("pm install -r " + path + "
    ").getBytes());
    23                 in = process.getInputStream();
    24                 int len = 0;
    25                 byte[] bs = new byte[256];
    26 
    27                 while (-1 != (len = in.read(bs))) {
    28                     String state = new String(bs, 0, len);
    29                     if (state.equals("Success
    ")) {
    30 
    31                         Message m = new Message();
    32                         m.arg1 = 1;
    33                         DownLoadService.this.myHandler.sendMessage(m);
    34 
    35                     }
    36                 }
    37             } catch (IOException e) {
    38                 // TODO Auto-generated catch block
    39                 e.printStackTrace();
    40 
    41             }
    42         }
    43     }

    其主要步骤为:

    1.执行Android手机的su命令,如果手机已经root过了,一般情况下Android手机会有一个提示框,提示你是否给予root权限,

    2.如果Android获得了root权限并且同意该应用的权限,则调用pm命令进行安装

    3.安装完成后可以通过读取命令的输出流来判断应用是否安装成功,一般会获得一个“success”的字符换

    出现的问题:

    1.如果用户拒绝授予root权限,在这里没有办法正确判断

    2.如果在用户拒绝授予root权限的情况下,读取起错误流可以获得失败的判断。但是在读取了起错误流的情况下,如果用户授予其root权限,则不能正常执行安装操作

    目前这两个问题还不知道怎么判断,希望有做过的朋友指点一下

    Http下载APK文件,具体代码如下:

     1     HttpGet httpGet = new HttpGet(url);
     2             try {
     3                 HttpResponse httpResponse = new DefaultHttpClient()
     4                         .execute(httpGet);
     5 
     6                 if (httpResponse.getStatusLine().getStatusCode() == 200) {
     7                     InputStream is = httpResponse.getEntity().getContent();
     8                     // 开始下载apk文件
     9                     FileOutputStream fos = new FileOutputStream(downloadPath
    10                             + "/" + name+".apk");
    11                     byte[] buffer = new byte[8192];
    12                     int count = 0;
    13                     while ((count = is.read(buffer)) != -1) {
    14                         fos.write(buffer, 0, count);
    15                     }
    16                     fos.close();
    17                     is.close();
    18                     Log.d(TAG, "apk path = " + downloadPath + "/" + name+".apk");
    19 
    20                     final String path = downloadPath + "/" + name+".apk";
    21 
    22                     timer = new Timer();
    23                     timer.schedule(new TimerTask() {
    24                         @Override
    25                         public void run() {
    26                             // TODO Auto-generated method stub
    27 
    28                             Message m = new Message();
    29                             m.arg1 = 2;
    30                             Bundle bundle = new Bundle();
    31                             bundle.putString("path", path);
    32                             m.setData(bundle);
    33                             DownLoadService.this.myHandler.sendMessage(m);
    34                         }
    35                     }, timeOut);
    36 
    37                     new MyThread(path).start();
    38                 }
    39             } catch (Exception e) {
    40             }
  • 相关阅读:
    linux运维、架构之路-K8s中部署Jenkins集群高可用
    linux运维、架构之路-K8s数据管理
    linux运维、架构之路-K8s通过Service访问Pod
    linux运维、架构之路-K8s应用
    linux运维、架构之路-K8s健康检查Health Check
    linux运维、架构之路-K8s滚动更新及回滚
    linux运维、架构之路-Kubernetes基础(一)
    Python前端HTML
    linux运维、架构之路-Kubernetes离线集群部署-无坑
    linux运维、架构之路-MongoDB单机部署
  • 原文地址:https://www.cnblogs.com/jjxxjnzy/p/3789985.html
Copyright © 2011-2022 走看看