Скомпилированные файлы Renderscript не обновляются без очистки кеша

Я пытаюсь запустить приложение, использующее Renderscript из NDK, всего с одним файлом main.rs. Я запускаю его на Samsung Galaxy S7 Android 7.0.

minSdkVersion 23
targetSdkVersion 25
renderscriptTargetApi 23
renderscriptSupportModeEnabled false
renderscriptNdkModeEnabled true

Первый запуск работает отлично, но не обновляет скомпилированный Renderscript при втором и последующих запусках. Поэтому я изменяю тело своей функции RS, но при переустановке на телефоне она остается прежней.

У меня есть три файла в каталоге кеша:

main.bc
main.o
librs.main.so

Для первого и последующих запусков эти файлы имеют одинаковую отметку времени last modified. Так что кажется, что они не перекомпилируются при обновлении. Только удаление файлов помогает обновить функционал при изменении кода.

Что случилось? Почему эти файлы не обновляются при изменении кода?

Если вам нужна дополнительная информация, оставьте комментарий, я обновлю вопрос.


person Alexander Ponomarev    schedule 19.05.2017    source источник
comment
Какая у вас модель S7?   -  person sakridge    schedule 26.05.2017
comment
@sakridge SM 930F   -  person Alexander Ponomarev    schedule 26.05.2017


Ответы (1)


RenderScript кэширует компиляцию во время первого запуска. Он будет / должен перекомпилировать файл .bc, если в файле .bc есть изменения.

Попробуйте «adb shell setprop debug.rs.default-CPU-driver 1» и измените свой код, чтобы увидеть, происходит ли автоматическая перекомпиляция или нет.

Если драйвер ЦП работает нормально, это означает, что в драйвере Samsung есть ошибка, делающая кэш кода недействительным.

person Miao Wang    schedule 23.05.2017
comment
нет, adb shell setprop debug.rs.default-CPU-driver 1 не помогает :( Модификация кода в .fs файле все равно не меняет поведение программы, если не удалять кеш вручную. - person Alexander Ponomarev; 26.05.2017
comment
хм, это происходит только на S7, эмулятор работает? У вас включен InstantRun? - person Miao Wang; 27.05.2017
comment
На эмуляторе работает нормально, только на самсунге с NDK не работает. Когда вы используете Renderscript из Java, он отлично работает даже на устройстве. - person Alexander Ponomarev; 29.05.2017
comment
Я не использую Instant Run. - person Alexander Ponomarev; 29.05.2017