дуплен для разных вкусов в андроиде

У меня есть родная библиотека в моем проекте Android, где он открывает .so файлы.
У моего приложения для Android есть два варианта, и они имеют разные идентификаторы приложений.
В моем .cкод, который я использую ldopen как это:

handle  = dlopen("/data/data/<application.id>/lib/libffmpeg.so", RTLD_LAZY);

Так что это работает только для одного из вкусов одновременно.

Я пытался исправить это с #ifdef директива:

#ifdef STAGE
handle  = dlopen("/data/data/<application.id.stage>/lib/libffmpeg.so", RTLD_LAZY);
#else
handle  = dlopen("/data/data/<application.id>/lib/libffmpeg.so", RTLD_LAZY);
#endif

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

task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
Properties properties = new Properties()
properties.load(project.rootProject.file('myProject/local.properties').newDataInputStream())
def ndkdir = properties.getProperty('ndk.dir', null)

def command = "$ndkdir/ndk-build";
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
script += '.cmd'
}

commandLine "$command",
'-C', file('src/main/libs').absolutePath, // Change src/main/jni the relative path to your jni source
'-j', Runtime.runtime.availableProcessors(),
'all',
'NDK_DEBUG=1',
'APP_CFLAGS=-DSTAGE'
}

tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn buildNative
}

Может кто-нибудь подсказать мне, как это сделать?

Постскриптум возможно вопрос действительно глупый или я пытаюсь сделать это совершенно неправильно. Извините за это, но у меня действительно небольшой опыт в c / c ++, поэтому я понятия не имею, что все это LOCAL_C_INCLUDES, LOCAL_CFLAGS и т. д.
Благодарю.

1

Решение

Это может быть глупое предложение, но убедитесь, что вы делаете

ndk-build clean

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

И если это действительно так очевидно, то есть ли причина, по которой вы не можете динамически связываться с ffmpeg во время сборки и загружать его через механизм Java?

0

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

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