apk 静默安装

news/2025/3/19 17:45:44/

apk 静默安装 - 欧颜柳 - 博客园 (cnblogs.com)

如果需要应用进行静默安装,则需要满足一下两个条件
1  必须添加权限 <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
2  必须是系统应用,或者系统签名应用

方法 1 通过 adb install 安装

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

/**

 *

 * @param apkFilePath 安装包路径

 * @return true 、false

 */

  public boolean installByADB(String apkFilePath){

    boolean success = false;

    if (apkFilePath == null || apkFilePath.equals("")) {return success;}

    File apkFile = new File(apkFilePath);

    if (!apkFile.exists() || apkFile.isDirectory()) {return success;}

    String[] args = { "pm""install""-r""-d", apkFilePath };

    ByteArrayOutputStream eBAout = new ByteArrayOutputStream();

    ByteArrayOutputStream nBAout = new ByteArrayOutputStream();

    ProcessBuilder processBuilder = null;

    java.lang.Process process = null;

    InputStream eis = null;

    InputStream is = null;

    int num = 0;

    byte[] buffer = new byte[1024];

    try {

      processBuilder = new ProcessBuilder(args);

      process = processBuilder.start();

      eis = process.getErrorStream();

      while ((num = eis.read(buffer)) != -1) {

        eBAout.write(buffer, 0, num);

      }

      is = process.getInputStream();

      while ((num = is.read(buffer)) != -1) {

        nBAout.write(buffer, 0, num);

      }

      String error = eBAout.toString("UTF-8");

      String normal = nBAout.toString("UTF-8");

      if(normal != null && normal.contains("Success")){success = true;}

    } catch (IOException e) {

    } catch (Exception e) {

    } catch (Throwable t) {

    } finally {

      try {

        if (null != eis) {eis.close();}

      } catch (Exception e) {}

      try {

        if (null != is) {is.close();}

      } catch (Exception e) {}

        process.destroy();

      }

      return success;

   }

 方法2 通过PM安装
 这个方法的前提是将framework参与编译并排列第一

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

/**

 * @param context

 * @param apkPath

 */

public void installSilentlyBYPM(Context context, String apkPath) {

    if(apkPath == null || "".equals(apkPath)){return;}

    File apkFile = new File(apkPath);

    (!apkFile.exists() || apkFile.isDirectory()){return;}

    Uri apkPackageURI = Uri.fromFile(apkFile);

    int installFlags = PackageManager.INSTALL_ALL_USERS|PackageManager.INSTALL_REPLACE_EXISTING;

   PackageManager pm = context.getPackageManager();

   pm.installPackage(apkPackageURI, new PackageInstallObserver(){

           @Override

            public void onPackageInstalled(String basePackageName, int returnCode, String msg, Bundle extras){

                super.onPackageInstalled(basePackageName, returnCode, msg, extras);

                if(returnCode == 1){

                     //如果安装包的包名等于basePackageName; 则安装成功

                }

            }

        }, installFlags, context.getPackageName());

 }


http://www.ppmy.cn/news/1070391.html

相关文章

在Linux上安装SonarQube

安装SonarQube在Linux上需要按照以下步骤进行操作&#xff1a; 下载并解压SonarQube安装包。可以从SonarQube官方网站下载最新的稳定版&#xff0c;然后使用命令解压缩安装包。例如&#xff0c;使用命令unzip sonarqube-9.7.zip解压缩。 创建一个新的用户并设置权限。SonarQu…

【设计模式】Head First 设计模式——装饰者模式 C++实现

设计模式最大的作用就是在变化和稳定中间寻找隔离点&#xff0c;然后分离它们&#xff0c;从而管理变化。将变化像小兔子一样关到笼子里&#xff0c;让它在笼子里随便跳&#xff0c;而不至于跳出来把你整个房间给污染掉。 设计思想 动态地将责任附加到对象上&#xff0c;若要扩…

软考(一)进制的表示(二进制,八进制,十进制,十六进制)

进制的转换 一、进制的表示 二进制&#xff08;B&#xff09;&#xff1a; 0 , 1 , 10 , 11 , 100 , 101 , 110 , 111 , 1000 0,1,10,11,100,101,110,111,1000 0,1,10,11,100,101,110,111,1000 对应的十进制是&#xff1a; 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 0,1,2,3,4,5,6…

前端基础---HTML笔记汇总一

HTML定义 HTML超文本标记语言——HyperText Markup Language。 超文本是什么&#xff1f; 链接标记是什么&#xff1f; 标记也叫标签&#xff0c;带尖括号的文本 标签分类 单标签:只有开始标签&#xff0c;没有结束标签(<br>换行 <hr>水平线 <img> 图像标…

学习哈哈哈哈

# 零、学习计划 * 数据库相关 * 索引 * [我以为我对数据库索引很了解&#xff0c;直到我遇到了阿里面试官 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/107487215) * [给我一分钟&#xff0c;让你彻底明白MySQL聚簇索引和非聚簇索引 - 知乎 (zhihu.com)](ht…

震动分析国标GB/T 19873.3-2019/ISO 13373-3:2015笔记

1.国家标准 1.1震动测量 现行国家标准是&#xff1a;GB/T 19873.2-2009 机器状态监测与诊断 振动状态监测 第2部分&#xff1a;振动数据处理、分析与描述 它的起草人&#xff1a; 郑州机械研究所。西安热工研究院有限公司。东南大学。 主要起草人 韩国明 、张学延 、傅行…

mysql连接错误 errorCode 0, state 08S01

mysql连接错误 errorCode 0, state 08S01 一开始遇到这个问题的时候&#xff0c;在网上查的都是在连接数据库处添加useSSLfalse spring.datasource.urljdbc:mysql://localhost:3306/xxx?allowPublicKeyRetrievaltrue&useUnicodetrue&characterEncodingUTF-8&use…

装备一台ubuntu

配置远程连接&#xff1a; ubuntu的root用户无法远程登入问题&#xff1a; openssh安装命令&#xff1a; sudo apt-get install openssh-server 安装完成通过以下命令查看SSH是否启动 ps -e | grep ssh 如果只有ssh-agent表示还没启动&#xff0c;需要&#xff1a; /etc/i…