如何使用sbt-android使用RenderScript文件构建scala android项目?

时间:2016-08-04 18:26:48

标签: android scala renderscript sbt-android-plugin sbt-android

似乎sbt-android忽略了RenderScript文件的存在,并且没有生成通常由gradle builds / Android Studio生成的ScriptC_xxx java类[ UPDATE:这是假的,se下面的更新说明]。由于这个问题,sbt-android构建失败了,因为使用我们需要的脚本来引用生成的ScriptC_xxx类,这在构建时会出现以下错误:

[error] apackage/YYYClass.java:55: cannot find symbol
[error]   symbol:   class ScriptC_xxx
[error]   location: class apackage.YYYClass
[error]         ScriptC_xxx xxxScript = new ScriptC_xxx(rs);

现有项目生成的.sbt文件(通常由gradle编译)具有从build.gradle文件生成的RenderScript的明显必要配置:

rsTargetApi in Android := "18",
rsSupportMode in Android := rsSupportMode.value || true

我缺少能够用sbt-android编译包含renderscript的android项目的东西吗?

更新:我意识到脚本的java类是正确生成的,但不知何故使用这些生成类的类无法找到它们,所以我可能遇到类路径配置问题。

这是当前的文件结构:

./ asubmodule / SRC /主/ RS / xxx.rs (使用包声明#pragma rs java_package_name(apackage.scripts)

./ asubmodle / SRC /主/爪哇/ apackage / YYYClass.java

./ asubmodule /目标/机器人/生成/源极/机器人/支撑/ V7 /程序兼容性/ R.java

./ asubmodule /目标/机器人/生成/源极/ apackage /脚本/ ScriptC_xxx.java

1 个答案:

答案 0 :(得分:2)

不幸的是,似乎com.android.builder.core.AndroidBuilder不再为已处理的renderscript源生成.d个文件。在AndroidBuilder中绕过com.android.sdklib.build.RenderScriptProcessor以使用sbt-android可以恢复确定生成的文件所需的.d个文件。但这将是未来版本sbt-android的解决方案。

要暂时解决您的问题,您可以将以下内容添加到build.sbt

sourceGenerators in Compile += Def.task {
  implicit output = outputLayout.value
  val layout = projectLayout.value
  (layout.generatedSrc ** "ScriptC_*.java").get ++ (layout.generatedSrc ** "*BitCode.java").get
}.taskValue

由于听起来您正在使用sbt-android-gradle,因此您只需创建一个新文件build.sbt并将上述内容投入(不要编辑00-gradle-generated.sbt

更新:这将在下一版sbt-android https://github.com/scala-android/sbt-android/commit/ec09a55233aabd50e7df0085b10c567e38b616d3

中修复