RSRuntimeException: Неуспешно зареждане на скрипта ScriptC (инструменти за компилиране 19.0.2)

Ето целия ми резултат:

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

Редактиране: Изглежда, че идентификаторът се задава тук:

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

person Whitney Imura    schedule 26.02.2014    source източник
comment
Виждам това, но къде се задава?   -  person Whitney Imura    schedule 26.02.2014
comment
И защо това се случва само на устройства, които не са 4-4? Това би го направило да изглежда като проблем с библиотеката за поддръжка.   -  person Whitney Imura    schedule 26.02.2014
comment
не се задава в кода, който сте включили във въпроса. Разгледайте ScriptC_processing.java:41   -  person donfuxx    schedule 26.02.2014
comment
Добавен към първоначалния въпрос по-горе.   -  person Whitney Imura    schedule 26.02.2014
comment
добавете точка на прекъсване в първия ред на този метод и проверете стойността на id   -  person donfuxx    schedule 26.02.2014
comment
Добавена е точка на прекъсване и идентификаторът всъщност не е нула (или 0). Някакви други идеи?   -  person Whitney Imura    schedule 26.02.2014
comment
id не може да бъде нула, защото е просто int. този super(rs, resources, id); е конструктор, който е дефиниран във вашия проект?   -  person donfuxx    schedule 26.02.2014
comment
Благодаря за помощта да стигнем до дъното на това и за бързите отговори. Предполагам, че тук произтича грешката (вижте последното вмъкване на код):   -  person Whitney Imura    schedule 26.02.2014
comment
Не трябва да използвате renderscriptTargetAPI от 19. Може да бъде само 18 за библиотеката за поддръжка.   -  person Stephen Hines    schedule 27.02.2014
comment
Да, това проработи. Благодаря @StephenHines.   -  person Whitney Imura    schedule 27.02.2014


Отговори (1)


Благодарение на коментара на Стивън Хайнс, причината това да се счупи се дължи на това, че целевият ми API е зададен на 19.

person Whitney Imura    schedule 28.02.2014
comment
Всъщност няма нищо общо с биткод кодирането. Проблемът е в самата библиотека за поддръжка (и как тя избира да зареди биткода/скрипт). Ако се насочите към API 19, ние вграждаме заглавка, която казва, че е 19. Java/родният код в библиотеката за поддръжка след това неправилно обработва това. Надяваме се, че можем да направим тази грешка по-изрична в бъдеще, но всички документи конкретно извикват API 17 за използване на библиотеката за поддръжка днес. - person Stephen Hines; 28.02.2014
comment
Благодаря за пояснението. Актуализирах отговора си. - person Whitney Imura; 28.02.2014