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