Разница между статическими и разделяемыми библиотеками в NDK от Android?

Я новичок в NDK от Android, и я не понимаю различий между статическими и разделяемыми библиотеками. Что это такое, и когда я буду выбирать один тип над другим?

Термин разделяемая библиотека не подходит для Android NDK, потому что во многих случаях библиотеки .so фактически не разделяются между приложениями. Лучше классифицировать библиотеки, которые NDK создает как статические и динамические.

Каждое приложение для Android – это приложение Java, и единственная точка входа для кода NDK загружает его как динамическую библиотеку и вызывает ее через JNI.

Статические библиотеки – это архивы скомпилированных объектных файлов. Они собираются в других библиотеках во время сборки. Неиспользуемые части кода из статических библиотек лишены NDK для уменьшения общего размера.

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

Итак, что вам действительно нужно для разработки Android – это, по крайней мере, одна общая библиотека, которая будет вызываться из Java-кода и связана с ее зависимостями в качестве статических библиотек.

Собственные общие библиотеки: NDK создает эти библиотеки или .so-файлы из собственного исходного кода. Родные статические библиотеки: NDK также может создавать статические библиотеки или файлы .a, которые вы можете связать с другими библиотеками.

Это согласно документации NDK