一、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方案 静默安装和卸载相关推荐

  1. android静默卸载,Android实践 -- Android静默安装和卸载

    App的静默安装和卸载 Android系统本身提供了安装卸载功能,但是api接口是@hide的,不是公开的接口,所以在应用级别 是无法实现静默安装和卸载的,要实现静默安装和卸载需要是系统应用,要有系统 ...

  2. windows msiexec quiet静默安装及卸载msi软件包

    windows msiexec quiet静默安装及卸载msi软件包 Tips Process Explorer We recommend installing Process Explorer an ...

  3. Android7.0下载Apk自动安装

    Android7.0下载Apk自动安装 1. 整体需求 下载APK文件 使用DownloadManager来下载 在应用界面中展示下载进度 安装下载后的APK文件 root模式: 可以自动安装,不需要 ...

  4. android程序自动卸载软件,Android应用静默安装和卸载

    App的静默安装和卸载 Android系统本身提供了安装卸载功能,但是api接口是@hide的,不是公开的接口,所以在应用级别 是无法实现静默安装和卸载的,要实现静默安装和卸载需要是系统应用,要有系统 ...

  5. Android 8.1实现静默安装、卸载功能

    网上有很多相关的资料,也有很多不同的方法去实现,本文是我选取的一个方法,已实现静默安装和卸载功能,本文主要目的记录一下关键点. 主要是用PackageManagerService.java里面的 in ...

  6. setup facatory9.0打包详细教程(含静默安装和卸载)

    最近打包的次数特别多,对setup facatory有了很多了解,发现了很多这个软件的新功能 1.打开软件之后直接点OK创建新项目(也可以使用之前自己保留的项目) 2.直接点下一步 3.点下一步(选择 ...

  7. Android7.0适配方案

    1安装时解析错误 我们的App通常会有检查更新的功能.用户在收到提示更新并且下载完后,会自动打开安装页面让用户来去安装.这时就会出现安装错误的问题,这类的问题的可能性比较多.比如较低版本的App想要覆 ...

  8. Android7.0 PackageManagerService (3) APK安装

    在本篇博客中,我们分析一下Android中的APK是如何安装的,以及PKMS在这个过程中进行了哪些工作. APK的安装方式有很多,我们先来看看如何用adb命令进行安装. 我们从adb install开 ...

  9. 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 ...

  10. 血饮龙纹、百战沙城,静默安装,卸载了以后 没几个小时就又安装到电脑了

    一.说明 二.解决 三.说明 一.说明 最近不知道安装了什么软件,导致电脑会静默安装:血饮龙纹.百战沙城 卸载了,过不久又自动安装了 二.解决 把其他安全软件换成了 腾讯电脑管家 在右上角点击:三横图 ...

最新文章

  1. Apache优化:修改最大并发连接数
  2. 远程打包linux成镜像,ubuntu18.04 现有系统打包成镜像
  3. Windows Terminal 1.0 正式发布
  4. spring mvc+spring + hibernate 整合(二)
  5. 01-MPLS产生的背景/以及和其他技术比较的优势
  6. vector模板,初学者必读
  7. django的from组件
  8. 记录一次线上超时异常查询
  9. 控制反转 java_控制反转( Ioc)快速入门
  10. RANSAC估计——以直线拟合为例
  11. CSS子元素居中(父元素宽高已知,子元素未知)
  12. 在线BMI身体质量指数计算器
  13. zabbix利用traceroute命令监控主备链路状态
  14. python学习系列:装饰器
  15. HTML+CSS+JavaScript实现植物大战僵尸(附演示地址)
  16. 移除PDF文件打开密码
  17. FineReport10 决策报表常用javascript脚本
  18. 来自一个IT民工的转型
  19. 无法打开https网页终极解决方法
  20. CoAP协议的常用开源代码实现

热门文章

  1. 怎样在 SSASserver之间做同步
  2. 优秀ASP.NET程序员的修炼之路(转)
  3. PHP中的正则表达式函数
  4. JQ 对于table的动态增减
  5. 经典排序算法(十八)--Proxmap Sort
  6. select、poll、epoll的区别
  7. 37. 两个链表的第一个公共节点(C++版本)
  8. oracle 表 队列,如何将复制队列表移出系统(SYSTEM)表空间
  9. 用python画明星_Python也能成为毕加索?我用Python给小姐姐画了幅油画
  10. jquery 自定义正方形图标_当你在玩 iOS14自定义图标时,有人用它赚了70万了!