Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在SBT中为Jan Berkel的Android插件添加更多类似的任务和设置?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将 Jan Berkel’s Android Plugin扩展到使用 SBTScala.

我有类似的动作和设置,如已定义的android:install-device和android:install-emulator.
让它们被称为android:dev-install-device和android:dev-install-emulator.

在AndroidKeys.scala中添加了新密钥:

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之前时,无论我调用android:install-device还是android:dev-install-device,都会执行AndroidInstall.

lazy val setTings: Seq[SetTing[_]] =
    AndroidFasTinstall.setTings ++
    inConfig(Android) (Seq (
      devStartDevice <<= devStartTask(false),devStartEmulator <<= devStartTask(true),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.

lazy val setTings: Seq[SetTing[_]] =
    AndroidInstall.setTings ++
    inConfig(Android) (Seq (
      startDevice <<= startTask(false),startEmulator <<= startEmulator dependsOn installEmulator
    )) ++
    AndroidFasTinstall.setTings ++
    inConfig(Android) (Seq (
      devStartDevice <<= devStartTask(false),devStartEmulator <<= devStartEmulator dependsOn devInstallEmulator
    ))

似乎最后添加内容总是涵盖了之前的那些内容.
有谁知道这个解决方案?

解决方法

这个问题需要一些额外的信息.

这是完整的源代码https://github.com/ioreskovic/android-plugin

显然,您已将AndroidInstall中的设置复制到AndroidFastInstall中的devSetTings.然后在AndroidLaunch中添加了新任务键.

您遇到的问题是,显然调用dev-install-device与install-device完全相同.这不是因一个人覆盖了另一个人的可见性(他们都是可见的,只是他们做同样的事情).问题是它们都依赖于同一组其他任务键,并且您将这些任务键更改两次 – 最后一次更改会影响之前的任务键.

更具体地说,您的问题在这里

lazy val setTings: Seq[SetTing[_]] =
  AndroidFasTinstall.devSetTings ++
  ...
  AndroidInstall.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任务的含义.

(我正在关注dev-install-device和install-device都可以依赖的proguard任务键,但是在设置和devSetTings中还有其他类似任务键的例子.)

要更好地理解这一点,您必须了解实际的设置和任务以及它们的工作方式:

> 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

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

有关如何实现任务的示例,请参阅“实现任务”和“基于其他键计算值”:<< =“. 它的要点是 – 首先通过以下方式声明和实现任务键:=和<< =. << =可以多次调用 - 每次调用<< =重新实现任务密钥. 为了解决您的问题,请为开发人员和常规版本的任务创建单独的proguard密钥.对于除了proguard之外的冲突任务,也要做同样的事情.

大佬总结

以上是大佬教程为你收集整理的如何在SBT中为Jan Berkel的Android插件添加更多类似的任务和设置?全部内容,希望文章能够帮你解决如何在SBT中为Jan Berkel的Android插件添加更多类似的任务和设置?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。