mirror of
https://github.com/Heretek-AI/GrindrPlus.git
synced 2026-10-12 02:02:48 +00:00
Adds a new on-device DEX no-op pass (DexPatcher.kt) that mirrors morphe-patches' killPairIpFull recipe: it no-ops the PairIP verification chain (SignatureCheck, VMRunner, StartupLauncher, LicenseClient) and the four Firebase ComponentRegistrar .getComponents() methods (returning Collections.emptyList), without round-tripping the entire DEX through apktool — preserving R8-inlined string constants that are the root cause of Issue #1's kotlinx.coroutines NPE. PatchApkStep is hardened to: * disable com.pairip.licensecheck.LicenseActivity via android:enabled="false" (defense in depth on top of the manifest repoint) * disable com.google.firebase.provider.FirebaseInitProvider (avoids the zzc.<clinit> NPE on debug-signed APKs) * default embedLSPatch to false (LSPatch's smali round-trip re-introduces the same metadata issue DexPatcher is designed to avoid) * invoke DexPatcher.patch(baseApk) between the manifest repoint and the LSPatch/copy steps build.gradle.kts now excludes checker-qual / guava / jsr305 from lspatch.jar to avoid duplicate-class conflicts with smali-dexlib2's transitive deps, and declares implementation(libs.dexlib2). Status: DexPatcher runs on-device but currently fails with "Exception occurred while writing code_item for method La1;-><init>(Lkotlin/jvm/functions/Function0;I)V" on R8-minified Kotlin synthetic methods — a known limitation of raw smali-dexlib2 without the morphe-patcher workarounds. The manifest hardening + embedLSPatch=false default ship fine and improve the LSPatch path's behavior on its own. Co-Authored-By: Claude <[email protected]>