1、我们平常在编译Android源码,有时并不需要编译整个Android源码,而只需要编译模个模块,这是可以使用mmm工具来编译。
其使用方法是:mmm <dir>,如编译frameworks下的所有文件,则可以这样子:
. build/envsetup.sh && choosecombo 1 1 2 3 &&
export ANDROID_JAVA_HOME=$JAVA_HOME && mmm framwork
编译出来的APK,但APK并不包含在system文件夹中,我们可以使用make snod 打包system文件夹,产生新的system.img。
$. build/envsetup.sh && help
Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment:
- croot: Changes directory to the top of the tree.
- 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.
- cgrep: Greps on all local C/C++ files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file.
Look at the source to view more functions. The complete list is:
add_lunch_combo cgrep check_product check_variant choosecombo chooseproduct choosetype choosevariant croot findmakefile gdbclient get_abs_build_var getbugreports get_build_var getprebuilt gettop godir help isviewserverstarted jgrep lunch m mm mmm pid printconfig print_lunch_menu resgrep runhat runtest runtest_py setpaths set_sequence_number set_stuff_for_environment settitle smoketest startviewserver stopviewserver tapas tracedmdump
2、关于img文件说明
编译android源码之后,在out/target/product/generic一些文件: ramdisk.img、system.img、userdata.img、 system、 data、root
其中, system.img是由 system打包压缩得到的, userdata.img是由 data打包压缩得到的。
ramdisk.img是模拟器的文件系统,把ramdisk.img解压出来可知道,ramdisk.img里的文件跟root文件夹的文件基本一样。
模拟器装载ramdisk.img并解压到内存,接着分别把system.img和userdata.img挂载到 ramdisk下的system和data目录。我们编译出来的应用程序就是放在system/app下的。用户安装的程序则是放在data/app下。
分享到:
相关推荐
### Android模块化编译速度解决方案 #### 概述 在Android开发过程中,随着应用功能的增加,项目的规模逐渐增大,导致编译时间显著延长。为了提高开发效率、降低编译时间,采用模块化的开发方式是一种有效的方法。...
以下是对“android模块化开发”这一主题的详细解释。 一、模块化的概念 模块化是指将一个大型系统拆分为多个小的、具有明确职责的模块,每个模块都有自己的业务逻辑和边界。这样做的好处在于,模块间可以独立开发、...
在Android开发中,模块化和组件化是提升代码可维护性、可扩展性和复用性的关键策略。模块化将一个大型应用分解为多个独立的、功能明确的模块,每个模块专注于特定的功能,而组件化则进一步强化了这种独立性,允许...
在Android开发中,单个模块编译是...总的来说,Android单个模块编译是一个涵盖广泛知识领域的话题,包括模块化、构建工具、源码管理和系统定制等。掌握这些技能将有助于提高开发者在大型Android项目中的生产力和效率。
Android模块化通常涉及将应用的不同功能或业务逻辑划分为单独的模块,每个模块都有其特定的责任范围,可以独立开发、测试和部署。以下是对"Android模块化"这一主题的详细说明: 1. **模块化的概念** - 模块化是...
微信Android模块化架构重构实践涉及的技术知识点主要包括以下几个方面: 1. Android模块化架构概念:模块化架构是指将应用程序拆分为独立的模块,每个模块负责一块特定的功能。这种方式有助于提高代码的复用性,...
微信Android模块化架构的重构是针对其在发展过程中遇到的各种问题进行的一次重大技术改进。在微信的早期版本中,采用的是传统的分层结构设计,简单清晰,但在业务快速发展后,这种架构开始暴露出问题,如消息通知...
本篇文档将深入探讨如何利用`Android.bp`实现动态编译,这对于项目的定制化具有重要的价值。 动态编译是一种优化构建过程的方法,它只编译必要的源代码,从而节省时间和资源。在`Android.bp`中,我们可以利用条件...
以下是关于Android模块化的详细知识点: 1. **模块定义**:一个模块是一个具有独立功能的代码单元,它可以有自己的业务逻辑、UI界面和数据管理。模块间通过接口进行通信,降低了耦合度。 2. **模块化的好处**: -...
首先,让我们深入了解Android模块化的概念。模块化是将应用程序的不同功能或组件封装到独立的模块中,每个模块都有明确的职责和边界。在Android开发中,这些模块通常以Library(库)或Module的形式存在。通过使用...
4. **配置Gradle**:打开`build.gradle`文件(位于`app`模块下),确保它包含了正确的依赖项,如Android SDK版本、编译工具等。可能需要根据源码中的注释和要求来调整这些设置。 5. **编译项目**:在完成所有配置后...
在Android源码上编译APK是一个复杂但必要的过程,特别是当你需要开发具有系统权限的应用,例如修改系统时间或实现关机功能。以下是对整个流程的详细解释: 首先,你需要编译Android源码。这通常涉及到获取源码、...
而模块化开发则将App按业务功能划分为多个独立的代码模块,每个模块都有自己的生命周期和边界,可以单独编译和调试。模块化开发进一步可分为单工程多module模式和多工程模式。 单工程多module模式下,所有代码仍在...
### Android.mk 编译系统...通过上述介绍,我们可以看到`Android.mk`不仅简化了构建过程中的配置工作,还提供了强大的模块化能力和自动化处理能力。这对于管理和维护大型项目尤其重要,有助于提高开发效率和代码质量。
在使用上述步骤进行编译时,需要特别注意的是,Android的编译系统非常复杂,涉及到大量的模块化和交叉编译。每个设备和变体都有自己的配置,因此在编译时需要选择正确的平台和设备模型,这通常通过`lunch`命令完成。...
5. **编译过程**:实际的编译过程由`make`或`mm`(针对模块)命令触发。`make -jX`会在X个CPU核心上并行编译,提高效率。编译过程包括预处理、编译、链接和打包等多个步骤。 6. **生成目标文件**:编译完成后,会...
在Android开发中,有时我们需要在...通过熟练掌握这个过程,你可以为Android应用添加Python支持,或者构建基于Python的Android原生模块。虽然这个过程可能较为繁琐,但一旦完成,就能极大地拓展Android开发的可能性。
它基于Makefile,用于描述如何构建特定的Android模块。在Android 10之前,它是主要的构建方式。通过编写Android.mk文件,开发者可以定义模块的源文件、依赖项、编译选项等,例如: ```makefile LOCAL_PATH := $...