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中的服务。

实在困了。。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2.3_9 读者-写者问题

2.3_9 读者-写者问题 &#xff08;一&#xff09;问题描述 有读者和写者两组并发进程&#xff0c;共享一个文件&#xff0c;当两个或两个以上的读进程同时访问共享数据时不会产生副作用&#xff0c;但若某个写进程和其他进程&#xff08;读进程或写进程&#xff09;同时访问共…

【nvm】nvm的安装和使用

简言 nvm(nvm-windows)的安装和使用。 nvm 允许你通过命令行快速安装和使用不同版本的 node。 nvm 适用于任何符合 POSIX 标准的 shell&#xff08;sh、dash、ksh、zsh、bash&#xff09;&#xff0c;尤其适用于以下平台&#xff1a;Unix、macOS 和 windows WSL。 不过 nvm 在…

安全防御第七次作业

拓扑图如图所示&#xff1a; 问题&#xff1a;在FW7和FW8之间建立一条IPSEC通道保证10.0.2.0/24网段 可以正常访问到192.168.1.0/24 注&#xff1a;基础配置我在此省略了 一、NAT配置 FW4&#xff1a; FW6&#xff1a; 二、在FW4上做服务器映射 三、配置IPSEC FW5&#xff…

用xshell7连接服务器,读取后台日志

有时候前端需要读取一些后台日志&#xff0c;比如&#xff0c;有时候接一些验证码啥的 或者有时候前后端不分离时&#xff0c;前端上线项目 先讲一下怎么用密码方式连接服务器 密码方式连接服务器 第一步&#xff0c;安装xshell&#xff0c;在新建会话中填写主机&#xff0…

两两交换链表中的节点+力扣

题目 题目链接 . - 力扣&#xff08;LeetCode&#xff09; 题目描述 代码实现 class Solution { public:ListNode* swapPairs(ListNode* head) {if(head nullptr || head->next nullptr) return head;ListNode *tmpHead swapPairs(head->next->next);ListNode …

企微hook源码

企微hook源码已经在QQ群内开源。速度进群下载&#xff0c;避免和谐。 QQ群&#xff1a;649480745

AI应用开发-python对MySQL数据的常见使用

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享&#xff0c;包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

如何做代币分析:以 ARB 币为例

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;mingfootprint.network 数据源&#xff1a;ARB 代币仪表板 &#xff08;仅包括以太坊数据&#xff09; 在加密货币和数字资产领域&#xff0c;代币分析起着至关重要的作用。代币分析指的是深入研究与代币相关的数据…

GitHub Pages部署静态页面

GitHub Pages是GitHub提供的静态页面托管服务&#xff0c;可以用来托管个人博客、项目文档等静态页面。GitHub Pages支持Jekyll&#xff0c;可以使用Jekyll构建博客&#xff0c;也可以使用其他静态页面生成器。现在GitHub Pages也在公测通过工作流部署静态页面&#xff0c;可以…

【趣玩一下】StreamDiffusion一秒100张!实时生成二次元老婆照!

源代码 https://github.com/cumulo-autumn/StreamDiffusion 基础原理 首先Stream Batch&#xff0c;是将原来顺序的去噪步骤改为批量化处理。允许在一个批处理中&#xff0c;每幅图像处于去噪流程的不同阶段。 如此一来&#xff0c;可以大大减少UNet推理次数&#xff0c;显著…

【SQL】1321. 餐馆营业额变化增长(窗口函数rows between 、range between;DATEDIFF()函数)

前述 窗口函数相关知识推荐阅读&#xff1a; 通俗易懂的学会&#xff1a;SQL窗口函数 窗口函数rows between 、range between的使用 MySQL中的DATEDIFF()函数 mysql data类型的加减 常用函数&#xff1a; ROUND() 函数&#xff1a;用于将数值四舍五入到指定的小数位数。FLOO…

Python爬虫——scrapy-2

目录 scrapy简介 安装ipython 基本使用 访问百度 总结 scrapy简介 scrapy shell是Scrapy框架提供的一个交互式命令行工具&#xff0c;用于快速调试和测试Scrapy爬虫。它能够加载Scrapy项目的设置和爬虫代码&#xff0c;并提供一个交互式环境&#xff0c;可以在其中执行Scra…

云计算项目七:jump-server安装部署

jump-server安装部署 配置清单 jumpserver概述 Jumpserver是一款开源的堡垒机&#xff0c;可使系统的管理员和开发人员安全的连接到企业内部服务器上执行操作&#xff0c;并且支持大部分操作系统&#xff0c;是一款非常安全的远程连接工具 常见支持的系统 CentOS, RedHat, …

GNURadio+USRP+OFDM实现文件传输

文章目录 前言一、发送端1、参数配置1&#xff09;Random Source2&#xff09;stream to Tagged stream3&#xff09;Stream CRC324&#xff09;Protocol Formatter5&#xff09;Repack Bits6&#xff09;Virtual Sink7&#xff09;Chunks to Symbols8&#xff09;Tagged Strea…

关于装载类子系统

装载类子系统 类加载器字节码调节器类加载运行时数据区 类加载器 将class文件加载进jvm的方法去&#xff0c;并在方法去中创建一个java.lang.Class对象作为外界访问这个类的接口。实现这个动作的代码模块称为类加载器。 类加载器分类 启动类加载器&#xff08;Bootstrap C…

keycloak18.0.0==本地源码启动

github下载源码&#xff0c; 版本18.0.0 java和maven的版本如下 E:\keycloak-18.0.0>java -version java version "21.0.1" 2023-10-17 LTS Java(TM) SE Runtime Environment (build 21.0.112-LTS-29) Java HotSpot(TM) 64-Bit Server VM (build 21.0.112-LTS-…

EMC测试整改:提升产品合规性和市场竞争力?|深圳比创达电子

在当前的产品研发和制造领域&#xff0c;电磁兼容&#xff08;EMC&#xff09;测试是确保产品符合法规要求并能够在各种电磁环境下正常工作的重要环节。然而&#xff0c;很多企业在进行EMC测试时可能会遇到一些问题和不合格情况&#xff0c;因此需要进行整改来提升产品的合规性…

leetcode 热题 100_合并区间

题解一&#xff1a; 排序&#xff1a;先将区间按左边界从小到大进行排序&#xff0c;假设排序后a区间在b区间之前&#xff0c;根据a区间右边界和b区间左边界的大小判断是否重叠&#xff0c;如果重叠则将区间合并为一个。考虑到区间完全处于另一区间内的情况&#xff0c;合并时应…

一个数据库表格缺少自动增加的字段导致添加一条数据失败

一个数据库表格缺少自动增加的字段导致添加一条数据失败。最近要整理出一个cms网站源程序&#xff0c;因此新建了一个目录&#xff0c;将需要的文件复制到该目录。复制好以后&#xff0c;试用的时候发现添加留言失败。经过数小时的查找原因&#xff0c;最后找到原因&#xff0c…