Java.lang.NoSuchMethodError: 没有静态方法'myMethod'

8

我有一个扩展方法:

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

该应用程序安装时没有任何错误。但在运行时调用方法时,会出现以下错误:

java.lang.NoSuchMethodError: No static method onClickButtonBack (Lcom/app/common_client/ui/fragment/stores/StoresClientFragment;) V in class Lcom/app/common_client/commons/CommonsAppTypeGroupKt; or its super classes (declaration of 'com.app.common_client.commons.CommonsAppTypeGroupKt' appears in /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"

注意:我正在使用产品风味和模块,该方法位于某些产品风味共享的源代码中。
sourceSets {
         flavorA {
             java.srcDirs + = "src/sharedFolder/java" //here is 'onClickButtonBack' method
         }
         flavorB {
             java.srcDirs + = "src/sharedFolder/java"
         }
}

你尝试过在Proguard文件中添加以下内容吗: -keep class com.app.common_client.ui.fragment.stores.** {*;} - Gaurav Bansal
我没有启用Proguard,我的设置是“minifyEnabled false”;我是否仍然需要将其添加到Proguard中? - Jhelsin Mijael Quispe Garcia
也许问题在于你正在尝试从“flavorB”编译中访问该方法? - Jose Angel Maneiro
4个回答

25

Build -> Rebuild Project 帮助了我。这似乎是 Android Studio 代码缓存中的一个错误。


10

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

从 MyFile.kt 改为 MyNewFile.kt

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

我希望这能帮助到正在经历同样问题的人,如果有人知道为什么起作用,请分享一下,谢谢。


这很奇怪,但是救命稻草。 - Aamir Altaf Kathu
1
谢谢!这解决了我的问题。在我的情况下,问题是两个不同模块中有相同名称的两个文件。其中一个文件中的函数没有被识别。将该文件重命名解决了名称混淆问题,现在一切都正常工作了。 - Adi B

1

在我的情况下,我解决了它,改变了文件的包名,这个文件试图从中获取方法。

我的设置是2个Kotlin模块(A依赖于B)。两者都有相同的包名和类。当我尝试从A使用B.method()时,似乎它正在尝试调用A.method()。

我不是专家,只是我注意到的。


0

我有两个文件名完全相同,一个在我的主项目中,另一个在我的测试包中。由于某种原因,它们发生了冲突,在将测试包中的文件重命名后,问题得到了解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接