如何使用Renderscript支持库和Gradle

33
6个回答

127

使用Android Studio:

为了android gradle插件v0.14+,请将以下值添加到build.gradle中。

android {
    ...
    defaultConfig {
        ...
        renderscriptTargetApi 19
        renderscriptSupportModeEnabled true
    }
    ...
}

对于 Android Gradle 插件的旧版本(v0.13.3及以下版本)

android {
        ...
        defaultConfig {
            ...
            renderscriptTargetApi 19
            renderscriptSupportMode true
        }
        ...
    }

完成后,您可以在应用程序的任何地方使用android.support.v8.renderscript。 库jar和二进制文件会自动包含在其中。


2
这就是正确的方法。不再需要复杂的设置了。 - Patrick
1
在我的AS 0.8.9上也奏效了,但我必须将.rs文件放置在一个“rs”文件夹内(位于java,res和清单的同一级别),以便生成Java代码。 - Aladin Q
10
随着新版本Gradle(如0.14.0)的推出,我认为您需要将renderscriptSupportMode更改为renderscriptSupportModeEnabled - Charles Madere
感谢@for3st,我们在答案中也有较新版本的正确字段名称。 - Austyn Mahoney
@AladinQ 文件/文件夹操作并不是必需的。所有二进制文件都由构建工具放置在正确的文件夹中。 - Austyn Mahoney
显示剩余8条评论

16
Gradle针对Android现在具有Renderscript v8支持,只需在你的构建脚本中加入两行代码即可。详见Austyn Mahoney的答案。保留原始回答以作历史记录。

旧版回答:

Gradle支持本地RS编译,但不支持RS支持库。原因是相比其他任何支持库,RS支持库太过复杂了。RS支持库实际上是一个Java支持库,由支持该Java库的一组本机库、用于编译每个脚本的其他本机库以及用于生成标准LLVM位代码和脚本的本机库的备用工具链组成。目前只有ADT和Ant支持,Gradle还未支持。

但是,你已经可以在Gradle中使用RS支持库的某些部分了。如果要使用RS intrinsics,可以链接支持库的Java部分(sdk/build-tools/android-4.3/lib/renderscript/renderscript-v8.jar)和本机组件(sdk/build-tools/android-4.3/lib/renderscript/packaged/< arch >/*.so),然后就可以设置好了。

我知道Gradle支持支持库的支持将在不久的将来到来,但我没有确定的估算时间可以分享。


1
感谢您的解释。我现在将使用Java模糊函数。这样更容易适应我们的设置,半径可以是任何大小。期待Gradle支持的到来。 - Janusz
4
请注意,现在已经支持此功能。请参见下面的另一个答案,了解在build.gradle中启用此功能的语法。 - Xavier Ducrohet
只是一个小提示,对于任何带有flavors等的项目,请确保包含以下代码:sourceSets { main { renderscript.srcDirs = ['src'] } } - AllDayAmazing

6

根据Tim的提示,我成功地将v8支持与Gradle配合使用,以下是我的项目布局:

enter image description here

我创建了libs文件夹,并在SDK文件夹下复制了Tim提到的文件。这里是我的build.gradle更改:

dependencies {
    compile files('libs/renderscript-v8.jar')
}

android {

    tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
        pkgTask -> pkgTask.jniFolders = new HashSet<File>();
            pkgTask.jniFolders.add(new File(projectDir, 'libs'));
    }
}

之后,我可以导入android.support.v8.renderscript.*并使用内置函数。

根据adt-dev邮件列表上的Xavier Ducrohet的说法,在Gradle插件的下一个版本中将不再需要这个。 - tad
@tad 很好,它会很快发生吗? - X.Y.
不确定他们的时间表。Xav说:“这个问题已经被解决了,并将在下一个插件中发布(应该很快)”。 - tad
1
我认为这个问题在 Android Studio 0.4.3 版本中已经解决了。发布说明: "修复问题 64302: 在 IDE 模型中添加了 Renderscript 支持模式 jar 到依赖项中。" - X.Y.
1
是的,目前正在使用RenderScript,只需在android.defaultConfig中设置renderscriptTargetApirenderscriptSupportMode即可。 - tad

2
我知道这个问题已经得到了解答,但我想分享一下我的Android-Studio和Build-tools 21.1.0的Renderscript支持经验。 在构建系统changelog的26-32行中,我发现了以下内容:
  • 将一些属性重命名以使其更加一致。
    • BuildType.runProguard -> minifyEnabled
    • BuildType.zipAlign -> zipAlignEnabled
    • BuildType.jniDebugBuild -> jniDebuggable
    • BuildType.renderscriptDebug -> renderscriptDebuggable
    • ProductFlavor.renderscriptSupportMode -> renderscriptSupportModeEnabled
    • ProductFlavor.renderscriptNdkMode -> renderscriptNdkModeEnabled
因此,您可以看到,它们已更改属性名称。 我只需更新build.gradle以使用:

renderscriptSupportModeEnabled true

现在,这些库已经添加到项目中,您不需要手动将它们添加到lib文件夹中。

1
如果有人对如何将此程序打包为可分发的二进制.jar文件(例如用于部署到maven仓库)感兴趣,您可以按照以下文件结构来制作您的.jar文件。

Overall file structure Java classes

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>android</groupId>
  <artifactId>renderscript</artifactId>
  <version>19.0.3</version>
  <description>Artifactory auto generated POM</description>
</project>

对于build.gradle文件,在依赖项clojure中添加:compile 'android:renderscript:19.0.3'

备注:renderscript库不能在armv6(armeabi)上运行,因此请确保Build.CPU_ABI是armeabi-v7a、mips或x86之一。


1

在撰写本文时,Gradle Android插件提供了实验性支持。有关更多信息,请参见test project


我遇到了这个错误:无法刷新Gradle项目“RenderScript Test” 找不到com.android.tools.build:gradle:0.6.2-SNAPSHOT。需要的是::RenderScriptTest:未指定 - X.Y.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接