Android7.0 MTK方案 静默安装和卸载
来源:互联网 发布:男女合唱网络流行歌曲 编辑:程序博客网 时间:2024/06/11 23:37
一、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 := platformLOCAL_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我测试也是行的。
- Android7.0 MTK方案 静默安装和卸载
- 静默安装和静默卸载
- Android静默安装和静默卸载
- Android--静默安装和静默卸载
- Android静默安装和静默卸载
- Android静默安装和静默卸载
- android实现静默卸载和静默安装
- Android静默安装和静默卸载
- Android静默安装和静默卸载
- Android真正的静默安装(android7.0静默安装)
- android 静默安装和卸载
- android静默安装和卸载
- Android 静默安装和卸载
- Android静默安装和静默卸载接口封装
- Android 静默安装和静默卸载(系统层)
- 实现静默安装和卸载应用
- android apk静默安装和卸载
- android 实现静默安装和卸载
- [转载]CAE工程师:铁匠还是厨子,这是个问题
- os的启动
- 引用类型和基本类型的区别
- Mtk WIFI常用调试命令
- Solr之集群安装-yellowcong
- Android7.0 MTK方案 静默安装和卸载
- Audio Codec的必要性
- Redis之key操作
- java中的lambda表达式
- 几张图看懂列式存储&&join 方式
- 全排列
- Android图片加载之Glide使用
- 本地主机与虚拟机连接配置
- Ubuntu 16.04安装有道词典(完全版)