From 86fd75ab7a0ee78be4be091d0732f5acb49f722d Mon Sep 17 00:00:00 2001 From: Howard Wu <40033067+Howard20181@users.noreply.github.com> Date: Mon, 26 Sep 2022 10:01:26 +0800 Subject: [PATCH] Clear application profile data before perform dexOpt (#2141) --- .../manager/ui/fragment/CompileDialogFragment.java | 1 + .../java/org/lsposed/lspd/service/LSPManagerService.java | 5 +++++ .../java/org/lsposed/lspd/service/PackageService.java | 8 +++++++- .../src/main/java/android/content/pm/IPackageManager.java | 2 ++ .../main/aidl/org/lsposed/lspd/ILSPManagerService.aidl | 2 ++ 5 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/CompileDialogFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/CompileDialogFragment.java index f1758e55..63f7578c 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/CompileDialogFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/CompileDialogFragment.java @@ -83,6 +83,7 @@ public class CompileDialogFragment extends AppCompatDialogFragment { @Override protected Throwable doInBackground(String... commands) { try { + LSPManagerServiceHolder.getService().clearApplicationProfileData(commands[0]); if (LSPManagerServiceHolder.getService().performDexOptMode(commands[0])) { return null; } else { diff --git a/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java b/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java index 988854a7..cc4d1f15 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/LSPManagerService.java @@ -821,6 +821,11 @@ public class LSPManagerService extends ILSPManagerService.Stub { } } + @Override + public void clearApplicationProfileData(String packageName) throws RemoteException { + PackageService.clearApplicationProfileData(packageName); + } + @Override public boolean performDexOptMode(String packageName) throws RemoteException { return PackageService.performDexOptMode(packageName); diff --git a/daemon/src/main/java/org/lsposed/lspd/service/PackageService.java b/daemon/src/main/java/org/lsposed/lspd/service/PackageService.java index 747f955c..72ef07b1 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/PackageService.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/PackageService.java @@ -313,11 +313,17 @@ public class PackageService { return intent; } + public static void clearApplicationProfileData(String packageName) throws RemoteException { + IPackageManager pm = getPackageManager(); + if (pm == null) return; + pm.clearApplicationProfileData(packageName); + } + public static boolean performDexOptMode(String packageName) throws RemoteException { IPackageManager pm = getPackageManager(); if (pm == null) return false; return pm.performDexOptMode(packageName, SystemProperties.getBoolean("dalvik.vm.usejitprofiles", false), - "speed", true, true, null); + SystemProperties.get("pm.dexopt.install", "speed-profile"), true, true, null); } } diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/IPackageManager.java b/hiddenapi/stubs/src/main/java/android/content/pm/IPackageManager.java index 36ef13dc..279e8975 100644 --- a/hiddenapi/stubs/src/main/java/android/content/pm/IPackageManager.java +++ b/hiddenapi/stubs/src/main/java/android/content/pm/IPackageManager.java @@ -93,6 +93,8 @@ public interface IPackageManager extends IInterface { String targetCompilerFilter, boolean force, boolean bootComplete, String splitName) throws RemoteException; + void clearApplicationProfileData(String packageName) throws RemoteException; + abstract class Stub extends Binder implements IPackageManager { public static IPackageManager asInterface(IBinder obj) { diff --git a/services/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl b/services/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl index 7a720722..2aee4460 100644 --- a/services/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl +++ b/services/manager-service/src/main/aidl/org/lsposed/lspd/ILSPManagerService.aidl @@ -87,4 +87,6 @@ interface ILSPManagerService { void setDexObfuscate(boolean enable) = 43; int getDex2OatWrapperCompatibility() = 44; + + void clearApplicationProfileData(in String packageName) = 45; }