Proguard和Scala默认参数

时间:2014-09-09 08:21:55

标签: android scala proguard

我有一个Android Scala应用程序,它使用SBT + ProGuard进行构建。

在图书馆项目中我有这个:

package es.fcc.bibl.bd.sincr

class Columna[T] { ... }

class TablaBase {
     lazy val columnas: List[Columna[_]] = ....
}

trait Soporte {
    this: TablaBase =>

    def fabricaSoporte(w: Writer, cols: List[Columna[_]] = columnas) {
}

在我的应用代码中,我有这个:

package es.fcc.incidencias.bd

object sgiein extends TablaBase with Soporte { .... }    

在构建我的项目时,我得到了这些神秘的错误:

Warning: es.fcc.incidencias.bd.sgiein: can't find referenced method 'void es$fcc$bibl$bd$sincr$TablaBaseSincronizada$_setter_$cols_$eq(scala.collection.immutable.List)' in program class es.fcc.incidencias.bd.sgiein$
Warning: es.fcc.incidencias.bd.sgiein: can't find referenced method 'scala.collection.immutable.List cols()' in program class es.fcc.incidencias.bd.sgiein$

     Your input classes appear to be inconsistent.
     You may need to recompile the code.
(http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember)

问题与参数cols的默认值有关。 如果我删除了那个参数,那么一切都可以构建好。

我试图将ProGuard选项更改为这些,但没有运气:

-keepclassmembers class es.fcc.bibl.bd.sincr.TablaBaseSincronizada* {
    ** *(**);
}
-keepclassmembers class es.fcc.incidencias.bd.* {
    ** *(**);
}

我不明白为什么我遇到这个问题。

1 个答案:

答案 0 :(得分:0)

我得出的结论是,可以安全地忽略这些错误。

ProGuard必须是一些内部错误。

出于此目的,在-dontwarn配置中使用ProGuard指令。