1 。已经root的设备 可以实现静默安装,调用pm install -r来安装的,-r是保留原来APP的数据

  private   boolean slienceInstall(String apkUrl) {boolean result =false;DataOutputStream dataOutputStream =null;BufferedReader errorStream =null;try {Process process =Runtime.getRuntime().exec("su");dataOutputStream =new DataOutputStream(process.getOutputStream());String command ="pm install -r " + apkUrl +"\n";dataOutputStream.write(command.getBytes(Charset.forName("utf-8")));dataOutputStream.flush();dataOutputStream.writeBytes("exit\n");dataOutputStream.flush();process.waitFor();errorStream =new BufferedReader(new InputStreamReader(process.getErrorStream()));String msg ="";String line;while ((line = errorStream.readLine()) !=null) {msg += line;}if (!msg.contains("Failure")) {result =true;}}catch (Exception e) {}finally {try {if (dataOutputStream !=null) {dataOutputStream.close();}if (errorStream !=null) {errorStream.close();}}catch (IOException e) {}}return result;}

2.需要系统签名的方式,才能实现静默安装

①权限

 <uses-permission android:name= "android.permission.RESTART_PACKAGES" /><uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:ignore="ProtectedPermissions" />
private boolean slienceInstallWithSysSign(String filePath) {File file =new File(filePath);PackageManager packageManager =getPackageManager();Class pmClz =packageManager.getClass();try {if (Build.VERSION.SDK_INT >=21) {Class aClass =Class.forName("android.app.PackageInstallObserver");Constructor constructor =aClass.getDeclaredConstructor();constructor.setAccessible(true);Object installObserver =constructor.newInstance();Method method =pmClz.getDeclaredMethod("installPackage",Uri.class,aClass,int.class,String.class);method.setAccessible(true);method.invoke(packageManager,Uri.fromFile(file),installObserver,2,null);}else {Method method =pmClz.getDeclaredMethod("installPackage",Uri.class,Class.forName("android.content.pm.IPackageInstallObserver"),int.class,String.class);method.setAccessible(true);method.invoke(packageManager,Uri.fromFile(file),null,2,null);}return true;}catch (Exception e) {e.printStackTrace();}return false;}

3.需要手动点击确定才能安装

    /*** 7.0以上直接安装*需要点击确定* @param context* @param path*/public void start7Install(Context context, String path) {Uri apkUri = FileProvider.getUriForFile(context, getPackageName() + ".provider", new File(path));//在AndroidManifest中的添加providerIntent install = new Intent(Intent.ACTION_VIEW);install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);install.setDataAndType(apkUri, "application/vnd.android.package-archive");startActivity(install);}

添加provider

 <providerandroid:name="androidx.core.content.FileProvider"android:authorities="${applicationId}.provider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/provider_paths" /></provider>

在res里添加xml文件夹,添加provider_paths

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android"><external-pathname="external_files"path="." />
</paths>

Android apk的安装相关推荐

  1. android 闪退解决方案,Android apk无法安装及闪退问题解决办法

    Android apk无法安装及闪退问题 app在部分手机上(低版本)打不开或打开就闪退的问题 之前做项目集成的是 环信的sdk ,环信的sdk 确实很好,客服 也很给力.但是在集成的过程中发现,ap ...

  2. Android APK应用安装原理(2)-查找APK并自动安装

    Android每次启动的时候会自动安装位于特定目录下的APK,这个过程会在packageManagerService这个类的构造方法中进行,这里会创建多个目录用于预查找: [java] view pl ...

  3. 与程序员相关的 android apk包安装时提示 “应用未安装” 的原因

    情景:机器上已经安装了一个版本 如果调用系统的安装流程,进行apk包的重新安装,即,安装apk是通过系统弹出如下弹窗 安装apk. 如果出现提示 "应用未安装" 如图: 莫慌,不一 ...

  4. android批量安装,[已解决]分享Android apk 批量安装脚本

    @echo off setlocal enabledelayedexpansion title APKs ADB Install Tool v1.0.0 color 2f set adb=" ...

  5. android apk无法安装及闪退问题

    app在部分手机上(低版本)打不开或打开就闪退的问题 之前做项目集成的是 环信的sdk ,环信的sdk 确实很好,客服 也很给力.但是在集成的过程中发现,apk 在手机上发布不了,要么就是,安装了 打 ...

  6. 【SealDEV 倾情奉献】Android APK 安装过程详解

    开发 Android 应用后,一般都会安装到手机上去运行,了解应用是如何安装到手机上的,可以更好的理解应用的本质,理解应用是如何运行的,在自己开发的应用遇到一些问题时,会从更深层次去分析,快速定位找到 ...

  7. Mac打包Android的apk,【ReactNative】Mac下分分钟打包 Android apk

    Mac 下 ReactNative如何打包构建Android apk 的应用.该文章还差一个 打包发布到各个平台的教程 总结 打包 jsbundle代码 生成签名 添加签名到app中 打包成apk(打 ...

  8. 如何在Android模拟器上安装和卸载APK程序包

    如何在Android模拟器上安装和卸载APK程序包 Android, 程序包, APK, 卸载, 模拟 一,安装APK          安装APK当然首先是要有模拟器,和要安装的APK包,这个不多废 ...

  9. android手机如何安装apk文件,如何安装APK文件到自己的android手机里?.doc

    如何安装APK文件到自己的android手机里? 很多朋友刚拿到G1的时候大概首先就是要往里面装软件了,在ANDROID平台下安装文件的后缀名为".apk",就好像PC上的安装文件 ...

  10. android 监听安装来源_Flutter插件开发之APK自动安装

    点击上方的终端研发部,右上角选择"设为星标" 每日早9点半,技术文章准时送上 公众号后台回复"学习",获取作者独家秘制精品资料 往期文章 记五月的一个Andro ...

最新文章

  1. oracle 11g 的em启动不了
  2. 【OPENGL】第三篇 着色器基础(一)
  3. spring boot数据库操作汇总
  4. matlab学习(二)
  5. JS中popup.js
  6. 年度大片:StackOverflow 2017开发者调查报告
  7. 前端学习(983):jquery概念
  8. linux nginx权限配置文件,linux下nginx部署以及配置详解
  9. Python为什么要self
  10. 线段树(Segment Tree)
  11. 截止到2022年9月底可用的与大屏可视化相关的网站和网页
  12. 2019年系统架构设计师考试--从备考到拿证
  13. 【linux】du命令
  14. Win10,Office2013出现“您的组织策略阻止我们为您完成此操作”怎么解决?
  15. MT4 DDE数据交换
  16. APP开发者必备,主流安卓应用商店开发者公司账号注册
  17. php uv pv,PHP網站流量統計--[pv,uv,ip及$_SERVER]說明
  18. 【P1516】青蛙的约会
  19. 根据一个下拉框改变另外一个下拉框内容
  20. 测试常见面试题(一)

热门文章

  1. 一个好用的鼠标连点器
  2. 爬虫学习之抓取今日头条街拍美图
  3. 域服务器安全策略应用,ad域服务器组策略命令
  4. 14.拉格朗日插值公式
  5. BS和CS架构的区别
  6. 电子手轮控制步进电机程序手轮控制步进电机的頻率,脉冲数,内容包括欧姆龙plc程序,mcgs程序
  7. 全球数据共享网站集合
  8. 微信小程序npm安装有赞UI 组件库
  9. 用MATLAB实现一个数字图像加密解密系统
  10. 铁三角- 倒数348天