编译第一步-lunch

交叉编译

首先先提出三个问题

  1. 什么是Cross compiling。
  2. Cross compiling有什么用。
  3. 为什么用Cross compiling。

    解释:
    问题一:如果目标平台没有办法安装编译器,或者由于资源有限等无法完成正常的编译过程,那就需要另一个平台来辅助生成可执行文件,简单的来说,由于目标平台的局限性,导致无法编译,需要在其他的平台搭建环境。
    具体看:百度百科:Cross compiling
    问题二:由于知识有限,能举的例子就只有这一个:我在编译android应用程序的时候,总不能在androi上编译,在安装吧,这时候就需要在其他的平台上比如windows,linux,max os搭建环境,从而生成可以在android上运行的可执行代码。
    问题三:为什么要用Cross compiling,就拿问题二举的例子,我们不可能也没有在android上直接编译再安装的。这也是要用交叉编译的原因。
    说明:
    交叉编译主要包含以下几个对象。
    宿主机(Host):指的是我们开发和编译代码所在的平台。
    目标机(Target):相对于宿主机的就是目标机,这是编译生成的系统包的目标平台。
    交叉编译器(Cross Compiler):本身运行与宿主机上,用于生产目标机可执行文件的编译器。

source ./build/envsetup.sh

编译整个工程和模块的第一步,该步骤记录着编译过程中所需的各种函数实现,我们最长用的:

 lunch:   lunch <product_name>-<build_variant>
- mm:      Builds all of the modules in the current directory, but not their dependencies.
- mmm:     Builds all of the modules in the supplied directories, but not their dependencies.
          To limit the modules being built use the syntax: mmm dir/:target1,target2.
- mma:     Builds all of the modules in the current directory, and their dependencies.
- mmma:    Builds all of the modules in the supplied directories, and their dependencies.
 详细

见:envsetup函数功能
解释:lunch [编译选项]
关于模块可以编译为何种类型的版本可以参考相应模块目录下的Android.mk的LOCAL_MODULE_TAGS变量。
编译工程
mm 在某个子模块目录下,编译这个子模块 例如在源码目录下cd packages/apps/Mms,然后在mm
mmm Build 指定目录下的模块 先cd到源码目录下 mmm packages/apps/Mms,不用再切换到子模块的目录。
mma 如果你的工程新增或删除文件后,也可以用mma重新编译一下
make 如果你未曾完整编译过整个android工程,那么在使用mm或者mmm的时候可能会遇到无法找到某些依赖库的情况,这时你可以用mma进行编译,它会同时编译你所需要的依赖库, 后续可直接使用mm或者mmm来编辑。

你可能感兴趣的:(编译-lunch)