zoukankan      html  css  js  c++  java
  • 【转】模块编译Android源码方法

    原文网址:http://blog.csdn.net/androidlover1991/article/details/17014055

    实际开发中,并不需要每次都编译所有源代码,只需要编译自己修改的模块即可。
    Android 的编译系统提供了强大的机制支持单独模块的编译,而且十分简单。Android 提供三
    种方式用于编译单独模块 :
    1.make 模块名
    2.mm 来自于 envsetup.sh 脚本中注册的函数
    3. mmm 来自于 envsetup.sh 脚本中注册的函数
    下面将分别介绍这三种方法。
    1.make 模块名
    这种方法适合第一次编译,会把依赖模块一并编译。它需要在全部源代码中找到编译模
    块的 Android.mk 文件,并检查依赖模块是否有修改,因此编译时间较长。使用这种方法,我
    们只需要搜索源码目录下的 Android.mk 文件,找到模块名,然后指定给 make 即可。
    (1)编译应用层源码
    对于应用层程序,需要查看 Android.mk 文件的 LOCAL_PACKAGE_NAME 变量。
    例如,要编译 Phone 应用程序的源码,先查看 Phone 的 Android.mk 文件,在终端中运行
    以下命令 :
    allong@android:~/android/jellybean$ cat packages/apps/Phone/Android.mk
    显示 Android.mk 的内容如下 :
    ......(省略部分内容)
    LOCAL_PATH:= $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE := com.android.phone.common
    ......(省略部分内容)
    LOCAL_PACKAGE_NAME := Phone
    ......(省略部分内容)
    找到 LOCAL_PACKAGE_NAME 字段,其值便是我们需要得到的编译参数,即 Phone。
    得到编译参数后,在终端中运行如下命令便可单独编译 Phone 模块及其依赖模块 :
    allong@android:~/android/jellybean$make Phone
    (2)编译框架层和系统运行库源码
    对于框架层和系统运行库,需要查看 LOCAL_MODULE 变量。
    以 frameworks 包中的源码为例,在终端中运行以下命令 :
    allong@android:~/android/jellybean$ find
    frameworks -name Android.mk
    该命令将搜索 frameworks 目录下所有的 Android.mk 文件,列表如下 :
    frameworks/media/libvideoeditor/lvpp/Android.mk
    frameworks/media/libvideoeditor/osal/src/Android.mk
    frameworks/base/cmds/app_process/Android.mk
    ......(省略其他部分)
    以 app_process 为例,在终端中运行以下命令 :
    allong@android:~/android/jellybean$ cat
    frameworks/base/cmds/app_process/Android.mk
    显示 Android.mk 的内容如下 :
    LOCAL_PATH:= $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE:= app_process
    include $(BUILD_EXECUTABLE)
    LOCAL_MODULE 变量的值便是我们要找的模块名。在终端中运行以下命令 :
    allong@android:~/android/jellybean$make app_process
    2.mmm 命令
    该命令是 envsetup.sh 中注册的函数,用于在源码根目录编译指定模块,参数为模块的相对
    路径。只能在第一次编译后使用。比如要编译 Phone 部分源码,需要在终端中执行以下命令 :
    allong@android:~/android/jellybean$mmm packages/apps/phone
    3.mm 命令
    该命令也是 envsetup.sh 中注册的函数,用于在模块根目录编译这个模块。只能在第一次
    编译后使用。例如要编译 Phone 部分源码,需要在终端中执行以下命令 :
    allong@android:~/android/jellybean$cd packages/apps/phone
    allong@android:~/android/jellybean/packages/apps/phone$mm
    注意 mmm 和 mm 命令必须在执行“.build/envsetup.sh”之后才能使用,并且只编译发生变化的文
    件。如果要编译模块的所有文件,需要 -B 选项,例如 mm -B。

  • 相关阅读:
    redhat 5 中文乱码
    生成树
    交换机端口模式
    链路聚合
    AP注册
    信息收集
    Python 25 Django跨域请求
    Python 24 Django之csrf中间件
    Python 23 Django基础
    Python 21 Flask(三)第三方组件
  • 原文地址:https://www.cnblogs.com/wi100sh/p/4338477.html
Copyright © 2011-2022 走看看