From 69900249c9d7ce21d182915982efd866455c5382 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Tue, 12 Oct 2021 19:22:54 +0800 Subject: [PATCH] [core] Allow vdex speedup for InMemoryDex (#1260) * [core] Allow vdex speedup for InMemoryDex * 1 --- core/src/main/cpp/main/src/context.cpp | 1 + core/src/main/java/org/lsposed/lspd/core/Main.java | 7 +++++++ hiddenapi-bridge/build.gradle.kts | 3 ++- .../src/main/java/hidden/HiddenApiBridge.java | 9 +++++++++ .../src/main/java/dalvik/system/VMRuntime.java | 5 +++++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/core/src/main/cpp/main/src/context.cpp b/core/src/main/cpp/main/src/context.cpp index 8ea260c3..58d32d1f 100644 --- a/core/src/main/cpp/main/src/context.cpp +++ b/core/src/main/cpp/main/src/context.cpp @@ -189,6 +189,7 @@ namespace lspd { jstring app_data_dir) { Service::instance()->InitService(env); const auto app_id = uid % PER_USER_RANGE; + app_data_dir_ = app_data_dir; nice_name_ = nice_name; JUTFString process_name(env, nice_name); skip_ = !sym_initialized; diff --git a/core/src/main/java/org/lsposed/lspd/core/Main.java b/core/src/main/java/org/lsposed/lspd/core/Main.java index e02aeea6..0a055b70 100644 --- a/core/src/main/java/org/lsposed/lspd/core/Main.java +++ b/core/src/main/java/org/lsposed/lspd/core/Main.java @@ -24,6 +24,7 @@ import android.app.ActivityThread; import android.app.LoadedApk; import android.content.pm.ApplicationInfo; import android.content.res.CompatibilityInfo; +import android.os.Build; import android.os.Environment; import android.os.IBinder; import android.os.Process; @@ -45,6 +46,8 @@ import java.io.File; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.XposedInit; +import hidden.HiddenApiBridge; +import pxb.android.axml.Util; public class Main { public static void startBootstrapHook(boolean isSystem, String appDataDir) { @@ -86,6 +89,10 @@ public class Main { Utils.logI("Loaded manager, skipping next steps"); return; } + Utils.logD("appDataDir: " + appDataDir); + if (!isSystem && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + HiddenApiBridge.VMRuntime_setProcessDataDirectory(appDataDir); + } installBootstrapHooks(isSystem, appDataDir); Utils.logI("Loading modules for " + niceName + "/" + Process.myUid()); XposedInit.loadModules(); diff --git a/hiddenapi-bridge/build.gradle.kts b/hiddenapi-bridge/build.gradle.kts index fdd01b3c..7943b0f2 100644 --- a/hiddenapi-bridge/build.gradle.kts +++ b/hiddenapi-bridge/build.gradle.kts @@ -22,5 +22,6 @@ plugins { } dependencies { + compileOnly("androidx.annotation:annotation:1.2.0") compileOnly(project(":hiddenapi-stubs")) -} \ No newline at end of file +} diff --git a/hiddenapi-bridge/src/main/java/hidden/HiddenApiBridge.java b/hiddenapi-bridge/src/main/java/hidden/HiddenApiBridge.java index 0941b634..2420fd7c 100644 --- a/hiddenapi-bridge/src/main/java/hidden/HiddenApiBridge.java +++ b/hiddenapi-bridge/src/main/java/hidden/HiddenApiBridge.java @@ -35,8 +35,12 @@ import android.os.Handler; import android.os.IBinder; import android.os.UserHandle; +import androidx.annotation.RequiresApi; + import java.io.File; +import dalvik.system.VMRuntime; + public class HiddenApiBridge { public static int AssetManager_addAssetPath(AssetManager am, String path) { return am.addAssetPath(path); @@ -91,4 +95,9 @@ public class HiddenApiBridge { public static CompatibilityInfo Resources_getCompatibilityInfo(Resources res) { return res.getCompatibilityInfo(); } + + @RequiresApi(29) + public static void VMRuntime_setProcessDataDirectory(String dataDir) { + VMRuntime.setProcessDataDirectory(dataDir); + } } diff --git a/hiddenapi-stubs/src/main/java/dalvik/system/VMRuntime.java b/hiddenapi-stubs/src/main/java/dalvik/system/VMRuntime.java index 2d953c32..da8bd1ae 100644 --- a/hiddenapi-stubs/src/main/java/dalvik/system/VMRuntime.java +++ b/hiddenapi-stubs/src/main/java/dalvik/system/VMRuntime.java @@ -1,5 +1,7 @@ package dalvik.system; +import androidx.annotation.RequiresApi; + public class VMRuntime { public static VMRuntime getRuntime() { @@ -9,4 +11,7 @@ public class VMRuntime { public native boolean is64Bit(); public native String vmInstructionSet(); + + @RequiresApi(29) + public static native void setProcessDataDirectory(String dataDir); }