美文网首页Android Framework
如何玩Android系统源码

如何玩Android系统源码

作者: Stan_Z | 来源:发表于2019-08-17 15:42 被阅读0次

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

    这里简单说下如何玩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系统源码

        本文链接:https://www.haomeiwen.com/subject/qxcksctx.html