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

news2025/5/10 20:12:27

目录

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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2372582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DeepResearch深度搜索实现方法调研

DeepResearch深度搜索实现方法调研 Deep Research 有三个核心能力 能力一&#xff1a;自主规划解决问题的搜索路径&#xff08;生成子问题&#xff0c;queries&#xff0c;检索&#xff09;能力二&#xff1a;在探索路径时动态调整搜索方向&#xff08;刘亦菲最好的一部电影是…

【论文阅读】基于客户端数据子空间主角度的聚类联邦学习分布相似性高效识别

Efficient distribution similarity identification in clustered federated learning via principal angles between client data subspaces -- 基于客户端数据子空间主角度的聚类联邦学习分布相似性高效识别 论文来源TLDR背景与问题两个子空间之间的主角&#xff08;Principa…

Elasticsearch知识汇总之ElasticSearch部署

五 ElasticSearch部署 部署Elasticsearch&#xff0c;可以在任何 Linux、MacOS 或 Windows 机器上运行 Elasticsearch。在Docker 容器 中运行 Elasticsearch 。使用Elastic Cloud on Kubernetes 设置和管理 Elasticsearch、Kibana、Elastic Agent 以及 Kubernetes 上的 Elasti…

ROBOVERSE:面向可扩展和可泛化机器人学习的统一平台、数据集和基准

25年4月来自UC Berkeley、北大、USC、UMich、UIUC、Stanford、CMU、UCLA 和 北京通用 AI 研究院&#xff08;BIGAI&#xff09;的论文“ROBOVERSE: Towards a Unified Platform, Dataset and Benchmark for Scalable and Generalizable Robot Learning”。 数据扩展和标准化评…

(41)VTK C++开发示例 ---qt使用vtk最小示例

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;VTK开发 &#x1f448; 1. 概述 本文演示了在Qt中使用VTK的最小示例程序&#xff0c;使用VTK创建显示一个锥体&#xff1b; 采用Cmake作为构建工具&a…

OS7.【Linux】基本指令入门(6)

目录 1.zip和unzip 配置指令 使用 两个名词:打包和压缩 打包 压缩 Linux下的操作演示 压缩和解压缩文件 压缩和解压缩目录 -d选项 2.tar Linux下的打包和压缩方案简介 czf选项 xzf选项 -C选项 tzf选项 3.bc 4.uname 不带选项的uname -a选项 -r选项 -v选项…

国标GB28181视频平台EasyCVR安防系统部署知识:如何解决异地监控集中管理和组网问题

在企业、连锁机构及园区管理等场景中&#xff0c;异地监控集中管控与快速组网需求日益迫切。弱电项目人员和企业管理者亟需整合分散监控资源&#xff0c;实现跨区域统一管理与实时查看。 一、解决方案 案例一&#xff1a;运营商专线方案​ 利用运营商专线&#xff0c;连接各分…

O2O上门服务如何颠覆传统足浴行业?真实案例分析

在湖南经营传统足浴店的张总最近遇到了件让他哭笑不得的事。原本他的门店生意还算稳定&#xff0c;虽然这两年行情不好&#xff0c;但靠着老顾客还能勉强维持。可谁想到&#xff0c;一次好心帮忙&#xff0c;竟让他发现了行业的新天地。 几年前&#xff0c;张总的一位做砂石生意…

金仓数据库永久增量备份技术原理与操作

先用一张图说明一下常见的备份方式 为什么需要永久增量备份 传统的数据库备份方案通常是间隔7天对数据库做一次全量备份&#xff08;完整备份&#xff09;&#xff0c;每天会基于全量备份做一次增量备份&#xff0c;如此循环&#xff0c;这种备份方案在全备数据量过大场景下…

19、HashTable(哈希)、位图的实现和布隆过滤器的介绍

一、了解哈希【散列表】 1、哈希的结构 在STL中&#xff0c;HashTable是一个重要的底层数据结构, 无序关联容器包括unordered_set, unordered_map内部都是基于哈希表实现 哈希表又称散列表&#xff0c;一种以「key-value」形式存储数据的数据结构。哈希函数&#xff1a;负责将…

mysql中int(1) 和 int(10) 有什么区别?

困惑 最近遇到个问题&#xff0c;有个表的要加个user_id字段&#xff0c;user_id字段可能很大&#xff0c;于是我提mysql工单​​alter table xxx ADD user_id int(1)​​。领导看到我的sql工单&#xff0c;于是说&#xff1a;这int(1)怕是不够用吧&#xff0c;接下来是一通解…

FreeRTOS如何实现100%的硬实时性?

实时系统在嵌入式应用中至关重要&#xff0c;其核心在于确保任务在指定时间内完成。根据截止时间满足的严格程度&#xff0c;实时系统分为硬实时和软实时。硬实时系统要求任务100%满足截止时间&#xff0c;否则可能导致灾难性后果&#xff0c;例如汽车安全系统或医疗设备。软实…

element-ui日期时间选择器禁止输入日期

需求解释&#xff1a;时间日期选择器&#xff0c;下方日期有禁止选择范围&#xff0c;所以上面的日期输入框要求禁止输入&#xff0c;但时间输入框可以输入&#xff0c;也就是下图效果&#xff0c;其中日历中的禁止选择可以通过【picker-options】这个属性实现&#xff0c;此属…

[论文阅读]Deeply-Supervised Nets

摘要 我们提出的深度监督网络&#xff08;DSN&#xff09;方法在最小化分类误差的同时&#xff0c;使隐藏层的学习过程更加直接和透明。我们尝试通过研究深度网络中的新公式来提升分类性能。我们关注卷积神经网络&#xff08;CNN&#xff09;架构中的三个方面&#xff1a;&…

多模态大语言模型arxiv论文略读(六十二)

MileBench: Benchmarking MLLMs in Long Context ➡️ 论文标题&#xff1a;MileBench: Benchmarking MLLMs in Long Context ➡️ 论文作者&#xff1a;Dingjie Song, Shunian Chen, Guiming Hardy Chen, Fei Yu, Xiang Wan, Benyou Wang ➡️ 研究机构: The Chinese Univers…

现代框架对SEO的深度影响

第8章&#xff1a;现代框架对SEO的深度影响 1. 引言 Next 和 Nuxt 是两个 &#x1f525;热度和使用度都最高 的现代 Web 开发框架&#xff0c;它们分别基于 ⚛️React 和 &#x1f596;Vue 构建&#xff0c;也代表了这两个生态的 &#x1f310;全栈框架。 Next 是由 Vercel 公司…

密码学--RSA

一、实验目的 1.随机生成明文和加密密钥 2.利用C语言实现素数选择&#xff08;素性判断&#xff09;的算法 3.利用C语言实现快速模幂运算的算法&#xff08;模重复平方法&#xff09; 4.利用孙子定理实现解密程序 5.利用C语言实现RSA算法 6.利用RSA算法进行数据加/解密 …

如何选择自己喜欢的cms

选择内容管理系统cms what is cms1.whatcms.org2.IsItWP.com4.Wappalyzer5.https://builtwith.com/6.https://w3techs.com/7. https://www.netcraft.com/8.onewebtool.com如何在不使用 CMS 检测器的情况下手动检测 CMS 结论 在开始构建自己的数字足迹之前&#xff0c;大多数人会…

BUUCTF——杂项渗透之赛博朋克

下载附件&#xff0c;是一个txt。打开查看&#xff0c;数据如下&#xff1a; 感觉这个像是用十六进制编辑器打开后的图片数据。为了验证此想法&#xff0c;我用010editor打开&#xff0c;发现文件头的确是png图片的文件头。 把txt文件后缀改成png格式&#xff0c;再双击打开&am…

React 中集成 Ant Design 组件库:提升开发效率与用户体验

React 中集成 Ant Design 组件库:提升开发效率与用户体验 一、为什么选择 Ant Design 组件库?二、基础引入方式三、按需引入(优化性能)四、Ant Design Charts无缝接入图标前面提到了利用Redux提供全局维护,但如果在开发时再自己手动封装组件,不仅效率不高,可能开发的组件…