DLPone适用于Android中的不同口味
dlopen for different flavors in android
我的安卓项目中有一个本机库,它可以打开 .so 文件。我的安卓应用程序有两种风格,它们有不同的应用程序ID。在我的.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
文件中定义 STAGE,但找不到执行此操作的方法。这是我用来构建原生 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
}
有人可以建议我怎么做吗?
附言可能这个问题真的很愚蠢,或者我试图以完全错误的方式做到这一点。很抱歉,但我在 c/c++ 方面的经验很少,所以我不知道所有这些LOCAL_C_INCLUDES
、LOCAL_CFLAGS
等是做什么的。谢谢。
可能是一个愚蠢的建议,但请确保您正在这样做
ndk-build clean
在调用之间,因为 make 系统可能无法检测到传入的编译器标志中的更改以重新生成文件。
如果真的那么明显,是否有理由不能在构建时动态链接到 ffmpeg 并通过 Java 机制加载它?
相关文章:
- 使用 适用于 Android 和 iOS 的 tf-lite C++ API
- 适用于 iOS 和 Android 的 QT C++ 中的 HTTPS 请求
- 在Visual Studio 2017上编译适用于Android的SDL2应用程序时缺少 libBox2D.so
- SDL 中的倾斜控制,适用于 Android NDK JNI 游戏
- 无法使用适用于Android的Qt使手机播放声音或振动
- 编译适用于Android的英特尔TBB-ARMv7 ARMv8 MIPS
- 适用于iOS和Android NDK的C++日志记录框架
- 如何在适用于android的cocos2d中显示带有确认消息和是/否按钮的UIAlertView
- 适用于Linux上Android的Poco C++
- 适用于iOS和Android的C ++复制文件
- 适用于Android的纯c ++应用程序及其性能
- DLPone适用于Android中的不同口味
- 适用于Android NDK的NFC API
- 编译VNC服务器二进制文件(适用于Android)
- 编译适用于Android的rxcpp
- C/C++XMPP库,适用于Android(NDK)和iOS
- 是否有一些WebKit替代品适用于Android上的Qt
- 适用于Android的Qt找不到任何兼容的设备答案找到但不知道如何
- 如何通过C/ c++从Linux命令中获得输出?并且适用于android
- C++11 cmath 函数不在 std 命名空间中,适用于 android NDK w/gcc-4.8 或 clang