将自定义任务插入到SBT中的内置任务依赖项中

时间:2014-04-10 09:47:44

标签: android scala sbt proguard android-sdk-plugin

这是我的场景,我正在使用Scala / SBT / android-sdk-plugin来开发Android应用程序。在我的申请中,我打算使用ViewPagerIndicator

它已发布到maven资源库,因此我可以使用SBT的配置文件轻松地在我的项目中引用它。

但问题是它在自己的源代码树中包含了它的依赖项android-support-v4.jar,在编译项目期间它将被解压缩到target/apklibs/com.viewpagerindicator-library-2.4.1/libs/android-support-v4.jar

这会导致android:proguard崩溃,因为SBT本身已经从依赖项中导入了android-support-v4.jar。

我所做的是编写SBT任务来删除该文件,因此我的build.sbt现在如下所示:

import android.Keys._

import android.Dependencies.{apklib,aar}

android.Plugin.androidBuild

version := "0.0.1"

scalaVersion := "2.10.4"

organization := "idv.brianhsu.maidroid.ui"

libraryDependencies += "com.viewpagerindicator" % "library" % "2.4.1"

platformTarget in Android := "android-19"

proguardScala in Android := true

lazy val cleanupDuplicateJar = taskKey[Unit]("Remove duplicate jar")

cleanupDuplicateJar := {
  import java.io.File
  println("Remove target/apklibs/com.viewpagerindicator-library-2.4.1/libs/android-support-v4.jar")
  val file = new File("target/apklibs/com.viewpagerindicator-library-2.4.1/libs/android-support-v4.jar")
  file.delete()
}

它工作得很好,但我必须在每次cleanupDuplicateJar之前手动运行android:proguard

如何在运行cleanupDuplicateJar时自动运行android:proguard?更具体地说,在android:proguard的所有内置依赖项任务之后的时间点,如compile,以及android:progurad之前的自我。

或者我怎么能通过使用android-sdk-plugins的内置设置来声明要忽略哪个jar?

1 个答案:

答案 0 :(得分:0)

经过一番挖掘,我发现我可以通过在build.sbt设置以下配置来排除JAR文件。

proguardLibraries in Android += new java.io.File("target/apklibs/com.viewpagerindicator-library-2.4.1/libs/android-support-v4.jar")