Articles of jni

如何在android中查找本机代码的内存泄漏

只是想知道是否有人知道如何从Android中找出本机代码中的内存泄漏。 谷歌搜索提供了很多解决方案,但没有一个是完整的。 如果有人知道怎么做,请告诉我。

如何使用JNI在C中获取原始Android相机缓冲区?

我一直在搜索谷歌和StackOverflow,但无法find它。 也许我错过了一些明显的东西。 谢谢! (这是因为预览回调的Java实现[甚至使用缓冲区]效率太低。)

如何在eclipse中删除Android项目的本机支持,因为eclipse在jni中显示错误?

我不小心点击了“Android工具”中的“添加原生支持”…这搞砸了我项目的所有jni文件。 我该如何撤消? 如何从我的Android项目中删除Native支持?

Android的FaceDetector的基础技术

我正在Android上实现一个人脸跟踪器,作为一个文献研究,想要确定Android的FaceDetector的基础技术。 简单地说:我想了解android.media.FaceDetector分类器的工作原理。 一个简短的谷歌搜索没有提供任何信息,所以我想我会看看代码。 通过查看Java源代码FaceDetector.java ,没有太多需要学习的内容: FaceDetector只是一个提供图像尺寸和面数的类,然后返回一个面数组。 Android源代码包含此类的JNI代码 。 我接着进行了函数调用,在那里,简化为基本要素,我学到了: “FaceFinder”在FaceFinder.c:75创建 在第90行, bbs_MemSeg_alloc返回一个btk_HFaceFinder对象(其中包含实际查找面的函数),基本上将其复制到initialize()中初始化的原始btk_HSDK对象的hsdkA->contextE.memTblE.espArrE数组( FaceDetector_jni.cpp:145 ) by btk_SDK_create() 似乎迷宫的函数互相提供了btk_HSDK指针和实例,但我无处可寻找sdk->contextE.memTblE.espArrE[0]的具体实例,据说它包含了魔法。 我发现的是一点线索:JNI代码引用了一个我无法find源代码的FFTEm库。 然而,从它的外观来看,FFT是快速傅立叶变换 ,它可能与预训练的神经网络一起使用。 我能find的唯一符合这一理论的文献是Ben-Yacoub等人的论文。 我甚至不知道自己是否走上了正确的道路,所以任何建议都无疑会有所帮助。 编辑:我为任何可以提供任何见解的人添加了+100赏金。

Android JNI什么是C / C ++执行代码的当前工作目录?

在Android中,如果使用NDK创build的C / C ++共享库被调用,并且它加载了一个文件,它的当前工作目录是什么? 谢谢

Androidvideo通过ffmpeg修剪

我已经从这个链接从github下载video修剪代码。 这是第一次完美的工作,但是当我第二次尝试运行它的代码崩溃没有任何exception,然后再次尝试运行它第三次崩溃后,它的工作! 有没有人有这种行为的想法? 我也正在开发一个应用程序,它有一个剪裁video模块。 我真的很感激,如果有人能帮助我。

Android:从NativeActivity使用JNI

我们正在使用NativeActivity类在android上开发一个OpenGL游戏。 到目前为止,一切正常,但现在我们需要访问一些似乎只能从Java获得的function。 还有更多,但第一个我们认为将是有用的访问显示DPI。 如此处所述,Java代码如下所示: DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); 这里是不幸的对应C ++代码: // My checking routine. #define JNI_ASSERT(jni, cond) { \ if (!(cond)) {\ std::stringstream ss; \ ss << __FILE__ << ":" << __LINE__; \ throw std::runtime_error(ss.str()); \ } \ if (jni->ExceptionCheck()) { \ std::stringstream ss; \ ss << __FILE__ << ":" << __LINE__; \ […]

应用程序崩溃与本机代码

Crashed: .onlineradioapp| 0 gralloc.rk30board.so 0xb4a2d616 bool art::interpreter::DoCall<false, true>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 1 gralloc.rk30board.so 0xb4a315c9 (Missing) 2 gralloc.rk30board.so 0xb48e2465 art::JValue art::interpreter::ExecuteGotoImpl<true, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue) 3 gralloc.rk30board.so 0xb4a1349d artInterpreterToInterpreterBridge 4 gralloc.rk30board.so 0xb4a2d031 bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 5 gralloc.rk30board.so 0xb48f2fef art::JValue art::interpreter::ExecuteGotoImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, […]

Android NDK:如何重新启动活动后清理本地代码?

所有, 我知道,默认情况下,当屏幕方向改变,或者滑入或滑出键盘时,活动将被终止并重新启动。 (请参阅Activity在Android上重新启动 )。 我的问题是,从本地代码的angular度来处理这个问题的正确方法是什么? 例如,如果我有一个静态块加载本机库,我的应用程序重新启动,我如何确保在本地的任何内存得到妥善处理? 问题是 当我们旋转设备时,它看起来像一个单独的线程池被创build,旧的永远不会被删除。 这意味着每次有人打开设备,我们就有更多的线程闲置并占用内存 我如何确保这不会发生? 我从JNIExample页面的底部看到一些注释: 未解决的问题和错误即使这个例子是function完整的,还有一些尚未解决的问题仍然存在,到目前为止我还没有弄清楚。 开始活动时出现问题,然后按“后退”button将其隐藏,然后重新开始。 根据我的经验,在这种重新开始的活动中调用本地函数将会失败壮观。 callVoid()简单地与分段错误崩溃,而调用getNewData()和getDataString()会导致JVM中止一个错误,因为它不再满意全局caching对象引用。 即使它们受到NewGlobalRef()的保护,并且活动在原始JVM中运行(活动重新启动并不意味着JVM本身已重新启动),似乎活动重新启动以某种方式使我们caching的对象引用无效。 我没有一个很好的解释为什么会发生,所以如果你有任何想法,请让我知道。 这个解决了吗?

用NDK编译给成功包含的头文件提供了错误

我的app.cpp: #include "app.h" #include <EGL/egl.h> #include <EGL/eglext.h> void Java_com_geek_hello_FilterStack_nativeEglSetFenceAndWait(JNIEnv* env, jobject thiz) { EGLDisplay display = eglGetCurrentDisplay(); // Create a egl fence and wait for egl to return it. // Additional reference on egl fence sync can be found in: // http://www.khronos.org/registry/vg/extensions/KHR/EGL_KHR_fence_sync.txt EGLSyncKHR fence = eglCreateSyncKHR(display, EGL_SYNC_FENCE_KHR, NULL); if (fence == EGL_NO_SYNC_KHR) { return; } […]