android - 在标准 Android 应用程序中包装 C 命令行可执行文件

标签 android c native

我有一个为 Android 成功编译的 C 命令行可执行文件。我可以通过执行以下操作在我的 Android ICS 手机上复制可执行文件并使用 Android Terminal Emulator 启动它:

  1. 执行“export TERMINFO=/etc/terminfo”
  2. 执行“mount -o remount rw/sdcard”
  3. 从 SD 卡启动可执行文件

第一步是必要的,因为命令行应用程序使用 ncurses 库,如果我没有设置 TERMINFO,那么当我尝试启动应用程序时会收到错误消息。如果我离开第二步,那么当我尝试从 SD 卡启动命令行应用程序时,我会收到“访问被拒绝”。因此,只要我手动执行这些步骤,我就可以启动命令行可执行文件。

现在我要做的是将此命令行可执行文件包装在标准 Android 应用程序中。 Android Terminal Emulator 的源代码是开源的,因此我可以使用它在我的 Android 应用程序中打开一个 EmulatorView。不过,我的问题是如何将 native 可执行文件包含在 apk 中,将其部署到设备中我的应用程序有权在 EmulatorView 中执行它的位置>。我有点担心我是否能够解决权利问题,以便可以启动 native 命令行可执行文件。

我确实知道 Android NDK,但希望不要必须重新编写一个工作的命令行应用程序,以便它可以作为一个库包含在内。我特别关注保持 C 可执行源的原样并从包装器应用程序执行它。有谁知道这是否可行,如果可行,我将如何去做?

最佳答案

如果您将 native 文件复制到您应该具有适当权限的数据文件夹下,然后使用 Runtime.exec 来执行您的文件。

您可以创建一个bin 文件夹(或任何名称)并将您的文件复制到

Process exeProcess = 
         Runtime.getRuntime().exec("/data/data/YOUR_PACKAGE/bin/EXECUTABLE_FILE");

您可以使用对象 exeProcess 从您的可执行文件中读取数据。

关于android - 在标准 Android 应用程序中包装 C 命令行可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14914970/

相关文章:

android - Quickblox 身份验证错误

c - Malloc 字符串数组 - C

visual-c++ - 如何确定在 Windows 应用商店/通用应用程序中无法加载哪个 Dll 依赖项?

reactjs - React Native UI 组件方法

android - 检查用户是否在 Android 的 Firebase Google 身份验证中首次通过身份验证

java - AsyncTask是静态的,不同类型的参数和返回值。 Android.osNetworkthreadException

Android SDK 管理器获取失败

c++ - SDK 库 c/c++ Dropbox

c++ - c/c++ 指向数组的指针与指向指针的指针

android - ExceptionInInitializerError Android NDK 由 : UnsatisfiedLinkError: findLibrary returned null 引起