SBT Android-Plugin 中“proguardInJars”的语义是啥?

Posted

技术标签:

【中文标题】SBT Android-Plugin 中“proguardInJars”的语义是啥?【英文标题】:What are the semantics of "proguardInJars" in SBT Android-Plugin?SBT Android-Plugin 中“proguardInJars”的语义是什么? 【发布时间】:2012-07-04 17:19:12 【问题描述】:

在 SBT android 插件中,在 proguardTask 中,有一个值 proguardInJars。 在我的简单测试项目中,它包含C:\Users\Administrator\.sbt\boot\scala-2.9.1\lib\scala-library.jar

然后将它与我自己编译的类组合成另一个值inJars

但是,它是通过附加一些东西来组合的。这是来自 jberkel/android-plugin 的代码:

val manifestr = List("!META-INF/MANIFEST.MF", "R.class", "R$*.class", "TR.class", "TR$.class", "library.properties")
val sep = JFile.pathSeparator
val inJars = ("\"" + classDirectory.absolutePath + "\"") +: proguardInJars.map("\"" + _ + "\""+manifestr.mkString("(", ",!**/", ")"))

我想知道是否有人知道添加的内容的语义。 另外,如果我要将 inJars 分解为单独的值,我是否仍需要将该清单内容附加到 proguardInJars 以使 proguardTask 正常运行?

【问题讨论】:

【参考方案1】:

此时,android 插件正在为 ProGuard 准备 injars 命令行参数。 ProGuard 使用通用类路径来确定 jar 中的哪些文件要考虑,哪些不考虑,这是 jar 中文件匹配器的一种形式。

例如,.../scala-library.jar(!META-INF/MANIFEST.MF,!**/R.class,!**/R$*.class,!**/TR.class,!**/TR$.class,!**/library.properties) 表示不应将文件 R/TR.class 或以 R$/TR$ 开头的类文件 (!) 作为输入考虑。

看这里:

http://proguard.sourceforge.net/index.html#manual/usage.html

单击class_path 以显示有关 ProGuard 使用的通用类路径格式的更多详细信息。

【讨论】:

以上是关于SBT Android-Plugin 中“proguardInJars”的语义是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 scala 和 android-plugin 的 Proguard:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:160

prog1,2,3

为 Automake 文件中的一个程序设置 Preproccessor 指令

prog vs. let in LISP 性能差异

在“sbt-native-packager”脚本中使用除“sbt run”之外的其他 sbt 命令。例如:“sbt flywayMigrate”

如何在 sbt-plugin 中使用 sbt-assembly?