Android常用代码之普通及系统权限静默安装APK

本文介绍了两种在Android设备上安装APK的方法:一种是通过Intent进行常规安装;另一种是利用系统权限进行静默安装。静默安装适用于系统级应用,并需要通过特定命令及权限实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载地址:http://www.trinea.cn/android/android-install-silent/


本文主要介绍程序如何安装apk,包括普通模式安装和系统权限静默安装。

如果是非系统应用请直接查看:Android常用代码之APK root权限静默安装,查看更完美的解决方案。

 

1、普通模式安装,调用系统Intent,代码如下:

public static void install(Context context, String filePath) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse("file://" + filePath), "application/vnd.Android.package-archive");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}

2、静默安装

如果是非系统应用请移步:Android常用代码之APK root权限静默安装,查看更完美的解决方案。

分为如下三步
(1)、静默安装需要系统应用安装权限,需要在AndroidManifest.xml中添加

 

(2)、实现代码
静默安装代码如下,实际是通过pm install -r 命令安装。
注意:该函数最好在新建的线程中运行并通过handler发送安装结果给主线程,否则安装时间较长会导致ANR。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/**
* install slient
*
@param context
@param filePath
@return 0 means normal, 1 means file not exist, 2 means other exception error
*/
public  static  int  installSlient  (  Context  context  ,  String  filePath  )  {
      File  file  =  new  File  (  filePath  )  ;
      if  (  filePath  ==  null  ||  filePath  .  length  (  )  ==  0  ||  (  file  =  new  File  (  filePath  )  )  == null  ||  file  .  length  (  )  <=  0
          ||  !  file  .  exists  (  )  ||  !  file  .  isFile  (  )  )  {
          return  1  ;
      }
 
      String  [  ]  args  =  {  "pm"  ,  "install"  ,  "-r"  ,  filePath  }  ;
      ProcessBuilder  processBuilder  =  new  ProcessBuilder  (  args  )  ;
 
      Process  process  =  null  ;
      BufferedReader  successResult  =  null  ;
      BufferedReader  errorResult  =  null  ;
      StringBuilder  successMsg  =  new  StringBuilder  (  )  ;
      StringBuilder  errorMsg  =  new  StringBuilder  (  )  ;
      int  result  ;
      try  {
          process  =  processBuilder  .  start  (  )  ;
          successResult  =  new  BufferedReader  (  new  InputStreamReader  (  process  .  getInputStream  (  ) )  )  ;
          errorResult  =  new  BufferedReader  (  new  InputStreamReader  (  process  .  getErrorStream  (  )  ) )  ;
          String  s  ;
 
          while  (  (  s  =  successResult  .  readLine  (  )  )  !=  null  )  {
              successMsg  .  append  (  s  )  ;
          }
 
          while  (  (  s  =  errorResult  .  readLine  (  )  )  !=  null  )  {
              errorMsg  .  append  (  s  )  ;
          }
      }  catch  (  IOException  e  )  {
          e  .  printStackTrace  (  )  ;
          result  =  2  ;
      }  catch  (  Exception  e  )  {
          e  .  printStackTrace  (  )  ;
          result  =  2  ;
      }  finally  {
          try  {
              if  (  successResult  !=  null  )  {
                  successResult  .  close  (  )  ;
              }
              if  (  errorResult  !=  null  )  {
                  errorResult  .  close  (  )  ;
              }
          }  catch  (  IOException  e  )  {
              e  .  printStackTrace  (  )  ;
          }
          if  (  process  !=  null  )  {
              process  .  destroy  (  )  ;
          }
      }
 
      // TODO should add memory is not enough here
      if  (  successMsg  .  toString  (  )  .  contains  (  "Success"  )  ||  successMsg  .  toString  (  )  . contains  (  "success"  )  )  {
          result  =  0  ;
      }  else  {
          result  =  2  ;
      }
      Log  .  d  (  "installSlient"  ,  "successMsg:"  +  successMsg  +  ", ErrorMsg:"  +  errorMsg  )  ;
      return  result  ;
}

返回值0表示安装成功,1表示文件不存在,2表示其他错误。需要更丰富的安装失败信息(内存不足、解析包出错)可直接使用PackageUtils.installSlient

 

(3) 、获取系统权限
完成了上面两步后,普通方式安装我们的应用仍然无法静默安装。需要我们的应用获得系统权限,编译应用并通过
adb push <your_apk_path> /system/app/
命令实现安装,即可拥有系统权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值