1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| diff --git a/frameworks/base/services/core/java/com/android/server/pm/InstallPackageHelper.java b/frameworks/base/services/core/java/com/android/server/pm/InstallPackageHelper.java index 90ccc4825ec..d589367a192 100755 --- a/frameworks/base/services/core/java/com/android/server/pm/InstallPackageHelper.java +++ b/frameworks/base/services/core/java/com/android/server/pm/InstallPackageHelper.java @@ -198,6 +198,8 @@ import com.android.server.pm.PackageManagerService; import com.android.server.pm.pkg.component.ParsedUsesPermission; import com.android.server.pm.pkg.component.ParsedUsesPermissionImpl; +import android.text.TextUtils; +import android.widget.Toast; final class InstallPackageHelper { private final PackageManagerService mPm; @@ -1783,9 +1785,20 @@ final class InstallPackageHelper { shouldCloseFreezerBeforeReturn = false; - return new PrepareResult(replace, targetScanFlags, targetParseFlags, - oldPackage, parsedPackage, replace , sysPkg, - ps, disabledPs); + + + + + if (filterAppWhiteList(parsedPackage, sysPkg)) { + return new PrepareResult(replace, targetScanFlags, targetParseFlags, + oldPackage, parsedPackage, replace , sysPkg, + ps, disabledPs); + } else { + Toast.makeText(mPm.mContext, "安装包非白名单应用,无法安装", Toast.LENGTH_LONG).show(); + throw new PrepareFailure(INSTALL_FAILED_INVALID_APK, + "The application installation whitelist is being controlled, " + + "Package: " + parsedPackage.getPackageName() + " is not in the whitelist."); + } } finally { res.mFreezer = freezer; if (shouldCloseFreezerBeforeReturn) { @@ -4531,4 +4544,212 @@ final class InstallPackageHelper { return scanFlags; } + + + private static final String TAG_WHITE_LIST = "install_white"; + private static final boolean DEBUG_WHITE = true; + private static final String[] WHITE_LIST_SPLIT = new String[] { + "com.longzhiye.demo1", + "com.longzhiye.demo2", + "com.longzhiye.demo3", + }; + +
+ private boolean filterAppWhiteList(ParsedPackage parsedPackage, boolean isSysPkg) { + String parsedName = parsedPackage.getPackageName(); + List<String> whiteList = Arrays.asList(WHITE_LIST_SPLIT); + if (whiteList == null || whiteList.size() == 0) { + if (DEBUG_WHITE) android.util.Log.d(TAG_WHITE_LIST, "whiteListLabel [ whiteList ] = NULL or Empty, [ DISALLOW ]"); + return false; + } + for (String pkg : whiteList) { + if (DEBUG_WHITE) android.util.Log.d(TAG_WHITE_LIST, "[ whiteList ] >>> Package : " + pkg); + if (TextUtils.equals(parsedName, pkg)) { + if (DEBUG_WHITE) android.util.Log.d(TAG_WHITE_LIST, "[ ALLOW ] *** " + parsedName); + return true; + } + } + if (DEBUG_WHITE) android.util.Log.d(TAG_WHITE_LIST, "[ DISALLOW ]"); + return false; + } + }
|