如果我有一个Scala Android项目,并且我在我的apk中使用这些方法。。。
scala.collection.immutable.List#::
scala.collection.immutable.List#:::
在我对它使用ProGuard后,它将保留scala.collection.immutable.List
类,只有两个方法,::
和:::
。
ProGuard中是否有一个选项可以将ALL方法和字段保留在类中,即使它们当前没有使用,但不发送ProGuard这个:-keep class scala.collection.immutable.List {*;}
我发现唯一能做到这一点的方法是确定在我编译的类中使用哪些类和方法。
我通过Map[String, Set[String]]
数据结构映射了它们,其中键是类名,相应的Set
值包含该类中使用的所有方法。
之后,只需要创建大量-keep
论证:
def getProGuardKeepArgs(allDeps: MMap[String, MSet[String]]): String = {
var sb = new StringBuilder()
for ((clazz, methods) <- allDeps) {
sb.append("-keep class " + clazz + " {n")
for (method <- methods) {
sb.append(" *** " + method + "(...);n")
}
sb.append("}nn")
}
sb.toString
}