Android10静默安装APP,卸载APP,安装拦截

项目场景:

android10静默安装APP
apk请看 静默安装APK下载

描述

调用PackageInstaller就行,但是需要系统权限,demo请看上面的链接

PackageInstaller packageInstaller = packageManager.getPackageInstaller();
        PackageInstaller.SessionParams sessionParams = new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL);
        sessionParams.setSize(apkFile.length());
        int sessionId = createSession(packageInstaller, sessionParams);
        packageInstaller.registerSessionCallback(new InstallSessionCallback(sessionId));
        if (sessionId != -1) {
            boolean copySuccess = copyInstallFile(packageInstaller, sessionId, apkFilePath);
            if (copySuccess) {
                execInstallCommand(context, packageInstaller, sessionId);
            }
        }

session = packageInstaller.openSession(sessionId);
            Intent intent = new Intent();
            intent.setAction(INSTALL_ACTION);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            session.commit(pendingIntent.getIntentSender());

安装拦截

installPackagesLI方法中

diff --git a/alps/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/alps/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
index 49844d386e..d3e5e69afb 100644
--- a/alps/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/alps/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -17136,6 +17136,17 @@ public class PackageManagerService extends IPackageManager.Stub
                 request.installResult.installerPackageName = request.args.installerPackageName;
 
                 final String packageName = prepareResult.packageToScan.packageName;
+                               Log.i("xunye", "packageName=="+packageName);
+                               String appwhite = SystemProperties.get("ro.vendor.mediatek.xunye.appwhite");
+                               Slog.e("xunye", "pms appwhite == " + appwhite);
+                               if (!prepareResult.system && !TextUtils.isEmpty(appwhite)) {
+                                       if(appwhite.contains(packageName)){
+                                               Slog.e("xunye", "PMS app white exist continue");
+                                       }else{
+                                               Slog.e("xunye", "PMS app white no exist return");
+                                               //return;
+                                       }
+                               }
                 prepareResults.put(packageName, prepareResult);
                 installResults.put(packageName, request.installResult);
                 installArgs.put(packageName, request.args);

权限问题

AndroidManifest.xml权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.REBOOT" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.DELETE_PACKAGES" />
    <uses-permission android:name="android.permission.READ_INSTALL_SESSIONS" />
    <uses-permission android:name="android.permission.MANAGE_APP_OPS_MODES" />
    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />

编译到系统priv-app下面要修改
frameworks/base/data/etc/privapp-permissions-platform.xml
增加

+       <privapp-permissions package="xxxxxxxx">
+        <permission name="android.permission.REBOOT"/>
+        <permission name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+        <permission name="android.permission.READ_EXTERNAL_STORAGE"/>
+        <permission name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
+        <permission name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
+        <permission name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+        <permission name="android.permission.INSTALL_PACKAGES"/>
+        <permission name="android.permission.DELETE_PACKAGES"/>
+        <permission name="android.permission.READ_INSTALL_SESSIONS"/>
+        <permission name="android.permission.MANAGE_APP_OPS_MODES"/>
+        <permission name="android.permission.PACKAGE_USAGE_STATS"/>
+
+    </privapp-permissions>

MK文件


LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := Silenceinstall
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#这里是编译到priv-app下面
LOCAL_PRIVILEGED_MODULE := true 
LOCAL_CERTIFICATE := platform

include $(BUILD_PREBUILT)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuyewen288

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值