![](/img/trans.png)
[英]Loading of ScriptC script failed / cannot load library - Renderscript Android
[英]RenderScript crash when creating ScriptC
使用RenderScript时创建ScriptC对象存在一些神秘的问题。 这是我的代码:
public class RenderScriptActivity {
private RenderScript mRS;
private ScriptC_kernel mScript = null;
private Allocation m1Allocation, m2Allocation,
m3Allocation, m4Allocation;
private Bitmap mBitmap;
private ImageView mView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_renderscript);
mView = (ImageView) findViewById(R.id.image_view);
}
@Override
protected void onResume() {
super.onResume();
initRenderScript();
}
@Override
protected void onPause() {
super.onPause();
releaseRenderScript();
}
private void initRenderScript() {
mRS = RenderScript.create(this);
int size = 320*240;
m1Allocation = Allocation.createSized(mRS, Element.I16(mRS), size);
m2Allocation = Allocation.createSized(mRS, Element.I16_4(mRS), size);
m3Allocation = Allocation.createSized(mRS, Element.I16_4(mRS), size);
mBitmap = Bitmap.createBitmap(1280, 720, Bitmap.Config.ARGB_8888);
m4Allocation = Allocation.createFromBitmap(mRS, mBitmap);
mScript = new ScriptC_kernel(mRS, getResources(), R.raw.kernel);
}
private void releaseRenderScript() {
m1Allocation.destroy();
m2Allocation.destroy();
m3Allocation.destroy();
m4Allocation.destroy();
// mScript.destroy();
mRS.finish();
}
}
和我的内核(是的,它是空的):
#pragma version(1)
#pragma rs java_package_name(com.example.android.myrenderscript)
问题是, 在第三次调用initRenderScript()
函数(即恢复应用,暂停,恢复,暂停和再次恢复)后,我的应用程序崩溃(SIGSEV)并出现错误:
backtrace:
#00 pc 00027034 /system/lib/libRS.so (android::renderscript::rsrClearObject(android::renderscript::Context const*, android::renderscript::ObjectBase**)+3)
#01 pc 00012c3b /system/lib/libRSDriver.so
#02 pc 00000668 <unknown>
另外,如果我使用mScript.destory()
方法(上面已注释),则在第一次调用initRenderScript()
之后,我的应用程序立即崩溃。 最重要的是,如果我只注释创建ScriptC_kernel
对象的行,则ScriptC_kernel
工作正常。 这就是为什么我认为,创建ScriptC
对象存在问题。
是否有机会,任何人都知道为什么会出现此问题?
奇怪的是,仅当我从命令行(使用ant debug
命令,Ubuntu 14.04)构建应用程序时,才会出现该问题。 当我使用Android Studio或Eclipse进行构建时,一切正常。
我还应该提到,实际上并不是应用程序本身崩溃(它包含少量活动),而是我认为是RenderScript的一个线程。 崩溃之后,先前的活动再次变为前台。
非常感谢您的帮助,在此先感谢
您真的在这里对RS不做任何其他事情吗? 您的ant命令是否可能没有将资源正确打包在.apk中? 也许值得检查在每个构建下生成的实际.apk文件,并比较资源等,以确保它们相等。
最后一个问题:您的文件名为kernel.rs吗?
mScript = new ScriptC_kernel(mRS, getResources(), R.raw.kernel);
出于安全考虑,应该真正将其重写为:
mScript = new ScriptC_kernel(mRS);
它们是等效的(假设您使用的是kernel.rs),第二种错误的发生率要低得多(以防您复制粘贴此行以使用其他脚本。如果加载错误的脚本,我可能会看到此错误,但是即使那样也不太可能。
我有一个类似的问题。 就我而言,崩溃发生在rs.destroy
Log.d(App.LOG_TAG, "deinigRenderScript 1");
mRS.finish();
Log.d(App.LOG_TAG, "deinigRenderScript 2");
mScript.destroy();
Log.d(App.LOG_TAG, "deinigRenderScript 3");
mAllocation.destroy();
Log.d(App.LOG_TAG, "deinigRenderScript 4");
mRS.destroy(); // << crash here (different tid)
Log.i(App.LOG_TAG, "deinigRenderScript 5");
就我而言,这有助于:
$ cat project.properties | grep render
renderscript.target=18
renderscript.opt.level=O3
renderscript.support.mode=false
renderscript.debug.opt.level=O3
renderscript.release.opt.level=O3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.