Android RenderScript:不提供。所以在aar中

Android RenderScript:不提供。所以在aar中,android,renderscript,aar,Android,Renderscript,Aar,我目前正在构建一个SDK,并向SDK用户提供一个.aar存档 我的SDK中有一个可选功能,基本上可以模糊图像。 但是,由于存在共享库,此功能需要使用renderScript,这会使.aar存档更大 ./jni/armeabi-v7a: total 3752 rw-rr- 1 cylix wheel 1,1M 29 nov 16:16 libblasV8.so rw-rr- 1 cylix wheel 746K 29 nov 16:16 libRSSupport.so rw-rr- 1 cylix

我目前正在构建一个SDK,并向SDK用户提供一个.aar存档

我的SDK中有一个可选功能,基本上可以模糊图像。 但是,由于存在共享库,此功能需要使用renderScript,这会使.aar存档更大

./jni/armeabi-v7a:
total 3752
rw-rr- 1 cylix wheel 1,1M 29 nov 16:16 libblasV8.so
rw-rr- 1 cylix wheel 746K 29 nov 16:16 libRSSupport.so
rw-rr- 1 cylix wheel 46K 29 nov 16:16 librsjni.so
./jni/mips:
total 5224
rw-rr- 1 cylix wheel 1,5M 29 nov 16:16 libblasV8.so
rw-rr- 1 cylix wheel 1,0M 29 nov 16:16 libRSSupport.so
rw-rr- 1 cylix wheel 70K 29 nov 16:16 librsjni.so
./jni/x86:
total 5344
rw-rr- 1 cylix wheel 1,6M 29 nov 16:16 libblasV8.so
rw-rr- 1 cylix wheel 958K 29 nov 16:16 libRSSupport.so
rw-rr- 1 cylix wheel 54K 29 nov 16:16 librsjni.so
./jni/arm64-v8a:
total 1808
rw-rr- 1 cylix wheel 843K 29 nov 16:16 libRSSupport.so
rw-rr- 1 cylix wheel 60K 29 nov 16:16 librsjni.so
但是我注意到,如果我删除了这些库而不在.aar中提供它们,库的客户端仍然可以在其一侧启用renderScript并访问该功能,而不会出现任何问题

然后,如果renderScript可用,我只需签入代码:

    try {
        Class.forName("android.support.v8.renderscript.RenderScript");
    } catch (ClassNotFoundException e) {
        //! renderScript not available
    }
但这是我的问题。 我仍然需要在我的gradle文件中输入:

renderscriptTargetApi 23
renderscriptSupportModeEnabled true
否则,项目无法编译。 但这会导致自动包含上面列出的.so文件


有没有办法解决这个问题:能够编译renderScript功能,但过滤.so文件,使其不包含在.aar存档中?

我相信有更好的解决方案。但这里的低挂果实是使用com.android.tools.build:gradle:2.2.0或更高版本

dependencies {
    classpath 'com.android.tools.build:gradle:2.2.1'
    // ...
}

gradle插件2.2.0+不会绑定libblasV8.so,除非指定
renderscriptsupportmodeblasablenabled true
。这样,您的AAR文件可能会减轻50%的重量。

好的,我找到了一个解决方案。也许不是干净的,但至少它能工作

我只是从我的计算机的android SDK库中复制了renderscript-v8.jar,并将其作为依赖项放入我的项目中

然后,我删除了renderscript的Gradle文件配置

renderscriptTargetApi 23
renderscriptSupportModeEnabled true
这样,我就可以编译了,这多亏了.jar,而且我没有任何繁重的.aar文件,因为Gradle不再自动构建它们了


然后,我的SDK的用户可以选择启用或不启用renderscript。

缪的答案对我很有用,但我还有一些想法

如果您所需要的只是模糊,那么您可以避免使用support.v8,而只需使用本机RenderScript sdk


这取决于你的年龄和需要。是在17年添加的,或者您也可以只使用自定义的.rs内核。它的性能不如ScriptInquired,但它允许您支持旧版本。

它可以工作,因为您在不需要支持库回退的设备上进行测试。但这不是一个好答案,因为当您在旧设备上运行时,在查找这些共享对象时,代码将崩溃。