2016-05-13 5 views
0

Я пытаюсь понять, почему NDK поддерживается только ограниченный .so библиотеки, как описано в http://developer.android.com/ndk/guides/stable_apis.htmlNDK ограниченные поддерживаемые библиотеки

Есть ли причина, почему другие .so библиотеки (libhardware, libgui, libservicesensor и т.д.), которые используются java framework не могут также использоваться с ndk?

+1

Google не пытается поддерживать двоичную совместимость для этих библиотек в версиях Android. Если вы ссылаетесь на библиотеки за пределами стабильного списка, ваше приложение может не загрузиться в некоторых версиях Android, поскольку символы, на которые вы полагаетесь, не были изменены, и т. Д. – CommonsWare

+0

Оба типа библиотек создаются из файлов C++, так в чем смысл бинарной совместимости? спасибо. – ransh

ответ

2

После того как API станет общедоступным, они не могут изменить его таким образом, который повлияет на существующие приложения, которые его используют, то есть он может быть расширен только и не изменен. Это добавляет некоторую нагрузку на любое развитие вокруг него и ограничивает, каким образом он может быть разработан. Из-за этого нужно тщательно решить, какие API-интерфейсы они готовы поддерживать публично, и взвешивать это с тем, какую выгоду от него станет публичной.

Поскольку дизайн Android - это то, что главный публичный API находится в java, поэтому все, что доступно в NDK, будет огромным дублированием. (Даже если компоненты нижнего уровня являются C/C++, они не предназначены для публичного использования, они предназначены только для использования публичными API-интерфейсами более высокого уровня.) На практике только несколько собственных API-интерфейсов были открыты которые необходимы для достижения хорошей производительности и некоторых ограниченных частей для удобства.