实现根据xml的packagename防止卸载,筛选安装
DataPreInstall文件夹放到
vendor\tcl\sita\tvkit\uikit\frameworks\android\java\com\tcl\os\system\下
PackageManagerService.java按patch修改即可实现基本防止卸载和筛选安装功能
基本流程图
patch
+++ core/java/com/android/server/pm/PackageManagerService.java (working copy)
@@ -308,6 +308,7 @@
//Added by chyj@tcl for AppBlacklist 20170516
import com.tcl.os.system.packageverify.PackageVerify;
+import com.tcl.os.system.DataPreInstallApp.DataPreInstallApp;
//End of TCL package install strategy
@@ -346,20 +347,20 @@
*/
public class PackageManagerService extends IPackageManager.Stub {
// Debug output for dexopting. This is shared between PackageManagerService, OtaDexoptService
// and PackageDexOptimizer. All these classes have their own flag to allow switching a single
@@ -406,7 +407,7 @@
static final int SCAN_CHECK_ONLY = 1<<15;
static final int SCAN_DONT_KILL_APP = 1<<17;
static final int SCAN_IGNORE_FROZEN = 1<<18;
-
+ private boolean SCAN_DATA_APP = false; //add by chyj
static final int REMOVE_CHATTY = 1<<16;
private static final int[] EMPTY_INT_ARRAY = new int[0];
@@ -548,6 +549,7 @@
//Added by chyj @tcl for AppBlacklist 20170516
PackageVerify mPackageVerify;
+ DataPreInstallApp mDataPreInstallApp;
//End of TCL package install strategy
@@ -2129,6 +2131,7 @@
mProtectedPackages = new ProtectedPackages(mContext);
//Added by chyj@tcl for AppBlacklist 20170516
mPackageVerify = null;//new PackageVerify(); tmp delete
+ mDataPreInstallApp = new DataPreInstallApp();
//End of TCL package install strategy
synchronized (mInstallLock) {
// writer
@@ -2415,8 +2418,9 @@
if (!mOnlyCore) {
EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_DATA_SCAN_START,
SystemClock.uptimeMillis());
+ SCAN_DATA_APP = true;
scanDirTracedLI(mAppInstallDir, 0, scanFlags | SCAN_REQUIRE_KNOWN, 0);
-
+ SCAN_DATA_APP = false;
scanDirTracedLI(mDrmAppPrivateInstallDir, mDefParseFlags
| PackageParser.PARSE_FORWARD_LOCK,
scanFlags | SCAN_REQUIRE_KNOWN, 0);
@@ -6679,6 +6683,8 @@
// Ignore entries which are not packages
continue;
}
+ Slog.w(TAG, "chyj scanDirLI File to parse " + file );
+
try {
scanPackageTracedLI(file, parseFlags | PackageParser.PARSE_MUST_BE_APK,
scanFlags, currentTime, null);
@@ -6819,7 +6825,22 @@
} finally {
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
}
-
+
+ if (DEBUG_INSTALL) Slog.d(TAG, "chyj scanPackageLI Parsing: scanFile=" + scanFile+" packagename="+pkg.packageName);
+ //add by chyj if is first start system and /data/app will check is preinstall frome TCL
+ if(SCAN_DATA_APP){
+