如何使用sbt-android构建带有RenderScript文件的scala-android项目



sbt android似乎忽略了RenderScript文件的存在,并且没有生成通常由gradle builds/android Studio生成的ScriptC_xxx java类[UPDATE:这是false,请参阅下面的更新说明]。由于这个问题,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编译(具有RenderScript的明显必要配置,该配置是从build.gradle文件生成的:

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

我缺少什么能够用sbt-android编译包含android项目的renderscript?

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

这是当前的文件结构:

/asubmodule/src/main/rs/xxxx.rs(使用包声明#pragma rs java_package_name(apackage.scripts)(

/asubmodle/src/main/java/apackage/YYYClass.java

/asubmodule/target/android/regenerated/source/android/support/v7/appcompat/R.java

/asubmodule/target/android/regenerated/source/apackage/scripts/ScriptC_xxx.java

不幸的是,com.android.builder.core.AndroidBuilder似乎不再为已处理的渲染脚本源生成.d文件。绕过AndroidBuildersbt-android中使用com.android.sdklib.build.RenderScriptProcessor可以恢复确定生成的文件所需的.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

相关内容

  • 没有找到相关文章

最新更新