Migrate Vector to libxposed API 101 (Modern Interceptor Architecture)#586
Migrate Vector to libxposed API 101 (Modern Interceptor Architecture)#586JingMatrix merged 34 commits intomasterfrom
Conversation
Moreover, we add serval minor improvements.
|
@Spontini, @hyplant, @thoitiettxl-cyber, @DarthKnox, And attach logs if it is not working on you device with certain API 101 modules. |
Zygote crash, I remember it had already happened at the past |
|
Modules with required 101 not working |
|
@JingMatrix
dedLSPosed_2026-03-23T21_14_14.546616.zip |
|
The latest CI build should work now. I tested with Please continue to test and tell me if modules are working for you. |
|
@AbdulrahmanAlamodi Please test again the module punch-hole-download-progress, I am not sure if it can function for my devices. If it once worked for you with old versions or LSPosed-it (so that the module itself is good), but not for Vector, please tell us. Found a bug, fixing... |
This has always appeared but has no impact on the module's operation. |
- Split classloader hooking to correctly implement API 101 lifecycle phases and prevent AppComponentFactory <clinit> evasion. - Hook LoadedApk.createAppFactory to dispatch onPackageLoaded immediately before factory instantiation (API 29+). - Hook LoadedApk.createOrUpdateClassLoaderLocked to dispatch onPackageReady after the custom classloader is fully initialized. - Cache reflection targets using lazy delegates to eliminate redundant lookups during classloader updates.
|
@JingMatrix everything works fine now on the latest build These are additional logs if needed |
It is said as we have spent time to improve it. Now it is better to use third party library for module developers
|
Does it no longer support legacy modules? I try to install from CI, all api 101 modules I used work well, but the legacy module https://github.com/RichardLuo0/global-icon-pack-android does not work. |
|
@CoelacanthusHex No, legacy APIs will always be supported, please upload your debug logs to help locating the issue. |
|
|
In general, it will be stealthier to use randomized names.
|
Vector seems will stuck in infinitely recursive,
|
| override fun connect() { | ||
| check(!isClosed) { "JarURLConnection has been closed" } | ||
| if (!connected) { | ||
| jarEntry = | ||
| jarFile.getEntry(entryName) | ||
| ?: throw FileNotFoundException("URL=$url, zipfile=${jarFile.name}") | ||
| connected = true | ||
| } | ||
| } | ||
|
|
There was a problem hiding this comment.
| override fun connect() { | |
| check(!isClosed) { "JarURLConnection has been closed" } | |
| if (!connected) { | |
| jarEntry = | |
| jarFile.getEntry(entryName) | |
| ?: throw FileNotFoundException("URL=$url, zipfile=${jarFile.name}") | |
| connected = true | |
| } | |
| } | |
| override fun connect() { | |
| check(!isClosed) { "JarURLConnection has been closed" } | |
| if (!connected) { | |
| jarEntry = | |
| this@VectorURLStreamHandler.jarFile.getEntry(entryName) | |
| ?: throw FileNotFoundException("URL=$url, zipfile=${this@VectorURLStreamHandler.jarFile.name}") | |
| connected = true | |
| } | |
| } | |
Maybe we can let connect() access VectorURLStreamHandler.jarFile directly, just like the way in getJarFile(), so we can bypass the connect() call when accessing it through getJarFile() to avoid infinite recursion. I tested it on my device, and the issue disappeared.
There was a problem hiding this comment.
That is correct, thanks for the suggestion !
|
hi @JingMatrix thanoxLSPosed_2026-03-26T12_34_18.631214.zip thanks |
|
@Things22 Thanox is not written in API 101. |
oh, ok, but i didnt see any warining n vector manager |
|
@Things22 See my explanation here #587 (comment) |
|
XposedSmsCode Release: v3.2.4 api101 |



This PR comprehensively upgrades the Vector framework to support the modern libxposed API 101, replacing the legacy before/after callback model with a robust, OkHttp-style interceptor chain architecture.