我有一个扩展方法:
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).
我启用了多重分包功能
在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"
}
}
Build -> Rebuild Project
帮助了我。这似乎是 Android Studio 代码缓存的一个错误
我已经解决了,但是我不知道为什么,我唯一做的就是更改方法所在文件的名称。
MyFile.kt 通过 MyNewFile.kt
fun StoresClientFragment? .onClickButtonBack () {
this? .listener? .onStoresFragmentClickBtnMenu ()
}
希望对有同样经历的人有帮助,也希望有人知道为什么会这样,分享一下,谢谢
我在我的案例中解决了这个问题,更改了它试图从中获取方法的文件的包。
我的设置是 2 个 kotlin 模块(A 依赖于 B)。两者具有相同的包名称和类。当我尝试从 A 中使用 B.method() 时,它似乎正在尝试调用 A.method() 。
不是这方面的专家。正是我注意到的
我有两个名称完全相同的文件,1 个在我的主项目中,1 个在我的测试包中。由于某种原因,这种冲突,在重命名我的测试包中的文件后,一切又恢复正常了。
在我的例子中,是另一个模块中的可组合函数。我解决了它添加
android{
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.2"
}
}
到模块的gradle文件。