From 81ae9ea8f0431f2aa0ed0f8bc9fb047b5af88ce8 Mon Sep 17 00:00:00 2001 From: mochizuki shinya Date: Mon, 10 Sep 2012 13:18:53 +0900 Subject: [PATCH 1/2] prevent other projects are broken by GlobalScope --- src/main/scala/PlainJavaProject.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/scala/PlainJavaProject.scala b/src/main/scala/PlainJavaProject.scala index dd44cea..225e37a 100644 --- a/src/main/scala/PlainJavaProject.scala +++ b/src/main/scala/PlainJavaProject.scala @@ -6,12 +6,13 @@ import AndroidKeys._ object PlainJavaProject { lazy val settings: Seq[Setting[_]] = inConfig(Android) (Seq( useProguard := false, - autoScalaLibrary in GlobalScope := false, manifestPath <<= (baseDirectory, manifestName) map((s,m) => Seq(s / m)) map (x=>x), proguardOptimizations := Seq.empty, mainResPath <<= (baseDirectory, resDirectoryName) (_ / _) map (x=>x), mainAssetsPath <<= (baseDirectory, assetsDirectoryName) (_ / _), javaSource in Compile <<= (baseDirectory) (_ / "src") ) + ) ++ Seq( + autoScalaLibrary := false ) } From 1cc38a23865d712559098b6efb68cd4bf6d5f98f Mon Sep 17 00:00:00 2001 From: mochizuki shinya Date: Mon, 10 Sep 2012 13:44:14 +0900 Subject: [PATCH 2/2] add resourceContainingJars key for ApkBuilder Make more precisely and customizable resource handling. For example, when I don't want to use proguard to unmanaged jars. useProguard in Android := true, dxInputs in Android <+= (unmanagedBase) map (x => x), Now, 'dx' command can handle directories properly, but ApkBuilder could not so. Because ApkBuilder requires that dxInputs contains files. Consequently, generated apk contains classes but does not contain resources. --- src/main/scala/AndroidInstall.scala | 3 ++- src/main/scala/AndroidKeys.scala | 1 + src/main/scala/ApkBuilder.scala | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/scala/AndroidInstall.scala b/src/main/scala/AndroidInstall.scala index b923667..0f0c8b3 100644 --- a/src/main/scala/AndroidInstall.scala +++ b/src/main/scala/AndroidInstall.scala @@ -190,6 +190,7 @@ object AndroidInstall { case None => (classDirectory +++ proguardInJars --- scalaInstance.libraryJar) get } }, + resourceContainingJars <<= dxInputs map (_ ** "*.jar" get), cleanApk <<= (packageApkPath) map (IO.delete(_)), @@ -198,7 +199,7 @@ object AndroidInstall { packageConfig <<= (toolsPath, packageApkPath, resourcesApkPath, classesDexPath, - nativeLibrariesPath, managedNativePath, dxInputs, resourceDirectory) map + nativeLibrariesPath, managedNativePath, resourceContainingJars, resourceDirectory) map (ApkConfig(_, _, _, _, _, _, _, _)), packageDebug <<= packageTask(true), diff --git a/src/main/scala/AndroidKeys.scala b/src/main/scala/AndroidKeys.scala index 4a9046e..e5d4703 100644 --- a/src/main/scala/AndroidKeys.scala +++ b/src/main/scala/AndroidKeys.scala @@ -126,6 +126,7 @@ object AndroidKeys { val proguard = TaskKey[Option[File]]("proguard", "Optimize class files.") val dxInputs = TaskKey[Seq[File]]("dx-inputs", "Input for dex command") val dx = TaskKey[File]("dx", "Convert class files to dex files") + val resourceContainingJars = TaskKey[Seq[File]]("resource-containing-jars") val makeAssetPath = TaskKey[Unit]("make-assest-path") diff --git a/src/main/scala/ApkBuilder.scala b/src/main/scala/ApkBuilder.scala index c1b20bf..5e0dc5f 100644 --- a/src/main/scala/ApkBuilder.scala +++ b/src/main/scala/ApkBuilder.scala @@ -10,7 +10,7 @@ case class ApkConfig( classesDexPath: File, nativeLibrariesPath: File, managedNativePath: File, - dexInputs: Seq[File], + resourceContainingJars: Seq[File], resourceDirectory: File ) @@ -47,7 +47,7 @@ class ApkBuilder(project: ApkConfig, debug: Boolean) { setDebugMode(builder, debug) addNativeLibraries(builder, project.nativeLibrariesPath, null) addNativeLibraries(builder, project.managedNativePath, null) - for (file <- project.dexInputs; if file.isFile) + for (file <- project.resourceContainingJars; if file.isFile) addResourcesFromJar(builder, file) addSourceFolder(builder, project.resourceDirectory) sealApk(builder)