diff --git a/meta-loader/src/main/java/org/lsposed/lspatch/metaloader/LSPAppComponentFactoryStub.java b/meta-loader/src/main/java/org/lsposed/lspatch/metaloader/LSPAppComponentFactoryStub.java index 024d792..d251eb2 100644 --- a/meta-loader/src/main/java/org/lsposed/lspatch/metaloader/LSPAppComponentFactoryStub.java +++ b/meta-loader/src/main/java/org/lsposed/lspatch/metaloader/LSPAppComponentFactoryStub.java @@ -2,6 +2,7 @@ package org.lsposed.lspatch.metaloader; import android.annotation.SuppressLint; import android.app.AppComponentFactory; +import android.app.ActivityThread; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.os.Build; @@ -34,6 +35,15 @@ public class LSPAppComponentFactoryStub extends AppComponentFactory { public static byte[] dex; static { + final boolean appZygote = ActivityThread.currentActivityThread() == null; + if (appZygote) { + Log.i(TAG, "Skip loading liblspatch.so for appZygote"); + } else { + bootstrap(); + } + } + + private static void bootstrap() { try { archToLib.put("arm", "armeabi-v7a"); archToLib.put("arm64", "arm64-v8a"); diff --git a/patch/src/main/java/org/lsposed/patch/LSPatch.java b/patch/src/main/java/org/lsposed/patch/LSPatch.java index 9e0afd0..728557b 100644 --- a/patch/src/main/java/org/lsposed/patch/LSPatch.java +++ b/patch/src/main/java/org/lsposed/patch/LSPatch.java @@ -47,6 +47,7 @@ import java.util.List; import java.util.Locale; import java.util.Objects; import java.util.Set; +import java.util.stream.Collectors; public class LSPatch { @@ -253,7 +254,11 @@ public class LSPatch { logger.i("Adding metaloader dex..."); try (var is = getClass().getClassLoader().getResourceAsStream(Constants.META_LOADER_DEX_ASSET_PATH)) { - dstZFile.add("classes.dex", is); + var dexCount = srcZFile.entries().stream().filter(entry -> { + var name = entry.getCentralDirectoryHeader().getName(); + return name.startsWith("classes") && name.endsWith(".dex"); + }).collect(Collectors.toList()).size() + 1; + dstZFile.add("classes" + dexCount + ".dex", is); } catch (Throwable e) { throw new PatchError("Error when adding dex", e); } @@ -289,7 +294,6 @@ public class LSPatch { for (StoredEntry entry : srcZFile.entries()) { String name = entry.getCentralDirectoryHeader().getName(); - if (name.startsWith("classes") && name.endsWith(".dex")) continue; if (dstZFile.get(name) != null) continue; if (name.equals("AndroidManifest.xml")) continue; if (name.startsWith("META-INF") && (name.endsWith(".SF") || name.endsWith(".MF") || name.endsWith(".RSA"))) continue;