似乎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
答案 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