From c1480fa121f9842dea1735c1ea5953b7a1126de8 Mon Sep 17 00:00:00 2001 From: NkBe Date: Tue, 10 Feb 2026 19:26:10 +0800 Subject: [PATCH] improve NPatch zip handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 將 android:largeHeap="true" 添加至管理員 manifest 中,防止系統限制 RAM。啟用 ZFileOptions.setNoTimestamps,並將來源 APK 嵌入為唯讀壓縮檔。 --- manager/src/main/AndroidManifest.xml | 1 + patch/src/main/java/org/lsposed/patch/NPatch.java | 14 ++++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/manager/src/main/AndroidManifest.xml b/manager/src/main/AndroidManifest.xml index 888fefc..c07f011 100644 --- a/manager/src/main/AndroidManifest.xml +++ b/manager/src/main/AndroidManifest.xml @@ -23,6 +23,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" + android:largeHeap="true" android:theme="@style/Theme.Material3.DayNight.NoActionBar"> diff --git a/patch/src/main/java/org/lsposed/patch/NPatch.java b/patch/src/main/java/org/lsposed/patch/NPatch.java index 78de987..cffcb8c 100644 --- a/patch/src/main/java/org/lsposed/patch/NPatch.java +++ b/patch/src/main/java/org/lsposed/patch/NPatch.java @@ -118,11 +118,13 @@ public class NPatch { "x86_64" )); - private static final ZFileOptions Z_FILE_OPTIONS = new ZFileOptions().setAlignmentRule(AlignmentRules.compose( - AlignmentRules.constantForSuffix(".so", 4096), - AlignmentRules.constantForSuffix(ORIGINAL_APK_ASSET_PATH, 4096), - AlignmentRules.constantForSuffix(".arsc", 4) - )); + private static final ZFileOptions Z_FILE_OPTIONS = new ZFileOptions() + .setNoTimestamps(true) + .setAlignmentRule(AlignmentRules.compose( + AlignmentRules.constantForSuffix(".so", 4096), + AlignmentRules.constantForSuffix(ORIGINAL_APK_ASSET_PATH, 4096), + AlignmentRules.constantForSuffix(".arsc", 4) + )); private final JCommander jCommander; @@ -196,7 +198,7 @@ public class NPatch { logger.i("Parsing original apk..."); try (var dstZFile = ZFile.openReadWrite(outputFile, Z_FILE_OPTIONS); - var srcZFile = dstZFile.addNestedZip((ignore) -> ORIGINAL_APK_ASSET_PATH, srcApkFile, false)) { + var srcZFile = ZFile.openReadOnly(srcApkFile)) { // sign apk try {