Android apk的安装
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的安装相关推荐
- android 闪退解决方案,Android apk无法安装及闪退问题解决办法
Android apk无法安装及闪退问题 app在部分手机上(低版本)打不开或打开就闪退的问题 之前做项目集成的是 环信的sdk ,环信的sdk 确实很好,客服 也很给力.但是在集成的过程中发现,ap ...
- Android APK应用安装原理(2)-查找APK并自动安装
Android每次启动的时候会自动安装位于特定目录下的APK,这个过程会在packageManagerService这个类的构造方法中进行,这里会创建多个目录用于预查找: [java] view pl ...
- 与程序员相关的 android apk包安装时提示 “应用未安装” 的原因
情景:机器上已经安装了一个版本 如果调用系统的安装流程,进行apk包的重新安装,即,安装apk是通过系统弹出如下弹窗 安装apk. 如果出现提示 "应用未安装" 如图: 莫慌,不一 ...
- android批量安装,[已解决]分享Android apk 批量安装脚本
@echo off setlocal enabledelayedexpansion title APKs ADB Install Tool v1.0.0 color 2f set adb=" ...
- android apk无法安装及闪退问题
app在部分手机上(低版本)打不开或打开就闪退的问题 之前做项目集成的是 环信的sdk ,环信的sdk 确实很好,客服 也很给力.但是在集成的过程中发现,apk 在手机上发布不了,要么就是,安装了 打 ...
- 【SealDEV 倾情奉献】Android APK 安装过程详解
开发 Android 应用后,一般都会安装到手机上去运行,了解应用是如何安装到手机上的,可以更好的理解应用的本质,理解应用是如何运行的,在自己开发的应用遇到一些问题时,会从更深层次去分析,快速定位找到 ...
- Mac打包Android的apk,【ReactNative】Mac下分分钟打包 Android apk
Mac 下 ReactNative如何打包构建Android apk 的应用.该文章还差一个 打包发布到各个平台的教程 总结 打包 jsbundle代码 生成签名 添加签名到app中 打包成apk(打 ...
- 如何在Android模拟器上安装和卸载APK程序包
如何在Android模拟器上安装和卸载APK程序包 Android, 程序包, APK, 卸载, 模拟 一,安装APK 安装APK当然首先是要有模拟器,和要安装的APK包,这个不多废 ...
- android手机如何安装apk文件,如何安装APK文件到自己的android手机里?.doc
如何安装APK文件到自己的android手机里? 很多朋友刚拿到G1的时候大概首先就是要往里面装软件了,在ANDROID平台下安装文件的后缀名为".apk",就好像PC上的安装文件 ...
- android 监听安装来源_Flutter插件开发之APK自动安装
点击上方的终端研发部,右上角选择"设为星标" 每日早9点半,技术文章准时送上 公众号后台回复"学习",获取作者独家秘制精品资料 往期文章 记五月的一个Andro ...
最新文章
- oracle 11g 的em启动不了
- 【OPENGL】第三篇 着色器基础(一)
- spring boot数据库操作汇总
- matlab学习(二)
- JS中popup.js
- 年度大片:StackOverflow 2017开发者调查报告
- 前端学习(983):jquery概念
- linux nginx权限配置文件,linux下nginx部署以及配置详解
- Python为什么要self
- 线段树(Segment Tree)
- 截止到2022年9月底可用的与大屏可视化相关的网站和网页
- 2019年系统架构设计师考试--从备考到拿证
- 【linux】du命令
- Win10,Office2013出现“您的组织策略阻止我们为您完成此操作”怎么解决?
- MT4 DDE数据交换
- APP开发者必备,主流安卓应用商店开发者公司账号注册
- php uv pv,PHP網站流量統計--[pv,uv,ip及$_SERVER]說明
- 【P1516】青蛙的约会
- 根据一个下拉框改变另外一个下拉框内容
- 测试常见面试题(一)