From 9d3f9fb7eb5ab7454ecb4f1b7173fa545d53b0f1 Mon Sep 17 00:00:00 2001 From: s1ddhants1 Date: Mon, 14 Sep 2026 03:39:55 +0530 Subject: [PATCH 1/2] fix(meta-loader): repackage obfuscated classes to prevent namespace collision in multi-dex inject mode --- meta-loader/proguard-rules.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/meta-loader/proguard-rules.pro b/meta-loader/proguard-rules.pro index 70d4e8eb2..fc05b8228 100644 --- a/meta-loader/proguard-rules.pro +++ b/meta-loader/proguard-rules.pro @@ -2,6 +2,7 @@ public static byte[] dex; (); } +-repackageclasses org.lsposed.lspatch.metaloader -dontwarn androidx.annotation.NonNull -dontwarn androidx.annotation.Nullable -dontwarn androidx.annotation.VisibleForTesting From b344d2ac6bffe5c48c04ed928c6680960932f9c8 Mon Sep 17 00:00:00 2001 From: JingMatrix Date: Fri, 23 Oct 2026 12:06:50 +0200 Subject: [PATCH 2/2] Name the repackaged namespace after what it holds The relocated classes are the vendored org.lsposed.hiddenapibypass, so org.lsposed.external names them for what they are rather than for the module they travel in. The comment records why the rule is needed at all and why the namespace has to stay distinct per injected dex. --- meta-loader/proguard-rules.pro | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/meta-loader/proguard-rules.pro b/meta-loader/proguard-rules.pro index fc05b8228..01c40f718 100644 --- a/meta-loader/proguard-rules.pro +++ b/meta-loader/proguard-rules.pro @@ -2,7 +2,10 @@ public static byte[] dex; (); } --repackageclasses org.lsposed.lspatch.metaloader +# With --injectdex the app keeps its own dex files in this apk, so its R8 output and ours end up in +# one class loader with the app's dex first; classes left in the root package as La;..Li; would then +# resolve to the app's. The relocated ones are the vendored org.lsposed.hiddenapibypass. +-repackageclasses org.lsposed.external -dontwarn androidx.annotation.NonNull -dontwarn androidx.annotation.Nullable -dontwarn androidx.annotation.VisibleForTesting