当前位置: 首页 > 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());

 }

相关文章:

apk 静默安装

apk 静默安装 - 欧颜柳 - 博客园 (cnblogs.com) 如果需要应用进行静默安装&#xff0c;则需要满足一下两个条件 1 必须添加权限 <uses-permission android:name"android.permission.INSTALL_PACKAGES" /> 2 必须是系统应用&#xff0c;或者系统签名应用 方法…...

Unity记录4.2-存储-从json文件获取Tile路径

文章首发见博客&#xff1a;https://mwhls.top/4813.html。 无图/格式错误/后续更新请见首发页。 更多更新请到mwhls.top查看 欢迎留言提问或批评建议&#xff0c;私信不回。 汇总&#xff1a;Unity 记录 摘要&#xff1a;从json文件获取Tile材质路径。 确定保存方案-2023/08/1…...

vue3页面传参?

...

NB水表和LoRa水表有哪些不同之处?

NB水表和LoRa水表是两种目前市场上常见的智能水表&#xff0c;它们在功能、性能、应用场景等方面存在一些不同之处。 一、技术方面 NB水表采用NB-IoT技术&#xff0c;而LoRa水表采用LoRa技术。NB-IoT技术是窄带物联网技术&#xff0c;它具有良好的低功耗、低成本、高覆盖、高可…...

Java进阶(6)——抢购问题中的数据不安全(非原子性问题) Java中的synchronize和ReentrantLock锁使用 死锁及其产生的条件

目录 引出场景&#xff1a;大量请求拥挤抢购事务的基本特征ACID线程安全的基本特征 加锁(java)synchronized锁ReentrantLock锁什么是可重入锁&#xff1f;如何保证可重入 滥用锁的代价&#xff1f;&#xff08;死锁&#xff09;死锁的四个必要条件死锁的案例 总结 引出 1.大量请…...

SpringBoot初级开发--加入Log4j进行日志管理打印(6)

日志记录在整个java工程开发中占着很重要的比重&#xff0c;因为很多问题的排查需要通过日志分析才能确认。在SpringBoot中我用得最多的就是log4j这个日志框架。接下来我们具体配置log4j. log4j定义了8个级别的log&#xff08;除去OFF和ALL&#xff0c;可以说分为6个级别&#…...

计算机竞赛 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖&#xff0c;适合作为竞…...

android logcat问题 怎么换成旧版

参考 如果想切换回旧版LOGCAT&#xff0c;按照下方步骤设置即可 File->Settings->Expermental->Logcat->Enable new Logcat tool window&#xff1a;取消勾选 设置好后上方会有一个Toast&#xff0c;询问你是否使用新版logcat&#xff0c;关掉即可 最新测试版移…...

监听的用法watch

1、当想停止某页面定时刷新&#xff08;监听路由的变化&#xff09; /**组件被移除时调用 */deactivated() {clearInterval(this.timer);this.timer null;},/**监听路由变化是否刷新 */watch: {// 方法1 //监听路由是否变化$route(to, from) {if (to.name "xxx") {…...

XML—标记语言

什么是XML&#xff1f; Extensible Markup Language&#xff0c;可扩展标记语言。 那标记语言是什么&#xff1f; 用文字做标记表达一些效果或携带一些数据。比如&#xff1a;HTML、XML 我的理解&#xff1a;用倾盆大雨表达雨很大 那XML为什么说是可扩展的呢&#xff1f; 还…...

图数据库Neo4j学习五渲染图数据库neo4jd3

文章目录 1.现成的工具2.Neo4j JavaScript Driver3.neovis4.neo4jd34.1neo4jd3和neovis对比4.2获取neo4jd34.3neo4jd3的数据结构4.4Spring data neo4.4.1 定义返回数据格式4.4.1.1NeoResults4.4.1.2GraphVO4.4.1.3NodeVO4.4.1.4ShipVO 4.4.2 SDN查询解析4.4.2.1 Repo查询语句4.…...

AI增强的社交网络·导师·电话客服……

本月共更新80条知识&#xff0c; 智能时代&#xff0c;人与人之间的差距&#xff0c;体现在前沿知识的整合上。 # BeFake AI AI-augmented social network AI增强的社交网络&#xff0c;用户使用文本提示来生成图像&#xff0c;拍摄自己的“AI”版本。任何人都可以创建全新的虚…...

c# Task异步使用

描述 Task出现之前&#xff0c;微软的多线程处理方式有&#xff1a;Thread→ThreadPool→委托的异步调用&#xff0c;虽然可以满足基本业务场景&#xff0c;但它们在多个线程的等待处理方面、资源占用方面、延续和阻塞方面都显得比较笨拙&#xff0c;在面对复杂的业务场景下&am…...

QuickLook概述和使用以及常用插件

1、QuickLook概述 QuickLook&#xff1a; 是可以快速预览的工具&#xff0c;开源、免费。通过空格键即可快速查看文件内容。 文件无需打开就可以用QuickLook一键快速预览。 说明文档&#xff1a;https://en.wikipedia.org/wiki/Quick_Look github地址&#xff1a;https://git…...

1A快恢复整流二极管型号汇总

快恢复整流二极管是二极管中的一种&#xff0c;开关特性好、反向恢复时间短&#xff0c;在开关电源、PWM脉宽调制器、变频器等电子电路中经常能看到它的身影。快恢复整流二极管的内部结构与普通PN结二极管不同&#xff0c;它属于PIN结型二极管&#xff0c;即在P型硅材料与N型硅…...

【element-ui】el-dialog改变宽度

dialog默认宽度为父元素的50%&#xff0c;这就导致在移动端会非常的窄&#xff0c;如图1&#xff0c;需要限定宽度。 解决方法&#xff1a;添加custom-class属性&#xff0c;然后在style中编写样式&#xff0c;注意&#xff0c;如果有scoped限定&#xff0c;需要加::v-deep &l…...

第三讲,实践编程 Eigen

目录 1.实践 Eigen1.1 Eigen的简介1.2 Eigen 向量和矩阵的 声明1.3 Eigen的输出操作1.4 矩阵和向量相乘 要注意数据类型 矩阵纬度1.5 矩阵的四则运算1.6 矩阵求解特征向量和特征值1.7 解方程 求逆 1.实践 Eigen 1.1 Eigen的简介 ​ Eigen是一个 C 开源线性代数库。它提供了快…...

POI实现百万数据导出

1、概述 ​ 我们都知道Excel可以分为早期的Excel2003版本&#xff08;使用POI的HSSF对象操作&#xff09;和Excel2007版本&#xff08;使用POI的XSSF操作&#xff09;&#xff0c;两者对百万数据的支持如下&#xff1a; ​ Excel 2003&#xff1a;在POI中使用HSSF对象时&#…...

如何制作党建专题汇报片

通过展示党组织的凝聚力和战斗力&#xff0c;增强党员的组织归属感和团结合作意识。通过宣传片&#xff0c;可以加强党组织的凝聚力&#xff0c;推动党的事业发展。制作党建专题汇报片需要一定的前期准备和后期制作技巧。下面是由深圳党建专题汇报片制作公司老友记小编为您整理…...

沉浸式VR虚拟实景样板间降低了看房购房的难度

720 全景是一种以全景视角为特点的虚拟现实展示方式&#xff0c;它通过全景图像和虚拟现实技术&#xff0c;将用户带入一个仿佛置身其中的沉浸式体验中。720 全景可以应用于旅游、房地产、展览等多个领域&#xff0c;为用户提供更为直观、真实的体验。 在房地产领域&#xff0c…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...