From 69438162cdf31ac957f5c0ce2190f7606552ae3c Mon Sep 17 00:00:00 2001 From: JingMatrix Date: Sun, 4 Jun 2023 11:32:33 +0200 Subject: [PATCH] Skip split apks when possible When the split apks are loaded by appComponentFactory, we skip patching them to reduce the file size. --- patch/src/main/java/org/lsposed/patch/LSPatch.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/patch/src/main/java/org/lsposed/patch/LSPatch.java b/patch/src/main/java/org/lsposed/patch/LSPatch.java index 728557b..3585120 100644 --- a/patch/src/main/java/org/lsposed/patch/LSPatch.java +++ b/patch/src/main/java/org/lsposed/patch/LSPatch.java @@ -233,6 +233,18 @@ public class LSPatch { logger.d("original minSdkVersion: " + minSdkVersion); } + final boolean skipSplit = apkPaths.size() > 1 && srcApkFile.getName().startsWith("split_") && appComponentFactory == null; + if (skipSplit) { + logger.i("Packing split apk..."); + for (StoredEntry entry : srcZFile.entries()) { + String name = entry.getCentralDirectoryHeader().getName(); + if (dstZFile.get(name) != null) continue; + if (name.startsWith("META-INF") && (name.endsWith(".SF") || name.endsWith(".MF") || name.endsWith(".RSA"))) continue; + srcZFile.addFileLink(name, name); + } + return; + } + logger.i("Patching apk..."); // modify manifest final var config = new PatchConfig(useManager, debuggableFlag, overrideVersionCode, sigbypassLevel, originalSignature, appComponentFactory);