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.csrcs: ["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也失败。。。
对了,这个编译好像每家都有点差别,甚至同一家不同平台都有点区别。在高通的平台,就必须要去android的目录make才行。
2 实操增加一个App
在packages/apps/中增加一个文件夹,myapp。
创建Android.bp
// packages/apps/MyApp/Android.bpapp {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 SDK2 (实操三个小目标)
书接上回:Android SDK 1(概览)-CSDN博客 今天讲讲三个实际练手内容,用的是瑞星微的sdk。 1 实操编译Android.bp 首先还是感叹下,现在的系统真的越搞越复杂,最早只有gcc,后面多了make…...
数字编码与字符编码:解锁编程世界的基石
在计算机的世界里,一切信息都是以数字的形式存在。但是,你有没有想过,我们是如何在这个由0和1构成的数字世界中表示复杂的信息,如文本、图像和声音的呢?本篇文章将带你深入探索数字编码与字符编码的奥秘,它…...
C语言-写一个简单的Web服务器(一)
基于TCP的web服务器 概述 C语言可以干大事,我们基于C语言可以完成一个简易的Web服务器。当你能够自行完成web服务器,你会对C语言有更深入的理解。对于网络编程,字符串的使用,文件使用等等都会有很大的提高。 关于网络的TCP协议在…...
MySQL底层原理
1. 请解释MySQL的逻辑架构和物理架构。 MySQL的逻辑架构和物理架构涉及到多个层面,包括网络连接、服务处理、存储引擎以及数据存储等部分。具体如下: 逻辑架构: 连接层(Connection Layer):客户端通过TCP…...
复盘-word
word-大学生网络创业交流会 设置段落,段后行距才有分 word-选中左边几行字进行操作 按住alt键进行选中 word复制excel随excel改变(选择性粘贴) 页边距为普通页边距定义 ##### word 在内容控件里面填文字(调属性)…...
Vue中的组件:构建现代Web应用的基石
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
【从部署服务器到安装autodock vina】
注意:服务器 linux系统选用ubuntu 登录系统,如果没有图形化见面可以先安装图形化界面 可以参考该视频 --> linux安装图形化界面 非阿里云ubuntu 依次执行以下命令 sudo apt-get update sudo apt-get install gnome sudo reboot阿里云ubuntu 需多执…...
如何使用ArcGIS Pro进行坡度分析
坡度分析是地理信息系统中一种常见的空间分析方法,用于计算地表或地形的坡度,这里为大家介绍一下如何使用ArcGIS Pro进行坡度分析,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的DEM数据,除了DEM数据&…...
Vue3.2 + vue/cli-service 打包 chunk-vendors.js 文件过大导致页面加载缓慢解决方案
chunk-vendors.js 是/node_modules 目录下的所有模块打包成的包, 但是这包太大导致页面加载很慢(我的都要3-4秒了), 这个时候就会出现白屏的情况 解决方案 1、compression-webpack-plugin 插件解决方案 1)、安装 npm …...
Java学习笔记NO.18
T1.理工超市 (1)题目描述 编写一个程序,设计理工超市功能菜单并完成注册和登录功能的实现。显示完菜单后,提示用户输入菜单项序号。当用户输入<注册>和<登录>菜单序号时模拟完成注册和登录功能,最后提示…...
【JVM】聊聊垃圾回收之三色标记算法
在垃圾收集器 CMS中存在四个阶段,初始标记、并发标记、重新标记、并发清理。 那么在并发标记中由于没有STW,业务程序和GC程序是并发执行的,那么是如何实现对象的并发标记的。 并发垃圾回收 并发标记其实是一个宏观的过程,仍然需…...
鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Image)
Image为图片组件,常用于在应用中显示图片。Image支持加载PixelMap、ResourceStr和DrawableDescriptor类型的数据源,支持png、jpg、jpeg、bmp、svg、webp和gif类型的图片格式。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容&am…...
华为OD面试分享8(2024年)
个人情况: 23毕业,24一战跨考ustc,觉G。 211本,目标院校。 知识储备: 仅限408 用leetcode刷过408排序算法 0项目经验 时间线: 23.12.27 投的简历。当时啥也不会啥也不知道,听入职的同学说…...
Java的堆如何分代的?
前言: java对象一般都是朝生夕死,也有部分对象是一直存在的。两种对象如何都放在一起,进行垃圾回收的时候效率较低。所以通过将不同时期的对象放在不同的内存池中,节省垃圾回收的时间,提高性能。 组成: 新生…...
C# CallerMemberName、CallerFilePath、CallerLineNumber
CallerMemberName:调用某个方法的主方法名称 CallerFilePath:调用某个方法的主方法所在的类文件地址 CallerLineNumber:调用这个方法所在的行号 用这三个附加属性,需要设置默认值。...
Claude3系统解读与使用测评
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...
vue3注册全局组件
注册单个全局组件 一.在main.ts中引入注册为全局组件 在main.ts 引入我们的组件跟随在createApp(App) 后面 切记不能放到mount 后面这是一个链式调用用其次调用 component 第一个参数组件名称 第二个参数组件实例 import { createApp } from vue import App from ./App.vue …...
vue 在什么情况下在数据发生改变的时候不会触发视图更新
在 Vue 中,通常数据发生变化时,视图会自动更新。但是,有几种情况可能导致数据变化不会触发视图更新: 1.对象属性的添加或删除: Vue 无法检测到对象属性的添加或删除。因为 Vue 在初始化实例时对属性执行了 getter/se…...
HTML世界之标签Ⅲ
一、dfn 标签 <dfn> 标签是一个短语标签,用来定义一个定义项目。 写法: <dfn></dfn> 二、dialog 标签 <dialog> 标签定义一个对话框、确认框或窗口。 属性 值 描述 open open 规定 dialog 元素是有效的,用户…...
【UE5】游戏框架GamePlay
项目资源文末百度网盘自取 游戏框架 游戏 由 游戏模式(GameMode) 和 游戏状态(GameState) 所组成 加入游戏的 人类玩家 与 玩家控制器(PlayerController) 相关联 玩家控制器允许玩家在游戏中拥有 HUD,这样他们就能在关卡中拥有物理代表 玩家控制器还向玩家提供 …...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
