diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index dab85eed9b4a9..bf790fa5ff95f 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -4834,4 +4834,7 @@
false
true
true
+
+
+ true
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index beed9a3fe1c5f..1ab3c849cae7a 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -480,6 +480,7 @@
+
diff --git a/services/core/java/com/android/server/apphibernation/AppHibernationService.java b/services/core/java/com/android/server/apphibernation/AppHibernationService.java
index 5a99e0e77a6ce..a12b2130b7dcd 100644
--- a/services/core/java/com/android/server/apphibernation/AppHibernationService.java
+++ b/services/core/java/com/android/server/apphibernation/AppHibernationService.java
@@ -106,6 +106,7 @@ public final class AppHibernationService extends SystemService {
private final HibernationStateDiskStore mGlobalLevelHibernationDiskStore;
private final Injector mInjector;
private final Executor mBackgroundExecutor;
+ private final boolean mOatArtifactDeletionEnabled;
@VisibleForTesting
boolean mIsServiceEnabled;
@@ -133,6 +134,7 @@ public final class AppHibernationService extends SystemService {
mUserManager = injector.getUserManager();
mGlobalLevelHibernationDiskStore = injector.getGlobalLevelDiskStore();
mBackgroundExecutor = injector.getBackgroundExecutor();
+ mOatArtifactDeletionEnabled = injector.isOatArtifactDeletionEnabled();
mInjector = injector;
final Context userAllContext = mContext.createContextAsUser(UserHandle.ALL, 0 /* flags */);
@@ -371,7 +373,9 @@ public final class AppHibernationService extends SystemService {
@GuardedBy("mLock")
private void hibernatePackageGlobally(@NonNull String packageName, GlobalLevelState state) {
Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "hibernatePackageGlobally");
- mPackageManagerInternal.deleteOatArtifactsOfPackage(packageName);
+ if (mOatArtifactDeletionEnabled) {
+ mPackageManagerInternal.deleteOatArtifactsOfPackage(packageName);
+ }
state.hibernated = true;
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
}
@@ -744,6 +748,8 @@ public final class AppHibernationService extends SystemService {
HibernationStateDiskStore getGlobalLevelDiskStore();
HibernationStateDiskStore getUserLevelDiskStore(int userId);
+
+ boolean isOatArtifactDeletionEnabled();
}
private static final class InjectorImpl implements Injector {
@@ -801,5 +807,11 @@ public final class AppHibernationService extends SystemService {
return new HibernationStateDiskStore<>(
dir, mUserLevelHibernationProto, mScheduledExecutorService);
}
+
+ @Override
+ public boolean isOatArtifactDeletionEnabled() {
+ return mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_hibernationDeletesOatArtifactsEnabled);
+ }
}
}
diff --git a/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java b/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java
index 0dbf3fe0cea3d..9a430e4a0f869 100644
--- a/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java
@@ -282,5 +282,10 @@ public final class AppHibernationServiceTest {
public HibernationStateDiskStore getUserLevelDiskStore(int userId) {
return mock(HibernationStateDiskStore.class);
}
+
+ @Override
+ public boolean isOatArtifactDeletionEnabled() {
+ return true;
+ }
}
}