Proguard/R8 最小化后,Kotlin 静态方法无法识别?

问题描述 投票:0回答:1

我正在使用 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 编译器也无法识别它们。

android kotlin proguard android-r8
1个回答
0
投票

这是由于启用 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();
}
© www.soinside.com 2019 - 2024. All rights reserved.