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

Android SDK2 (实操三个小目标)

书接上回:Android SDK 1(概览)-CSDN博客

今天讲讲三个实际练手内容,用的是瑞星微的sdk。

1 实操编译Android.bp

首先还是感叹下,现在的系统真的越搞越复杂,最早只有gcc,后面多了make,后面又是cmake。谁知道在android时代,愈发的变本加厉。感觉现代计算机的发展真的要推翻重来才行了。。。(个人觉得AI引入绝对是个利器。。。)

吐槽归吐槽,为了生活该学的还是要学。

Android的编译系统以前还是makefile,后面就换成ninja,跟着也是引进一大片。大致有以下几个东西。Ninja,编译框架,以前项目也用过,cmake直接生成,基本不可见。Android.bp,感觉有点类似CMakeLists.txt。Soong,将bp文件转成ninja文件,应该就是cmake。Blueprint是解析bp文本的。算是Soong的一部分,不用管。Kati是转换mk文件的,现在可以忽略,不用管。

所以要懂的只有两个。1 安卓的编译打包命令以及相关脚本。2 Android.bp的语法。

在/rk3568_android_sdk/external/test,增加了一个hello.c。用GPT生成了一个小的bp文件。

Android.bp

// 该模块的名称为 "hello"
cc_binary {
    // 指定生成的可执行文件的名称
    name: "hello",
    
    // 指定源代码文件的路径,这里假设源代码文件为 hello.c
    srcs: ["hello.c"],
    
    // 指定编译时的标志
    cflags: ["-Wall", "-Werror"],
    
    // 指定链接时的标志
    ldflags: ["-lm"],
}

hello.c

#include <stdio.h>

void main()
{
    printf("Hello android!\n");
}

编译生成:

make name,我在bp里面定义name是hello,所以命令就是make hello

感觉这块比标准make复杂很多,要解析文本还有目录结构。以后有空再看看吧。对了,一定要先运行source build/envsetup.sh还有lunch。本来我以为lunch不用,结果会出现使用系统自带make的情况,就会失败。

照理说mmm hello也可以,不过在我这就是不行,可能是内存不够的原因。另外make clean也失败。。。

2 实操增加一个App

在packages/apps/中增加一个文件夹,myapp。

创建Android.bp

// packages/apps/MyApp/Android.bp

app {
    name: "MyApp",
    srcs: ["src/**/*.java"],
    resource_dirs: ["res"],
}

在device/xxx/common/device.mk中(xxx就是对应的产品),增加MyApp到PRODUCT_PACKAGES中。

理论上App就增加进去了。(因为我是在笔记本上弄的,资源实在不够,整体编译过不了。只有等回去在台式机再实操。)

3 实操增加一个设备

这个东西就很多了。因为环境和时间原因,还没来得及实操。我参考的, 写的很好,不过感觉像是国外搬运来的?(Android新增LED设备--从底层到上层理解安卓架构_rockchip leds 源码-CSDN博客)

看了看流程:

驱动层还是ko,老套路。

HAL的so加在hardware/libhardware/modules/Android.mk

service是一个服务进程。通过ioclt访问底层,向上提供JNI接口,用HAL_MODULE_ID给Framework匹配。(这个也就是吹爆的HAL解绑吧)

理论上增加设备到此为止。

===============================================================

在Framework中增加服务。frameworks/base/services/core/java/com/android/server/,向下是JNI,向上是aidl。

最后,app通过aidl去访问Framework中的服务。

实在困了。。。

相关文章:

  • Android Q - 应用保活记录(展锐平台)
  • 学习JAVA的第十二天(基础)
  • 进程与线程:通过实际生活来解析计算机的基本运作单位
  • QT绑定信号槽重载
  • VS code下载与使用方法(包含远程调试)
  • anaconda, conda, conda-forge
  • SpringCloud--Sentinel基本概念介绍
  • 如何在Vue项目中应用TypeScript?
  • java 获取项目内的资源/配置文件
  • 第5章---GameplayEffect的使用
  • 算法题 — 三个数的最大乘机
  • Linux系统之部署复古游戏平台
  • RabbitMQ安装
  • 程序计数器介绍
  • 团体程序设计天梯赛 L2-007 家庭房产(并查集模拟)
  • Spring Test 常见错误
  • 本机虚拟机centos7设置固定ip
  • 大模型中 .safetensors 文件、.ckpt文件和.pth以及.bin文件区别、加载和保存以及转换方式
  • wordpress外贸独立站
  • Python爬虫——Urllib库-1
  • 要更加冷静地看待“东升西降”的判断
  • 新城市志|上海再攻坚,营商环境没有最好只有更好
  • 巴基斯坦关闭全部领空
  • 4月金融数据前瞻:受去年低基数因素影响,社融增量有望同比大幅多增
  • 2025年上海市模范集体、劳动模范和先进工作者名单揭晓
  • 异域拾异|大脚怪的形状:一项神秘社会学研究