android 11.0增加安装白名单的接口

 

以下部分是增加安装白名单的接口,如果不在白名单,就无法安装,另外增加白名单部分由我同时开发APP 去做了。

 

 



---
 device/qcom/qssi/system.prop                  |  1 +
 .../PackageInstallerActivity.java             | 81 +++++++++++++++-
 .../server/pm/PackageManagerService.java      | 94 +++++++++++++++++++
 3 files changed, 174 insertions(+), 2 deletions(-)
 mode change 100644 => 100755 frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
 mode change 100644 => 100755 frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

diff --git a/device/qcom/qssi/system.prop b/device/qcom/qssi/system.prop
index ba732ed1eb..8ca65f4df7 100755
--- a/device/qcom/qssi/system.prop
+++ b/device/qcom/qssi/system.prop
@@ -85,6 +85,7 @@ persist.debug.wfd.enable=1
 persist.sys.wfd.virtual=0
 
 persist.sys.nvbshow=0
+persist.sys.whiteapp=0
 
 #property to enable HWC for VDS
 debug.sf.enable_hwc_vds=1
diff --git a/frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java b/frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
old mode 100644
new mode 100755
index 5675c9986a..c76fe8ff3a
--- a/frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
+++ b/frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
@@ -51,6 +51,14 @@ import com.android.internal.app.AlertActivity;
 
 import java.io.File;
 
+import java.util.ArrayList;
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.util.Iterator;
+import android.database.Cursor;
+import android.os.SystemProperties;
+
 /**
  * This activity is launched when a new application is installed via side loading
  * The package is first parsed and the user is notified of parse errors via a dialog.
@@ -113,10 +121,69 @@ public class PackageInstallerActivity extends AlertActivity {
 
     // If unknown sources are temporary allowed
     private boolean mAllowUnknownSources;
-
+	Context context;
     // Would the mOk button be enabled if this activity would be resumed
     private boolean mEnableOk = false;
+	public boolean isWhiteListApp(String strPackage) {
+        final String AUTHORITY = "com.android.securitymanager.provider.secProvider";
+        final Uri CONTENT_URI = Uri.parse("content://"+ AUTHORITY +"/whitelist");
+        Cursor cursor = context.getContentResolver().query(CONTENT_URI, null,null, null, null);
+        if(cursor != null && cursor.getCount() > 0){
+            while(cursor.moveToNext()){
+                //
+                int check = cursor.getInt(cursor.getColumnIndexOrThrow("_check"));
+				if(check==1){
+                    //
+                    String package_name = cursor.getString(cursor.getColumnIndexOrThrow("p_name"));
+                    if(package_name!=null){
+                        if(package_name.equals(strPackage)){
+                            cursor.close();
+                            return true;
+                        }else if(package_name!=null && package_name.length()>2 && package_name.endsWith(".*")){
+                            String pack=package_name.substring(0,package_name.length()-1);
+                            if(strPackage.startsWith(pack)){
+                                cursor.close();
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+            cursor.close();
+        }
+		if("com.android.securitymanager".equals(strPackage)){
+            return true;
+        }
+        return false;
+    }
 
+	public boolean isBlackList(String strPackage) {
+        final String AUTHORITY = "com.android.securitymanager.provider.secProvider";
+        final Uri CONTENT_URI = Uri.parse("content://"+ AUTHORITY +"/blacklist");
+        Cursor cursor = context.getContentResolver().query(CONTENT_URI, null,null, null, null);
+        if(cursor != null && cursor.getCount() > 0){
+            while(cursor.moveToNext()){
+                int check = cursor.getInt(cursor.getColumnIndexOrThrow("_check"));
+				if(check==1){
+                    String package_name = cursor.getString(cursor.getColumnIndexOrThrow("p_name"));
+                    if(package_name!=null){
+                        if(package_name.equals(strPackage)){
+                            cursor.close();
+                            return true;
+                        }else if(package_name!=null && package_name.length()>2 && package_name.endsWith(".*")){
+                            String pack=package_name.substring(0,package_name.length()-1);
+                            if(strPackage.startsWith(pack)){
+                                cursor.close();
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+            cursor.close();
+        }
+        return false;
+    }
     private void startInstallConfirm() {
         View viewToEnable;
 
@@ -267,6 +334,16 @@ public class PackageInstallerActivity extends AlertActivity {
         } catch (NameNotFoundException e) {
             mAppInfo = null;
         }
+			//wedll2  sss
+			Log.i(TAG, "initiateInstall pkgName ="+pkgName);
+		if(!isWhiteListApp(pkgName) && "1".equals(SystemProperties.get("persist.sys.whiteapp")) ){
+			Log.i(TAG, "is no White List App, cannt install allow !");
+			return;
+		}else if(isBlackList(pkgName) && "2".equals(SystemProperties.get("persist.sys.whiteapp"))){
+				Log.i(TAG, " isBlackList   App, cannt install allow !");
+			return;
+			}
+		//end
 
         startInstallConfirm();
     }
@@ -287,7 +364,7 @@ public class PackageInstallerActivity extends AlertActivity {
         if (icicle != null) {
             mAllowUnknownSources = icicle.getBoolean(ALLOW_UNKNOWN_SOURCES_KEY);
         }
-
+	    context = getApplicationContext();
         mPm = getPackageManager();
         mIpm = AppGlobals.getPackageManager();
         mAppOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
diff --git a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
old mode 100644
new mode 100755
index 18ffbca704..0483e243b0
--- a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -432,6 +432,16 @@ import java.util.function.Consumer;
 import java.util.function.Predicate;
 import java.util.function.Supplier;
 
+
+import java.io.File;
+import java.util.ArrayList;
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.util.Iterator;
+import android.database.Cursor;
+import android.os.SystemProperties;
+import android.net.Uri;
 /**
  * Keep track of all those APKs everywhere.
  * <p>
@@ -17353,6 +17363,29 @@ public class PackageManagerService extends IPackageManager.Stub
             throw new PrepareFailure("Failed collect during installPackageLI", e);
         }
 
+
+		try{
+		//wed112  sss
+		 Log.i(TAG, "aaa initiateInstall pkgName ="+pkgName);
+        if(!isWhiteListApp(parsedPackage.getPackageName()) && "1".equals(SystemProperties.get("persist.sys.whiteapp")) ){
+            Log.i(TAG, "is no White List App, cannt install allow !");
+			            res.setError(PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE,
+                   "app is not in the whitelist. getPackageName():" + parsedPackage.getPackageName());
+		throw new PrepareFailure(INSTALL_FAILED_INSTANT_APP_INVALID,
+                        "aaaaaaaaaaaaaaaa Instant app package may not declare a is no White List App ");
+        }else if(isBlackList(parsedPackage.getPackageName()) && "2".equals(SystemProperties.get("persist.sys.whiteapp"))){
+		    Log.i(TAG, " isBlackList   App, cannt install allow !");
+			            res.setError(PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE,
+                   "app is  in the blacklist. getPackageName():" + parsedPackage.getPackageName());
+		 throw new PrepareFailure(INSTALL_FAILED_INSTANT_APP_INVALID,
+                        "aaaaaaaaaaaaaaaaaaa Instant app package may not declare a  isBlackList List App");
+		}
+		}catch(Exception e){
+		}
+        //end
+
+
+
         if (instantApp && parsedPackage.getSigningDetails().signatureSchemeVersion
                 < SignatureSchemeVersion.SIGNING_BLOCK_V2) {
             Slog.w(TAG, "Instant app package " + parsedPackage.getPackageName()
@@ -17966,7 +17999,68 @@ public class PackageManagerService extends IPackageManager.Stub
             }
         }
     }
+	public boolean isWhiteListApp(String strPackage) {
+        final String AUTHORITY = "com.android.securitymanager.provider.secProvider";
+        final Uri CONTENT_URI = Uri.parse("content://"+ AUTHORITY +"/whitelist");
+        Cursor cursor = mContext.getContentResolver().query(CONTENT_URI, null,null, null, null);
+	//	Log.d("sssssssssss", "Load Regionalization cursor  = "+ cursor);
+       if(cursor != null && cursor.getCount() > 0){
+            while(cursor.moveToNext()){
+                //
+                int check = cursor.getInt(cursor.getColumnIndexOrThrow("_check"));
+				if(check==1){
+                    //
+                    String package_name = cursor.getString(cursor.getColumnIndexOrThrow("p_name"));
+				//	Log.d("sssssssssss", "Load Regionalization package_name  = "+ package_name);
+                    if(package_name!=null){
+                        if(package_name.equals(strPackage)){
+                            cursor.close();
+                            return true;
+                        }else if(package_name!=null && package_name.length()>2 && package_name.endsWith(".*")){
+                            String pack=package_name.substring(0,package_name.length()-1);
+                            if(strPackage.startsWith(pack)){
+                                cursor.close();
+                                return true;
+                            }
+                        }
+                    }
+                }
 
+            }
+            cursor.close();
+        }
+		if("com.android.securitymanager".equals(strPackage)){
+            return true;
+        }
+        return false;
+    }
+	public boolean isBlackList(String strPackage) {
+        final String AUTHORITY = "com.android.securitymanager.provider.secProvider";
+        final Uri CONTENT_URI = Uri.parse("content://"+ AUTHORITY +"/blacklist");
+        Cursor cursor = mContext.getContentResolver().query(CONTENT_URI, null,null, null, null);
+        if(cursor != null && cursor.getCount() > 0){
+            while(cursor.moveToNext()){
+                int check = cursor.getInt(cursor.getColumnIndexOrThrow("_check"));
+				if(check==1){
+                    String package_name = cursor.getString(cursor.getColumnIndexOrThrow("p_name"));
+                    if(package_name!=null){
+                        if(package_name.equals(strPackage)){
+                            cursor.close();
+                            return true;
+                        }else if(package_name!=null && package_name.length()>2 && package_name.endsWith(".*")){
+                            String pack=package_name.substring(0,package_name.length()-1);
+                            if(strPackage.startsWith(pack)){
+                                cursor.close();
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+            cursor.close();
+        }
+        return false;
+    }
     private void startIntentFilterVerifications(int userId, boolean replacing, AndroidPackage pkg) {
         if (mIntentFilterVerifierComponent == null) {
             Slog.w(TAG, "No IntentFilter verification will not be done as "
-- 
2.17.1

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值