Android11.0禁止安装apk功能

88 篇文章 1 订阅
49 篇文章 1 订阅

之前在做系统项目的时候遇到一个客户要求禁止掉安装apk的功能,就是不想让用户去安装任何第三方的app,其实apk的安装有好几个通道方法,如下两种都给禁止掉基本就能满足客户需求了

1. 禁掉机器中识别到的apk文件的安装 ,修改如下:

diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java
old mode 100644
new mode 100755
index 0b8de6c..e45cb56
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java
@@ -38,6 +38,8 @@ import android.os.RemoteException;
 import android.os.UserManager;
 import android.permission.IPermissionManager;
 import android.util.Log;
+import android.widget.Toast;
+
 
 import java.util.List;
 
@@ -53,6 +55,7 @@ public class InstallStart extends Activity {
     private IPermissionManager mIPermissionManager;
     private UserManager mUserManager;
     private boolean mAbortInstall = false;
+	private boolean APK_INSTALL_FINISH = false;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -150,7 +153,16 @@ public class InstallStart extends Activity {
         }
 
         if (nextActivity != null) {
-            startActivity(nextActivity);
+            if(!APK_INSTALL_FINISH) {
+	          	//startActivity(nextActivity);
+            	Toast.makeText(InstallStart.this, "禁止安装", Toast.LENGTH_LONG).show();
+            	Intent result = new Intent();
+           	 	result.putExtra(Intent.EXTRA_INSTALL_RESULT,
+                PackageManager.INSTALL_FAILED_INVALID_URI);
+            	setResult(RESULT_FIRST_USER, result);
+            } else{
+                startActivity(nextActivity);
+            }
         }
         finish();
     }

2. 禁掉adb命令安装apk,修改如下:

diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
old mode 100644
new mode 100755
index 31edaa0..4eaa570
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -495,6 +495,8 @@ public class PackageManagerService extends IPackageManager.Stub
     private static final boolean DEBUG_SHARED_LIBRARIES = false;
     public static final boolean DEBUG_COMPRESSION = Build.IS_DEBUGGABLE;
 
+	private boolean SYSTEM_APK_INSTALL_FINISH = false;
+
     // Debug output for dexopting. This is shared between PackageManagerService, OtaDexoptService
     // and PackageDexOptimizer. All these classes have their own flag to allow switching a single
     // user, but by default initialize to this.
@@ -1690,6 +1692,9 @@ public class PackageManagerService extends IPackageManager.Stub
         void doHandleMessage(Message msg) {
             switch (msg.what) {
                 case INIT_COPY: {
+					if(SYSTEM_APK_INSTALL_FINISH){
+                        return ;
+                    }
                     HandlerParams params = (HandlerParams) msg.obj;
                     if (params != null) {
                         if (DEBUG_INSTALL) Slog.i(TAG, "init_copy: " + params);
@@ -3444,6 +3449,7 @@ public class PackageManagerService extends IPackageManager.Stub
                     + ((SystemClock.uptimeMillis()-startTime)/1000f)
                     + " seconds");
 
+			SYSTEM_APK_INSTALL_FINISH = true;
             // If the platform SDK has changed since the last time we booted,
             // we need to re-grant app permission to catch any new ones that
             // appear.  This is really a hack, and means that apps can in some

以上两个通道给禁掉了,基本都能满足客户的需求了,一般用户也不会adb命令,但是我们还能尽所能去全面禁掉

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值