如何使ProGuard保留整个(整个)类(使用字段和方法)而不使用“-keep”

时间:2012-07-06 07:11:12

标签: java android scala proguard sbt-android-plugin

如果我有一个Scala Android项目,我在我的apk中使用这些方法......

scala.collection.immutable.List#::
scala.collection.immutable.List#:::

...,在我使用ProGuard后,它只会使用scala.collection.immutable.List::两种方法保持:::课程。

ProGuard中是否有选项可以将所有方法和字段保留在类中,即使它们当前未使用,但未发送此ProGuard:-keep class scala.collection.immutable.List {*;}

1 个答案:

答案 0 :(得分:0)

我发现对我来说唯一的方法是确定在我编译的类中使用了哪些类和方法。

我通过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("}\n\n")
    }

    sb.toString
}