Боюсь, вы запутались между strip и visibility = hidden .
прежний - это отдельный пост-линкерный этап создания общей библиотеки. Его целью является уменьшение размера файла (который будет упакован в APK) путем удаления некоторой дополнительной информации, которую компоновщик оставляет для целей отладки. Обратите внимание, что gradle (в Android Studio 3.2+) выполняет эту полосу еще позже, когда собственные библиотеки из всех модулей объединяются вместе.
Полоса влияет на размер файла, но не на видимость символов.
Сокрытие символов - это еще один метод уменьшения размера двоичных файлов. Также настоятельно рекомендуется, чтобы уменьшить подверженность ваших библиотек обратному проектированию.
Это не происходит по умолчанию. Вы должны явно добавить этот флаг компилятора:
APP_CFLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
Вы можете комбинировать это с удалением неиспользуемых функций:
APP_CFLAGS += -ffunction-sections -fdata-sections
APP_LDFLAGS += -Wl,--gc-sections
Вы должны явно пометить внешние функции
__attribute__ ((visibility ("default")))
К счастью, благодаря jni.h этот атрибут установлен для всех JNIEXPORT
функций.
Если вы используете встроенные статические библиотеки, вам может потребоваться также
APP_LDFLAGS += -Wl,--exclude-libs,ALL
Также рассмотрите возможность предоставления версии скрипта
LOCAL_LDFLAGS += -Wl,-version-script -Wl,mylib_jni.vs