没有java的android NDK adb可执行文件

标签 android opencv android-ndk adb

我正在尝试通过 adb shell 在 android 模拟器上运行 c++ 可执行文件。

我正在使用opencv。

一切正常,代码工作正常,但我需要知道如何显示
图片使用 cv::imshow(...) .我知道如果不通过 JNI 并将此代码附加到可以构建到 apk 中的实际 android 应用程序,这可能是不可能的。但这不是我目前想要做的。

我只需要能够做类似的事情

adb shell am start -d file:///path/to/someimage/someimage.jpg -t image/jpg -a android.intent.action.VIEW

通过 C++ 代码。

当我尝试调用 cv::imshow(...) 时,我目前收到以下错误通过我的 c++ 代码,然后通过 adb shell 运行 exe:
terminate called after throwing an instance of 'cv::Exception'
what(): openCV(3.4.3) /build/3_4_pack-android/opencv/modules/highgui/src/window.cpp:632:error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.X or Carbon support. If you are on Ubutu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script function in 'cvShowImage'

是否有一个链接器标志我可以添加到 LOCAL_LDLIBS 或其他一些我可以用来让它工作而无需使用 java/JNI 拐杖的小修复?

最佳答案

在很大程度上,你“做错了”。但是,如果你想做你似乎想做的事情,而不受限制,并愿意永久绑定(bind)在 adb shell 下运行 那么有一种方法。

本质上:

  • 你有一个有效的 shell 命令。
  • 你有一个程序想要执行这个命令。
  • 程序和shell命令的执行上下文是一样的

  • 这是 system() 的工作系统调用
    #include <stdlib.h>
    int system(const char *command);
    

    所以你会做类似的事情
    system("am start -d file:///path/to/someimage/someimage.jpg -t image/jpg -a android.intent.action.VIEW)
    

    ...大概命令字符串是您在运行时构建的东西,填写文件名等。

    当然,这距离在 Android 上部署任何东西还有很长的路要走,除非你的意思是总是通过 adb 操作。要到达您应该面临的更大挑战是将您的可执行文件转换为 jni 子例程,或者可能将其作为子进程调用。作为一个子进程,您可能无法发送 Intent - 但您仍然可以使用管道或套接字与拥有的应用程序进行通信,并让它显示图像或代表您发送 Intent,以便其他东西可以。

    关于没有java的android NDK adb可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53965389/

    相关文章:

    visual-c++ - 如果使用minMaxLoc函数如何替换像素值

    android - 在应用内 WebView 中打开链接

    android - 如何同时使用 Actionbar Tabs 和 Actionbar Spinner?

    java - 在 android 中的服务器上上传之前验证数据

    c++ - "The C Compiler [...] is not able to compile a simple test program"使用 CMake 和 Android NDK

    c - 如何在 gradle 中的构建类型中为 native 代码定义宏?

    android - Android NDK 的 ARM NEON 调试

    android - Kotlin 对象加载延迟

    iphone - 如何在 Objective-C 中使用 OpenCV/或任何移植的库类

    opencv - 如何链接 OpenCV 4 与 ROS (cv_bridge)