java.lang.NoSuchMethodError: 没有静态方法“myMethod”

问题描述

我有一个扩展方法

fun StoresClientFragment?.onClickButtonBack(){
   this?.listener?.onStoresFragmentClickBtnMenu()
}

应用安装没有任何错误;但是在运行时调用方法时,它给了我以下错误

java.lang.NoSuchMethodError: onClickButtonBack 没有静态方法 (Lcom/app/common_client/ui/fragment /stores/StoresClientFragment;) V 在类 Lcom/app/common_client/commons/CommonsAppTypeGroupKt;或其 超类(声明 'com.app.common_client.commons.CommonsAppTypeGroupKt'出现在 /data/app/com.myapp.client-DWp0y3iNC3tsmBZkowlpfw==/base.apk!classes2.dex).

我启用了 multidex

在 build.gradle 中

android {
    defaultConfig {
        multiDexEnabled = true
    }
}

dependencies {
   implementation 'androidx.multidex:multidex:2.0.1'
}

在应用类

class ApplicationClient : MultiDexApplication(){
}

在清单中

<application
        android:name=".commons.application.ApplicationClient"

注意:我正在使用产品风味和模块,该方法位于某些产品风味共享的 src 中

sourceSets {
         flavorA {
             java.srcDirs + = "src/sharedFolder/java" //here is 'onClickButtonBack' method
         }
         flavorB {
             java.srcDirs + = "src/sharedFolder/java"
         }
}

解决方法

我已经解决了,但我不知道为什么,我唯一做的就是更改方法所在的文件名。

MyNewFile.kt 的 MyFile.kt

fun StoresClientFragment? .onClickButtonBack () {
     this? .listener? .onStoresFragmentClickBtnMenu ()
}

我希望它可以帮助遇到同样事情的人,如果有人知道为什么有效,我也想分享一下,谢谢