大佬教程收集整理的这篇文章主要介绍了如何在SBT中为Jan Berkel的Android插件添加更多类似的任务和设置?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有类似的动作和设置,如已定义的android:install-device和android:install-emulator.
让它们被称为android:dev-install-device和android:dev-install-emulator.
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 ++ ...
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,请注明来意。