Я создаю многоплатформенный 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). И если да, то как?
Не стесняйтесь спрашивать об уточнениях, я не уверен, что действительно ясно говорю.
Любая помощь очень ценится.
Флоран Лагайе.