Skip to content

Refactor framework daemon to Kotlin - #597

Merged
JingMatrix merged 77 commits into
masterfrom
refactor
Apr 5, 2026
Merged

Refactor framework daemon to Kotlin#597
JingMatrix merged 77 commits into
masterfrom
refactor

Conversation

@JingMatrix

Copy link
Copy Markdown
Owner

This PR transitions the framework daemon from legacy Java to a modernized Kotlin implementation, rebranded as Vector. The refactor moves beyond a literal translation to implement a more robust, domain-driven architecture.

See REAMDE in module daemon for more implementation details.

@JingMatrix
JingMatrix marked this pull request as ready for review March 26, 2026 18:43
@JingMatrixJingMatrix linked an issue Mar 27, 2026 that may be closed by this pull request
@JingMatrix

Copy link
Copy Markdown
OwnerAuthor

@AllenChangMusic@jiggs82 please test the lates CI of current branch to see if the support of Android 17 beta 3 is complete now.

@jiggs82

Copy link
Copy Markdown

@AllenChangMusic@jiggs82 please test the lates CI of current branch to see if the support of Android 17 beta 3 is complete now.

Vector release build still isn't working for me, on lsposed manager says it's not installed

@JingMatrix

Copy link
Copy Markdown
OwnerAuthor

@jiggs82 Please provide logs by uploading the folder /data/adb/lspd/log.

@jiggs82

Copy link
Copy Markdown

>@jiggs82 Please provide logs by uploading the folder /data/adb/lspd/log.
log.zip

@JingMatrix

Copy link
Copy Markdown
OwnerAuthor

@jiggs82 It seems that Vector CI build is not flashed correctly.
Please uninstall, reboot, install Vector again.
I hope that you won't encounter this #602 (comment)

@AllenChangMusic

AllenChangMusic commented Mar 27, 2026

Copy link
Copy Markdown

@JingMatrix debug build works, but release build does not

Also... Looks like Vector has issues enabling new modules. And if you uninstall it, and reinstall, you aren't able to enable any modules. May be related to the report in the other thread where it isn't able to create the lspd folder

@jiggs82

jiggs82 commented Mar 27, 2026

Copy link
Copy Markdown

@jiggs82 It seems that Vector CI build is not flashed correctly. Please uninstall, reboot, install Vector again. I hope that you won't encounter this #602 (comment)

Still same issues and yes now I encounter that :(

@JingMatrix

Copy link
Copy Markdown
OwnerAuthor

There are bugs in the refactoring, hence I create pr #603 to fix the issue for the java code before refactoring, to help isolated issues.

@mmmpipi

Copy link
Copy Markdown

When I use the release build, it crashes, but the debug build works fine.
lsposed.log
lsposed_verbose.log
I hope these logs are helpful to you.

@JingMatrix
JingMatrixforce-pushed the refactor branch 2 times, most recently from 3611782 to 0da27d9CompareMarch 27, 2026 15:56
@JingMatrix

Copy link
Copy Markdown
OwnerAuthor

@jiggs82@AllenChangMusic@mmmpipi Please also test the latest CI builds of current branch, before I finally merge it.

@AllenChangMusic

Copy link
Copy Markdown

@jiggs82@AllenChangMusic@mmmpipi Please also test the latest CI builds of current branch, before I finally merge it.

Tested and one module - InstaEclipse doesn't work in this version, but did in the previous CI.

One thing to note is in LSPosed manager, it keeps complaining there's an update, but it's the old pre-vector version

@JingMatrix

Copy link
Copy Markdown
OwnerAuthor

@AllenChangMusic Please upload your debug version logs for the module not working.
Regarding the updating issue, see #585 (comment)

@AllenChangMusic

Copy link
Copy Markdown

@JingMatrix
LSPosed_2026-03-27T12_45_38.645418.zip

I'm not seeing any specific crash log, but this CI causes IG to crash

@JingMatrix

Copy link
Copy Markdown
OwnerAuthor

@AllenChangMusic I see logs of containing InstaEclipse showing no issues. Is there a feature not working ?
Please descibe it, and I will see if it is related to the daemon refactoring.

@AllenChangMusic

AllenChangMusic commented Mar 27, 2026

Copy link
Copy Markdown

@AllenChangMusic I see logs of containing InstaEclipse showing no issues. Is there a feature not working ? Please descibe it, and I will see if it is related to the daemon refactoring.

Instagram app just crashes, won't even open. Compared to the previous CI, it opens fine, and you can open the InstaEclipse settings (long holding the search icon in the instagram app), and use the app just fine

@jiggs82

Copy link
Copy Markdown

@jiggs82@AllenChangMusic@mmmpipi Please also test the latest CI builds of current branch, before I finally merge it.

Flashed latest build and all good here 👍🏻

@AllenChangMusic

Copy link
Copy Markdown

@JingMatrix anything you need me to debug or send logs for to help troubleshoot why it's causing crashing?

@JingMatrix

Copy link
Copy Markdown
OwnerAuthor

@AllenChangMusic I think it is a problem of the module.
It works for instagram 421.0.0.51.66, but not for 422.0.0.44.64. Please contact the module developer to fix the problem is his hooks, see log:

03-27 19:02:26.011 15638 15638 V VectorLegacyBridge: Loading legacy module ps.reso.instaeclipse from /data/app/~~UWq7--TDph6kMPgIrSATyQ==/ps.reso.instaeclipse-7l8nP_qI2gNpWCo6ZqWTSw==/base.apk
03-27 19:02:26.100 15638 15638 V VectorLegacyBridge: Loading class ps.reso.instaeclipse.Xposed.Module
03-27 19:02:26.101 15638 15638 I VectorLegacyBridge: (InstaEclipse): Zygote initialized.
03-27 19:02:26.101 15638 15638 I VectorLegacyBridge: (InstaEclipse) Module paths initialized:
03-27 19:02:26.101 15638 15638 I VectorLegacyBridge: SourceDir: /data/app/~~UWq7--TDph6kMPgIrSATyQ==/ps.reso.instaeclipse-7l8nP_qI2gNpWCo6ZqWTSw==/base.apk
03-27 19:02:26.101 15638 15638 I VectorLegacyBridge: LibDir: /data/app/~~UWq7--TDph6kMPgIrSATyQ==/ps.reso.instaeclipse-7l8nP_qI2gNpWCo6ZqWTSw==/lib/arm64
03-27 19:02:26.176 15638 15638 I VectorLegacyBridge: (InstaEclipse): Loaded package: com.instagram.android
03-27 19:02:26.506 15638 15638 I VectorLegacyBridge: InstaEclipse: Settings loaded via Application.attach for com.instagram.android
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: java.lang.NoSuchMethodError: com.instagram.mainactivity.InstagramMainActivity#onCreate(android.os.Bundle)#exact
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at olXzXBq.bopZah.eGxFtiW.XposedHelpers.lambda$findMethodExact$3(XposedHelpers.java:448)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at olXzXBq.bopZah.eGxFtiW.XposedHelpers$$ExternalSyntheticLambda7.get(D8$$SyntheticClass:0)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at java.util.Optional.orElseThrow(Optional.java:403)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at olXzXBq.bopZah.eGxFtiW.XposedHelpers.findMethodExact(XposedHelpers.java:448)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at olXzXBq.bopZah.eGxFtiW.XposedHelpers.findAndHookMethod(XposedHelpers.java:295)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at olXzXBq.bopZah.eGxFtiW.XposedHelpers.findAndHookMethod(XposedHelpers.java:370)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at ps.reso.instaeclipse.mods.ui.UIHookManager.mainActivity(UIHookManager.java:148)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at ps.reso.instaeclipse.Xposed.Module$1.afterHookedMethod(Module.java:161)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at olXzXBq.bopZah.eGxFtiW.XposedBridge$LegacyApiSupport.handleAfter(XposedBridge.java:406)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at org.matrix.vector.legacy.LegacyDelegateImpl.processLegacyHook(LegacyDelegateImpl.java:79)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at org.matrix.vector.impl.hooks.VectorNativeHooker.callback$lambda$0(VectorNativeHooker.kt:89)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at org.matrix.vector.impl.hooks.VectorNativeHooker.$r8$lambda$Gv0h3YyBQ5fX_R8flOBlfNtiIu0(VectorNativeHooker.kt:0)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at org.matrix.vector.impl.hooks.VectorNativeHooker$$ExternalSyntheticLambda1.invoke(D8$$SyntheticClass:0)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at org.matrix.vector.impl.hooks.VectorChain.proceedWith(VectorChain.kt:56)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at org.matrix.vector.impl.hooks.VectorChain.proceed(VectorChain.kt:45)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at org.matrix.vector.impl.hooks.VectorNativeHooker.callback(VectorNativeHooker.kt:99)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at Vector_.attach(Dobby:11)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.app.Instrumentation.newApplication(Instrumentation.java:1363)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1658)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1590)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:8236)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.app.ActivityThread.-$$Nest$mhandleBindApplication(ActivityThread.java:0)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2753)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.os.Handler.dispatchMessageImpl(Handler.java:142)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.os.Handler.dispatchMessage(Handler.java:125)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.os.Looper.loopOnce(Looper.java:292)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.os.Looper.loop(Looper.java:393)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.app.ActivityThread.main(ActivityThread.java:9486)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at java.lang.reflect.Method.invoke(Native Method)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:575)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:939)

@ReSo7200

Copy link
Copy Markdown

@AllenChangMusic I think it is a problem of the module.
It works for instagram 421.0.0.51.66, but not for 422.0.0.44.64. Please contact the module developer to fix the problem is his hooks, see log:

03-27 19:02:26.011 15638 15638 V VectorLegacyBridge: Loading legacy module ps.reso.instaeclipse from /data/app/~~UWq7--TDph6kMPgIrSATyQ==/ps.reso.instaeclipse-7l8nP_qI2gNpWCo6ZqWTSw==/base.apk
03-27 19:02:26.100 15638 15638 V VectorLegacyBridge: Loading class ps.reso.instaeclipse.Xposed.Module
03-27 19:02:26.101 15638 15638 I VectorLegacyBridge: (InstaEclipse): Zygote initialized.
03-27 19:02:26.101 15638 15638 I VectorLegacyBridge: (InstaEclipse) Module paths initialized:
03-27 19:02:26.101 15638 15638 I VectorLegacyBridge: SourceDir: /data/app/~~UWq7--TDph6kMPgIrSATyQ==/ps.reso.instaeclipse-7l8nP_qI2gNpWCo6ZqWTSw==/base.apk
03-27 19:02:26.101 15638 15638 I VectorLegacyBridge: LibDir: /data/app/~~UWq7--TDph6kMPgIrSATyQ==/ps.reso.instaeclipse-7l8nP_qI2gNpWCo6ZqWTSw==/lib/arm64
03-27 19:02:26.176 15638 15638 I VectorLegacyBridge: (InstaEclipse): Loaded package: com.instagram.android
03-27 19:02:26.506 15638 15638 I VectorLegacyBridge: InstaEclipse: Settings loaded via Application.attach for com.instagram.android
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: java.lang.NoSuchMethodError: com.instagram.mainactivity.InstagramMainActivity#onCreate(android.os.Bundle)#exact
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at olXzXBq.bopZah.eGxFtiW.XposedHelpers.lambda$findMethodExact$3(XposedHelpers.java:448)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at olXzXBq.bopZah.eGxFtiW.XposedHelpers$$ExternalSyntheticLambda7.get(D8$$SyntheticClass:0)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at java.util.Optional.orElseThrow(Optional.java:403)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at olXzXBq.bopZah.eGxFtiW.XposedHelpers.findMethodExact(XposedHelpers.java:448)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at olXzXBq.bopZah.eGxFtiW.XposedHelpers.findAndHookMethod(XposedHelpers.java:295)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at olXzXBq.bopZah.eGxFtiW.XposedHelpers.findAndHookMethod(XposedHelpers.java:370)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at ps.reso.instaeclipse.mods.ui.UIHookManager.mainActivity(UIHookManager.java:148)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at ps.reso.instaeclipse.Xposed.Module$1.afterHookedMethod(Module.java:161)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at olXzXBq.bopZah.eGxFtiW.XposedBridge$LegacyApiSupport.handleAfter(XposedBridge.java:406)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at org.matrix.vector.legacy.LegacyDelegateImpl.processLegacyHook(LegacyDelegateImpl.java:79)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at org.matrix.vector.impl.hooks.VectorNativeHooker.callback$lambda$0(VectorNativeHooker.kt:89)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at org.matrix.vector.impl.hooks.VectorNativeHooker.$r8$lambda$Gv0h3YyBQ5fX_R8flOBlfNtiIu0(VectorNativeHooker.kt:0)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at org.matrix.vector.impl.hooks.VectorNativeHooker$$ExternalSyntheticLambda1.invoke(D8$$SyntheticClass:0)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at org.matrix.vector.impl.hooks.VectorChain.proceedWith(VectorChain.kt:56)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at org.matrix.vector.impl.hooks.VectorChain.proceed(VectorChain.kt:45)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at org.matrix.vector.impl.hooks.VectorNativeHooker.callback(VectorNativeHooker.kt:99)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at Vector_.attach(Dobby:11)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.app.Instrumentation.newApplication(Instrumentation.java:1363)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1658)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1590)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:8236)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.app.ActivityThread.-$$Nest$mhandleBindApplication(ActivityThread.java:0)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2753)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.os.Handler.dispatchMessageImpl(Handler.java:142)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.os.Handler.dispatchMessage(Handler.java:125)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.os.Looper.loopOnce(Looper.java:292)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.os.Looper.loop(Looper.java:393)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at android.app.ActivityThread.main(ActivityThread.java:9486)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at java.lang.reflect.Method.invoke(Native Method)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:575)
03-27 19:02:26.510 15638 15638 E VectorLegacyBridge: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:939)

Hi, I am the dev of InstaEclipse, this issue was fixed with InstaEclipse 0.5 debug, the user is using it.

I will check myself...

Thanks for the great LSPosed/LSPatch!!

@JingMatrix

Copy link
Copy Markdown
OwnerAuthor

@ReSo7200 Nice to hear from you, and it is my pleasure to serve the community. Please do tell me if current refactoring (this pr) is causing issues for your module.

I will wait for your test result before merging this.

@AllenChangMusic

AllenChangMusic commented Mar 27, 2026

Copy link
Copy Markdown

@ReSo7200
So I found that reinstalling instagram AND wiping data in Shell allowed the app to stop crashing on startup. Uninstalling and reinstalling LSPosed didn't fix it.

Looking through logcat, seeing these 3 errors consistently popping up, not sure if it's related to the hooking.

imageimageimage

@mmmpipi

Copy link
Copy Markdown

@jiggs82@AllenChangMusic@mmmpipi Please also test the latest CI builds of current branch, before I finally merge it.

it works fine! thanks

@JingMatrix

Copy link
Copy Markdown
OwnerAuthor

@bikram-agarwal Please if the latest CI build from current pr works for you.

@bikram-agarwal

Copy link
Copy Markdown

@bikram-agarwal Please if the latest CI build from current pr works for you.

No, modules tab is again blank when I flash this.

CorePath check both of them before injecting.
Moreover, we fix a compilation waring of null string.
@JingMatrix

Copy link
Copy Markdown
OwnerAuthor

@Dev4Mod and @huynhbaman, thank you for finding out this bug, it is fixed now.

@AbdulrahmanAlamodi

AbdulrahmanAlamodi commented Apr 4, 2026

Copy link
Copy Markdown

@huynhbaman LGTM

Both legacy and 101's modules are working

Here are some logs if needed
logs.zip

@JingMatrixJingMatrix linked an issue Apr 4, 2026 that may be closed by this pull request
@JingMatrix
JingMatrix merged commit 714e6c8 into masterApr 5, 2026
1 check passed
@Things22

Copy link
Copy Markdown

hi @JingMatrix
sorry for off-topic
I think this project deserves a dedicated Telegram channel or group. It would be useful for sharing experiences, easy access, sharing errors and logs, and other things. Thank you so much for your wonderful work, by the way! ✨

JingMatrix added a commit that referenced this pull request Apr 14, 2026
Modules such as `io.github.mhmrdd.libxposed.ps.passit` [PlayStrong](https://t.me/meetstrong/125) call methods with `libxposed` API signatures via JNI during its initialization, which is bounded to fail if dex obfuscation is always enabled.
Vector has removed the user configuration of `Xposed API Protection` (toggling the dex obfuscation option) during its daemon refactoring in #597, for the reason that this option is too technical for most users.
Ideally, module developers should extend their module compatibility with dex obfuscation mode, by for example, inheriting Xposed APIs.
In any case, we now disable dex obfuscation for debug builds, so that Vector users could test out these modules.
P.S.: strong integrity is obtained on my local test with community shared RKA token.
JingMatrix added a commit that referenced this pull request Apr 17, 2026
During the previous refactor #597, we forget to implement the `auto_include` feature.
JingMatrix added a commit that referenced this pull request Apr 20, 2026
During the previous refactor #597, we forget to implement the `auto_include` feature.
JingMatrix added a commit that referenced this pull request Apr 21, 2026
Modules such as `io.github.mhmrdd.libxposed.ps.passit` [PlayStrong](https://t.me/meetstrong/125) call methods with `libxposed` API signatures via JNI during its initialization, which is bounded to fail if dex obfuscation is always enabled.
Vector has removed the user configuration of `Xposed API Protection` (toggling the dex obfuscation option) during its daemon refactoring in #597, for the reason that this option is too technical for most users.
Ideally, module developers should extend their module compatibility with dex obfuscation mode, by for example, inheriting Xposed APIs.
In any case, we now disable dex obfuscation for debug builds, so that Vector users could test out these modules.
Enovale pushed a commit to Enovale/Vector that referenced this pull request Jul 13, 2026
We rewrite the Vector daemon from Java to Kotlin using a modular design as specified in the daemon README. This transition improves code maintainability and modernizes the codebase.
We note below several behavior changes in this refactor.
Bug Fixes and Improvements:
- Directory Permissions: Correctly configured for XSharedPreference storage.
- Database Management: Migrated to Android DatabaseHelper for better versioning and automatic migration from LSPosed database (`v101`).
- CLI Tool: Added a command-line interface at `/data/adb/lspd/cli` for managing modules and scopes.
Removed Features:
- Denylist Filtering: Removed UI warnings for denylist apps, as the Vector functions independently of them.
- In-app Updates: UI-based updates removed in favor of root-level manager updates (e.g., Magisk/KernelSU).
- Logcat Watchdog: Removed due to lack of practical utility from previous debugging experiences.
- Obfuscation Toggle: Xposed API obfuscation is now permanently enabled, while it remains configurable via `DaemonState` at compile-time.
Enovale pushed a commit to Enovale/Vector that referenced this pull request Jul 13, 2026
During the previous refactor JingMatrix#597, we forget to implement the `auto_include` feature.
Enovale pushed a commit to Enovale/Vector that referenced this pull request Jul 13, 2026
Modules such as `io.github.mhmrdd.libxposed.ps.passit` [PlayStrong](https://t.me/meetstrong/125) call methods with `libxposed` API signatures via JNI during its initialization, which is bounded to fail if dex obfuscation is always enabled.
Vector has removed the user configuration of `Xposed API Protection` (toggling the dex obfuscation option) during its daemon refactoring in JingMatrix#597, for the reason that this option is too technical for most users.
Ideally, module developers should extend their module compatibility with dex obfuscation mode, by for example, inheriting Xposed APIs.
In any case, we now disable dex obfuscation for debug builds, so that Vector users could test out these modules.
JingMatrix added a commit that referenced this pull request Jul 30, 2026
…om (#809)
Flash Vector, open it from the root manager, close it, and there is no way back
in. The dialer code registered a filter with no action, which matches nothing, so
that branch has been dead since #597; it works again and is rebound to 832867,
VECTOR on the keypad. Parasitically the manager is not installed, so the launcher
has nothing to show either: the pinned shortcut and the standalone install that
#796 dropped return, in an "Opening Vector" section and a first-launch prompt,
with `getManagerApk()` handing over the APK the host cannot read. Sixteen new
strings, translated into all eighteen languages.
The version string now names where a build came from rather than calling every
canary "dirty", which it did only because the workflow writes signing credentials
into the tracked `gradle.properties`. Repository and commit both come from the
pull request's head, since GitHub's defaults describe the run and not the code.
Closes#815.
JingMatrix added a commit that referenced this pull request Aug 6, 2026
#882)
Constructing a Notification on Android 16 reads an aconfig flag of the systemui
container, and the daemon cannot serve that read: it holds an ActivityThread but
no application record, so the settings provider is refused it and the
constructor throws SecurityException. Setting systemui_is_cached before the
first read leaves the flags at their compiled defaults and removes the read.
That bypass was gated on SDK_INT >= VANILLA_ICE_CREAM, wider than the release it
belongs to, because Xiaomi shipped the change on Android 15 without the SDK
level; #96 was such a device, four days before Android 16 DP1 was published.
#597 rewrote the test as SDK_INT == 36 and lost that case, which #880 now
reports on the same vendor and the same version. Android 17 sets those fields
unconditionally, so the test spans 35 to 36, the versions in which the field can
exist.
JingMatrix added a commit that referenced this pull request Aug 7, 2026
Handing a module app its `IXposedService` means starting it: the daemon acquires the module's own `XposedService` provider, which brings the process up, and passes the binder in the reply. That reference was never released, and the platform reads an outstanding external reference as a live client — so `OomAdjuster` held every module app at `FOREGROUND_APP_ADJ` with adj type `ext-provider`, never cached, and a host dying while its provider was still launching was restarted for it. The platform bounds those restarts at three per provider record; acquiring again rebuilds the record with the count at zero, which is how #889 reached fourteen process starts in seventy-six seconds, six of them ours. The release has to be unconditional, because the two returns that matter come back null with the reference already registered.
Three consequences of the same path. The delivery no longer runs on the uid observer, where one module delayed every other module's binder by eight seconds. A failed send is no longer recorded as a delivered one, and repeated failures are throttled to one attempt a minute rather than one a second. And a delivery is recorded per process rather than per uid — a uid outlives any one of its processes, so the record could otherwise never clear.
Separately, `getContentProviderExternal` gained its `tag` argument in Q by replacing the three-argument form, so the unconditional four-argument call has meant no module received its app-side service on 8.1 or 9 since #597. And the `IUidObserver` stub declared four of the interface's eight methods; the rest stayed abstract at runtime, which `oneway` makes fatal rather than reportable.
Module apps are no longer immortal, so a scope answer arriving an hour later may find the app gone. The grant itself is written before the callback.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Incomplete support for legacy and libxposed API 101 modules [BUG] Support for Android 17 beta 13 auto remove packages config when uninstall

13 participants

@JingMatrix@jiggs82@AllenChangMusic@mmmpipi@ReSo7200@bikram-agarwal@CoelacanthusHex@owocado@AnatolyJacobs@Dev4Mod@huynhbaman@AbdulrahmanAlamodi@Things22