这是我的整个输出:
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);
}
答案 0 :(得分:1)
感谢Stephen Hines的评论,之所以破坏是因为我的目标api被设置为19.