diff --git a/core b/core
index 3049dbb..57c1b8b 160000
--- a/core
+++ b/core
@@ -1 +1 @@
-Subproject commit 3049dbb29b6d03f7c49722dbe2fa9c9b278f7120
+Subproject commit 57c1b8b904ca3606e59d337cbcb2b595ac0f5acd
diff --git a/imanager/build.gradle.kts b/imanager/build.gradle.kts
deleted file mode 100644
index 4e6cd2a..0000000
--- a/imanager/build.gradle.kts
+++ /dev/null
@@ -1,20 +0,0 @@
-plugins {
- id("com.android.library")
-}
-
-android {
- flavorDimensions += "api"
- productFlavors.create("Riru") {
- dimension = "api"
- }
-
- buildTypes {
- release {
- isMinifyEnabled = true
- }
- }
-}
-
-dependencies {
- api(projects.services.daemonService)
-}
diff --git a/imanager/src/main/AndroidManifest.xml b/imanager/src/main/AndroidManifest.xml
deleted file mode 100644
index 0a8ce9c..0000000
--- a/imanager/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/imanager/src/main/aidl/org/lsposed/lspatch/manager/IManagerService.aidl b/imanager/src/main/aidl/org/lsposed/lspatch/manager/IManagerService.aidl
deleted file mode 100644
index 25b3023..0000000
--- a/imanager/src/main/aidl/org/lsposed/lspatch/manager/IManagerService.aidl
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.lsposed.lspatch.manager;
-
-import org.lsposed.lspd.models.Module;
-
-interface IManagerService {
- List getModules();
-}
\ No newline at end of file
diff --git a/manager/build.gradle.kts b/manager/build.gradle.kts
index 002280b..4435a08 100644
--- a/manager/build.gradle.kts
+++ b/manager/build.gradle.kts
@@ -63,8 +63,9 @@ afterEvaluate {
}
dependencies {
- implementation(projects.imanager)
implementation(projects.patch)
+ implementation(projects.services.daemonService)
+ implementation(projects.share.android)
implementation("androidx.core:core-ktx:1.7.0")
implementation("androidx.activity:activity-compose:1.5.0-alpha03")
diff --git a/manager/src/main/java/org/lsposed/lspatch/manager/ManagerService.kt b/manager/src/main/java/org/lsposed/lspatch/manager/ManagerService.kt
new file mode 100644
index 0000000..a89989d
--- /dev/null
+++ b/manager/src/main/java/org/lsposed/lspatch/manager/ManagerService.kt
@@ -0,0 +1,30 @@
+package org.lsposed.lspatch.manager
+
+import android.os.Bundle
+import android.os.IBinder
+import android.os.ParcelFileDescriptor
+import org.lsposed.lspd.models.Module
+import org.lsposed.lspd.service.ILSPApplicationService
+
+object ManagerService : ILSPApplicationService.Stub() {
+
+ override fun requestModuleBinder(name: String): IBinder {
+ TODO("Not yet implemented")
+ }
+
+ override fun getModulesList(): List {
+ return ModuleProvider.allModules
+ }
+
+ override fun getPrefsPath(packageName: String): String {
+ TODO("Not yet implemented")
+ }
+
+ override fun requestRemotePreference(packageName: String, userId: Int, callback: IBinder?): Bundle {
+ TODO("Not yet implemented")
+ }
+
+ override fun requestInjectedManagerBinder(binder: List?): ParcelFileDescriptor? {
+ return null
+ }
+}
diff --git a/manager/src/main/java/org/lsposed/lspatch/manager/ManagerServiceImpl.kt b/manager/src/main/java/org/lsposed/lspatch/manager/ManagerServiceImpl.kt
deleted file mode 100644
index df25a63..0000000
--- a/manager/src/main/java/org/lsposed/lspatch/manager/ManagerServiceImpl.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.lsposed.lspatch.manager
-
-import org.lsposed.lspd.models.Module
-
-class ManagerServiceImpl : IManagerService.Stub() {
- override fun getModules(): List {
- return ModuleProvider.allModules
- }
-}
diff --git a/manager/src/main/java/org/lsposed/lspatch/manager/ModuleProvider.kt b/manager/src/main/java/org/lsposed/lspatch/manager/ModuleProvider.kt
index e04f404..ce8475d 100644
--- a/manager/src/main/java/org/lsposed/lspatch/manager/ModuleProvider.kt
+++ b/manager/src/main/java/org/lsposed/lspatch/manager/ModuleProvider.kt
@@ -9,10 +9,10 @@ import android.os.Binder
import android.os.Bundle
import android.util.Log
import org.lsposed.lspatch.TAG
+import org.lsposed.lspatch.util.ModuleLoader
import org.lsposed.lspd.models.Module
class ModuleProvider : ContentProvider() {
-
companion object {
lateinit var allModules: List
}
@@ -28,7 +28,7 @@ class ModuleProvider : ContentProvider() {
"getBinder" -> {
loadAllModules()
return Bundle().apply {
- putBinder("binder", ManagerServiceImpl())
+ putBinder("binder", ManagerService.asBinder())
}
}
else -> throw IllegalArgumentException("Invalid method name")
diff --git a/patch-loader/build.gradle.kts b/patch-loader/build.gradle.kts
index 9aa45d3..79e2928 100644
--- a/patch-loader/build.gradle.kts
+++ b/patch-loader/build.gradle.kts
@@ -57,8 +57,8 @@ dependencies {
implementation(projects.core)
implementation(projects.hiddenapi.bridge)
implementation(projects.services.daemonService)
- implementation(projects.imanager)
- implementation(projects.share)
+ implementation(projects.share.android)
+ implementation(projects.share.java)
implementation("com.google.code.gson:gson:2.9.0")
}
diff --git a/patch-loader/src/main/java/de/robv/android/xposed/XposedHelper.java b/patch-loader/src/main/java/de/robv/android/xposed/XposedHelper.java
deleted file mode 100644
index 6536513..0000000
--- a/patch-loader/src/main/java/de/robv/android/xposed/XposedHelper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package de.robv.android.xposed;
-
-import java.lang.reflect.Member;
-
-public class XposedHelper {
-
- private static final String TAG = "XposedHelper";
-
- public static void initSeLinux(String processName) {
- // SELinuxHelper.initOnce();
- // SELinuxHelper.initForProcess(processName);
- }
-
- public static boolean isIXposedMod(Class> moduleClass) {
- return IXposedMod.class.isAssignableFrom(moduleClass);
- }
-
-
- public static XC_MethodHook.Unhook newUnHook(XC_MethodHook XC_MethodHook, Member member) {
- return XC_MethodHook.new Unhook(member);
- }
-
- public static void callInitZygote(String modulePath, Object moduleInstance) throws Throwable {
- IXposedHookZygoteInit.StartupParam param = new IXposedHookZygoteInit.StartupParam();
- param.modulePath = modulePath;
- param.startsSystemServer = false;
- ((IXposedHookZygoteInit) moduleInstance).initZygote(param);
- }
-}
diff --git a/patch-loader/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java b/patch-loader/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java
index 21e89bc..c92d1cd 100644
--- a/patch-loader/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java
+++ b/patch-loader/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java
@@ -12,12 +12,8 @@ import android.content.pm.PackageInfo;
import android.content.pm.Signature;
import android.content.res.CompatibilityInfo;
import android.os.Build;
-import android.os.Bundle;
-import android.os.Environment;
import android.os.IBinder;
import android.os.Parcel;
-import android.os.ParcelFileDescriptor;
-import android.os.RemoteException;
import android.system.Os;
import android.util.Log;
@@ -25,13 +21,13 @@ import com.google.gson.Gson;
import org.lsposed.lspatch.loader.util.FileUtils;
import org.lsposed.lspatch.loader.util.XLog;
-import org.lsposed.lspatch.manager.ModuleLoader;
+import org.lsposed.lspatch.service.LocalApplicationService;
+import org.lsposed.lspatch.service.RemoteApplicationService;
import org.lsposed.lspatch.share.Constants;
import org.lsposed.lspatch.share.PatchConfig;
-import org.lsposed.lspd.config.ApplicationServiceClient;
import org.lsposed.lspd.core.Startup;
-import org.lsposed.lspd.models.Module;
import org.lsposed.lspd.nativebridge.SigBypass;
+import org.lsposed.lspd.service.ILSPApplicationService;
import java.io.BufferedReader;
import java.io.File;
@@ -46,7 +42,6 @@ import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.zip.ZipFile;
@@ -59,7 +54,10 @@ import hidden.HiddenApiBridge;
* Created by Windysha
*/
@SuppressWarnings("unused")
-public class LSPApplication extends ApplicationServiceClient {
+public class LSPApplication {
+
+ public static final int FIRST_APP_ZYGOTE_ISOLATED_UID = 90000;
+ public static final int PER_USER_RANGE = 100000;
private static final String TAG = "LSPatch";
private static ActivityThread activityThread;
@@ -67,16 +65,8 @@ public class LSPApplication extends ApplicationServiceClient {
private static LoadedApk appLoadedApk;
private static PatchConfig config;
- private static ManagerResolver managerResolver = null;
- final static public int FIRST_APP_ZYGOTE_ISOLATED_UID = 90000;
- final static public int PER_USER_RANGE = 100000;
-
- static private LSPApplication instance = null;
-
- static private final List modules = new ArrayList<>();
-
- static public boolean isIsolated() {
+ public static boolean isIsolated() {
return (android.os.Process.myUid() % PER_USER_RANGE) >= FIRST_APP_ZYGOTE_ISOLATED_UID;
}
@@ -92,20 +82,19 @@ public class LSPApplication extends ApplicationServiceClient {
return;
}
- if (config.useManager) try {
- managerResolver = new ManagerResolver(context);
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to instantiate manager resolver", e);
+ Log.d(TAG, "Initialize service client");
+ ILSPApplicationService service;
+ if (config.useManager) {
+ service = new RemoteApplicationService(context);
+ } else {
+ service = new LocalApplicationService(context);
}
- instance = new LSPApplication();
- serviceClient = instance;
try {
disableProfile(context);
- loadModules(context);
- Startup.initXposed(false);
+ Startup.initXposed(false, ActivityThread.currentProcessName(), service);
Log.i(TAG, "Start loading modules");
- Startup.bootstrapXposed(ActivityThread.currentProcessName());
+ Startup.bootstrapXposed();
// WARN: Since it uses `XResource`, the following class should not be initialized
// before forkPostCommon is invoke. Otherwise, you will get failure of XResources
LSPLoader.initModules(appLoadedApk);
@@ -246,48 +235,6 @@ public class LSPApplication extends ApplicationServiceClient {
}
- public static void loadModules(Context context) {
- if (config.useManager) {
- try {
- modules.addAll(managerResolver.getModules());
- modules.forEach(m -> Log.i(TAG, "load module from manager: " + m.packageName));
- } catch (NullPointerException | RemoteException e) {
- Log.e(TAG, "Failed to get modules from manager", e);
- }
- } else {
- try {
- for (var name : context.getAssets().list("lspatch/modules")) {
- String packageName = name.substring(0, name.length() - 4);
- String modulePath = context.getCacheDir() + "/lspatch/" + packageName + "/";
- String cacheApkPath;
- try (ZipFile sourceFile = new ZipFile(context.getPackageResourcePath())) {
- cacheApkPath = modulePath + sourceFile.getEntry("assets/lspatch/modules/" + name).getCrc();
- }
-
- if (!Files.exists(Paths.get(cacheApkPath))) {
- Log.i(TAG, "Extract module apk: " + packageName);
- FileUtils.deleteFolderIfExists(Paths.get(modulePath));
- Files.createDirectories(Paths.get(modulePath));
- try (var is = context.getAssets().open("lspatch/modules/" + name)) {
- Files.copy(is, Paths.get(cacheApkPath));
- }
- }
-
- var module = new Module();
- module.apkPath = cacheApkPath;
- module.packageName = packageName;
- module.file = ModuleLoader.loadModule(cacheApkPath);
- modules.add(module);
- }
- } catch (Throwable ignored) {
- }
- }
- }
-
- public LSPApplication() {
- super();
- }
-
private static int getTranscationId(String clsName, String trasncationName) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
Field field = Class.forName(clsName).getDeclaredField(trasncationName);
field.setAccessible(true);
@@ -377,39 +324,4 @@ public class LSPApplication extends ApplicationServiceClient {
var obj = XposedHelpers.getObjectField(appLoadedApk, fieldName);
XposedHelpers.setObjectField(stubLoadedApk, fieldName, obj);
}
-
- @Override
- public IBinder requestModuleBinder(String name) {
- return null;
- }
-
- @Override
- public List getModulesList(String processName) {
- return getModulesList();
- }
-
- @Override
- public List getModulesList() {
- return modules;
- }
-
- @Override
- public String getPrefsPath(String packageName) {
- return new File(Environment.getDataDirectory(), "data/" + packageName + "/shared_prefs/").getAbsolutePath();
- }
-
- @Override
- public Bundle requestRemotePreference(String packageName, int userId, IBinder callback) {
- return null;
- }
-
- @Override
- public ParcelFileDescriptor requestInjectedManagerBinder(List binder) throws RemoteException {
- return null;
- }
-
- @Override
- public IBinder asBinder() {
- return null;
- }
}
diff --git a/patch-loader/src/main/java/org/lsposed/lspatch/loader/ManagerResolver.java b/patch-loader/src/main/java/org/lsposed/lspatch/loader/ManagerResolver.java
deleted file mode 100644
index ea553cc..0000000
--- a/patch-loader/src/main/java/org/lsposed/lspatch/loader/ManagerResolver.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.lsposed.lspatch.loader;
-
-import static org.lsposed.lspatch.share.Constants.MANAGER_PACKAGE_NAME;
-
-import android.content.Context;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.RemoteException;
-
-import org.lsposed.lspatch.manager.IManagerService;
-import org.lsposed.lspd.models.Module;
-
-import java.util.List;
-
-public class ManagerResolver {
- private static final Uri PROVIDER = Uri.parse("content://" + MANAGER_PACKAGE_NAME + ".provider");
-
- private final IManagerService service;
-
- public ManagerResolver(Context context) throws RemoteException {
- try {
- Bundle back = context.getContentResolver().call(PROVIDER, "getBinder", null, null);
- service = IManagerService.Stub.asInterface(back.getBinder("binder"));
- if (service == null) throw new RemoteException("Binder is null");
- } catch (Throwable t) {
- var e = new RemoteException("Failed to get manager binder");
- e.setStackTrace(new StackTraceElement[0]);
- e.addSuppressed(t);
- throw e;
- }
- }
-
- public List getModules() throws RemoteException {
- return service.getModules();
- }
-}
diff --git a/patch-loader/src/main/java/org/lsposed/lspatch/service/LocalApplicationService.java b/patch-loader/src/main/java/org/lsposed/lspatch/service/LocalApplicationService.java
new file mode 100644
index 0000000..20ee4f8
--- /dev/null
+++ b/patch-loader/src/main/java/org/lsposed/lspatch/service/LocalApplicationService.java
@@ -0,0 +1,83 @@
+package org.lsposed.lspatch.service;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.os.Environment;
+import android.os.IBinder;
+import android.os.ParcelFileDescriptor;
+import android.util.Log;
+
+import org.lsposed.lspatch.loader.util.FileUtils;
+import org.lsposed.lspatch.util.ModuleLoader;
+import org.lsposed.lspd.models.Module;
+import org.lsposed.lspd.service.ILSPApplicationService;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.zip.ZipFile;
+
+public class LocalApplicationService extends ILSPApplicationService.Stub {
+
+ private static final String TAG = "LSPatch";
+
+ private final List modules = new ArrayList<>();
+
+ public LocalApplicationService(Context context) {
+ try {
+ for (var name : context.getAssets().list("lspatch/modules")) {
+ String packageName = name.substring(0, name.length() - 4);
+ String modulePath = context.getCacheDir() + "/lspatch/" + packageName + "/";
+ String cacheApkPath;
+ try (ZipFile sourceFile = new ZipFile(context.getPackageResourcePath())) {
+ cacheApkPath = modulePath + sourceFile.getEntry("assets/lspatch/modules/" + name).getCrc();
+ }
+
+ if (!Files.exists(Paths.get(cacheApkPath))) {
+ Log.i(TAG, "Extract module apk: " + packageName);
+ FileUtils.deleteFolderIfExists(Paths.get(modulePath));
+ Files.createDirectories(Paths.get(modulePath));
+ try (var is = context.getAssets().open("lspatch/modules/" + name)) {
+ Files.copy(is, Paths.get(cacheApkPath));
+ }
+ }
+
+ var module = new Module();
+ module.apkPath = cacheApkPath;
+ module.packageName = packageName;
+ module.file = ModuleLoader.loadModule(cacheApkPath);
+ modules.add(module);
+ }
+ } catch (IOException e) {
+ Log.e(TAG, "Error when initializing LocalApplicationServiceClient", e);
+ }
+ }
+
+ @Override
+ public IBinder requestModuleBinder(String name) {
+ return null;
+ }
+
+ @Override
+ public List getModulesList() {
+ return modules;
+ }
+
+ @Override
+ public String getPrefsPath(String packageName) {
+ return new File(Environment.getDataDirectory(), "data/" + packageName + "/shared_prefs/").getAbsolutePath();
+ }
+
+ @Override
+ public Bundle requestRemotePreference(String packageName, int userId, IBinder callback) {
+ return null;
+ }
+
+ @Override
+ public ParcelFileDescriptor requestInjectedManagerBinder(List binder) {
+ return null;
+ }
+}
diff --git a/patch-loader/src/main/java/org/lsposed/lspatch/service/RemoteApplicationService.java b/patch-loader/src/main/java/org/lsposed/lspatch/service/RemoteApplicationService.java
new file mode 100644
index 0000000..4e0f708
--- /dev/null
+++ b/patch-loader/src/main/java/org/lsposed/lspatch/service/RemoteApplicationService.java
@@ -0,0 +1,63 @@
+package org.lsposed.lspatch.service;
+
+import static org.lsposed.lspatch.share.Constants.MANAGER_PACKAGE_NAME;
+
+import android.content.Context;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
+import android.util.Log;
+
+import org.lsposed.lspd.models.Module;
+import org.lsposed.lspd.service.ILSPApplicationService;
+
+import java.util.List;
+
+public class RemoteApplicationService implements ILSPApplicationService {
+
+ private static final Uri PROVIDER = Uri.parse("content://" + MANAGER_PACKAGE_NAME + ".provider");
+
+ private ILSPApplicationService service;
+
+ public RemoteApplicationService(Context context) {
+ try {
+ Bundle back = context.getContentResolver().call(PROVIDER, "getBinder", null, null);
+ service = ILSPApplicationService.Stub.asInterface(back.getBinder("binder"));
+ if (service == null) throw new RemoteException("Binder is null");
+ } catch (RemoteException e) {
+ Log.e("LSPatch", "Error when initializing RemoteApplicationServiceClient", e);
+ }
+ }
+
+ @Override
+ public IBinder requestModuleBinder(String name) {
+ return service.asBinder();
+ }
+
+ @Override
+ public List getModulesList() throws RemoteException {
+ return service.getModulesList();
+ }
+
+ @Override
+ public String getPrefsPath(String packageName) throws RemoteException {
+ return service.getPrefsPath(packageName);
+ }
+
+ @Override
+ public Bundle requestRemotePreference(String packageName, int userId, IBinder callback) throws RemoteException {
+ return service.requestRemotePreference(packageName, userId, callback);
+ }
+
+ @Override
+ public IBinder asBinder() {
+ return service.asBinder();
+ }
+
+ @Override
+ public ParcelFileDescriptor requestInjectedManagerBinder(List binder) {
+ return null;
+ }
+}
diff --git a/patch/build.gradle.kts b/patch/build.gradle.kts
index b99a803..f00bcd2 100644
--- a/patch/build.gradle.kts
+++ b/patch/build.gradle.kts
@@ -14,7 +14,7 @@ dependencies {
implementation(fileTree("dir" to "libs", "include" to listOf("*.jar")))
implementation(projects.apkzlib)
implementation(projects.axmlprinter)
- implementation(projects.share)
+ implementation(projects.share.java)
implementation("commons-io:commons-io:2.11.0")
implementation("com.beust:jcommander:1.82")
diff --git a/patch/src/main/java/org/lsposed/patch/LSPatch.java b/patch/src/main/java/org/lsposed/patch/LSPatch.java
index 6fea97f..50e766b 100644
--- a/patch/src/main/java/org/lsposed/patch/LSPatch.java
+++ b/patch/src/main/java/org/lsposed/patch/LSPatch.java
@@ -19,7 +19,6 @@ import com.wind.meditor.property.AttributeItem;
import com.wind.meditor.property.ModificationProperty;
import com.wind.meditor.utils.NodeValue;
-import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.lsposed.lspatch.share.PatchConfig;
import org.lsposed.patch.util.ApkSignatureHelper;
@@ -34,7 +33,6 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
import java.security.KeyStore;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
diff --git a/settings.gradle.kts b/settings.gradle.kts
index f0e2d14..9f89c95 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -29,7 +29,6 @@ include(
":core",
":hiddenapi:bridge",
":hiddenapi:stubs",
- ":imanager",
":manager",
":patch",
":patch-jar",
@@ -37,7 +36,8 @@ include(
":services:daemon-service",
":services:manager-service",
":services:xposed-service:interface",
- ":share"
+ ":share:android",
+ ":share:java"
)
project(":core").projectDir = file("core/core")
diff --git a/imanager/.gitignore b/share/android/.gitignore
similarity index 100%
rename from imanager/.gitignore
rename to share/android/.gitignore
diff --git a/share/android/build.gradle.kts b/share/android/build.gradle.kts
new file mode 100644
index 0000000..136ab05
--- /dev/null
+++ b/share/android/build.gradle.kts
@@ -0,0 +1,23 @@
+plugins {
+ id("com.android.library")
+}
+
+android {
+ namespace = "org.lsposed.lspatch.share"
+
+ buildFeatures {
+ androidResources = false
+ buildConfig = false
+ }
+
+ buildTypes {
+ release {
+ isMinifyEnabled = true
+ proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"))
+ }
+ }
+}
+
+dependencies {
+ implementation(projects.services.daemonService)
+}
diff --git a/imanager/src/main/java/org/lsposed/lspatch/manager/ModuleLoader.java b/share/android/src/main/java/org/lsposed/lspatch/util/ModuleLoader.java
similarity index 98%
rename from imanager/src/main/java/org/lsposed/lspatch/manager/ModuleLoader.java
rename to share/android/src/main/java/org/lsposed/lspatch/util/ModuleLoader.java
index c2ee01c..a5b3b7a 100644
--- a/imanager/src/main/java/org/lsposed/lspatch/manager/ModuleLoader.java
+++ b/share/android/src/main/java/org/lsposed/lspatch/util/ModuleLoader.java
@@ -1,4 +1,4 @@
-package org.lsposed.lspatch.manager;
+package org.lsposed.lspatch.util;
import android.os.SharedMemory;
import android.system.ErrnoException;
diff --git a/share/.gitignore b/share/java/.gitignore
similarity index 100%
rename from share/.gitignore
rename to share/java/.gitignore
diff --git a/share/build.gradle.kts b/share/java/build.gradle.kts
similarity index 100%
rename from share/build.gradle.kts
rename to share/java/build.gradle.kts
diff --git a/share/src/main/java/org/lsposed/lspatch/share/Constants.java b/share/java/src/main/java/org/lsposed/lspatch/share/Constants.java
similarity index 100%
rename from share/src/main/java/org/lsposed/lspatch/share/Constants.java
rename to share/java/src/main/java/org/lsposed/lspatch/share/Constants.java
diff --git a/share/src/main/java/org/lsposed/lspatch/share/PatchConfig.java b/share/java/src/main/java/org/lsposed/lspatch/share/PatchConfig.java
similarity index 100%
rename from share/src/main/java/org/lsposed/lspatch/share/PatchConfig.java
rename to share/java/src/main/java/org/lsposed/lspatch/share/PatchConfig.java