Android7.0 MTK方案 静默安装和卸载
一、android安装apk介绍
安装apk有两种方法
1、调用系统PackageInstaller.apk进行安装
这个系统apk所在目录为:android/packages/apps/PackageInstaller
2、串口命令安装”pm install –r hello.apk”
这个pm命令实现所在目录为:android/frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java
它们最后都是调用系统底层接口实现apk安装和卸载,实现静默安装要调用的就是这些接口,而这些接口怎么调用,参考的就是Pm.java这个文件。
二、apk安装接口
1、方法一,获取服务,调用aidl里面的方法
frameworks\base\core\java\android\content\pm\IPackageManager.aidl
安装方法
/** @deprecated Use PackageInstaller instead */void installPackageAsUser(in String originPath,in IPackageInstallObserver2 observer,int flags,in String installerPackageName,int userId);
卸载方法
/** @deprecated rawr, don't call AIDL methods directly! */void deletePackageAsUser(in String packageName, IPackageDeleteObserver observer,int userId, int flags);
获取服务方法
IPackageManager mIPm; mIPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package"));
2、方法二,第一种方法是获取服务后直接调用aidl里面的方法,而更好的办法是使用PackageManager.java里面的方法,PackageManager.java是对第一张方法的封装,最后也是通过第一种方法实现的。
PackageManager.java所在目录为:
frameworks\base\core\java\android\content\pm\PackageManager.java
安装方法
public abstract void installPackage(Uri packageURI,PackageInstallObserver observer,@InstallFlags int flags,String installerPackageName);
卸载方法
public abstract void deletePackage(String packageName, IPackageDeleteObserver observer,@DeleteFlags int flags);
获得PackageManager.java对象的方法
Context mContext; PackageManager mPm; mContext = getApplicationContext(); mPm = mContext.getPackageManager();
3、无论哪种方法,都需要权限
Android.mk
LOCAL_CERTIFICATE := platform LOCAL_PRIVILEGED_MODULE := true
AndroidManifest.xml
android:sharedUserId="android.uid.system"<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/><uses-permission android:name="android.permission.INSTALL_PACKAGES" /><uses-permission android:name="android.permission.DELETE_PACKAGES" /><uses-permission android:name="android.permission.CLEAR_APP_CACHE" /><uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MANAGE_USERS" /><uses-permission android:name="android.permission.GRANT_RUNTIME_PERMISSIONS" /><uses-permission android:name="android.permission.REVOKE_RUNTIME_PERMISSIONS" /><uses-permission android:name="android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS" /><uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" /><uses-permission android:name="android.permission.READ_INSTALL_SESSIONS" /><uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.KILL_UID" /><uses-permission android:name="android.permission.MANAGE_APP_OPS_RESTRICTIONS" /><uses-permission android:name="com.google.android.permission.INSTALL_WEARABLE_PACKAGES" /><!-- Needed for passing extras with intent ACTION_SHOW_ADMIN_SUPPORT_DETAILS --><uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" />
三、源码路径如下
链接: https://pan.baidu.com/s/1ge62etl 密码: 8n5q
四、总结
1、Runtime.getRuntime().exec()这个方法在android7.0不行,没调通。
2、其实方法一的IPackageManager.aidl和方法二的PackageManager.java里面的方法是过时的,Android7.0哪里写着 deprecated replaced by PackageInstaller。
应该使用IPackageInstaller.aidl和PackageInstaller.java更好,但是使用IPackageManager.aidl和PackageManager.java我测试也是行的。
转载于:https://www.cnblogs.com/DaSunWarman/p/7955933.html
Android7.0 MTK方案 静默安装和卸载相关推荐
- android静默卸载,Android实践 -- Android静默安装和卸载
App的静默安装和卸载 Android系统本身提供了安装卸载功能,但是api接口是@hide的,不是公开的接口,所以在应用级别 是无法实现静默安装和卸载的,要实现静默安装和卸载需要是系统应用,要有系统 ...
- windows msiexec quiet静默安装及卸载msi软件包
windows msiexec quiet静默安装及卸载msi软件包 Tips Process Explorer We recommend installing Process Explorer an ...
- Android7.0下载Apk自动安装
Android7.0下载Apk自动安装 1. 整体需求 下载APK文件 使用DownloadManager来下载 在应用界面中展示下载进度 安装下载后的APK文件 root模式: 可以自动安装,不需要 ...
- android程序自动卸载软件,Android应用静默安装和卸载
App的静默安装和卸载 Android系统本身提供了安装卸载功能,但是api接口是@hide的,不是公开的接口,所以在应用级别 是无法实现静默安装和卸载的,要实现静默安装和卸载需要是系统应用,要有系统 ...
- Android 8.1实现静默安装、卸载功能
网上有很多相关的资料,也有很多不同的方法去实现,本文是我选取的一个方法,已实现静默安装和卸载功能,本文主要目的记录一下关键点. 主要是用PackageManagerService.java里面的 in ...
- setup facatory9.0打包详细教程(含静默安装和卸载)
最近打包的次数特别多,对setup facatory有了很多了解,发现了很多这个软件的新功能 1.打开软件之后直接点OK创建新项目(也可以使用之前自己保留的项目) 2.直接点下一步 3.点下一步(选择 ...
- Android7.0适配方案
1安装时解析错误 我们的App通常会有检查更新的功能.用户在收到提示更新并且下载完后,会自动打开安装页面让用户来去安装.这时就会出现安装错误的问题,这类的问题的可能性比较多.比如较低版本的App想要覆 ...
- Android7.0 PackageManagerService (3) APK安装
在本篇博客中,我们分析一下Android中的APK是如何安装的,以及PKMS在这个过程中进行了哪些工作. APK的安装方式有很多,我们先来看看如何用adb命令进行安装. 我们从adb install开 ...
- linux安装静默安装was7,WAS7.0 - 安装并升级WAS7.0.0.31(静默安装)
WAS7.0 - 安装并升级WAS7.0.0.31(静默安装) 安装之前需要准备的文件:C1G35ML.tar.gz:WAS7.0安装包 C1G36ML.tar.gz:WAS升级工具 7.0.0-WS ...
- 血饮龙纹、百战沙城,静默安装,卸载了以后 没几个小时就又安装到电脑了
一.说明 二.解决 三.说明 一.说明 最近不知道安装了什么软件,导致电脑会静默安装:血饮龙纹.百战沙城 卸载了,过不久又自动安装了 二.解决 把其他安全软件换成了 腾讯电脑管家 在右上角点击:三横图 ...
最新文章
- Apache优化:修改最大并发连接数
- 远程打包linux成镜像,ubuntu18.04 现有系统打包成镜像
- Windows Terminal 1.0 正式发布
- spring mvc+spring + hibernate 整合(二)
- 01-MPLS产生的背景/以及和其他技术比较的优势
- vector模板,初学者必读
- django的from组件
- 记录一次线上超时异常查询
- 控制反转 java_控制反转( Ioc)快速入门
- RANSAC估计——以直线拟合为例
- CSS子元素居中(父元素宽高已知,子元素未知)
- 在线BMI身体质量指数计算器
- zabbix利用traceroute命令监控主备链路状态
- python学习系列:装饰器
- HTML+CSS+JavaScript实现植物大战僵尸(附演示地址)
- 移除PDF文件打开密码
- FineReport10 决策报表常用javascript脚本
- 来自一个IT民工的转型
- 无法打开https网页终极解决方法
- CoAP协议的常用开源代码实现
热门文章
- 怎样在 SSASserver之间做同步
- 优秀ASP.NET程序员的修炼之路(转)
- PHP中的正则表达式函数
- JQ 对于table的动态增减
- 经典排序算法(十八)--Proxmap Sort
- select、poll、epoll的区别
- 37. 两个链表的第一个公共节点(C++版本)
- oracle 表 队列,如何将复制队列表移出系统(SYSTEM)表空间
- 用python画明星_Python也能成为毕加索?我用Python给小姐姐画了幅油画
- jquery 自定义正方形图标_当你在玩 iOS14自定义图标时,有人用它赚了70万了!