Partially fix module loads

This commit is contained in:
LoveSy 2021-08-07 16:22:04 +08:00
parent 6e378be2fb
commit a10c8276c9
1 changed files with 33 additions and 16 deletions

View File

@ -11,6 +11,7 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.Signature; import android.content.pm.Signature;
import android.os.Build; import android.os.Build;
import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.os.IBinder; import android.os.IBinder;
import android.os.Parcel; import android.os.Parcel;
@ -25,6 +26,7 @@ import org.lsposed.lspatch.loader.util.XLog;
import org.lsposed.lspatch.share.Constants; import org.lsposed.lspatch.share.Constants;
import org.lsposed.lspd.config.ApplicationServiceClient; import org.lsposed.lspd.config.ApplicationServiceClient;
import org.lsposed.lspd.core.Main; import org.lsposed.lspd.core.Main;
import org.lsposed.lspd.models.Module;
import org.lsposed.lspd.nativebridge.SigBypass; import org.lsposed.lspd.nativebridge.SigBypass;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@ -43,9 +45,8 @@ import java.nio.file.StandardCopyOption;
import java.nio.file.attribute.PosixFilePermissions; import java.nio.file.attribute.PosixFilePermissions;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.List;
import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedBridge;
@ -74,7 +75,7 @@ public class LSPApplication extends ApplicationServiceClient {
static private LSPApplication instance = null; static private LSPApplication instance = null;
static private final Map<String, String> modules = new HashMap<>(); static private final List<Module> modules = new ArrayList<>();
static public boolean isIsolated() { static public boolean isIsolated() {
return (android.os.Process.myUid() % PER_USER_RANGE) >= FIRST_APP_ZYGOTE_ISOLATED_UID; return (android.os.Process.myUid() % PER_USER_RANGE) >= FIRST_APP_ZYGOTE_ISOLATED_UID;
@ -163,6 +164,8 @@ public class LSPApplication extends ApplicationServiceClient {
} }
// TODO: set module config
public static void loadModules(Context context) { public static void loadModules(Context context) {
var configFile = new File(context.getExternalFilesDir(null), "lspatch.json"); var configFile = new File(context.getExternalFilesDir(null), "lspatch.json");
var cacheDir = new File(context.getExternalCacheDir(), "modules"); var cacheDir = new File(context.getExternalCacheDir(), "modules");
@ -189,13 +192,19 @@ public class LSPApplication extends ApplicationServiceClient {
var target = new File(cacheDir, name + ".apk"); var target = new File(cacheDir, name + ".apk");
if (target.lastModified() > lastInstalledTime) { if (target.lastModified() > lastInstalledTime) {
embedded_modules.add(name); embedded_modules.add(name);
LSPApplication.modules.put(name, target.getAbsolutePath()); var module = new Module();
module.apk = target.getAbsolutePath();
module.name = target.getName();
LSPApplication.modules.add(module);
continue; continue;
} }
try (var is = context.getAssets().open("modules/" + name)) { try (var is = context.getAssets().open("modules/" + name)) {
Files.copy(is, target.toPath()); Files.copy(is, target.toPath());
embedded_modules.add(name); embedded_modules.add(name);
LSPApplication.modules.put(name, target.getAbsolutePath()); var module = new Module();
module.apk = target.getAbsolutePath();
module.name = target.getName();
LSPApplication.modules.add(module);
} catch (IOException ignored) { } catch (IOException ignored) {
} }
@ -219,17 +228,20 @@ public class LSPApplication extends ApplicationServiceClient {
continue; continue;
} }
if (app.metaData != null && app.metaData.containsKey("xposedminversion") && !embedded_modules.contains(app.packageName)) { if (app.metaData != null && app.metaData.containsKey("xposedminversion") && !embedded_modules.contains(app.packageName)) {
LSPApplication.modules.put(app.packageName, app.publicSourceDir); var module = new Module();
module.apk = app.publicSourceDir;
module.name = app.packageName;
LSPApplication.modules.add(module);
} }
} }
final var new_modules = new JSONArray(); final var new_modules = new JSONArray();
LSPApplication.modules.forEach((k, v) -> { LSPApplication.modules.forEach(m -> {
try { try {
var module = new JSONObject(); var module = new JSONObject();
module.put("name", k); module.put("name", m.name);
module.put("enabled", !disabled_modules.contains(k)); module.put("enabled", !disabled_modules.contains(m.name));
module.put("use_embed", embedded_modules.contains(k)); module.put("use_embed", embedded_modules.contains(m.name));
module.put("path", v); module.put("path", m.apk);
new_modules.put(module); new_modules.put(module);
} catch (Throwable ignored) { } catch (Throwable ignored) {
} }
@ -604,13 +616,13 @@ public class LSPApplication extends ApplicationServiceClient {
} }
@Override @Override
public IBinder requestModuleBinder() { public IBinder requestModuleBinder(String name) {
return null; return null;
} }
@Override @Override
public IBinder requestManagerBinder(String packageName) { public boolean requestManagerBinder(String packageName, String path, List<IBinder> binder) {
return null; return false;
} }
@Override @Override
@ -619,12 +631,12 @@ public class LSPApplication extends ApplicationServiceClient {
} }
@Override @Override
public Map getModulesList(String processName) { public List getModulesList(String processName) {
return getModulesList(); return getModulesList();
} }
@Override @Override
public Map<String, String> getModulesList() { public List<Module> getModulesList() {
return modules; return modules;
} }
@ -638,6 +650,11 @@ public class LSPApplication extends ApplicationServiceClient {
return null; return null;
} }
@Override
public Bundle requestRemotePreference(String packageName, int userId, IBinder callback) {
return null;
}
@Override @Override
public IBinder asBinder() { public IBinder asBinder() {
return null; return null;