Android aosp 编译系统基础相关命令

 源码管理 

  找到原有的.git  删除后 添加自己的git   

    find ./ -name '.git' | xargs rm -rf

常用命令

  gettop 函数     获取当前编译环境的work_directory目录 如下所示,适用于在深层目录中 跳转其他目录 

(aosppy2) aosp@ubuntu:~/android/android5.1$ cd packages/apps/gifaLibs/common/
(aosppy2) aosp@ubuntu:~/android/android5.1/packages/apps/gifaLibs/common$ cd $(gettop)
(aosppy2) aosp@ubuntu:~/android/android5.1$ cd packages/apps/gifaLibs/common/
(aosppy2) aosp@ubuntu:~/android/android5.1/packages/apps/gifaLibs/common$ cd $(gettop)/packages
(aosppy2) aosp@ubuntu:~/android/android5.1/packages$ pwd
/home/aosp/android/android5.1/packages
(aosppy2) aosp@ubuntu:~/android/android5.1/packages$

  croot  指令   输入后 直接回到当前编译环境的work_directory

   m  :make的缩写    -jx  参数-j 表示job  后面的x:表示工作的线程数

  mm : 表示编译当前目录的mk文件

  MMM : 标识编译指定目录下的mk文件,例如当修改common文件后,编译其他目录的App应用

(aosppy2) aosp@ubuntu:~/android/android5.1/packages/apps/gifaLibs/common$ mmm ../../gifaApps/test1/

  jgrep :只在java文件中查找 指定的字符串   示例:  jgrep "Activity"

  cgrep :只在C/C++文件中查找指定的字符串   示例:  cgrep "Activity"

  resgrep   只在res资源文件中查找指定的字符串

  godir  查找加跳转指令  示例   godir  ctgmath    找到这个文件所在的目录 并且跳转进去

    godir 会在第一次执行的时候,在编译根目录建立filelist索引文件,若在其他文件夹下执行,只会将所在目录下的文件建立索引,因此当找不到文件时,可以将根目录的“filelist”文件删除,再到编译根目录执行一次

  make  snod  :当编译部分模块完成后,输入此命令标识重新生成img镜像文件

 emulator  &  :运行当面环境下的配置的模拟器   参数“&” 标识后台运行

  ./build.sh -u   将编译好的内容打包成update.img固件升级包

  make  -j32 && ./mkimage.sh  && ./build.sh -u    编译,生成镜像并且打包

 

工作目录说明

  •   build/目录
    •   core/   aosp整个编译过程中核心编译规则文件目录
    •   envsetup.sh  编译环境初始化脚本
    • target / Android自带模拟器的一些makefile文件目录
    • tools    编译过程中使用的shell及python编写的一些脚本 
  •  packages/  一些常用系统APP存放目录,电话、日历等
  • framworks    公共库   
      • av/   多媒体相关的native目录
      • webview/   浏览器内核源码目录
      • native/  power、input、binder等服务native实现目录
      • base
        •   core     |   framework.jar  framework-res.apk libandroid_runtime.so等源文件
        •   native  |   libandroid.so的源代码目录  java api的native实现  比如looper、assetmanager
        •        media  |  多媒体相关的javaapi及jni文件目录
        •   package  |  settingProvider、SystemUI等不在桌面直接启动的App源码目录
        •   service  |  services.jar、libandroid_services.so的源文件目录
        •   WIFI  |  wifi服务相关的javaAPI、wifiManager、wifiService等

 

  • devices/<vendor_name>/<product_name> |     跟硬件厂商相关的内核,硬件配置等
  • vendor/<vendor_name>/<product_name> |     厂商对AOSP修改或者定制、放在vendor目录下。包括不限于framework层新增API、APP等业务需求,目前谷歌更推荐放在devices目录下

 

AndroidBuildSystem说明  aosp 构建 编译系统

  Androld Build 系统用来编译 Androld 系统Androld SDK以及相关文档。
    该系统主要由如 make 文件, shell 脚本以及 Python 脚本组成,在编译时能够支持面向不同的硬件设备,不同的编译类型,且提供面向各个厂商的定制扩展。  

 什么是makefile

    makefile 是一些有特定语法,可供make命令读取并执行的脚本性质的配置文件,作用就是定义编译相关属性,对哪些源文件进行编译,怎么编译,怎么处理他们之间的依赖关系

    makefile可以定义变量,函数,调用系统命令, shen / python脚本,管理module 之间的依赖,整个Android Build系统中的make文件分成三类
  1 . Build 系统核心 Makefile
      这类Makefile定义了整个 Build 系统的框架,而其他所有make文件都是在这个框架的基础上编写出来的。位于 build/Core 目录下.
  2 .针对某个产品的 Makefile
      这类 makefile是针对某个产品 Make文件这些文件通常位于 device/< vendor_name>/< product_name 》 目录下。
  3 .针对某个模块的 Makeflle - Android.mk
      第三类是针对某个徽块的 Moke 文件。 AOSP中,不会针对某一个文件进行编译,每一个编译单位都是一个模块,
      每个模块由一个名为“ Android.mk ”的 makefile 来声明。该文件中定义了如何编译当前模块。

 

 

 

 

 

 

posted @ 2021-07-23 10:12  迷~途  阅读(937)  评论(0编辑  收藏  举报