osfans / trime

同文安卓輸入法平臺3.x/Android-rime/Rime Input Method Engine for Android
http://osfans.github.io/trime/
GNU General Public License v3.0
3.09k stars 372 forks source link

尝试输入即崩溃 #977

Closed ljk5403 closed 6 months ago

ljk5403 commented 1 year ago

Describe the bug Motorola Edge S Pro, Android 12, 尝鲜试用了一下,安装后可以正常进入输入法配置界面,但点击任何可输入文字的框立即崩溃(未显示输入法键盘)。

Log

App Package Name: com.osfans.trime
App Version Name: 3.2.11
App Version Code: 20230301
OS Name: S1RAA32.54-37-4
OS Version: 4.19.157-perf+ (3e5e9d-be4f8)
OS API Level: 31
Device: pstar
Model (product): XT2153-1 (pstar_cmcc)
Manufacturer: motorola
Tags: release-keys
Screen Size: 1080 x 2400
Screen Density: 2.7875001
Screen orientation: Portrait
--------- beginning of main
I/OpenGLRenderer(20505): Davey! duration=9223371172722ms; Flags=0, FrameTimelineVsyncId=65904, IntendedVsync=864132457363, Vsync=864132457363, InputEventId=455587698, HandleInputStart=864132660043, AnimationStart=864132661293, PerformTraversalsStart=864132662491, DrawStart=864132751970, FrameDeadline=864152457362, FrameInterval=864132658116, FrameStartTime=8333333, SyncQueued=864136235043, SyncStart=864136302231, IssueDrawCommandsStart=864136880095, SwapBuffers=864138649054, FrameCompleted=9223372036854775807, DequeueBufferDuration=56094, QueueBufferDuration=1304688, GpuCompleted=9223372036854775807, SwapBuffersCompleted=864140669158, DisplayPresentTime=9289159564133176, 
I/OpenGLRenderer(20505): Davey! duration=9223371171014ms; Flags=0, FrameTimelineVsyncId=66210, IntendedVsync=865840213166, Vsync=865840213166, InputEventId=0, HandleInputStart=865841619536, AnimationStart=865841625473, PerformTraversalsStart=865841628859, DrawStart=865841794171, FrameDeadline=865860213165, FrameInterval=865841609536, FrameStartTime=8333333, SyncQueued=865843097401, SyncStart=865843211515, IssueDrawCommandsStart=865844074744, SwapBuffers=865848311516, FrameCompleted=9223372036854775807, DequeueBufferDuration=64271, QueueBufferDuration=1757553, GpuCompleted=9223372036854775807, SwapBuffersCompleted=865851057662, DisplayPresentTime=844463585361941, 
D/InputMethodService(20505): dispatchOnShowInputRequested result = true
D/AndroidRuntime(20505): Shutting down VM
--------- beginning of crash
E/AndroidRuntime(20505): FATAL EXCEPTION: main
E/AndroidRuntime(20505): Process: com.osfans.trime, PID: 20505
E/AndroidRuntime(20505): android.view.InflateException: Binary XML file line #14 in com.osfans.trime:layout/input_root: Binary XML file line #16 in com.osfans.trime:layout/tab_bar: Error inflating class com.osfans.trime.ime.symbol.TabView
E/AndroidRuntime(20505): Caused by: android.view.InflateException: Binary XML file line #16 in com.osfans.trime:layout/tab_bar: Error inflating class com.osfans.trime.ime.symbol.TabView
E/AndroidRuntime(20505): Caused by: java.lang.reflect.InvocationTargetException
E/AndroidRuntime(20505):        at java.lang.reflect.Constructor.newInstance0(Native Method)
E/AndroidRuntime(20505):        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.createView(LayoutInflater.java:858)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1010)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1127)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1130)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1267)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1267)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.inflate(LayoutInflater.java:686)
E/AndroidRuntime(20505):        at android.view.LayoutInflater.inflate(LayoutInflater.java:538)
E/AndroidRuntime(20505):        at com.osfans.trime.databinding.InputRootBinding.inflate(InputRootBinding.java:51)
E/AndroidRuntime(20505):        at com.osfans.trime.databinding.InputRootBinding.inflate(InputRootBinding.java:45)
E/AndroidRuntime(20505):        at com.osfans.trime.ime.core.Trime.onCreateInputView(Trime.java:723)
E/AndroidRuntime(20505):        at android.inputmethodservice.InputMethodService.updateInputViewShown(InputMethodService.java:2258)
E/AndroidRuntime(20505):        at android.inputmethodservice.InputMethodService.prepareWindow(InputMethodService.java:2704)
E/AndroidRuntime(20505):        at android.inputmethodservice.InputMethodService.showWindow(InputMethodService.java:2670)
E/AndroidRuntime(20505):        at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInput(InputMethodService.java:1082)
E/AndroidRuntime(20505):        at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInputWithToken(InputMethodService.java:1041)
E/AndroidRuntime(20505):        at android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:225)
E/AndroidRuntime(20505):        at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:44)
E/AndroidRuntime(20505):        at android.os.Handler.dispatchMessage(Handler.java:111)
E/AndroidRuntime(20505):        at android.os.Looper.loopOnce(Looper.java:238)
E/AndroidRuntime(20505):        at android.os.Looper.loop(Looper.java:357)
E/AndroidRuntime(20505):        at android.app.ActivityThread.main(ActivityThread.java:8089)
E/AndroidRuntime(20505):        at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(20505):        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
E/AndroidRuntime(20505):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1026)
E/AndroidRuntime(20505): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Integer com.osfans.trime.data.theme.Config$Colors.getColor(java.lang.String)' on a null object reference
E/AndroidRuntime(20505):        at com.osfans.trime.ime.symbol.TabView.reset(TabView.java:61)
E/AndroidRuntime(20505):        at com.osfans.trime.ime.symbol.TabView.<init>(TabView.java:95)
E/AndroidRuntime(20505):        ... 34 more
E/CustomActivityOnCrash(20505): App has crashed, executing CustomActivityOnCrash's UncaughtExceptionHandler
E/CustomActivityOnCrash(20505): android.view.InflateException: Binary XML file line #14 in com.osfans.trime:layout/input_root: Binary XML file line #16 in com.osfans.trime:layout/tab_bar: Error inflating class com.osfans.trime.ime.symbol.TabView
E/CustomActivityOnCrash(20505): Caused by: android.view.InflateException: Binary XML file line #16 in com.osfans.trime:layout/tab_bar: Error inflating class com.osfans.trime.ime.symbol.TabView
E/CustomActivityOnCrash(20505): Caused by: java.lang.reflect.InvocationTargetException
E/CustomActivityOnCrash(20505):         at java.lang.reflect.Constructor.newInstance0(Native Method)
E/CustomActivityOnCrash(20505):         at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.createView(LayoutInflater.java:858)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1010)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.rInflate(LayoutInflater.java:1127)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.rInflate(LayoutInflater.java:1130)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1267)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1267)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.inflate(LayoutInflater.java:686)
E/CustomActivityOnCrash(20505):         at android.view.LayoutInflater.inflate(LayoutInflater.java:538)
E/CustomActivityOnCrash(20505):         at com.osfans.trime.databinding.InputRootBinding.inflate(InputRootBinding.java:51)
E/CustomActivityOnCrash(20505):         at com.osfans.trime.databinding.InputRootBinding.inflate(InputRootBinding.java:45)
E/CustomActivityOnCrash(20505):         at com.osfans.trime.ime.core.Trime.onCreateInputView(Trime.java:723)
E/CustomActivityOnCrash(20505):         at android.inputmethodservice.InputMethodService.updateInputViewShown(InputMethodService.java:2258)
E/CustomActivityOnCrash(20505):         at android.inputmethodservice.InputMethodService.prepareWindow(InputMethodService.java:2704)
E/CustomActivityOnCrash(20505):         at android.inputmethodservice.InputMethodService.showWindow(InputMethodService.java:2670)
E/CustomActivityOnCrash(20505):         at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInput(InputMethodService.java:1082)
E/CustomActivityOnCrash(20505):         at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInputWithToken(InputMethodService.java:1041)
E/CustomActivityOnCrash(20505):         at android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:225)
E/CustomActivityOnCrash(20505):         at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:44)
E/CustomActivityOnCrash(20505):         at android.os.Handler.dispatchMessage(Handler.java:111)
E/CustomActivityOnCrash(20505):         at android.os.Looper.loopOnce(Looper.java:238)
E/CustomActivityOnCrash(20505):         at android.os.Looper.loop(Looper.java:357)
E/CustomActivityOnCrash(20505):         at android.app.ActivityThread.main(ActivityThread.java:8089)
E/CustomActivityOnCrash(20505):         at java.lang.reflect.Method.invoke(Native Method)
E/CustomActivityOnCrash(20505):         at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
E/CustomActivityOnCrash(20505):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1026)
E/CustomActivityOnCrash(20505): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Integer com.osfans.trime.data.theme.Config$Colors.getColor(java.lang.String)' on a null object reference
E/CustomActivityOnCrash(20505):         at com.osfans.trime.ime.symbol.TabView.reset(TabView.java:61)
E/CustomActivityOnCrash(20505):         at com.osfans.trime.ime.symbol.TabView.<init>(TabView.java:95)
E/CustomActivityOnCrash(20505):         ... 34 more
E/CustomActivityOnCrash(20505): Failed when resolving the restart activity class via getLaunchIntentForPackage, stack trace follows!
E/CustomActivityOnCrash(20505): java.lang.ClassNotFoundException: com.osfans.trime.PrefLauncherAlias
E/CustomActivityOnCrash(20505):         at java.lang.Class.classForName(Native Method)
E/CustomActivityOnCrash(20505):         at java.lang.Class.forName(Class.java:454)
E/CustomActivityOnCrash(20505):         at java.lang.Class.forName(Class.java:379)
E/CustomActivityOnCrash(20505):         at cat.ereza.customactivityoncrash.CustomActivityOnCrash.getLauncherActivity(CustomActivityOnCrash.java:648)
E/CustomActivityOnCrash(20505):         at cat.ereza.customactivityoncrash.CustomActivityOnCrash.guessRestartActivityClass(CustomActivityOnCrash.java:602)
E/CustomActivityOnCrash(20505):         at cat.ereza.customactivityoncrash.CustomActivityOnCrash.lambda$install$0(CustomActivityOnCrash.java:177)
E/CustomActivityOnCrash(20505):         at cat.ereza.customactivityoncrash.CustomActivityOnCrash$$ExternalSyntheticLambda0.uncaughtException(Unknown Source:2)
E/CustomActivityOnCrash(20505):         at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
E/CustomActivityOnCrash(20505):         at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
E/CustomActivityOnCrash(20505):         at java.lang.Thread.dispatchUncaughtException(Thread.java:2200)
E/CustomActivityOnCrash(20505): Caused by: java.lang.ClassNotFoundException: com.osfans.trime.PrefLauncherAlias
E/CustomActivityOnCrash(20505):         ... 10 more
I/Process (20505): Sending signal. PID: 20505 SIG: 9% 

Smartphone (please complete the following information):

wxyzh commented 1 year ago

仅看报错信息,与 #959 #946 是同样的问题 如果方便的话,可以上传脱敏之后的用户目录 build目录,以及实时日志内的rime的报错输出。

WhiredPlanck commented 1 year ago

@ljk5403 @wxyzh #959 #946 和本 Issue 的真正问题都始于这里:https://github.com/osfans/trime/blob/bae618f78b059f68438a9e3dc8bc7cc7fcd4569a/app/src/main/java/com/osfans/trime/data/theme/Config.java#L475

我们在解析主题的类里初始化了这个 Map 来缓存配色方案下每个条目对应的颜色值或者图片路径以期提高性能。但如大家所见,这个 Map 声明的位置相对靠下,而对配色方案的缓存机制则在类的初始化时就开始了,这就会导致对这个缓存容器的调用可能会早于容器本身的初始化。这其实是个隐性的坑:尽管在 Kotlin / Java 中,将变量的声明晚于对其的调用在 IDE 中不会报错,但是在实际运行时,则会有几率出现因为调用早于初始化而出现“尝试在 null 对象上调用方法”进而引发空指针异常,使得程序崩溃。

WhiredPlanck commented 8 months ago

请看新版本有无此问题。Please take a look for new version. 每夜版/Nigntly Build:https://github.com/osfans/trime/releases/tag/nightly