Лучший способ создать сложные нативные библиотеки + Java с Android SDK + NDK - PullRequest
3 голосов
/ 07 ноября 2011

Я создаю мультиплатформенный SDK для 3D-приложений реального времени.Этот SDK запрограммирован на C ++ и работает под Windows, iOs от Apple, MacOS, Linux и Android.

Структура проекта сложная, она состоит из 3 собственных статических библиотек C ++, связанных с некоторыми внешними статическими библиотеками.общая библиотека.Это очень просто для всех управляемых ОС, кроме Android.

Основная проблема в Android - это двунаправленная связь / вызовы между собственным кодом и кодом Java.Я решил эту проблему некоторое время назад, используя SWIG, чтобы обернуть классы совместно используемой библиотеки.Чтобы добиться этого, я написал свои собственные сценарии сборки (Makefiles) для обработки нативной компиляции с помощью ndk r4, генерации кода swig, предварительной компиляции java и создания jar.

В последнее время мы добавили несколько классов обратного вызова / прослушивателя вСлой C ++, который мы хотели выводить / перегружать в Java, для этого мы использовали функцию директоров SWIG.Но, похоже, ему нужны функции JNI (слабые глобальные ссылки), которых не было в NDK r4b.Поэтому нам нужно переключиться на более новую Android NDK (r6b), которая обладает этими функциями.Но поскольку наши собственные сценарии сборки были написаны для NDK r4b, они больше не будут работать.

Меня беспокоит то, чтобы все было правильно построено с помощью Android NDK / SDK (в конечном итоге с помощью Eclipse) с файлами Android.mk, поэтому мы не будемНе нужно переписывать все с нуля каждый раз, когда мы переключаемся на новый NDK.

Я хотел бы знать, есть ли способ управления такой сложной структурой проекта с помощью стандартных Android.mk, ndk-build, ant и eclipse (включая часть SWIG).И если да, то как?

Не стесняйтесь спрашивать о точности, я не уверен, что я действительно ясен.

Любая помощь очень ценится.

Флоран Лагэй.

Ответы [ 2 ]

2 голосов
/ 11 декабря 2011

Я искал похожую вещь, и, хотя я еще не понял, есть хороший пример построения gstreamer на Android.

http://cgit.collabora.com/git/user/derek/androgenizer.git/

Он предположительно работает с любым приложением libtoolized.

Вот инструкции по сборке:

http://gstreamer.freedesktop.org/wiki/GstreamerAndroid_InstallInstructions

0 голосов
/ 24 октября 2013

Мы закончили с написанием конкретных правил в файле Android.mk для управления генерацией интерфейса Swig.

Не забудьте добавить сгенерированный источник c ++ в список исходных файлов, прежде чем включать BUILD_STATIC_LIB или BUILD_DYNAMIC_LIB, ипоручите swig сгенерировать исходный код Java в папке, доступной для вашего Java-проекта Android.

...