gpt4 book ai didi

android - 如何在 SBT 中向 Jan Berkel 的 Android 插件添加更多类似的任务和设置?

转载 作者:太空宇宙 更新时间:2023-11-03 10:52:18 26 4
gpt4 key购买 nike

我正在尝试扩展 Jan Berkel's Android Plugin对于Scala使用 SBT .

我有类似的操作和设置,例如已定义的 android:install-deviceandroid:install-emulator .
让他们被称为android:dev-install-deviceandroid: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
))

问题是,如果我想让我自己的任务可用,我必须注释掉原始的标准任务,而我不想这样做。

有什么我忽略的吗?


更新:
我尝试了不同的设置顺序。

AndroidFastInstallAndroidInstall 之前, 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
))

AndroidInstallAndroidFastInstall 之前, 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 ++
...

看看这些里面有什么settingsdevSettings序列:

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-deviceinstall-device取决于。第一个proguardTask方法在AndroidFastInstall , 第二个在 AndroidInstall他们做不同的事情。由于您最后调用第二个,因此它重新定义了 proguard 的内容任务手段。

为了更好地理解这一点,您必须了解真正的设置和任务是什么以及它们是如何工作的:

有关如何声明任务 key 的示例,请参阅“定义 key ”。

请参阅“实现任务”和“根据其他键的值计算值:<<=”了解如何实现任务的示例。

它的要点是 - 任务 key 首先声明并稍后通过 proguard 实现和 dev-install-device . install-device可能会被多次调用 - 每次调用 settings重新实现任务键。

要解决您的问题,请创建单独的 devSettings := 的键和你的任务的常规版本。对<<=以外的冲突任务做同样的事情。 .

关于android - 如何在 SBT 中向 Jan Berkel 的 Android 插件添加更多类似的任务和设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11466836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com