我正在使用 R8 来最小化我的库,并且伴生对象的方法不会被选取为主类的引用。伴随对象和方法仍然存在,只是我无法在不引用伴随对象的情况下调用它们。
// Works
MyClass.Companion.foo()
// Errors with an unresolved reference.
MyClass.foo(this)
我的 proguard 规则:
-keep @interface kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations
-keep public class com.example.MyClass {
public <methods>;
public static <methods>;
}
-keep public class com.example.MyClass$Companion {
public <methods>;
}
伴随方法也被标记为
@JvmStatic
,这些静态方法存在于生成的代码中,但 kotlin 编译器也无法识别它们。
这是由于启用 minify 后您的模型变得模糊。要解决此问题,请将模型包的路径添加到 Proguard 规则中。
这样的东西应该有效:
-keep class your.package.name.model.** { *; }
-keepattributes Signature
-keepattributes *Annotation*
-keep class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
private void readObjectNoData();
Object writeReplace();
Object readResolve();
}