- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试扩展 Jan Berkel's Android Plugin对于Scala使用 SBT .
我有类似的操作和设置,例如已定义的 android:install-device
和 android:install-emulator
.
让他们被称为android:dev-install-device
和 android:dev-install-emulator
.
我在 AndroidKeys.scala
中添加了新 key :
val devInstallDevice = TaskKey[Unit]("dev-install-device")
val devInstallEmulator = TaskKey[Unit]("dev-install-emulator")
val devStartDevice = TaskKey[Unit]("dev-start-device", "Start package on device after installation")
val devStartEmulator = TaskKey[Unit]("dev-start-emulator", "Start package on emulator after installation")
我还在AndroidLaunch.scala
中添加了东西:
lazy val settings: Seq[Setting[_]] =
//AndroidInstall.settings ++
AndroidFastInstall.settings ++
inConfig(Android) (Seq (
devStartDevice <<= startTask(false),
devStartEmulator <<= startTask(true),
//startDevice <<= startTask(false),
//startEmulator <<= startTask(true),
devStartDevice <<= devStartDevice dependsOn devInstallDevice,
devStartEmulator <<= devStartEmulator dependsOn devInstallEmulator
//startDevice <<= startDevice dependsOn installDevice,
//startEmulator <<= startEmulator dependsOn installEmulator
))
问题是,如果我想让我自己的任务可用,我必须注释掉原始的标准任务,而我不想这样做。
有什么我忽略的吗?
更新:
我尝试了不同的设置顺序。
当 AndroidFastInstall
在 AndroidInstall
之前, AndroidInstall
无论我调用 android:install-device
都会执行或 android:dev-install-device
.
lazy val settings: Seq[Setting[_]] =
AndroidFastInstall.settings ++
inConfig(Android) (Seq (
devStartDevice <<= devStartTask(false),
devStartEmulator <<= devStartTask(true),
devStartDevice <<= devStartDevice dependsOn devInstallDevice,
devStartEmulator <<= devStartEmulator dependsOn devInstallEmulator
))++
AndroidInstall.settings ++
inConfig(Android) (Seq (
startDevice <<= startTask(false),
startEmulator <<= startTask(true),
startDevice <<= startDevice dependsOn installDevice,
startEmulator <<= startEmulator dependsOn installEmulator
))
当 AndroidInstall
在 AndroidFastInstall
之前, AndroidFastInstall
无论我调用 android:install-device
都会执行或 android:dev-install-device
.
lazy val settings: Seq[Setting[_]] =
AndroidInstall.settings ++
inConfig(Android) (Seq (
startDevice <<= startTask(false),
startEmulator <<= startTask(true),
startDevice <<= startDevice dependsOn installDevice,
startEmulator <<= startEmulator dependsOn installEmulator
)) ++
AndroidFastInstall.settings ++
inConfig(Android) (Seq (
devStartDevice <<= devStartTask(false),
devStartEmulator <<= devStartTask(true),
devStartDevice <<= devStartDevice dependsOn devInstallDevice,
devStartEmulator <<= devStartEmulator dependsOn devInstallEmulator
))
看起来最后添加的总是覆盖之前添加的那些的可见性。有谁知道解决这个问题的方法吗?
最佳答案
这个问题需要一些额外的信息。
这是完整的源代码:https://github.com/ioreskovic/android-plugin
显然,您已经复制了 settings
来自 AndroidInstall
至 devSettings
在 AndroidFastInstall
.然后,您在 AndroidLaunch
中添加了新的任务 key .
您遇到的问题显然是调用 dev-install-device
做与 install-device
完全相同的事情.这不是因为一个覆盖了另一个的可见性(它们都是可见的,只是它们做同样的事情)。问题在于它们都依赖于同一组其他任务键,并且您更改了这些任务键两次 - 最后一次更改影响了之前的更改。
更具体地说,你的问题在这里:
lazy val settings: Seq[Setting[_]] =
AndroidFastInstall.devSettings ++
...
AndroidInstall.settings ++
...
看看这些里面有什么settings
和 devSettings
序列:
AndroidFastInstall
:
lazy val devSettings: Seq[Setting[_]] = inConfig(Android) (devInstallerTasks ++ Seq (
uninstallEmulator <<= devUninstallTask(emulator = true),
uninstallDevice <<= devUninstallTask(emulator = false),
...
>>> proguard <<= proguardTask <<<
AndroidInstall
:
lazy val settings: Seq[Setting[_]] = inConfig(Android) (installerTasks ++ Seq (
uninstallEmulator <<= uninstallTask(emulator = true),
uninstallDevice <<= uninstallTask(emulator = false),
...
>>> proguard <<= proguardTask <<<
在这里您重新定义了一个名为 proguard
的任务键这两个 dev-install-device
和 install-device
取决于。第一个proguardTask
方法在AndroidFastInstall
, 第二个在 AndroidInstall
他们做不同的事情。由于您最后调用第二个,因此它重新定义了 proguard
的内容任务手段。
为了更好地理解这一点,您必须了解真正的设置和任务是什么以及它们是如何工作的:
https://github.com/harrah/xsbt/wiki/Getting-Started-Basic-Def
https://github.com/harrah/xsbt/wiki/Getting-Started-More-About-Settings
https://github.com/harrah/xsbt/wiki/Getting-Started-Custom-Settings
有关如何声明任务 key 的示例,请参阅“定义 key ”。
请参阅“实现任务”和“根据其他键的值计算值:<<=”了解如何实现任务的示例。
它的要点是 - 任务 key 首先声明并稍后通过 proguard
实现和 dev-install-device
. install-device
可能会被多次调用 - 每次调用 settings
重新实现任务键。
要解决您的问题,请创建单独的 devSettings
:=
的键和你的任务的常规版本。对<<=
以外的冲突任务做同样的事情。 .
关于android - 如何在 SBT 中向 Jan Berkel 的 Android 插件添加更多类似的任务和设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11466836/
我有兴趣弄清楚 sbt.TaskKey 或 sbt.SettingKey 的一些操作是做什么的 n + "-assembly-" + v + ".jar" } 此时你必须以某种方式知道 jarN
是否可以在 SBT 中注释掉整个文本 block ,类似于 /* Java 样式 block 注释 */ 语法?我遇到了一些构建错误,只能使用多个单行注释。 我看到的构建错误是解析表达式时出错。确保设
我在 Windows 上运行 SBT 1.1.1。 如果我将以下行放在 build.sbt 中,我的构建就可以了: credentials += Credentials(Path.userHome /
Maven 有 optional dependency概念。在 SBT 文档中搜索可选依赖项仅找到 "However, sometimes we have optional dependencies
我有一个 sbt 项目,其中包含大量子项目和外部库依赖项。 build.sbt是这样的: val extlib1 = "xy.xxx" % "lib1" % "1.0+" val extlib2 =
在编译我的 SBT 项目定义(即 project 目录中的文件)时,我收到了弃用和功能警告。 SBT 版本是 0.13.0。 我没有通过设置 scalacOptions := Seq("-featur
根据经验, build.sbt 中声明的库依赖项的顺序似乎很重要。这是真的?如果是这样,值得在 sbt library management 中简要提及。文档的部分。 最佳答案 是的,列出的顺序是用于
我希望我遗漏了一些东西,因为当程序在 sbt 中运行时,按键似乎不会回显到屏幕上。 下面是一个例子: object ConsoleTest extends App { println("Enter
[SBT 文档] 说 Put settings in a .sbt file in a project that isn't checked into version control, such as
这个问题在这里已经有了答案: How to use sbt from behind proxy? (16 个回答) 7年前关闭。 我试图在防火墙后面运行 sbt,但我无法禁用它。但不知何故,我可以获得
我刚刚偶然发现了 sbt-pack插入。开发流好像steady .这让我感到惊讶,因为我认为(引用 sbt-pack 的标题)唯一的插件是“创建可分发的 Scala 包”。是 sbt-assembly
如何配置 sbt 以使用代理? 例如,我的构建定义需要连接到 GitHub,指定 http.proxy、http.proxyPort、user 的连接参数,和密码。 我如何将这些设置传递给 sbt?
我似乎无法找到下面看到的第一次驱逐的根本原因。如下所示,运行 evicted 不会提供与其相关的详细信息。 这一切都是在添加到 project/plugins.sbt 之后发生的:libraryDep
我正在用 sbt 0.11.2 创建一个 Scala 项目和 sbt-idea,我得到了 UNRESOLVED DEPENDENCIES在 gen-idea任务。 我刚刚安装了 sbt(下载了 jar
对于使用 sbt 0.13.5 成功构建的项目(尝试升级到 0.13.6,仍然无法正常工作),我们在构建服务器上突然出现故障(typesafe 和 maven 存储库通过我们的内部 Nexus 存储库
在 unix shell 中试试这个: git clone git@github.com:jsuereth/sbt-in-action-examples.git cd sbt-in-action-ex
我想知道什么时候应该使用sbt assembly,什么时候应该使用sbt compile && sbt package? 我正在使用 Intellij IDEA 在我的本地计算机上编写一个程序,并使用
有没有人使用 sbt-aether-deploy 将 sbt-native-packager 生成的工件(在我的例子中是 tgz)发布到 nexus 仓库? (我需要这个用于带时间戳的快照,特别是 n
我正在尝试在使用 SBT 版本 0.13.5 的项目中启用自定义 AutoPlugin。当我尝试在我的 build.sbt 中启用插件时通过: val aProject = project.in(fi
我正在安装Apache Spark它使用自己的 SBT 副本来进行设置。 我在 VirtualBox 虚拟机中使用 Linux Mint。 以下是我从 Spark 目录 spark-0.9.0-inc
我是一名优秀的程序员,十分优秀!