如何玩Android系统源码

原创内容,转载请注明出处,多谢配合。

这里简单说下如何玩Android系统代码。

一、rom的下载、编译和刷机

1)rom下载与编译

对应的环境和工具就不提了,网上一搜一大把。
repo init 地址 拉下.repo
repo sync -c - -no-tags 同步
source ./build/envsetup.sh 在当前bash环境下读取并执行build/envsetup.sh脚本中的命令。
lunch 选择对应的包
make -jn 编译

rom局部编译
系统开发就是编译费劲,但是也不用每次都全编,因为一次全编多则几小时,少则也要半小时,如果是改局部模块可以只编译局部就好了:
比如:
Frameowork编的比较多的:
frameworks/base/services mm可以单独编 对应service.jar push到system/framwork。
虚拟机:
make libart 生成libart.so push到system/lib
make install 生成installd push到system/bin
等等不一一例举。

2)rom刷机

编译好的内容在工程out目录下
fastboot flash boot system userdata vendor 常见的就是刷这几个,如果机器没全image,那还是按脚本来刷一次全的, 包括dtbo、 vbmeta等好多image。
各image介绍:
boot.img: 主要包括kernel。
system.img:包括了主要的包、库等文件。
userdata.img:包括了一些用户数据,刷了之后用户数据和安装的应用全部丢失,还原成出场设置。
vendor.img :带有品牌标识和驱动的包,与芯片厂商相关:比如qcom ,mtk等。谷歌要把系统和驱动分开,方便之后升级系统。

二、版本控制:

这里简单例举下最常用的一些命令。

1)git 命令:
  • 基本命令
    git init、git clone、git remote 、git show、git blame 、git status、git branch、git log、git diff、git cherry-pick、git revert

  • 分支管理
    git add、git commit -s /-m /—amend 、git pull 、git push 、git merge、git reset (- - hard HEAD^) 、git checkout

  • rebase:回溯(修改或删除)之前的提交
    git rebase
    git rebase git rebase -i【当前修改的提交的前一个】
    做修改
    git add .
    git commit —amend
    git rebase —continue
    没有问题可以 - - skip
    退出rebase - - abort

  • 暂存:可用来暂存当前正在进行的工作, 比如想pull 最新代码, 又不想加新commit, 或者另外一种情况,为了fix 一个紧急的bug, 先stash, 使返回到自己上一个commit, 改完bug之后再stash pop, 继续原来的工作。
    git stash
    do some work
    git stash pop

  • patch移植:将本地修改的change保留成文件,可以应用于跨工程的patch移植。
    git am使用:将本地修改的change保留成文件,可以应用于跨工程的patch移植
    git am —keep-non-patch *.patch one by one地应用分支
    如果有冲突:
    $git apply —reject patch名
    生成.rej文件,是描述冲突的问题,按它的提示把对应文件的冲突解掉
    解完冲突删掉.rej文件,然后git add 修改文件
    最后:git am --resolved

2)repo命令

repo init 、repo sync 、repo start 、repo upload

3)adb 命令:
  • 基本操作:cd、pwd、ls、vim、cat、reboot
  • 文件:mkdir、touch 、cp、rm、mv、push、pull
  • 权限:chmod、chown、chgrp、root、disable-verity、remount
  • 进程:ps -A 、kill
  • 查询: 全局搜某个字符串 grep -r "XXXX" ./* 全局搜某个文件 find -name XXX
  • dumpsys相关 window、activity、meminfo、package等等,查看对应的系统log信息。

三、Android系统模块了解

1)基本概念

一个android项目包括许多的模块,所有项目模块通过repo中的manifest.xml统一管理,repo init的时候会拉下来一个.repo里面就有它,之后repo sync的工程内容就是manifest.xml对应的模块。这里还牵扯到共线与共分支的问题,共线就是芯片相关平台基线,共分支就是模块各自的版本控制。这里不细说,做过系统的自然懂,玩aosp的不用懂。

2)核心模块
  • build/soong 和 build/make 主要是跟编译规则相关的,大部分都是一些mk配置,来决定系统按什么顺序来串联和编译。他俩适配好了,基本上就可以lunch了。
  • system/core/ 包括不少系统核心工具,这部分可以单独编译boot image。
  • frameworks/base/ 这里是系统framework部分,包括java和native,编译后会生成两个核心文件:framework.jar和services.jar
  • art/ 虚拟机内容
  • packages/apps 系统app
  • out/target/product/ 编译生成的文件存在这目录下
3).mk、.dp文件

makeFile是一份定义了源文件间依赖关系、如何编译各个源文件并生成可执行文件的说明书,决定整个工程的编译规则,实现自动化编译。android P版本开始陆续用dp取代mk。

我这里就是记了个简单的流水账,了解上面这些之后,基本上就能比较顺利的开始玩Android系统源码了。

你可能感兴趣的:(如何玩Android系统源码)