Комментарий Алекса Кона был верным.Чтобы решить проблему, я сделал следующее:
1) Переименован в android.hardware.graphics.common@1.0.so в libfoo.so
2) Добавлен libfoo.so в CMakeLists.txt, как это:
add_library( foo
SHARED
IMPORTED )
set_target_properties( foo
PROPERTIES IMPORTED_LOCATION
${PROJECT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libfoo.so )
3) MyLibrary с привязкой к цели, который содержит вызовы OpenCL, против libfoo.so (и, конечно, libGLES_mali.so)
target_link_libraries (MyLibrary GLES_mali foo)
4) Загрузил libfoo.so как можно скорее.Для этого я создал статический метод в своей функции MainActivity, который я вызываю, как только приложение входит в onCreate ().
private static void loadLibrary() {
System.loadLibrary("foo");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
loadLibrary();
...
}
В этот момент приложение вылетает, жалуясь на то, что не может найти некоторые библиотеки.Используя команду readelf:
./readelf -d /Users/rodolforocco/AndroidProjects/OvermindClient/app/libs/arm64-v8a/android-27/libfoo.so | grep NEEDED
Я смог увидеть, что это действительно были библиотеки, от которых зависел libfoo.so.Эти библиотеки также зависели от других библиотек, которые не могли быть найдены.Я скопировал их все из папки / system / lib64 / на моем устройстве в папку $ {PROJECT_SOURCE_DIR} / src / main / jniLibs / $ {ANDROID_ABI} /, где находился libfoo.so.
5) Наконец, как и прежде, я загрузил MyLibrary, когда мне это было нужно.
Приложение больше не падает и работает как задумано.Большое спасибо!