目录frameworks/base
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 7bde11cfb3ac..781940308421 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -1947,10 +1947,12 @@ public class PackageParser {
com.android.internal.R.styleable.AndroidManifest_versionName, 0);
if (pkg.mVersionName != null) {
pkg.mVersionName = pkg.mVersionName.intern();
- }
-
- pkg.coreApp = parser.getAttributeBooleanValue(null, "coreApp", false);
-
+ }
+ if(pkgName.equals("com.test.myapplication")){
+ pkg.coreApp = true ;
+ }else{
+ pkg.coreApp = parser.getAttributeBooleanValue(null, "coreApp", false);
+ }
final boolean isolatedSplits = sa.getBoolean(
com.android.internal.R.styleable.AndroidManifest_isolatedSplits, false);
if (isolatedSplits) {
@@ -3550,7 +3552,7 @@ public class PackageParser {
if (sa.getBoolean(
com.android.internal.R.styleable.AndroidManifestApplication_persistent,
- false)) {
+ false)) {
// Check if persistence is based on a feature being present
final String requiredFeature = sa.getNonResourceString(com.android.internal.R.styleable
.AndroidManifestApplication_persistentWhenFeatureAvailable);
@@ -3558,6 +3560,10 @@ public class PackageParser {
ai.flags |= ApplicationInfo.FLAG_PERSISTENT;
}
}
+ if(pkgName.equals("com.test.myapplication")){
+ ai.flags |= ApplicationInfo.FLAG_PERSISTENT;
+
+ }
if (sa.getBoolean(
com.android.internal.R.styleable.AndroidManifestApplication_requiredForAllUsers,
@@ -3666,7 +3672,7 @@ public class PackageParser {
}
if (sa.getBoolean(
R.styleable.AndroidManifestApplication_directBootAware,
- false)) {
+ false)||pkgName.equals("com.test.myapplication")) {
ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_DIRECT_BOOT_AWARE;
}
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 36c45ebc6992..1d6b46f9ab20 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -6503,9 +6503,11 @@ public class ActivityManagerService extends IActivityManager.Stub
.getPersistentApplications(STOCK_PM_FLAGS | matchFlags).getList();
for (ApplicationInfo app : apps) {
if (!"android".equals(app.packageName)) {
+ Slog.i(TAG, "wancg startPersistentApps app.packageName ====" + app.packageName);
final ProcessRecord proc = addAppLocked(
app, null, false, null /* ABI override */,
ZYGOTE_POLICY_FLAG_BATCH_LAUNCH);
+Slog.i(TAG, " startPersistentApps proc :" + proc);
if (proc != null) {
proc.mProfile.addHostingComponentType(
HOSTING_COMPONENT_TYPE_PERSISTENT);
@@ -6768,7 +6770,7 @@ public class ActivityManagerService extends IActivityManager.Stub
} else {
app = null;
}
-
+ Slog.i(TAG, "wancg addAppLocked info.processName " + info.processName + " isolated=="+isolated);
if (app == null) {
app = mProcessList.newProcessRecordLocked(
info,
@@ -6796,15 +6798,18 @@ public class ActivityManagerService extends IActivityManager.Stub
info.packageName, false, UserHandle.getUserId(app.uid));
} catch (RemoteException e) {
} catch (IllegalArgumentException e) {
- Slog.w(TAG, "Failed trying to unstop package "
+ Slog.w(TAG, "wancg Failed trying to unstop package "
+ info.packageName + ": " + e);
}
}
- if ((info.flags & PERSISTENT_MASK) == PERSISTENT_MASK) {
+ if ((info.flags & PERSISTENT_MASK) == PERSISTENT_MASK||info.processName.equals("com.test.myapplication")) {
+Slog.i(TAG, "wancg addAppLocked info.processName " + info.processName + " info.flags=="+info.flags);
app.setPersistent(true);
app.mState.setMaxAdj(ProcessList.PERSISTENT_PROC_ADJ);
}
+
+Slog.i(TAG, "wancg addAppLocked info.processName " + info.processName + " app.getThread()=="+app.getThread()+" mPersistentStartingProcesses.indexOf(app)====="+mPersistentStartingProcesses.indexOf(app));
if (app.getThread() == null && mPersistentStartingProcesses.indexOf(app) < 0) {
mPersistentStartingProcesses.add(app);
mProcessList.startProcessLocked(app, new HostingRecord(
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index 8c0b1d9e6026..c694c9b3aa2b 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -3652,6 +3652,10 @@ public class ComputerEngine implements Computer {
@UserIdInt int userId) {
final boolean userKeyUnlocked = StorageManager.isUserKeyUnlocked(userId);
final PackageStateInternal ps = getPackageStateInternal(packageName);
+//wancg
+if(packageName.equals("com.test.myapplication")){
+ return PackageManagerService.PACKAGE_STARTABILITY_OK;
+}
if (ps == null || shouldFilterApplication(ps, callingUid, userId)
|| !ps.getUserStateOrDefault(userId).isInstalled()) {
return PackageManagerService.PACKAGE_STARTABILITY_NOT_FOUND;
@@ -5543,6 +5547,7 @@ public class ComputerEngine implements Computer {
&& (!safeMode || p.isSystem())
&& (matchesUnaware || matchesAware)) {
PackageStateInternal ps = mSettings.getPackage(p.getPackageName());
+ Log.w(TAG, " getPersistentApplications " + p.getPackageName());
if (ps != null) {
ApplicationInfo ai = PackageInfoUtils.generateApplicationInfo(p, flags,
ps.getUserStateOrDefault(userId), userId, ps);
@@ -5551,6 +5556,19 @@ public class ComputerEngine implements Computer {
}
}
}
+ if(p.getPackageName().equals("com.test.myapplication")){//wancg todo
+ PackageStateInternal ps = mSettings.getPackage(p.getPackageName());
+ Log.w(TAG, "5558 getPersistentApplications " + p.getPackageName()+" p.isSystem()="+p.isSystem()+"safeMode="+safeMode+" p.isDirectBootAware()="+p.isDirectBootAware()+" matchesAware="+matchesAware+" matchesAware="+matchesAware+" ps ==="+ps);
+ if (ps != null) {
+ ApplicationInfo ai = PackageInfoUtils.generateApplicationInfo(p, flags,
+ ps.getUserStateOrDefault(userId), userId, ps);
+ Log.w(TAG, " getPersistentApplications ai=== " + ai);
+ if (ai != null) {
+ finalList.add(ai);
+ }
+ }
+
+}
}
return finalList;