1

If I have a Scala Android project and I use these methods in my apk...

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

..., after I use ProGuard on it, it will keep scala.collection.immutable.List class with only 2 methods, :: and :::.

Is there an option in ProGuard to keep ALL methods and fields inside a class, even though they aren't currently used, but without sending ProGuard this: -keep class scala.collection.immutable.List {*;}

ioreskovic
  • 5,531
  • 5
  • 39
  • 70

1 Answers1

0

I found out that the only way for me to do that is to determine which classes and methods are being used in my compiled classes.

I mapped them via Map[String, Set[String]] data structure, where the key is the class name and the corresponding Set value contains all the methods used from that class.

After that, it's just a matter of creating lots of -keep argumetns:

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
}
ioreskovic
  • 5,531
  • 5
  • 39
  • 70