Skip to content

Commit

Permalink
Update LSPAppComponentFactoryStub.java
Browse files Browse the repository at this point in the history
从OPatch拷贝的,我也不知道会不会有啥问题:P
  • Loading branch information
HSSkyBoy committed Mar 31, 2024
1 parent d5bfd4f commit b036005
Showing 1 changed file with 6 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,18 @@

import android.annotation.SuppressLint;
import android.app.AppComponentFactory;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.os.Build;
import android.os.Process;
import android.os.ServiceManager;
import android.util.JsonReader;
import android.util.Log;

import org.lsposed.hiddenapibypass.HiddenApiBypass;
import org.lsposed.lspatch.share.Constants;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.zip.ZipFile;

@SuppressLint("UnsafeDynamicallyLoadedCode")
public class LSPAppComponentFactoryStub extends AppComponentFactory {
Expand All @@ -49,48 +39,13 @@ public class LSPAppComponentFactoryStub extends AppComponentFactory {
String arch = (String) vmInstructionSet.invoke(getRuntime.invoke(null));
String libName = archToLib.get(arch);

boolean useManager = false;
String soPath;

try (var is = cl.getResourceAsStream(Constants.CONFIG_ASSET_PATH);
var reader = new JsonReader(new InputStreamReader(is))) {
reader.beginObject();
while (reader.hasNext()) {
var name = reader.nextName();
if (name.equals("useManager")) {
useManager = reader.nextBoolean();
break;
} else {
reader.skipValue();
}
}
}

if (useManager) {
Log.i(TAG, "Bootstrap loader from manager");
var ipm = IPackageManager.Stub.asInterface(ServiceManager.getService("package"));
ApplicationInfo manager;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
manager = (ApplicationInfo) HiddenApiBypass.invoke(IPackageManager.class, ipm, "getApplicationInfo", Constants.MANAGER_PACKAGE_NAME, 0L, Process.myUid() / 100000);
} else {
manager = ipm.getApplicationInfo(Constants.MANAGER_PACKAGE_NAME, 0, Process.myUid() / 100000);
}
try (var zip = new ZipFile(new File(manager.sourceDir));
var is = zip.getInputStream(zip.getEntry(Constants.LOADER_DEX_ASSET_PATH));
var os = new ByteArrayOutputStream()) {
transfer(is, os);
dex = os.toByteArray();
}
soPath = manager.sourceDir + "!/assets/lspatch/so/" + libName + "/liblspatch.so";
} else {
Log.i(TAG, "Bootstrap loader from embedment");
try (var is = cl.getResourceAsStream(Constants.LOADER_DEX_ASSET_PATH);
var os = new ByteArrayOutputStream()) {
transfer(is, os);
dex = os.toByteArray();
}
soPath = cl.getResource("assets/lspatch/so/" + libName + "/liblspatch.so").getPath().substring(5);
Log.i(TAG, "Bootstrap loader from embedment");
try (var is = cl.getResourceAsStream(Constants.LOADER_DEX_ASSET_PATH);
var os = new ByteArrayOutputStream()) {
transfer(is, os);
dex = os.toByteArray();
}
String soPath = cl.getResource("assets/lspatch/so/" + libName + "/liblspatch.so").getPath().substring(5);

System.load(soPath);
} catch (Throwable e) {
Expand Down

0 comments on commit b036005

Please sign in to comment.