У меня есть родная библиотека в моем проекте 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
и т. д.
Благодарю.
Это может быть глупое предложение, но убедитесь, что вы делаете
ndk-build clean
между вызовами, потому что система make может не обнаруживать изменения, передаваемые во флаги компилятора для перестройки файлов.
И если это действительно так очевидно, то есть ли причина, по которой вы не можете динамически связываться с ffmpeg во время сборки и загружать его через механизм Java?
Других решений пока нет …