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
文件。绕过AndroidBuilder
在sbt-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