Proguard 警告:找不到引用的类 scala。*

Posted

技术标签:

【中文标题】Proguard 警告:找不到引用的类 scala。*【英文标题】:Proguard warnings: can't find referenced class scala.* 【发布时间】:2011-12-22 00:44:49 【问题描述】:

升级到新的 android 工具后,我收到来自 Proguard 的以下警告:

Warning: scala.xml.EntityRef: can't find referenced class scala.xml.EntityRef$$anonfun$text$1
Warning: scala.xml.dtd.AttrDecl$: can't find referenced class scala.xml.dtd.AttrDecl$$anonfun$toString$1
Warning: scala.collection.mutable.LinkedListLike: can't find referenced class scala.collection.mutable.LinkedListLike$$anonfun$insert$1
Warning: scala.xml.NamespaceBinding: can't find referenced class scala.xml.NamespaceBinding$$anonfun$toString$1
Warning: scala.xml.NamespaceBinding: can't find referenced class scala.xml.NamespaceBinding$$anonfun$buildString$1
Warning: scala.xml.MetaData$: can't find referenced class scala.xml.MetaData$$anonfun$toString$1
Warning: scala.xml.MetaData$: can't find referenced class scala.xml.MetaData$$anonfun$toString1$1
Warning: scala.collection.immutable.BitSet: can't find referenced class scala.collection.immutable.BitSet$$anonfun$$plus$1
Warning: scala.collection.immutable.BitSet: can't find referenced class scala.collection.immutable.BitSet$$anonfun$$minus$1
Warning: scala.collection.mutable.FlatHashTable$$anonfun$checkConsistent$1: can't find referenced class scala.collection.mutable.FlatHashTable$$anonfun$checkConsistent$1$$anonfun$apply$mcVI$sp$1
Warning: scala.collection.immutable.RedBlack: can't find referenced class scala.collection.immutable.RedBlack$Empty
Warning: scala.collection.immutable.BitSet$: can't find referenced class scala.collection.immutable.BitSet$$anonfun$$plus$1
Warning: scala.collection.immutable.BitSet$: can't find referenced class scala.collection.immutable.BitSet$$anonfun$$minus$1
Warning: scala.xml.EntityRef$: can't find referenced class scala.xml.EntityRef$$anonfun$text$1
Warning: scala.Either: can't find referenced class scala.Either$$anonfun$joinLeft$1
... (more) ...

任何提示为什么 Proguard 找不到这些类?我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

如果您查看 scala-library.jar(版本 2.9.1)中列出的类的内部结构,您会发现它们引用了根本不存在的类。对我来说,这看起来像是一个编译器问题。但是,引用并不是处理和运行代码的基础,因此您可以让 ProGuard 使用此选项接受 jar:

-dontwarn scala.**

【讨论】:

这适用于哪个版本的 Proguard?我使用的是“Android”版本,它仍然显示 Scala 警告。 +1 似乎对-dontwarn scala.** 有帮助(两个星号)。 这个答案救了我的命。 +1。【参考方案2】:

你们建设得怎么样了?与蚂蚁?比特币?马文?您最初是从哪里获得设置的?

假设您使用 Ant 和 http://lamp.epfl.ch/~michelou/android/ 中描述的设置,那么您是否已将 build-scala.xml 和 proguard 模板更新为最近签入的模板以支持最新的 Android SDK?

【讨论】:

+1 感谢您的提示,我已经从他们的proguard.cfg 复制了 scala 特定规则。 (我使用的是我自己的build.xml,它更类似于 SDK 版本。)

以上是关于Proguard 警告:找不到引用的类 scala。*的主要内容,如果未能解决你的问题,请参考以下文章

Android ProGuard警告 - 找不到引用的类“com.zhihu.matisse.R $ plurals”

使用 Proguard 进行改造警告

从 Proguard 获取“未解决的引用”和“找不到超类”警告

Proguard和mixpanel问题

Proguard:找不到引用的类

ProGuard:找不到引用的类(到 R.java)