当前位置: 首页 > news >正文

OrangePi Zero 3学习笔记(Android篇)2 - 第一个C程序

目录

1. 创建项目文件夹

2. 创建c/cpp文件

3. 创建Android.mk/Android.bp文件

3.1 Android.mk

3.2 Android.bp

4. 编译

5. adb push

6. 打包到image中


在AOSP里面添加一个C或C++程序,这个程序在Android中需要通过shell的方式运行。

1. 创建项目文件夹

首先需要选择一个文件夹添加自己的目录,优先选择device文件夹对应方案内(需要避免添加到system文件夹)。

2. 创建c/cpp文件

新建文件helloworld.cpp(在VSCode + SSH中)

内容如下:

#include <stdio.h>
#include <stdlib.h>int main()
{printf("Hello World, Android C/C++\n");return 0;
}

3. 创建Android.mk/Android.bp文件

Android.mk是makefile文件,和Linux下是一样的,而Android.bp是Android设计的格式,功能和mk一样。

3.1 Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \helloworld.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_MODULE := helloworld
include $(BUILD_EXECUTABLE)

其中可能需要修改的部分有:LOCAL_SRC_FILES、LOCAL_C_INCLUDES和LOCAL_MODULE。

LOCAL_SRC_FILES是c/cpp源代码文件列表

LOCAL_C_INCLUDES是指定头文件目录路径,

3.2 Android.bp

cc_binary {name: "HelloWorld",srcs: ["helloworld.cpp",],
}
  • cc_binary:编译成二进制可执行文件,类似于Android.mk中的BUILD_EXECUTABLE。
  • name:编译出的模块的名称,类似于Android.mk中的LOCAL_MODULE。
  • srcs:源文件,类似于Android.mk中的LOCAL_SRC_FILES。

4. 编译

进入这个文件夹,通过mmm编译。

完成后可以在/out/target/product/apollo-p2/obj/EXECUTABLES/helloworld_intermediates下找到编译后的执行文件。

5. adb push

在Ubuntu中通过adb push将生成的执行文件拷贝到Zero 3中。

$ adb push helloworld /product/app/helloworld: 1 file pushed, 0 skipped. 11.1 MB/s (2820 bytes in 0.000s)adb: error: failed to copy 'helloworld' to '/product/app/helloworld': remote couldn't create file: Read-only file system

目标位置不能写,应该是adb没有权限写product/app目录。

adb root
adb remount

重新执行push命令后成功。

回到Zero 3 shell界面,需要返回上一级目录再进入这个文件夹,这时候可以看到helloworld执行文件。执行./helloworld后提示

 在串口shell里面运行

chmod 0777 helloworld

提示操作不允许,因为此时adb还拥有权限,回到Ubuntu的adb界面,进入adb shell界面。

adb shell
cd product/
cd app/
chmod 0777 helloworld
./helloworld

此时可以看到打印信息:

退出adb shell,回到串口shell可以再次运行helloworld:

6. 打包到image中

通过make编译源代码和pack打包,对应的执行文件才能打包到image中,默认的位置没找到(System/bin?没确认这个结果)。

可以在bp文件中添加product_specific: true指定生成到product文件夹内。

cc_binary {name: "HelloWorld",srcs: ["helloworld.cpp",],product_specific: true
}

然后在apollo_p2.mk文件中添加PRODUCT_PACKAGES += HelloWorld

PRODUCT_PACKAGES += DragonAtt
PRODUCT_PACKAGES += SoundRecorder
PRODUCT_PACKAGES += HelloWorld

其中HelloWorld对应bp文件里面的name。

相关文章:

  • 政务浏览器 一站式首页功能配置说明
  • JavaScript ES6+ 最佳实践
  • 【DB2】DB2启动失败报错SQL1042C
  • 2025-05-07 Unity 网络基础7——TCP异步通信
  • 什么是声明式UI什么是命令式UI?鸿蒙ArkTS为什么是声明式UI-优雅草卓伊凡
  • 智算中心基础设施0-1建设全流程及投产后的运维
  • 融合静态图与动态智能:重构下一代智能系统架构
  • CPU-GPU-NPU-TPU 概念
  • 【HarmonyOS 5】鸿蒙Web组件和内嵌网页双向通信DEMO示例
  • Feign 重试策略调整:优化微服务通信的稳定性
  • PAT(最近)
  • 商汤科技前端面试题及参考答案
  • 如何避免项目结束后知识流失
  • 【基础知识】常见公式计算(三)
  • 【论文阅读】Harnessing the Power of LLM to Support Binary Taint Analysis
  • 汽车服务小程序功能点开发
  • 密码学基石:哈希、对称/非对称加密与HTTPS实践详解
  • 世界无人机大会将至,大势智慧以“AI+实景三维”赋能低空经济
  • TypeScript类型挑战-刷题
  • 适合java程序员的Kafka消息中间件实战
  • 巴基斯坦称对印精准打击造成设施损坏和人员伤亡
  • 正荣地产:董事会主席、行政总裁辞任,拟投入更多精力推动境内债重组等工作
  • 中信银行:拟出资100亿元全资设立信银金融资产投资有限公司
  • 云南临沧一行贿案金额认定比受贿案多41万,重审时检方变更金额起诉
  • 金融监管局:已设立74支私募股权投资基金,支持投资科技创新企业
  • 上海“随申兑”服务平台有哪些功能?已归集800余个惠企政策