Android — Как связать с общей библиотекой без включения в окончательный пакет?

Я работал с проектом, который должен связываться с двумя общими библиотеками из других приложений, фактически не включая их в окончательный пакет. Я использовал Android Studio с обычным способом выполнения внешнего ndk-build но сейчас я использую экспериментальную поддержку NDK Gradle.

Из того, что я понимаю из информации Вот, использование исходного набора jniLibs позволит упаковать двоичный файл с конечным приложением, а это не то, что я хочу. Я хотел бы связываться с библиотеками во время компиляции и ожидать, что мой собственный модуль загружен в среде, где они доступны.

Мой старый обходной путь — добавить строку: TARGET_NO_UNDEFINED_LDFLAGS := в Android.mk, но я не знаю ни о каком пути к чему-то эквивалентному с новой поддержкой NDK.

В настоящее время я в том числе jni каталог, который содержит библиотеки вместе с моим источником, добавив -L"<directory>" в ldFlagsи связываю их как с системной библиотекой, как показано ниже (в настоящее время я работаю только для ARMv7):

android.ndk {
moduleName = "ropecraftpe"ldLibs.addAll(['log', 'name of one library', 'name of other library'])
ldFlags.add('-L"' + file('src/main/jni').absolutePath + '"')

cppFlags.add('-std=c++11')
stl = 'gnustl_shared'
abiFilters.addAll(['armeabi-v7a'])
}

Это работает по большей части — как ни странно, компоновщик не жалуется на вызовы статических функций или глобальных переменных, но делает пожаловаться при попытке использовать конструктор, определенный в одной из библиотек: Error:(12) undefined reference to 'ClassName::ClassName(std::string const&, etc.)', Этот класс определен в заголовочном файле, включенном в мой собственный код C ++, и конструктор определенно присутствует в связанном .so,

Как можно успешно связать этот проект?

0

Решение

Я сделал обходной путь; Мое решение состояло в том, чтобы добавить библиотеки, с которыми я хотел связать, в каталог системных библиотек NDK.

Это находится под ANDROID_NDK/platforms/android-XX/arch-XX/usr/lib/, Кажется, это работает нормально, так как я хотел, чтобы библиотеки обрабатывались так же, как системные библиотеки (не включены как предварительные сборки, но все еще связаны с ними).

Кроме того, можно поместить заголовочные файлы под include каталог там.

0

Другие решения

Других решений пока нет …