Steps to reproduce/复现步骤
- 使用 NPatch 修補 Via Browser 7.2.1 APK(
newPackage: mark.via.gp)
- 安裝修補後的 APK
- 開啟 App
- App 啟動後立即閃退(無法進入任何 Activity 或 Application 生命週期回呼)
Expected behaviour/预期行为
不應崩潰:SigBypass.setModuleNativeLibraryRoots(String[]) 在處理任意長度(包含空陣列)的模組 library root 列表時,App 應能正常完成啟動,不應觸發 SIGABRT。
Actual behaviour/实际行为
App 安裝後每次啟動皆會在極短時間內(約 1~2 秒內)閃退,無法進入任何畫面,系統彈出「應用程式已停止運作」。透過 adb logcat 抓取的完整堆疊顯示,App 進程並非一般 Java FATAL EXCEPTION(未曾出現該關鍵字),而是被 ART CheckJNI 判定為原生層程式錯誤後主動 abort(),訊息如下:
JNI DETECTED ERROR IN APPLICATION: JNI ERROR (app bug): jstring is an invalid local reference: 0x7c51e9d0fd (popped reference at index 63 in a table of size 60)
in call to ReleaseStringUTFChars
from void org.lsposed.lspd.nativebridge.SigBypass.setModuleNativeLibraryRoots(java.lang.String[])
進程隨即收到 Fatal signal 6 (SIGABRT) 而終止。系統 ActivityManager 記錄該進程「crashed too many times, killing! Reason: crashed quickly」。
此行為在兩次獨立測試中重現且完全一致(僅 local reference table 的越界 index 從 61 變為 63,其餘堆疊、崩潰位置、觸發函式皆相同):
- 第一次:修補時
sigBypassLevel=2
- 第二次:修補時
sigBypassLevel=0(關閉簽名繞過功能,作為排除變因用)
即關閉 sigBypassLevel 並未能避免崩潰,證明此問題並非該功能開關本身導致,而是 SigBypass.setModuleNativeLibraryRoots 這條 native 路徑在 LSPApplication.onLoad 啟動流程中無條件執行、且其內部邏輯本身存在 bug。
崩潰堆疊
F mark.via.gp: java_vm_ext.cc:625] JNI DETECTED ERROR IN APPLICATION: JNI ERROR (app bug): jstring is an invalid local reference: 0x7c51e9d0fd (popped reference at index 63 in a table of size 60)
F mark.via.gp: java_vm_ext.cc:625] in call to ReleaseStringUTFChars
F mark.via.gp: java_vm_ext.cc:625] from void org.lsposed.lspd.nativebridge.SigBypass.setModuleNativeLibraryRoots(java.lang.String[])
...
F mark.via.gp: runtime.cc:805] native: #14 pc 00044320 /data/data/mark.via.gp/cache/npatch/libnpatch-808781314454323767.so (deleted) (???)
F mark.via.gp: runtime.cc:805] at org.lsposed.lspd.nativebridge.SigBypass.setModuleNativeLibraryRoots(Native method)
F mark.via.gp: runtime.cc:805] at top.nkbe.npatch.loader.LSPApplication.onLoad(...)
F mark.via.gp: runtime.cc:805] at java.lang.Runtime.nativeLoad(Native method)
F mark.via.gp: runtime.cc:805] at java.lang.Runtime.load0(Runtime.java:939)
F mark.via.gp: runtime.cc:805] at java.lang.System.load(System.java:1729)
F mark.via.gp: runtime.cc:805] at top.nkbe.npatch.metaloader.LSPAppComponentFactoryStub.a(...)
F mark.via.gp: runtime.cc:805] at top.nkbe.npatch.metaloader.LSPAppComponentFactoryStub.b(...)
F mark.via.gp: runtime.cc:805] at top.nkbe.npatch.metaloader.LSPAppComponentFactoryStub.instantiateClassLoader(...)
呼叫鏈:
ActivityThread.handleBindApplication
→ LoadedApk.getClassLoader → createOrUpdateClassLoaderLocked
→ LSPAppComponentFactoryStub.instantiateClassLoader
→ LSPAppComponentFactoryStub.b / a
→ System.load(libnpatch.so)
→ LSPApplication.onLoad
→ SigBypass.setModuleNativeLibraryRoots(String[]) ← 崩潰點
Xposed Module List/Xposed 模块列表
BetterVia(com.jiguro.bettervia)
NPatch version/NPatch 版本
v1.0.7(741)
Android version/Android 版本
Android 16
Shizuku version/Shizuku 版本
13.6.0.r1086.26508300
Version requirement/版本要求
Apk file/Apk 文件
Via_7.2.1.zip
Logs/日志
Details
20260814.log
crash.txt
crash2.txt
Steps to reproduce/复现步骤
newPackage: mark.via.gp)Expected behaviour/预期行为
不應崩潰:
SigBypass.setModuleNativeLibraryRoots(String[])在處理任意長度(包含空陣列)的模組 library root 列表時,App 應能正常完成啟動,不應觸發SIGABRT。Actual behaviour/实际行为
App 安裝後每次啟動皆會在極短時間內(約 1~2 秒內)閃退,無法進入任何畫面,系統彈出「應用程式已停止運作」。透過
adb logcat抓取的完整堆疊顯示,App 進程並非一般 JavaFATAL EXCEPTION(未曾出現該關鍵字),而是被 ART CheckJNI 判定為原生層程式錯誤後主動abort(),訊息如下:進程隨即收到
Fatal signal 6 (SIGABRT)而終止。系統 ActivityManager 記錄該進程「crashed too many times, killing! Reason: crashed quickly」。此行為在兩次獨立測試中重現且完全一致(僅 local reference table 的越界 index 從 61 變為 63,其餘堆疊、崩潰位置、觸發函式皆相同):
sigBypassLevel=2sigBypassLevel=0(關閉簽名繞過功能,作為排除變因用)即關閉
sigBypassLevel並未能避免崩潰,證明此問題並非該功能開關本身導致,而是SigBypass.setModuleNativeLibraryRoots這條 native 路徑在LSPApplication.onLoad啟動流程中無條件執行、且其內部邏輯本身存在 bug。崩潰堆疊
呼叫鏈:
Xposed Module List/Xposed 模块列表
NPatch version/NPatch 版本
v1.0.7(741)
Android version/Android 版本
Android 16
Shizuku version/Shizuku 版本
13.6.0.r1086.26508300
Version requirement/版本要求
Apk file/Apk 文件
Via_7.2.1.zip
Logs/日志
Details
20260814.log
crash.txt
crash2.txt