如何构建在 Android 上运行的本机(命令行)可执行文件?

2024-04-20

我已经成功构建了一个使用本机 (JNI) 库的 Android 应用程序 (GUI)。

但是,现在我想创建一个从命令行(root 权限)运行并且根本不使用 GUI 的可执行文件。我如何构建这样的东西?


从 NDK r8d 开始,这个问题可以通过更简单的方式解决。

  1. 创建一个具有以下目录层次结构的项目:

    project/
        jni/
            Android.mk
            Application.mk
            *.c, *.cpp, *.h, etc.
    
  2. 在Android.mk中填写以下内容。最重要的是最后一行。检查 NDK 文档以了解其他变量的含义。

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_MODULE := name-of-your-executable
    LOCAL_SRC_FILES := a.cpp b.cpp c.cpp etc.cpp
    LOCAL_CPPFLAGS := -std=gnu++0x -Wall -fPIE         # whatever g++ flags you like
    LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -fPIE -pie   # whatever ld flags you like
    
    include $(BUILD_EXECUTABLE)    # <-- Use this to build an executable.
    
  3. 前往project/目录,然后只需键入

    ndk-build
    

    结果将被放置在project/libs/<arch>/name-of-your-executable.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何构建在 Android 上运行的本机(命令行)可执行文件? 的相关文章

随机推荐

  • 在 Protractor 中定位父元素的推荐方法

    根据最新公布的时尚指南 https github com angular protractor blob master docs style guide md never use xpath 使用by xpath 定位器被认为是一种不好的做
  • Qt5 链接器错误:找不到版本“Qt_5”

    1 问题 我正在尝试构建开源motorcar https github com evil0sheep motorcar在 Arch Linux 机器上从头开始项目 Motorcar 是一款 Linux VR 窗口管理器 可与 Oculus
  • 无法打开原子

    我无法打开 Atom 编辑器 昨天还好好的 今天不知道为什么打不开了 我的电脑上没有 Windows 更新或任何东西 我尝试删除一些在线论坛中提到的 存储 文件夹 但没有帮助 有什么建议么 我使用的是 Atom 版本 1 19 6 0 如果
  • Kafka 连接教程停止工作

    我在此链接中执行了步骤 7 使用 Kafka Connect 导入 导出数据 http kafka apache org documentation html quickstart http kafka apache org documen
  • 链接描述文件未按预期跳过字节

    因此 我有这个汇编文件 我使用 GNU as 进行汇编 并使用链接器脚本与 GNU ld 进行链接 链接描述文件 boot ld INPUT boot o OUTPUT boot out ENTRY boot start SECTIONS
  • 并行处理 vec:如何安全地进行,或者不使用不稳定的功能?

    我有一个巨大的向量 我希望能够并行加载 操作 例如在一个线程中加载前十万个索引 然后在另一个线程中加载下一个索引 依此类推 由于这将是代码中非常热门的部分 因此我提出了以下概念验证不安全代码来在不使用 Arcs 和互斥体的情况下执行此操作
  • 自动持有自旋锁时返回是否不安全?

    受人尊敬的书说 The flags参数传递给spin unlock irqrestore必须与传递给的变量相同spin lock irqsave 您还必须致电spin lock irqsave and spin unlock irqrest
  • C 编程中 @ 符号的使用

    我正在使用一些最初编写的代码IAR https en wikipedia org wiki IAR Systems IAR Embedded Workbench并使用 GCC 编译器将其转换为编译 然而 我被困在某一行 因为我不理解语法或发
  • 创建无法在其板条箱外部实例化的零大小结构的惯用方法是什么?

    我有类似的东西 mod private My crate pub struct A impl A pub fn new gt Self Self fn main External code let obj private A new let
  • 两个或多个(哈希)映射的并集

    我有两个包含相同类型对象的地图 Map
  • 如何使用Delphi 2010优化上传例程?

    My 尚未发布Delphi 2010 应用程序允许用户将他们的文件上传到我的服务器 现在我使用 HTTPS POST 发送文件 简化的 算法基本上是 将文件拆分为 片 每个片 256KB 对于每个切片 将其 POST 到服务器 IE 对于
  • Flex/AS3很奇怪的简单数字运算问题

    我的问题在 Flex 中描述起来非常简单 0 8 0 2 0 6000000000000001 以前有人得到过这个 我确定前两个成员是 0 8 和 0 2 并且是 Number 类 为什么会发生这种情况 另一件事 我从 像这样输入 var
  • Flutter 2.0 与 Firebase Cloud Messaging:在 Android 上未调用 onMessage

    我在 Flutter 2 0 中遇到了 Firebase Cloud Messaging onMessage 问题 功能 FirebaseMessaging onMessage listen RemoteMessage message is
  • 向 Spring @Scheduled 提供时区?

    如何为基于 Spring 的系统配置时区 预定 http static springsource org spring docs 3 2 x spring framework reference html scheduling html s
  • C++ 单行注释后跟 \ 转换为多行注释

    C 标准中在哪里记录了如果使用注释行的功能 some comment 样式 在行尾放置 评论被转换为多行 使用 g 4 8 和 VS 2012 进行测试 some interesting stuff another interesting
  • 如何在 gnuplot 多重绘图模式下输出文件?

    我正在 gnuplot 版本 4 6 patchlevel 5 多重绘图模式下绘制图表 这些图表正在使用重读进行更新 set multiplot layout 3 3 do for planeIter 4 10 3 for ringIter
  • 为多个动态控件创建事件处理程序

    我有一个创建两个动态控制按钮的用户窗体 但我很难访问 name动态控件的属性 这意味着我无法正确创建事件处理程序 由于这个问题 我无法创建事件处理程序 下面显示了创建动态控件的代码以及我为事件处理程序编写的代码 无法正常运行 Option
  • 实时获取 macOS 输出设备音频缓冲区

    我试图tapmacOS 上当前选择的输出音频设备 因此我基本上有一个直通侦听器 可以监视当前正在输出的音频流而不影响它 我想将这些数据实时复制到环形缓冲区 以便我可以单独对其进行操作 Apple 文档和 过时 SO 答案的结合令人困惑 我是
  • 使用 VS2019 和 TFS2018 vnext 构建系统

    有谁知道是否可以将 VS2019 与 TFS2018 vnext 构建系统一起使用 您无法在生成定义中选择 VS2019 但可以选择 最新 作为 Visual Studio 的版本 不幸的是 这里没有选择VS2019 我已经在安装了VS20
  • 如何构建在 Android 上运行的本机(命令行)可执行文件?

    我已经成功构建了一个使用本机 JNI 库的 Android 应用程序 GUI 但是 现在我想创建一个从命令行 root 权限 运行并且根本不使用 GUI 的可执行文件 我如何构建这样的东西 从 NDK r8d 开始 这个问题可以通过更简单的