在我的项目构建定义中,Android范围内的SettingKey useProguard被设置为true。这就是我默认想要的。然而,当我执行一个特定的任务时,我希望useProguard为false。Android作用域中的所有内容都来自sbt-android-plugin。
我不知道怎样才能最好地解决这个问题。据我所知,似乎命令可以完成任务,因为它可以执行与您当前会话看到的状态不同的任务。我尝试创建这样一个命令,如下所示:
def buildWithoutProguard = Command.command("build-without-proguard") { state =>
val extracted = Project.extract(state)
import extracted._
val transformed = session.mergeSettings :+ (useProguard in Android := false)
val newStructure = Load.reapply(transformed, structure)
val newState = Project.setProject(session, newStructure, state)
Project.evaluateTask(buildAndRun, newState)
state
}我将该命令附加到我的项目设置中,然后运行‘build- task proguard’命令来执行所需的buildAndRun任务。然而,useProguard仍然是真的,而不是我期望的假。
首先,这整个方法让我感觉很重。假设在这里不能更改sbt-android-plugin,那么我还能怎么解决这个问题呢?
第二,为什么这种方法不能按原样工作?
发布于 2012-01-19 03:38:13
根据我对您问题的理解,您希望依赖项的设置根据依赖项的不同而有所不同。这没有意义--依赖关系要么得到满足,要么得不到满足,依赖于它的东西不会出现在等式中。
我对你的解决方案似乎很满意。另一种选择是创建两个项目,指向相同的源代码,但具有不同的proguard设置和不同的目标,因此一个项目将使用proguard构建,而另一个项目不使用proguard,并且两个项目都将保持其状态。然后你可以做任何你想做的事情,只要切换项目即可。
https://stackoverflow.com/questions/8904568
复制相似问题