如何单独编译Android源代码中的模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何单独编译Android源代码中的模块相关的知识,希望对你有一定的参考价值。

  1.make 模块名称
  需要查看Android.mk文件的LOCAL_PACKAGE_NAME变量。
  2.mmm命令
  用于在源码根目录编译指定模块,参数为模块的相对路径。只能在第一次编译后使用。比如要编译Phone部分源码,需要在终端中执行以下命令:
  $mmm packages/apps/phone
  3.mm命令
  用于在模块根目录编译这个模块。只能在第一次编译后使用。例如要编译Phone部分源码,需要在终端中执行以下命令:
  $cd packages/apps/phone
  $mm
  注:mmm和mm命令必须在执行“.build/envsetup.sh”之后才能使用,并且只编译发生变化的文件。如果要编译模块的所有文件,需要-B选项,例如mm -B。
参考技术A   Android源码目录下的build/envsetup.sh文件,描述编译的命令

  - m: Makes from the top of the tree.

  - mm: Builds all of the modules in the current directory.

  - mmm: Builds all of the modules in the supplied directories.

  要想使用这些命令,首先需要在android源码根目录执行. build/envsetup.sh 脚本设置环境

  m:编译所有的模块

  mm:编译当前目录下的模块,当前目录下要有Android.mk文件

  mmm:编译指定路径下的模块,指定路径下要有Android.mk文件

  下面举个例子说明,假设我要编译android下的\hardware\libhardware_legacy\power模块,当前目录为源码根目录,方法如下:

  1、. build/envsetup.sh

  2、mmm hardware/libhardware_legacy/power/

  编译完后 运行 make snod

  会重新将你改过的模块打入到system.img中

为啥编译时库模块中的包不存在,即使 Android Studio 显示代码中没有错误?

【中文标题】为啥编译时库模块中的包不存在,即使 Android Studio 显示代码中没有错误?【英文标题】:Why do packages from library module does not exist upon compilation, even when Android Studio shows no errors in code?为什么编译时库模块中的包不存在,即使 Android Studio 显示代码中没有错误? 【发布时间】:2015-05-01 23:56:29 【问题描述】:

我的 libs/AndEngine 文件夹中有一个库模块 (AndEngine)。该代码编译得很好。

在我的根 settings.gradle 文件中,我有这个:

include ':app:libs:AndEngine'
include ':app' 

然后在我的应用程序的 build.gradle 文件中,我在依赖项中有这个:

compile project('libs:AndEngine')

在我的应用程序代码中,所有导入甚至自动完成都可以正常工作,没有任何错误。在 Android Studio 中,可以找到所有包。但是当我去编译时,我得到了大约一百个这样的错误:

error: package org.andengine.entity.primitive does not exist
import org.andengine.entity.primitive.Rectangle;

我来自 Eclipse 的 ADK,所以我是 android studio 的新手。如果有人对此问题有任何答案,我将非常感激!

【问题讨论】:

【参考方案1】:

改变这一行。

compile project('libs:AndEngine')

compile project(':app:libs:AndEngine')

在任何情况下,将库模块放在应用程序模块中都不是一个好主意。 我建议你使用这种结构:

root
  settings.gradle
  app
    build.gradle
  libs
    AndEngine
      build.gradle

然后在你的settings.gradle

include ':libs:AndEngine'
include ':app' 

在你的app/build.gradle

compile project(':libs:AndEngine')

【讨论】:

我做的完全一样,但不会出错!还有什么问题!

以上是关于如何单独编译Android源代码中的模块的主要内容,如果未能解决你的问题,请参考以下文章

实现自己的HAL-7 Android 系统的各个模块的单独编译

为啥编译时库模块中的包不存在,即使 Android Studio 显示代码中没有错误?

如何将库的本地副本添加和编译到 Android React Native 模块中?

Android系统之Mtk开机logo镜像单独制作(不用全编译代码)

模块化开发

单独编译PCL的kdtree模块报错“undefined reference to”