【发布时间】:2017-03-04 17:12:40
【问题描述】:
我想在使用Scala on android 构建的为android 编译的Scala 应用程序中使用Scala (2.11) 反射包的运行时镜像。
我能够调整 ProGuard 选项以使其包含所需的 Scala 类。但是,当我尝试获取镜像实例时:
universe.runtimeMirror(this.getClass.getClassLoader)
(确实在universe的惰性计算过程中失败了)
应用程序在运行时崩溃:
java.lang.NoClassDefFoundError: Failed resolution of: Ljava/rmi/Remote;
at scala.reflect.internal.Definitions$DefinitionsClass.RemoteInterfaceClass$lzycompute(Definitions.scala:370)
at scala.reflect.internal.Definitions$DefinitionsClass.RemoteInterfaceClass(D efinitions.scala:370)
at scala.reflect.runtime.JavaUniverseForce$class.force(JavaUniverseForce.scal a:255)
at scala.reflect.runtime.JavaUniverse.force(JavaUniverse.scala:16)
at scala.reflect.runtime.JavaUniverse.init(JavaUniverse.scala:147)
at scala.reflect.runtime.JavaUniverse.<init>(JavaUniverse.scala:78)
at scala.reflect.runtime.package$.universe$lzycompute(package.scala:17)
at scala.reflect.runtime.package$.universe(package.scala:17)
这次崩溃对我来说是预期的,因为它不是:
这是预期的,因为java.rmi 不是 Android API 的一部分,我应该预计任何尝试加载其类的代码都会崩溃。
出乎意料因为我不知道Scala的反射包使用java.rmi
我已经追踪到需要rmi 的代码,即JavaUniverse(JavaUniverse 类中混合的特征)force 方法:
...
definitions.RemoteInterfaceClass
...
这导致DefinitionsClass:
lazy val RemoteInterfaceClass = requiredClass[java.rmi.Remote]
我认为这在 Android 中不能使用 Scala 反射是不是错了? 如果是,有什么办法可以解决这个问题?
【问题讨论】:
-
您找到解决此问题的方法了吗?
标签: android scala reflection dependencies rmi