Make DexOptHelper.forceDexOpt a legacy dexopt only method.
This change also moves the declaration of these two methods from
the IPackageManager interface to the PackageManagerInternal interface
because IPackageManager is in f/b/core and therefore cannot access
LegacyDexoptDisabledException.
Test: adb shell pm force-dex-opt com.android.egg
Bug: 251903639
Change-Id: I2ea6ed39b2e1f4877a83d0a7737537c00ce7e7a6
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 3430a61..d6b14fe 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -572,8 +572,6 @@
boolean performDexOptSecondary(String packageName,
String targetCompilerFilter, boolean force);
- void forceDexOpt(String packageName);
-
int getMoveStatus(int moveId);
void registerMoveCallback(in IPackageMoveObserver callback);
diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java
index 6fb5730..26d0860 100644
--- a/services/core/java/android/content/pm/PackageManagerInternal.java
+++ b/services/core/java/android/content/pm/PackageManagerInternal.java
@@ -1329,6 +1329,11 @@
/** @deprecated For legacy shell command only. */
@Deprecated
+ public abstract void legacyForceDexOpt(@NonNull String packageName)
+ throws LegacyDexoptDisabledException;
+
+ /** @deprecated For legacy shell command only. */
+ @Deprecated
public abstract void legacyReconcileSecondaryDexFiles(String packageName)
throws LegacyDexoptDisabledException;
}
diff --git a/services/core/java/com/android/server/pm/DexOptHelper.java b/services/core/java/com/android/server/pm/DexOptHelper.java
index d8bfa59..1bd5b99 100644
--- a/services/core/java/com/android/server/pm/DexOptHelper.java
+++ b/services/core/java/com/android/server/pm/DexOptHelper.java
@@ -566,7 +566,10 @@
mPm.getDexManager().getPackageUseInfoOrDefault(p.getPackageName()), options);
}
- public void forceDexOpt(@NonNull Computer snapshot, String packageName) {
+ /** @deprecated For legacy shell command only. */
+ @Deprecated
+ public void forceDexOpt(@NonNull Computer snapshot, String packageName)
+ throws LegacyDexoptDisabledException {
PackageManagerServiceUtils.enforceSystemOrRoot("forceDexOpt");
final PackageStateInternal packageState = snapshot.getPackageStateInternal(packageName);
@@ -586,19 +589,7 @@
getDefaultCompilerFilter(), null /* splitName */,
DexoptOptions.DEXOPT_FORCE | DexoptOptions.DEXOPT_BOOT_COMPLETE);
- @DexOptResult int res;
- if (useArtService()) {
- // performDexOptWithArtService ignores the snapshot and takes its own, so it can race
- // with the package checks above, but at worst the effect is only a bit less friendly
- // error below.
- res = performDexOptWithArtService(options, ArtFlags.FLAG_SHOULD_INCLUDE_DEPENDENCIES);
- } else {
- try {
- res = performDexOptInternalWithDependenciesLI(pkg, packageState, options);
- } catch (LegacyDexoptDisabledException e) {
- throw new RuntimeException(e);
- }
- }
+ @DexOptResult int res = performDexOptInternalWithDependenciesLI(pkg, packageState, options);
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
if (res != PackageDexOptimizer.DEX_OPT_PERFORMED) {
diff --git a/services/core/java/com/android/server/pm/IPackageManagerBase.java b/services/core/java/com/android/server/pm/IPackageManagerBase.java
index d4e3549..d39cac0 100644
--- a/services/core/java/com/android/server/pm/IPackageManagerBase.java
+++ b/services/core/java/com/android/server/pm/IPackageManagerBase.java
@@ -303,12 +303,6 @@
@Override
@Deprecated
- public final void forceDexOpt(String packageName) {
- mDexOptHelper.forceDexOpt(snapshot(), packageName);
- }
-
- @Override
- @Deprecated
public final ActivityInfo getActivityInfo(ComponentName component,
@PackageManager.ComponentInfoFlagsBits long flags, int userId) {
return snapshot().getActivityInfo(component, flags, userId);
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 94e96b0..a9750b0 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -6624,6 +6624,13 @@
/** @deprecated For legacy shell command only. */
@Override
@Deprecated
+ public void legacyForceDexOpt(String packageName) throws LegacyDexoptDisabledException {
+ mDexOptHelper.forceDexOpt(snapshotComputer(), packageName);
+ }
+
+ /** @deprecated For legacy shell command only. */
+ @Override
+ @Deprecated
public void legacyReconcileSecondaryDexFiles(String packageName)
throws LegacyDexoptDisabledException {
final Computer snapshot = snapshotComputer();
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index 4263791..ccd15db 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -1977,8 +1977,8 @@
return 0;
}
- public int runForceDexOpt() throws RemoteException {
- mInterface.forceDexOpt(getNextArgRequired());
+ public int runForceDexOpt() throws RemoteException, LegacyDexoptDisabledException {
+ mPm.legacyForceDexOpt(getNextArgRequired());
return 0;
}