Android6.0关于预置三方app卸载(二) 调用接口安装
来源:互联网 发布:淘宝网牛仔女装 编辑:程序博客网 时间:2024/06/16 05:54
之前的博客也分析过如何安装三方app,是在第一次开机时将system/third-app下面的apk文件copy到data/app下。这样apk卸载后,恢复出厂设置又能安装上。但是会低概率的出现有的app安装有问题,不知道什么原因,具体是应用启动的时候加载资源出了问题,后续我们再深入资源系统研究下,这里先给出一个临时方案。
就是模仿installPackageAsUser接口来安装应用,就是先copy apk到data/app下,然后再装载到PKMS中。
我们再PKMS的systemReady方法最后添加如下代码,第一次开机调用installThirdApps方法
if(isFirstBoot()){ Log.v(TAG, "It's first boot, install the third apps"); installThirdApps(); }
installThirdApps,就是扫描system/third_app下的apk文件,调用startInstall安装
private void installThirdApps(){ //the source directory not exists File storeDir = new File("/system/third_app"); if(!storeDir.exists()){ Log.e(TAG,"/system/third_app is not exist"); return; } //get the apk files in /system/third_app String apkDirFilesNames[] = storeDir.list(); if(apkDirFilesNames == null){ Log.e(TAG,"apk file name is null"); return; } for(int i = 0; i < apkDirFilesNames.length; i++){ File srcFileDir = new File("/system/third_app", apkDirFilesNames[i]); Log.v(TAG,"srcFile=" + srcFileDir); String srcFileNames[] = srcFileDir.list(); for(int j = 0; j < srcFileNames.length; j++) { File srcFile = new File(srcFileDir, srcFileNames[j]); startInstall(srcFile); } } }startInstall函数就是模仿installPackageAsUser接口,来发送msg_copy消息,将apk复制到data/app下面,然后开始装载apk到PKMS中。
private void startInstall(File originFile) { //String originPath = "/system/third_app/MOffice/MOffice.apk"; VerificationParams verificationParams = new VerificationParams(null, null, null, VerificationParams.NO_UID, null); int callingUid = UserHandle.getCallingUserId(); verificationParams.setInstallerUid(callingUid); UserHandle user = new UserHandle(callingUid); //final File originFile = new File(originPath); final OriginInfo origin = OriginInfo.fromUntrustedFile(originFile); final Message msg_copy = mHandler.obtainMessage(INIT_COPY); InstallParams installParams = new InstallParams(origin, null, null, 0, null, null, verificationParams, user, null, null); msg_copy.obj = installParams; mHandler.sendMessage(msg_copy); }
1 0
- Android6.0关于预置三方app卸载(二) 调用接口安装
- Android6.0关于预置三方app卸载(一) copy到data/app下
- Android6.0关于预置三方app卸载(三) 扫描system/third_app目录
- Android6.0关于预置三方app卸载 扫描system/third_app目录
- [RK3288][Android6.0] 调试笔记 --- /data/app/预置apk安装失败
- [Android6.0][RK3399] 出厂预置可卸载 APK
- [RK3288][Android6.0] 调试笔记 --- 系统自带预置第三方APK方法
- Android6.0 设备Idle状态(二)AlarmManagerService setIdleUntil接口
- MTK android6.0 如何预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复
- android6.0第三方app如何打开串口
- android6.0第三方app如何打开串口
- Android6.0 PKMS扫描目录和调用接口安装应用的区别
- Android6.0 PKMS扫描目录和调用接口安装应用的区别
- 开发app在android6.0运行直接退出解决(二)
- 三方通话(二)
- MTK6580(Android6.0)-Psensor APP 编写
- Android6.0 PackageManagerService卸载应用
- Android6.0 PackageManagerService(PMS)-卸载
- GIT上传、下载、还原
- bzoj 3450: Tyvj1952 Easy (概率与期望dp)
- form表单嵌套,用标签的form属性来解决表单嵌套的问题
- Jackson框架:Java对象与json、xml格式的数据之间的转换
- Android最佳的开源库(四)
- Android6.0关于预置三方app卸载(二) 调用接口安装
- window10 pl2303驱动解决
- 系统集成项目管理工程师---信息化知识
- [Anaconda2]Selenium+PhantomJS环境搭建
- queue by one stack、two stack and three stack
- dubbo的轮询机制说明
- 卷积RBM源码解读
- 关于分布式系统的数据一致性问题(三)
- 比特币论文:一个点对点的电子现金系统