Files
GrindrPlusandClaude 0738edd632 Add DexPatcher DEX no-op pass + harden PatchApkStep manifest
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]>
2026-08-14 05:03:26 -04:00
..
2024-04-24 20:43:21 +02:00
2025-04-06 17:01:41 +02:00