Releases: JingMatrix/LSPatch
Release list
LSPatch v1.2
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
svcor parses it withgetPackageArchiveInfo. 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
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
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
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
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
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
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.lspatchcomes up empty.
LSPatch v0.8
🚀 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
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
Update links for the current fork Avoid redirecting users to LSPosed/LSPatch