java - 如何让 ProGuard 保留整个(整个)类(带有字段和方法)而不使用 "-keep"

标签 java android scala proguard sbt-android-plugin

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

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

...,我使用ProGuard后,它会保留scala.collection.immutable.List仅具有 2 个方法的类,::::: .

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

最佳答案

我发现,做到这一点的唯一方法是确定在我编译的类中使用了哪些类和方法。

我通过Map[String, Set[String]]数据结构映射它们,其中键是类名,相应的Set值包含使用的所有方法来自那个类(class)。

之后,只需创建大量 -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
}

关于java - 如何让 ProGuard 保留整个(整个)类(带有字段和方法)而不使用 "-keep",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11357486/

相关文章:

java - 像 Microsoft 一样居中文本

java - Selenium WebDriver 循环不工作

java.lang.ClassCastException : android. text.SpannableString 无法转换为 java.lang.String

Scala模式匹配: Are parametrized extractor objects possible?

scala - Lift-json 将 'type' 字段的 json 提取到 case 类中

java - TestNG中类级别并行运行的配置

java - EditText 变量未在另一个类中分配

java - 如何正确使用 setFixedLengthStreamingMode(int)

java - Android 中是否有自定义 XML 样式属性的文档标准?

scala - Play 框架应用程序中的环境特定配置