RSRuntimeException: Loading of ScriptC script fail

2019-06-06 23:17发布

问题:

Here's my entire output:

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)

Here's a part of my build.gradle file:

defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19
        renderscriptTargetApi 19
        renderscriptSupportMode=true
    } 

Prior to updating my build tools to 19.0.2, I was getting an rs for each error, which was fixed with the newest build tools version (https://code.google.com/p/android/issues/detail?id=64110). Now I'm completely at a loss as to why this won't run on non-4.4 phones (phones that need backwards compat., aka, the support library). Is this the same issue as the rs for each, or am I just missing something?

Seems to be failing right here, within the ScriptC.java file:

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);
    }

Edit: Looks like the id is being set here:

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);
}

回答1:

Thanks to Stephen Hines' comment, the reason this was breaking was due to my target api being set to 19.