EventBus icon indicating copy to clipboard operation
EventBus copied to clipboard

Hongmeng (HarmonyOS) crashes during registration

Open yinanwang1 opened this issue 1 year ago • 9 comments

Update: to avoid this exception use a workaround.


Edit: updated to translate to English, as this issue tracker is in English.

鸿蒙系统注册时崩溃 Translation: Hongmeng system crashes during registration

崩溃执行的代码为 EventBus.getDefault().register(this) 在注册的时候就崩溃了。崩溃的日志如下: Translation: The code executed by the crash is EventBus.getDefault().register(this) and it crashes when registering. The crash log is as follows:

Caused by: java.lang.ClassNotFoundException: Didn't find class "android.window.BackEvent" on path: DexPathList[[zip file "/data/app/~~mItMJVtTKf3MFXkmzjJT5g==/com.qeebike.customer-sqio0Z6TRT4C2KWW30Nl8g==/base.apk"],nativeLibraryDirectories=[/data/app/~~mItMJVtTKf3MFXkmzjJT5g==/com.qeebike.customer-sqio0Z6TRT4C2KWW30Nl8g==/lib/arm64, /data/app/~~mItMJVtTKf3MFXkmzjJT5g==/com.qeebike.customer-sqio0Z6TRT4C2KWW30Nl8g==/base.apk!/lib/arm64-v8a, /system/lib64, /hw_product/lib64, /system/lib64/module/multimedia, /system/product/lib64]]
                 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:218)
                 	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
                 	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                 	at java.lang.reflect.Executable.getParameterTypesInternal(Native Method) 
                 	at java.lang.reflect.Method.getParameterTypes(Method.java:186) 
                 	at org.greenrobot.eventbus.SubscriberMethodFinder.findUsingReflectionInSingleClass(SubscriberMethodFinder.java:173) 
                 	at org.greenrobot.eventbus.SubscriberMethodFinder.findUsingInfo(SubscriberMethodFinder.java:88) 
                 	at org.greenrobot.eventbus.SubscriberMethodFinder.findSubscriberMethods(SubscriberMethodFinder.java:64) 
                 	at org.greenrobot.eventbus.EventBus.register(EventBus.java:150) 
                 	at com.qeebike.map.ui.activity.JourneyFinishActivity.onCreate(JourneyFinishActivity.kt:102) 
                 	at android.app.Activity.performCreate(Activity.java:8592) 
                 	at android.app.Activity.performCreate(Activity.java:8565) 
                 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1344) 
                 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4756) 
                 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:5006) 
                 	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:123) 
                 	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
                 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
                 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:3082) 
                 	at android.os.Handler.dispatchMessage(Handler.java:117) 
                 	at android.os.Looper.loopOnce(Looper.java:205) 
                 	at android.os.Looper.loop(Looper.java:293) 
                 	at android.app.ActivityThread.loopProcess(ActivityThread.java:9986) 
                 	at android.app.ActivityThread.main(ActivityThread.java:9975) 
                 	at java.lang.reflect.Method.invoke(Native Method) 
                 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586) 
                 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1240) 

yinanwang1 avatar Jun 07 '24 02:06 yinanwang1

我的鸿蒙也出现了 Caused by: java.lang.ClassNotFoundException: Didn't find class "android.window.BackEvent" on path: DexPathList 机型mate40 系统harmonyos 4.0.0

Allen-cxl avatar Jun 07 '24 06:06 Allen-cxl

There are multiple issues about this, do none of the solutions there work?

greenrobot-team avatar Jun 10 '24 06:06 greenrobot-team

There are multiple issues about this, do none of the solutions there work?

Thank you for your replay. YES, I don't find any solution to fix this bug in the ISSUES. THE error message is: Didn't find class "android.window.BackEvent". There is no same issues.

WHAT information about this bug do you want, I can offer?

My CODE as follow:

class JourneyFinishActivity : FlutterActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        if (!EventBus.getDefault().isRegistered(this) && findBackEvent()) {
            EventBus.getDefault().register(this)
        }
    }

Especially, invoke the EventBus.getDefault().register(this) in the FlutterActivity file, it crashes. I don't know the reason is caused by the flutter activity or not!

I hope this is helpful and I look forward to hearing from you.

Good luck.

yinanwang1 avatar Jun 12 '24 06:06 yinanwang1

Please look at the issues I have linked. They are relevant to your issue which is a ClassNotFoundException. I don't have time to summarize them all here.

greenrobot-team avatar Jun 12 '24 08:06 greenrobot-team

增加一个冗余类 临时解决

Translation: Add a redundant class as a temporary solution

class _SplashFlutterActivityEventReceiver(val activity: SplashFlutterActivity) {
    fun register() {
        if (!EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().register(this)
        }
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    fun onFlutterEvent(event: FlutterSendEventBean) {
      ...
    }

    fun unRegister() {
        if (EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().unregister(this)
        }
    }
}

open class SplashFlutterActivity : FlutterBoostActivity() {
  val _eventReceiver = _SplashFlutterActivityEventReceiver(this)
      override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        _eventReceiver.register()
				...
    }
 override fun onDestroy() {
        super.onDestroy()
        _eventReceiver.unRegister()
   ...
    }

mainlxl avatar Jul 03 '24 08:07 mainlxl

I had the same crash in my Flutter activity and temporarily fixed it with @mainlxl 's logic. Thank you!

rajimendiswow avatar Jul 31 '24 05:07 rajimendiswow

    private void findUsingReflectionInSingleClass(FindState findState) {
        Method[] methods;
        try {
            // This is faster than getMethods, especially when subscribers are fat classes like Activities
            methods = findState.clazz.getDeclaredMethods();
        } catch (Throwable th) {
            // Workaround for java.lang.NoClassDefFoundError, see https://github.com/greenrobot/EventBus/issues/149
            try {
                methods = findState.clazz.getMethods();
            } catch (LinkageError error) { // super class of NoClassDefFoundError to be a bit more broad...
                String msg = "Could not inspect methods of " + findState.clazz.getName();
                if (ignoreGeneratedIndex) {
                    msg += ". Please consider using EventBus annotation processor to avoid reflection.";
                } else {
                    msg += ". Please make this class visible to EventBus annotation processor to avoid reflection.";
                }
                throw new EventBusException(msg, error);
            }
            findState.skipSuperClasses = true;
        }
        for (Method method : methods) {
            int modifiers = method.getModifiers();
            if ((modifiers & Modifier.PUBLIC) != 0 && (modifiers & MODIFIERS_IGNORE) == 0) {
                Class<?>[] parameterTypes = method.getParameterTypes();
                if (parameterTypes.length == 1) {
                    Subscribe subscribeAnnotation = method.getAnnotation(Subscribe.class);
                    if (subscribeAnnotation != null) {
                        Class<?> eventType = parameterTypes[0];
                        if (findState.checkAdd(method, eventType)) {
                            ThreadMode threadMode = subscribeAnnotation.threadMode();
                            findState.subscriberMethods.add(new SubscriberMethod(method, eventType, threadMode,
                                    subscribeAnnotation.priority(), subscribeAnnotation.sticky()));
                        }
                    }
                } else if (strictMethodVerification && method.isAnnotationPresent(Subscribe.class)) {
                    String methodName = method.getDeclaringClass().getName() + "." + method.getName();
                    throw new EventBusException("@Subscribe method " + methodName +
                            "must have exactly 1 parameter but has " + parameterTypes.length);
                }
            } else if (strictMethodVerification && method.isAnnotationPresent(Subscribe.class)) {
                String methodName = method.getDeclaringClass().getName() + "." + method.getName();
                throw new EventBusException(methodName +
                        " is a illegal @Subscribe method: must be public, non-static, and non-abstract");
            }
        }
    }  

methods里面有个是空的报错 在flutterActivity内用EventBus

Translation: There is an empty error in methods. Use EventBus in flutterActivity.

gaozhong97 avatar Sep 25 '24 03:09 gaozhong97

this android lib.

AdminQQZ avatar Nov 14 '24 01:11 AdminQQZ

HarmonyOS is Android

LailaiMaster avatar Sep 02 '25 08:09 LailaiMaster