当前位置: 首页 > news >正文

apk 静默安装

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.lryc.cn/news/144726.html

相关文章:

  • Unity记录4.2-存储-从json文件获取Tile路径
  • vue3页面传参?
  • NB水表和LoRa水表有哪些不同之处?
  • Java进阶(6)——抢购问题中的数据不安全(非原子性问题) Java中的synchronize和ReentrantLock锁使用 死锁及其产生的条件
  • SpringBoot初级开发--加入Log4j进行日志管理打印(6)
  • 计算机竞赛 基于GRU的 电影评论情感分析 - python 深度学习 情感分类
  • android logcat问题 怎么换成旧版
  • 监听的用法watch
  • XML—标记语言
  • 图数据库Neo4j学习五渲染图数据库neo4jd3
  • AI增强的社交网络·导师·电话客服……
  • c# Task异步使用
  • QuickLook概述和使用以及常用插件
  • 1A快恢复整流二极管型号汇总
  • 【element-ui】el-dialog改变宽度
  • 第三讲,实践编程 Eigen
  • POI实现百万数据导出
  • 如何制作党建专题汇报片
  • 沉浸式VR虚拟实景样板间降低了看房购房的难度
  • 如何在Linux环境下给Web应用配置HTTPS证书
  • 面试题-React(七):React组件通信
  • MASM32编程调用 API函数RtlIpv6AddressToString,Windows 10 容易,Windows 7 折腾
  • 为什么使用Nacos而不是Eureka(Nacos和Eureka的区别)
  • Python作业一
  • protobuf概览
  • <C++> SSE指令集
  • cortex-A7核LED灯实验--STM32MP157
  • WPF实战项目十三(API篇):备忘录功能api接口、优化待办事项api接口
  • clickhouse(十四、分布式DDL阻塞及同步阻塞问题)
  • 怎么入门网络安全(黑客)?