android - 将基于C的linux应用程序移植到Android平台

标签 android android-ndk

我有基于 C Linux 的应用程序,现在我想将它移植到 Android。 我想通了,我可以从 Android NDK 中提取工具链并构建我的应用程序,但是如何制作 APK 以便我可以在不需要 root 访问权限的情况下将它安装在 android 设备上。

在 Linux 中,我曾经使用 bash 脚本安装它,该脚本用于将我的应用程序相关文件放在不同的文件夹中,如 /opt/etc(与共享的文件其他应用程序)和 /var 。我们如何在 Android 中处理这个问题。 Android中是否有一个类似于/etc的文件夹,我可以在其中放置其他应用程序可以读取的文件。

谢谢
-M

最佳答案

首先,如果您的项目使用 NDK 独立工具链“按原样”编译,您就很幸运了。通常,bionic 是不够的,人们需要调整构建环境(从 libpthread 到成熟的 buildroot 带有静态 C 运行时的备用工具链)。

至于共享文件位置,在 Android 上它被命名为 "external storage" .您的应用和其他应用可能需要特殊权限才能写入和读取此位置。此处不存在目录 /opt。您没有 /etc 的写入权限,但可以读取 /etc/hosts 等文件。

关于 APK。没错,这是在 Android 上分发和安装应用程序的终极方式。但是,即使没有 root,您也可以在本地安装和运行命令行可执行文件。通常它是在打开开发人员选项并启用 USB 调试的情况下完成的。现在您可以打开 adb shell,安装并运行您的程序。诀窍是外部存储(见上文)被标记为“不可执行”。因此,您必须为您的二进制文件找到另一个地方。通常,/data/local/tmp 将是一个不错的选择。

您可以在设备上使用终端模拟器,而不是 adb

如果您选择构建 APK,您可能更愿意将您的应用程序转换为共享库,以便通过 JNI 为 Java 执行操作。但也可以将命令行二进制文件打包为 APK 的一部分并使用 Java Runtime.exec() .

关于android - 将基于C的linux应用程序移植到Android平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34327711/

相关文章:

android - 在 NestedScrollV 中禁用 RecyclerView 的触摸事件

java - 如何关闭此 Activity ?

android - 在 Android NDK 项目中从命令行运行 CMake

android - 为 Android 生成共享库

android - 如何使用适用于 android 的 Windows 7 64 位操作系统使用 ndk r12 配置 FFmpeg 库

android - 我如何知道 Android .so 是用哪个运行时编译的?

java - 如何将 jar 文件保存在外部但仍然在我的 Android 项目中使用它的类?

java - 等待一个异步操作完成android

android - 有 Bluedroid 测试或示例代码吗?

java - RecycleView 中的空对象引用