Skip to content

Releases: JingMatrix/LSPatch

LSPatch v1.2

Choose a tag to compare

@github-actions github-actions released this 23 Aug 17:06

LSPatch v1.2

LSPatch 1.2 adds an opt-in level 3 to the signature bypass, reaches a module's companion the moment its settings open, and fixes several crashes carried over from 1.1.

  • 🔏 Signature bypass, level 3. Levels 1 and 2 miss an app that reads its own apk through an inline svc or parses it with getPackageArchiveInfo. Level 3 redirects both to the original signer. It rewrites four bytes of the app's own code, which a self-checksumming packer can notice, so it stays opt-in and arm64 only; level 2 remains the default.
  • 🔌 A companion is reached when its settings open. A value changed in a module's settings app now reaches the running hook without force-stopping the target first — over Shizuku where it is granted, or through a service the companion binds at its own start where it is not.
  • ⬆️ Version history and canaries on the update page. Pick any past or prerelease build from the title-bar switcher and follow its notes, channel and install.
  • 🩹 Crash fixes. Choosing a language, running a local-mode app under a renamed manager, or re-patching a patched app in a release build no longer crashes.

LSPatch canary 486

LSPatch canary 486 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 23 Aug 16:27

Answer a right click on app rows the way a long press is

Built from 97396ba by run 32651147758.

A canary — the current state of master, tested by CI and nothing else, published as a
prerelease so it can be downloaded without a GitHub account.

Build Use it when
…-debug.apk / …-debug.jar Chasing a bug — far more logging.
…-release.apk / …-release.jar You just want the newest code.

Only the five most recent canaries are kept.

LSPatch canary 481

LSPatch canary 481 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 22 Aug 08:17

Keep dlopen's caller namespace when the svc rescan hooks it

Built from e12babf by run 32561452119.

A canary — the current state of master, tested by CI and nothing else, published as a
prerelease so it can be downloaded without a GitHub account.

Build Use it when
…-debug.apk / …-debug.jar Chasing a bug — far more logging.
…-release.apk / …-release.jar You just want the newest code.

Only the five most recent canaries are kept.

LSPatch canary 480

LSPatch canary 480 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 22 Aug 03:19

Stop a level-3 svc patch from clobbering its neighbour, and warn what it still trips

Built from 18603be by run 32548220428.

A canary — the current state of master, tested by CI and nothing else, published as a
prerelease so it can be downloaded without a GitHub account.

Build Use it when
…-debug.apk / …-debug.jar Chasing a bug — far more logging.
…-release.apk / …-release.jar You just want the newest code.

Only the five most recent canaries are kept.

LSPatch canary 479

LSPatch canary 479 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 21 Aug 23:07

Reach a companion the moment its settings open, not only on a target start

Built from 22f878e by run 32535020009.

A canary — the current state of master, tested by CI and nothing else, published as a
prerelease so it can be downloaded without a GitHub account.

Build Use it when
…-debug.apk / …-debug.jar Chasing a bug — far more logging.
…-release.apk / …-release.jar You just want the newest code.

Only the five most recent canaries are kept.

LSPatch v1.1

Choose a tag to compare

@github-actions github-actions released this 20 Aug 23:39

LSPatch v1.1

🔗 A patched app no longer needs the manager alive

A manager reaped in the background, or force-stopped, left a manager-backed app starting with no modules after five seconds spent waiting. It now records which modules it runs and where their APKs are, loads from that copy when the manager does not answer, and waits one and a half seconds. The binding is re-established rather than made once, restoring the hot-reload channel and each module's service; where Shizuku is granted, the shell service restarts a manager it finds gone.

🪵 Logs that contain the app you patched

The framework stream's uid set was built before the package scan that fills it, so it held the manager alone and dropped what a patched app and its modules wrote. It is built after the scan and refreshed as apps are patched. The release loader keeps its own lines too — signature bypass, module loader, service client. You can filter by writer, and a native crash dump reads as one entry rather than a page of fragments.

🌐 The Store resolves over HTTPS

Catalogue, downloads and self-update go through Vector's OkHttp client and its DoH resolver, so DNS blocking can no longer leave the Store quietly empty.

🩹 A patch reads the file you chose

  • Target apks resolved when the patch runs — a recorded path is a name, not a location, so an app the system moved is found again.
  • A picked apk is kept in no-backup storage, not the cache the platform may evict.
  • An apk carrying a nested apk is no longer read as an app bundle.

🧹 Also

  • Every wait on a system service has a deadline, so a lost install status is re-checked rather than hanging.
  • The uninstall prompt appears only when the signing certificates differ; a matching custom keystore updates in place.
  • Manage no longer crashes while listing an integrated patch's modules.
  • Shizuku permission is re-read at each use, and keep rules let the user service survive a minified build.
  • A "Rolling" loader badge that all 18 locales mistranslated as a verb is gone.

LSPatch v1.0

Choose a tag to compare

@github-actions github-actions released this 18 Aug 07:06

LSPatch v1.0

LSPatch 1.0 — rebuilt on Vector

LSPatch 1.0 is a ground-up rebuild on Vector, the framework that succeeds LSPosed. A patched app now
loads modern libxposed (API 102) and legacy Xposed modules through Vector's own runtime — the same
loader the rooted framework uses — with no root and no Zygisk, and a module gets a real IXposedService.

Important

The runtime inside a patched app is entirely new. Apps patched with an older LSPatch won't pick it
up — re-patch every app you run modules in.

🔀 Embedded or Manager mode, chosen at patch time

  • 📦 Embedded. Modules are baked into the APK; the app is self-contained and needs nothing else
    installed. Changing its modules means re-patching.
  • 🛰️ Manager. The patched app binds the manager at runtime, so you change a module's scope live —
    no re-patch — and hot-reload it into a running app, with module storage shared across every patched
    app. The manager has to stay installed.

📱 Manager rebuilt on Vector's shared UI

Home, a module Store, Manage, and Logs. Manage lists your patched apps and modules with reach
thumbnails; open any app to a detail page to edit its modules as a draft, re-patch, update its loader,
export the APK, or restore the original.

🛠️ One patch flow

Every path — a new app, an APK from storage, a re-patch, a loader update — lands on one screen, and
patching and installing are now separate steps. Patched APKs live in app-private storage (no
storage-permission dance; SAF export is its own button), leaving mid-patch no longer cancels the job,
and a re-patch needs nothing on hand — the patched APK carries the originals and settings it was built
from.

🔓 Rootless reach

  • 🗄️ Browse a patched app's private data. An opt-in patch injects a Storage Access Framework
    provider, so any SAF file manager can open the app's /data/data/<pkg> without root.
  • 🫥 Cloak the manager. The manager can reinstall itself under a custom or random package name —
    migrating its settings, keystore, and bound apps, with one-tap revert — so a scan for
    org.lsposed.lspatch comes up empty.

LSPatch v0.8

Choose a tag to compare

@JingMatrix JingMatrix released this 06 Mar 11:13

🚀 LSPatch v0.8 is Live!

With the Android 17 preview now available, we’re keeping pace!
This release confirms Android 17 compatibility and brings full support for Android 16.

✨ What’s New

Up-to-date: Integrated the latest core updates from JingMatrix/LSPosed.
Compatibility: Added re-optimize (dex2oat) support via the Shizuku API for Android 16+, for which reason we strongly recommend installing Shizuku to unlock the full functionality of LSPatch!


🔮 Roadmap & Future Notes:

Currently, I (JingMatrix) am in the process of refactoring LSPosed into a new project: Vector. This involves a major codebase overhaul and a fresh UI design.

Once the work on the Vector side is complete—which may take some time—LSPatch will also be redesigned to match this new vision. Stay tuned!

LSPatch v0.7

Choose a tag to compare

@JingMatrix JingMatrix released this 01 Dec 09:03

Following the updates of JingMatrix/LSPosed, LSPatch v0.7 fully supports Android 15.

A new patching option Inject loader dex is added, which is mainly useful only for modules that patch browser applications.
For example, when you patch Chrome browser with JingMatrix/ChromeX, you must turn on the option in the LPatch manager application or add the --injectdex commandline option for lspatch.jar.

LSPatch v0.6

Choose a tag to compare

@JingMatrix JingMatrix released this 23 Nov 15:20
Update links for the current fork

Avoid redirecting users to LSPosed/LSPatch