从 Java 调用 Kotlin 显示类的“无法解析符号”

问题描述

有两个模块:

  1. app(包含 Java 和 Kotlin 类的主/应用程序模块)
  2. lib-wrapper(包含 Java 类的 Android 库模块)

lib-wrapper 发布在 Amazon S3 存储桶上,用作应用程序模块中的库依赖项。混淆规则适用于 lib-wrapper。到目前为止一切正常。

然后将lib-wrapper的所有类从java转为kotlin。

  • 现在,所有调用 lib-wrapper 方法的 Java 类(在应用模块中)都以红色显示“无法解析符号”

  • 调用 lib-wrapper 方法的 kotlin 类(在 app 模块中)没有问题。

  • 即使在 Java 类中使用“无法解析符号”,应用程序也可以编译并运行而不会出错。但是对于新用户来说,使用 lib-wrapper 非常困难,因为它不会将库类和方法显示自动完成建议。

  • 反编译 apk 文件,lib-wrapper 类显示所有预期的类和方法都是公共的,公共成员是纯/去混淆的。 (这是预期的。)

  • 如果我禁用 Proguard(lib-wrapper 的 build.gradle 中的“minifyEnabled false”),一切正常。

所以我在 lib-wrapper 的 proguard-rules.pro 文件添加了以下 kotlin 特定的 proguard 规则,但没有帮助:

-keep class kotlin.*.* { *; }
-keep class kotlin.Metadata { *; }
-dontwarn kotlin.**
-keepclassmembers class **$WhenMappings {
    <fields>;
}
-keepclassmembers class kotlin.Metadata {
    public <methods>;
}

-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
  public static void checkParameterIsNotNull(java.lang.Object,java.lang.String);
}

lib-wrapper 的 build.gradle 文件中使用的插件

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'maven-publish'
apply plugin: 'org.jetbrains.dokka-android'

应用模块的 build.gradle 文件中使用的插件

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

任何帮助将不胜感激。提前致谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...