java - 加载 ScriptC 脚本失败/无法加载库 - Renderscript Android

标签 java android android-support-library renderscript

我收到以下错误消息:

01-19 23:31:16.436: E/RenderScript(30603): Unable to open shared library (/data/data/com.example.android.rs.hellocompute//lib/librs.mono.so): Cannot load library: reloc_library[1313]: 1222 cannot locate '_Z9rsForEach9rs_script13rs_allocationS0_'...

01-19 23:31:16.436: E/RenderScript(30603): Unable to open system shared library (/system/lib/librs.mono.so): (null)

01-19 23:31:16.444: D/AndroidRuntime(30603): Shutting down VM

01-19 23:31:16.444: W/dalvikvm(30603): threadid=1: thread exiting with uncaught exception (group=0x40018560)

01-19 23:31:16.585: E/AndroidRuntime(30603): FATAL EXCEPTION: main

01-19 23:31:16.585: E/AndroidRuntime(30603): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.rs.hellocompute/com.example.android.rs.hellocompute.HelloCompute}: android.support.v8.renderscript.RSRuntimeException: Loading of ScriptC script failed.

01-19 23:31:16.585: E/AndroidRuntime(30603): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1696)

01-19 23:31:16.585: E/AndroidRuntime(30603): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1716)

01-19 23:31:16.585: E/AndroidRuntime(30603): at android.app.ActivityThread.access$1500(ActivityThread.java:124)

01-19 23:31:16.585: E/AndroidRuntime(30603): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968)

01-19 23:31:16.585: E/AndroidRuntime(30603): at android.os.Handler.dispatchMessage(Handler.java:99)

01-19 23:31:16.585: E/AndroidRuntime(30603): at android.os.Looper.loop(Looper.java:130)

01-19 23:31:16.585: E/AndroidRuntime(30603): at android.app.ActivityThread.main(ActivityThread.java:3806)

01-19 23:31:16.585: E/AndroidRuntime(30603): at java.lang.reflect.Method.invokeNative(Native Method)

01-19 23:31:16.585: E/AndroidRuntime(30603): at java.lang.reflect.Method.invoke(Method.java:507)

01-19 23:31:16.585: E/AndroidRuntime(30603): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)

01-19 23:31:16.585: E/AndroidRuntime(30603): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)

01-19 23:31:16.585: E/AndroidRuntime(30603): at dalvik.system.NativeStart.main(Native Method)

01-19 23:31:16.585: E/AndroidRuntime(30603): Caused by: android.support.v8.renderscript.RSRuntimeException: Loading of ScriptC script failed.

01-19 23:31:16.585: E/AndroidRuntime(30603): at android.support.v8.renderscript.ScriptC.(ScriptC.java:69)

01-19 23:31:16.585: E/AndroidRuntime(30603): at com.example.android.rs.hellocompute.ScriptC_mono.(ScriptC_mono.java:41)

01-19 23:31:16.585: E/AndroidRuntime(30603): at com.example.android.rs.hellocompute.HelloCompute.createScript(HelloCompute.java:64)

01-19 23:31:16.585: E/AndroidRuntime(30603): at com.example.android.rs.hellocompute.HelloCompute.onCreate(HelloCompute.java:49)

01-19 23:31:16.585: E/AndroidRuntime(30603): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

01-19 23:31:16.585: E/AndroidRuntime(30603): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1660)

01-19 23:31:16.585: E/AndroidRuntime(30603): ... 11 more

我猜这条消息是由 int id 在 ScriptC_mono.java 中创建的,虽然它应该是 R.raw.mono,但我找不到原因。这是我的 *.rs 和 MainActivity.java 文件:

主要 Activity :

import android.app.Activity;
import android.os.Bundle;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap;
import android.support.v8.renderscript.*;
import android.widget.ImageView;

public class HelloCompute extends Activity {
private Bitmap mBitmapIn;
private Bitmap mBitmapOut;

private RenderScript mRS;
private Allocation mInAllocation;
private Allocation mOutAllocation;
private ScriptC_mono mScript;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mBitmapIn = loadBitmap(R.drawable.data);
    mBitmapOut = Bitmap.createBitmap(mBitmapIn.getWidth(), mBitmapIn.getHeight(),
                                     mBitmapIn.getConfig());

    ImageView in = (ImageView) findViewById(R.id.displayin);
    in.setImageBitmap(mBitmapIn);

    ImageView out = (ImageView) findViewById(R.id.displayout);

    createScript();
    out.setImageBitmap(mBitmapOut);
}


private void createScript() {
    mRS = RenderScript.create(this);

    mInAllocation = Allocation.createFromBitmap(mRS, mBitmapIn,
                                                Allocation.MipmapControl.MIPMAP_NONE,
                                                Allocation.USAGE_SCRIPT);
    mOutAllocation = Allocation.createFromBitmap(mRS, mBitmapOut,
                                                 Allocation.MipmapControl.MIPMAP_NONE,
                                                 Allocation.USAGE_SCRIPT);

    mScript = new ScriptC_mono(mRS, getResources(), R.raw.mono);

    mScript.forEach_root(mInAllocation, mOutAllocation);
    mOutAllocation.copyTo(mBitmapOut);

    mScript.destroy();
}

private Bitmap loadBitmap(int resource) {
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    return BitmapFactory.decodeResource(getResources(), resource, options);
}}

单声道:

#pragma version(1)
#pragma rs java_package_name(com.android.example.hellocompute)

rs_allocation gIn;
rs_allocation gOut;
rs_script gScript;

const static float3 gMonoMult = {0.299f, 0.587f, 0.114f};

void root(const uchar4 *v_in, uchar4 *v_out, const void *usrData, uint32_t x, uint32_t y) {
float4 f4 = rsUnpackColor8888(*v_in);

float3 mono = dot(f4.rgb, gMonoMult);
*v_out = rsPackColorTo8888(mono);
}

void filter() {
rsForEach(gScript, gIn, gOut, 0);
}

最佳答案

这与将在下一个 SDK 版本中修复的问题相同(由于缺少 rsForEach() 和其他函数,许多其他人遇到了这个问题)。

关于java - 加载 ScriptC 脚本失败/无法加载库 - Renderscript Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21245457/

相关文章:

java - 在 Java 项目中使用 jar?

android - 如何将 Android 百分比支持库与 ImageView 一起使用?

Android 支持库 - 无法解决

android - java.lang.NoClassDefFoundError : android. 支持.v7.app.AppCompatDelegateImplV14

java - SQL Server 中的存储过程需要输出参数作为输入

java - 我试图通过完成子节点来返回列表

java - 在 Java 中解析格式为 "January 10th, 2010"的日期? (带序号指示符,st|nd|rd|th)

android - './gradlew -Dtest.single=SimpleTest test' 运行我拥有的所有测试

java - LisrView 子项的不同颜色

android - 如何保护/检测 Android 设备上的数据库还原?