From f2154714009cc4c584855a575641d3294d0902c6 Mon Sep 17 00:00:00 2001 From: NkBe Date: Thu, 11 Dec 2025 21:21:41 +0800 Subject: [PATCH] =?UTF-8?q?fix(patch):=20=E4=BC=98=E5=8C=96Manifest?= =?UTF-8?q?=E6=9D=83=E9=99=90=E4=B8=8Eauthority=E6=98=A0=E5=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构了权限和authority的映射逻辑,统一使用targetPackage变量,支持com.google.android前缀不变。 修改部分參考 #37,主要用於修復 #25 Co-Authored-By: areteruhiro <108941410+areteruhiro@users.noreply.github.com> --- .../main/java/org/lsposed/patch/NPatch.java | 52 +++++++++---------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/patch/src/main/java/org/lsposed/patch/NPatch.java b/patch/src/main/java/org/lsposed/patch/NPatch.java index 97346d8..1170ade 100644 --- a/patch/src/main/java/org/lsposed/patch/NPatch.java +++ b/patch/src/main/java/org/lsposed/patch/NPatch.java @@ -441,38 +441,34 @@ public class NPatch { private byte[] modifyManifestFile(InputStream is, String metadata, int minSdkVersion, String originPackage, String newPackage, List permissions, List uses_permissions, List authorities) throws IOException { ModificationProperty property = new ModificationProperty(); + String targetPackage = (newPackage != null && !newPackage.isEmpty()) ? newPackage : originPackage; + if (overrideVersionCode) property.addManifestAttribute(new AttributeItem(NodeValue.Manifest.VERSION_CODE, 1)); if (minSdkVersion < 28) property.addUsesSdkAttribute(new AttributeItem(NodeValue.UsesSDK.MIN_SDK_VERSION, 27)); property.addApplicationAttribute(new AttributeItem(NodeValue.Application.DEBUGGABLE, debuggableFlag)); property.addApplicationAttribute(new AttributeItem("appComponentFactory", PROXY_APP_COMPONENT_FACTORY)); - if (newPackage != null && !newPackage.isEmpty()){ - property.addManifestAttribute(new AttributeItem(NodeValue.Manifest.PACKAGE, newPackage).setNamespace(null)); + if (!targetPackage.equals(originPackage)) { + property.addManifestAttribute(new AttributeItem(NodeValue.Manifest.PACKAGE, targetPackage).setNamespace(null)); } - property.setPermissionMapper(new PermissionMapper() { - @Override - public String map(PermissionType type, String permission) { - if (permission.startsWith(originPackage)){ - assert newPackage != null; - return permission.replaceFirst(originPackage, newPackage); - } - if (permission.startsWith("android") - || permission.startsWith("com.android")){ - return permission; - } - return newPackage + "_" + permission; + property.setPermissionMapper((type, permission) -> { + if (permission.startsWith(originPackage)) { + return permission.replaceFirst(originPackage, targetPackage); } + if (permission.startsWith("android") + || permission.startsWith("com.android") + || permission.startsWith("com.google.android")) { + return permission; + } + return targetPackage + "_" + permission; }); - property.setAuthorityMapper(new AttributeMapper() { - @Override - public String map(String value) { - if (value.startsWith(originPackage)){ - assert newPackage != null; - return value.replaceFirst(originPackage, newPackage); - } - return newPackage + "_" + value; + + property.setAuthorityMapper(value -> { + if (value.startsWith(originPackage)) { + return value.replaceFirst(originPackage, targetPackage); } + return targetPackage + "_" + value; }); property.addMetaData(new ModificationProperty.MetaData("npatch", metadata)); @@ -491,11 +487,11 @@ public class NPatch { } - var os = new ByteArrayOutputStream(); - (new ManifestEditor(is, os, property)).processManifest(); - is.close(); - os.flush(); - os.close(); - return os.toByteArray(); + try (ByteArrayOutputStream os = new ByteArrayOutputStream()) { + new ManifestEditor(is, os, property).processManifest(); + return os.toByteArray(); + } finally { + if (is != null) is.close(); + } } } \ No newline at end of file