1

Scala Android プロジェクトがあり、apk でこれらのメソッドを使用している場合...

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

...、ProGuardを使用した後、scala.collection.immutable.List2つのメソッドのみでクラスを保持し:::::.

ProGuard には、現在使用されていなくても、すべてのメソッドとフィールドをクラス内に保持するオプションがありますが、ProGuard にこれを送信する必要はありません。-keep class scala.collection.immutable.List {*;}

4

1 に答える 1

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
}
于 2012-07-15T09:26:11.270 に答える