У меня есть родной lib в моем проекте Android, где он открывается .so файлы. У моего приложения Android есть два варианта, и у них разные идентификаторы приложений. В моем .c
коде я использую ldopen
так:dlopen для разных вкусов в android
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
файл, но не могу найти способ сделать это. Вот задача, которую я использовать для создания родных ources:
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
}
Может кто-то предложить мне, как это сделать?
P.S. вероятно, вопрос действительно глупо, или я пытаюсь сделать это совершенно неправильно. Извините за это, но у меня действительно небольшой опыт работы в c/C++, поэтому я понятия не имею, что все эти LOCAL_C_INCLUDES
, LOCAL_CFLAGS
и т.д. Спасибо.