【发布时间】:2014-02-26 18:11:21
【问题描述】:
这是我的全部输出:
02-26 09:55:50.410 625-640/com.vsco.cam E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
at java.util.concurrent.FutureTask.run(FutureTask.java:239)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:841)
Caused by: android.renderscript.RSRuntimeException: Loading of ScriptC script failed.
at android.renderscript.ScriptC.<init>(ScriptC.java:61)
at android.support.v8.renderscript.ScriptCThunker.<init>(ScriptCThunker.java:39)
at android.support.v8.renderscript.ScriptC.<init>(ScriptC.java:62)
at com.vsco.cam.utility.ScriptC_processing.<init>(ScriptC_processing.java:41)
at com.vsco.cam.effects.EffectProcessor.initialize(EffectProcessor.java:67)
at com.vsco.cam.LoadingAsyncTask.doInBackground(LoadingAsyncTask.java:24)
at com.vsco.cam.LoadingAsyncTask.doInBackground(LoadingAsyncTask.java:16)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:841)
这是我的 build.gradle 文件的一部分:
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
renderscriptTargetApi 19
renderscriptSupportMode=true
}
在将我的构建工具更新到 19.0.2 之前,我收到了针对每个错误的 rs,该错误已通过最新的构建工具版本 (https://code.google.com/p/android/issues/detail?id=64110) 得到修复。现在我完全不知道为什么它不能在非 4.4 手机(需要向后兼容的手机,也就是支持库)上运行。这与每个 rs 的问题是否相同,还是我只是遗漏了什么?
似乎在 ScriptC.java 文件中失败了:
protected ScriptC(RenderScript rs, Resources resources, int resourceID) {
super(0, rs);
int id = internalCreate(rs, resources, resourceID);
if (id == 0) {
throw new RSRuntimeException("Loading of ScriptC script failed.");
}
setID(id);
}
ScriptC_processing: 41:
public ScriptC_processing(RenderScript rs, Resources resources, int id) {
super(rs, resources, id);
__ALLOCATION = Element.ALLOCATION(rs);
__SCRIPT = Element.SCRIPT(rs);
__U32_2 = Element.U32_2(rs);
__SAMPLER = Element.SAMPLER(rs);
__F32_2 = Element.F32_2(rs);
__I32 = Element.I32(rs);
__F32 = Element.F32(rs);
__U8_4 = Element.U8_4(rs);
}
编辑:这里似乎设置了 id:
protected ScriptC(RenderScript rs, Resources resources, int resourceID) {
super(0, rs);
if (rs.isNative) {
RenderScriptThunker rst = (RenderScriptThunker)rs;
ScriptCThunker s = new ScriptCThunker(rst, resources, resourceID);
mT = s;
return;
}
int id = internalCreate(rs, resources, resourceID);
if (id == 0) {
throw new RSRuntimeException("Loading of ScriptC script failed.");
}
setID(id);
}
【问题讨论】:
-
我看到了,但是在哪里设置?
-
为什么这只发生在非 4-4 设备上?这看起来像是一个支持库问题。
-
它没有在您包含在问题中的代码中设置。看看
ScriptC_processing.java:41 -
添加到上面的原始问题中。
-
你不应该使用 19 的 renderscriptTargetAPI。支持库只能是 18。
标签: android renderscript build-tools