问题描述
运行 proguard 后,当我检查新项目中的混淆 jar 上是否有可用的方法时,这取决于最后一个。所需的类在那里,但我无法访问伴随对象。
图书馆方面
trait KeepOpen
trait KeepOpenObj
trait MyTrait extends KeepOpen {
def a: Int
}
object MyTrait extends KeepOpenObj {
def apply(arg: Int): MyTrait = new MyTrait { val a = 1 }
}
取决于项目测试。
import aaa.MyTrait
val arg = 1
def myTraitImpl: MyTrait = ??? // Type is well infered
def myTraitImpl2: MyTrait = MyTrait(arg) // MyTrait companion object is not detected preventing apply method usage
// But this works
def myTraitImpl3: MyTrait = (new MyTrait$)(arg) // Works
以下是我的课程保留选项:
"-keep !final class * extends aaa.KeepOpen","-keep !final class * extends aaa.KeepOpen {*;}","-keep class * implements aaa.KeepOpenObj","-keep class * implements aaa.KeepOpenObj {*;}",
库的特性继承自 KeepOpen,对象包括伴随对象扩展 KeepOpenObj。
探索jar non obfuscate 和obfuscate,它们都显示了两个文件MyTrait 和MyTrait$ 带有期望的方法,但在混淆的情况下不可能使用伴随对象。
此外,像 main 那样的非伴随对象似乎可以正常工作。
更新
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
但不幸的是,我在编译时遇到了以下错误。
val myTrait = MyTrait(arg) // error : class aaa.MyTrait is not a value
如何以与非混淆 jar 相同的方式访问伴随对象?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)