AOSP源码开发

AOSP源码开发

  • @Author: cpu_code
  • @Date: 2020-07-11 16:18:27
  • @LastEditTime: 2020-07-12 21:08:41
  • @FilePath: \note\android_bottom\summary.md
  • @Gitee: https://gitee.com/cpu_code
  • @Github: https://github.com/CPU-Code
  • @CSDN: https://blog.csdn.net/qq_44226094
  • @Gitbook: https://923992029.gitbook.io/cpucode/

android源码之前分为四层 :

Android四层

新的android源码分为五层, 增加了HAL层 :

androidw的五层

## 源码级开发( 系统开发)

源码级开发就是基于AOSP( Android Open Source Project) 环境的开发工作, 主要开发场景为Android系统定制, 比如手机设备的MIUI, Flyme, Smartisan OS, 基于电视的LetvUI, 甚至还有针对投影仪, 路由器等传统物联设备的Android系统定制开发。

Android系统分层

HAL层: ( Hardware Abstract Layer) 硬件抽象层。 Android系统里封装内核驱动程序的接口层。 对上层提供接口, 屏蔽底层驱动实现细节.

为了摆脱 GNU License( 开源感染性) ,Google将Linux内核中跟底层硬件操作相关的逻辑封装成HAL层接口, 厂商基于接口去实现, 不直接在内核空间实现驱动。 因为Android系统遵循 Apache License, 不强制开源。

三方应用开发与源码级开发的区别

三方应用开发是基于Android SDK开发。 主要技术方向为APP混合APP开发, 数据库, 网络协议, 应用架构等, 服务于商业APP需求。

源码级开发是基于AOSP环境开发, 主要技术方向为系统应用开发, Framework开发, 底层浏览器内核开发, 音视频编解码开发, 虚拟机开发, 底层驱动开发等。 服务于系统定制需求。

AOSP官网

AOSP官网提供系统开发相关指导, 比如源码的环境搭建, 下载, 编译, 维护, 更新版本, 开放驱动的下载等

https://source.android.google.cn/


Ubuntu系统安装与介绍

AOSP环境要求操作系统为Linux或者Mac OS。

如果想在Window下进行AOSP开发, 通过通过虚拟机软件安装一个Linux系统, 比如Ubuntu或CentOS。

安装虚拟机

VirtualBox , VMWare

Ubuntu系统的安装与介绍

Ubuntu系统是开发使用比较广泛的一个Linux发行版 , 带LTS( Long Term Support) , 代表是官方长期维护的版本


常见Linux命令

Linux命令是对Linux系统进行管理的命令。 对于Linux系统来说, 无论是中央处理器、 内存、磁盘驱动器、 键盘、 鼠标, 还是用户等都是文件。 命令就是去操作文件, 以达到管理系统的目的。

Linux包含系统内置shell命令( 如 cd) 及安装的其他Linux命令( 如 git) 。

相比Window系统的强项-图形化, Linux的命令则是它的强项。 熟练掌握常见Linux命令, 是做Linux环境下开发的基本技能。

PS: Linux命令大部分在Mac OS 下也是通用的, 它们都属于类Unix系统

目录操作

# 获取当前目录路径
pwd 
# 查看文件列表 eg: ls dirname
ls
# 查看所有文件, 包括隐藏文件
-a 
# 查看文件详细信息
-l 
# 代表当前目录
.
# 代表上一级目录
..
# 进入某一个目录 eg: cd dirname
cd 
# 进入上一级目录
cd .. 
# 进入上次所在目录
cd - 
# 创建目录
mkdir 
# 创建多级目录
-p 
# 拷贝文件或者目录 eg: cp src1 src2... dest
cp 
#  拷贝目录 eg: cp -r src dest
-r
# 移动文件或者目录 eg:mv src dest (如果srcfile和destfile在同一目录下, 就是重命名的效果)
mv
# 删除文件 eg: rm filename1 filename2 ...
rm 
# 删除目录 eg: rm -r dirname
-r 

文件查找

# 查找某一个文件, find [path] -name <filename>
find 
# 从某一个文件/目录下所有文件 中匹配字符串, grep [-r -n ]<string> path
grep 
# 遍历目录查找
-r 
# 显示行号
-n 

系统操作

# 切换到某一个用户(需要输入要切换的用户的密码) eg: su username
su 
# 非root用户强制执行一些需要root权限的操作(需要输入当前用户的密码) eg: sudo rm filename
sudo
# Ubuntu的软件管家, 进行软件的更新, 卸载与维护。
apt-get
# 终端下的文本编辑器。
vim 
# 进入编辑模式
i 
#  跳到命令模式
ESC
# 删除一行
dd 
# 保存退出
:wq
# 不保存退出
:q!
# 查看文件,将文本内容打印到控制台。
cat 

vim

# 安装VIM
sudo apt-get install vim

# 卸载VIM
sudo apt-get remove vim

# 更新到最新软件列表
sudo apt-get update

chmod

# 修改文件权限, eg: chmod a+x xxx.sh chmod 777 xxx.sh
# 权限设定可以使用字串[ugoa][+-=][rwx]或者数字 (r=4,w=2,x=1,-=0),
# u 拥有者
# g 用户组
# o 其他用户
# a 所有人
# + 表示增加权限
# - 表示取消权限
# = 表示直接指定权限
chmod

AOSP源码工作环境

源码工作环境, 就是安装所依赖的一些软件库, 以及开发调试时需要进行的一些配置。 主要分为编译环境准备, AOSP源码下载, 源码预编译等。 这里主要介绍在Ubuntu14.04 LTS下开发Android6.0代码的工作环境准备。

编译环境搭建( Ubuntu14.04)

JDK和依赖包下载

#获取源的更新
sudo apt-get update 

#下载openjdk7
sudo apt-get install openjdk-7-jdk 

sunjdk 采用Java研究许可( Java Research License, 简称JRL) 许可证书, 部分开源, 仅限研究。 openjdk采用GNU许可证书, 完全开源。 sunjdk中私有APIs用类似功能的开源代码替换/重新实现。

安装其他依赖

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g -dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx 11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

USB设备权限配置

以root身份在/etc/udev/rules.d/ 目录下创建一个rules规则文件, AOSP提供的rules里配置了常见Android设备

# 下载并配置AOSP的usb设备权限规则模板
wget -S -O - [http://source.android.com/source/51-android.rules](http://source.andro id.com/source/51-android.rules) | sed "s/<username>/$USER/" | sudo tee >/dev/null /etc /udev/rules.d/51-android.rules; sudo udevadm control --reload-rules

执行adb devices的时候可能会提示permission denied, 原因就是因为自己的Android设备没有加入到这个配置文件当中

# 列出当前系统识别到的USB设备
lsusb 

假设出现

Bus 001 Device 007: ID 0403:cb48 Future Technology Devices International, Ltd

idVendor是0403, idProduct是cb48

51-android.rules

SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="cb48", MODE="0600", OWNER="<username>"

源码下载与管理

源码预编译

知识扩展

AOSP常见的命令, 目录介绍

Android Build System入门

什么是makefile

ABS的工作流程

AOSP下进行系统开发

Android的启动流程简述

修改系统APP代码

定制framework

进一步修改native层的代码

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

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

相关文章

【Leetcode每日一题】 综合练习 - 找出所有子集的异或总和再求和(难度⭐)(68)

1. 题目解析 题目链接&#xff1a;1863. 找出所有子集的异或总和再求和 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路与实现 为了求解给定整数数组的所有子集并将其异或和相加&#xff0c;我们可以采用递…

【GO】命令行解析 os 与 flag

目录 OS解析命令 简单用法 进阶用法 flag命令解析 基础实例 1. 自定义数据类型 2. 创建多个 FlagSet 3. 整合环境变量和配置文件 os与flag 关键点解析 程序的作用 示例命令行调用 在 Go 语言中&#xff0c;命令行解析是一项基本且常用的功能&#xff0c;它允许开发者…

【Linux系统编程】第十一弹---编辑器vim使用

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、vim的基本概念 2、vim的基本操作 3、vim插入模式命令集 4、vim正常(命令)模式命令集 5、vim末行模式命令集 6、vim操作…

C/C++程序设计实验报告综合作业 | 小小计算器

本文整理自博主本科大一《C/C程序设计》专业课的课内实验报告&#xff0c;适合C语言初学者们学习、练习。 编译器&#xff1a;gcc 10.3.0 ---- 注&#xff1a; 1.虽然课程名为C程序设计&#xff0c;但实际上当时校内该课的内容大部分其实都是C语言&#xff0c;C的元素最多可能只…

mac用Homebrew安装MySQL并配置远程登录

1. 简介 MySQL 是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;后被 Oracle 公司收购。MySQL 使用 SQL&#xff08;Structured Query Language&#xff09;作为查询语言&#xff0c;并提供了强大的功能和性能…

鸿蒙开发面试真题——面向对象

鸿蒙开发面向对象的面试题是近年来在软件开发领域中备受关注的话题。作为一种新兴的操作系统&#xff0c;鸿蒙系统的开发者需要具备扎实的面向对象编程知识和丰富的开发经验。在面试中&#xff0c;面试官常常会通过一系列的问题来考察面试者对于鸿蒙开发面向对象的理解和应用能…

ES 深度分页问题及针对不同需求下的解决方案[ES系列] - 第509篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

春游江淮 请来池州 | 五一池州文旅活动时间表大集合,都在这里

快到五一,想好去哪里玩吗?来池州,各景区缤纷活动登场&#xff0c; 速速划重点、敲黑板! 五一放大招!到底怎么玩?文旅活动、阅读推广 非遗展示......现在都已经为你整理好啦!这份超齐全的 五一假期文旅活动时间表,助力您玩转各景区,整个假期嗨不停~ 旅游惠民活动 表演类活动…

salesforce 如何访问lwc组件

访问lwc有哪些途径呢? Action ButtonTabAura use lwc(拓展)如何区分是新建页面还是编辑页面 Action Button xml文件中要配置tab<?xml version"1.0" encoding"UTF-8"?> <LightningComponentBundle xmlns"http://soap.sforce.com/2006/04/…

使用fitten code插件(vscode),替换通义千问,识别需求中的输入输出

今天我们介绍一个工具,具体介绍可以参考我的这篇文章的介绍,支持vs code 插件,Fitten Code是一款由非十科技开发的AI代码助手,旨在通过大模型驱动来提升编程效率和体验-免费神器-CSDN博客https://blog.csdn.net/lijigang100/article/details/137833223?spm=1001.2014.3001…

MySQL怎么看死锁记录

这个结果分成三部分&#xff1a; (1) TRANSACTION&#xff0c;是第一个事务的信息&#xff1b; (2) TRANSACTION&#xff0c;是第二个事务的信息&#xff1b; (3)WE ROLL BACK TRANSACTION (1)&#xff0c;是最终的处理结果&#xff0c;表示回滚了第一个事务。 第一个事务的信…

文件批量重命名:高效添加前缀顺序编号,让文件整理变得轻松简单

电脑中的文件数量日益增长&#xff0c;如何有效地管理和整理这些文件成为了许多人的难题。你是否曾在大量的文件中迷失&#xff0c;寻找某个特定文件时感到困惑和疲惫&#xff1f;现在&#xff0c;我们为您带来了一款全新的文件改名工具——"一键式文件改名神器"&…

计算机复试项目:SpringCloud实战高并发微服务架构设计

秒杀购物商城--环境搭建 秒杀购物商城基础服务组件--详细介绍 秒杀购物商城基础服务--权限中心 秒杀购物商城业务服务--收货地址 秒杀购物商城业务服务--秒杀活动服务 秒杀购物商城--购物车的功能设计及分析 秒杀购物商城基础服务-用户中心 秒杀购物商城业务服务--商品中…

通过共享网络使树莓派4联网

一、问题 尝试配置/boot/dhcpcd.conf文件无效&#xff0c;wifi依然无法联网&#xff0c;且通过桌面选择wifi输入密码后同样无法联网&#xff1b; 二、环境 1、可以通过网线连接电脑&#xff0c;并且可以连接串口&#xff1b; 2、可以通过静态地址通过网线访问树莓派ssh端口&…

misc学习

一.知识点 1.BMP文件 BMP文件主要有四部分组成&#xff0c;位图头、位图信息、调色板、位图数据。 bmp文件头(bmp file header)&#xff1a;提供文件的格式、大小等信息 位图信息头(bitmap information)&#xff1a;提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息…

[C++][算法基础]整数划分(统计动态规划)

一个正整数 &#x1d45b; 可以表示成若干个正整数之和&#xff0c;形如&#xff1a;&#x1d45b;&#x1d45b;1&#x1d45b;2…&#x1d45b;&#x1d458;&#xff0c;其中 &#x1d45b;1≥&#x1d45b;2≥…≥&#x1d45b;&#x1d458;,&#x1d458;≥1。 我们将这…

SDB2F5 1.5A,高达28V输出1.2MHz升压转换器芯片IC

一般说明 该SDB2F5是一个恒定的频率&#xff0c;5针SOT23电流模式升压转换器&#xff0c;低功耗应用。SDB2F5交换机位于1.2MHz&#xff0c;并允许使用高度小于或等于2mm的微小、低成本电容器和电感器。内部软启动的结果在小浪涌电流和延长电池寿命。 该SDB2F5操作从一个…

【15-聚类分析入门:使用Scikit-learn进行K-means聚类】

文章目录 前言K-means聚类的原理Scikit-learn中的K-means实现安装与导入生成模拟数据应用K-means聚类可视化聚类结果选择K的值总结前言 聚类分析是一种无监督学习方法,用于将数据集中的样本分组成若干个簇(cluster)。K-means是最广泛使用的聚类算法之一,其核心思想是将数据点…

爱普生RX8111CE工厂流水线控制模块实现超长待机

经过多年的高速发展&#xff0c;我国已基本实现工业机械化&#xff0c;但距离工业自动化还有很大差距。随着机器人、工业自动化趋势愈演愈烈&#xff0c;未来发展前景日趋明朗。工厂流水线的要求也日益增加&#xff0c;其中包括对计件、计时等定量的要求&#xff0c;还有对设备…

【算法每日一练】

蛮有意思的的一道题&#xff0c;最后要判断能否成为一种1~n的全排列&#xff0c;我最这样做的&#xff1a; 整个数组先排序一下。假设遍历到了i&#xff0c;那就判断前面b和r的个数&#xff0c;但是有想到了后面可能还会对前面的结果产生影响&#xff0c;所以就抛弃了这个想法…