Android源码mm模块编译 & mm编译apk

Android编译系统分析二:mm编译单个模块 因为Android的编译系统不同于Linux Kernel的递归式的编译系统,它的编译系统是一种称之为independent的模式,每个模块基本独立(它有可能依赖其他模块),每个模块都可以单独编译,这是Android independent编译系统模式的好处。但这并不意味着它是完美的,普通电脑编译android系统需要8个小时甚至更多(以本人的电脑为例),而编译linux kernel只需要半个小时,代码量是一回事,由independent模式造成的编译时间长应该是可以肯定的。正因为每个模块可以单独编译,所 阅读详情

1.  修改内核以后,不用每次都去make编译,只需mm对模块进行编译就可以。
在Android目录下运行
$ . build/envsetup.sh 或者
$ source build/envsetup.sh ,然后就会多出几个可用的命令:
- 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.
- printconfig: 当前build的配置情况.
可以使用 --help查看用法。
如:在修改了某一个模块以后,可以使用 $ mmm <目录> 来重新编译所有在<目录>中的所有模块,使用 $ mm 编译当前目录中的所有模块。
编完之后,即修改了Android系统以后,可以使用 $ make -snod 重新生成system.img

 

2.  mm编译HelloWorld.apk

把HelloWorld目录拷贝到android_src/packages/apps目录下。
编辑Android.mk文件:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(call all-java-files-under, src)

LOCAL_PACKAGE_NAME := HelloWorld

LOCAL_CERTIFICATE := platform

include $(BUILD_PACKAGE)

# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))

然后

cd packages/apps/HelloWorld

mm

生成的文件:

out/target/product/generic/system/app/HelloWorld.apk

3. 任意的目录下编译app

如果把应用程序放到packages/apps下, 感觉很不爽!

 

那么运行下面的命令,或者写道.bashrc中

 

source ~/andorid_src/build/envsetup.sh

 

export TOP=~/android_src

然后进入eclipse的workspace的HelloWorld下进行mm也可以了!生成的apk路径同上。

注意如果你有两份android源码,换另一份源码进行mm,则要重新配置TOP,否则就算你在另一份android_src_2.3.3/packages/apps/HelloWorld下mm,也用的是android2.2的mm!


转自:http://blog.youkuaiyun.com/leiming32/article/details/7628625

Android编译指令m、mm、mmm实战指南:从入门到精准构建 本文详细解析了Android编译指令m、mm、mmm的使用方法,从基础入门到高级技巧,帮助开发者实现精准构建。通过实战示例和常见错误排查,提升编译效率,特别适合Android系统开发和模块调试。 阅读详情

相关推荐

Android 11源码——预置无源码apk到Android系统

Android 11源码——预置无源码apk到Android系统 在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以预置一个名为 Test 的APK为例。 将 Test.apk 放到 packages/apps/Test 下面。 在 packages/apps/Test 下面创建文件 Android.mk,文件内容如下:LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional

tracy的博客 1932

如何mm生成一个apk,而非两个apk和odex

用mm编译apk时,会在out目录下生成.apk和.odex两个文件,这应该是为了加快运行速度,把dex分出来做的预处理。但是一般开发时需要mm编译出一个完整的apk,直接用adb进行安装就可以进行调试。在./build/core下有个package.mk文件,里面有一个选项,LOCAL_DEX_PREOPT ,4.0默认把这个选项设置成了true,将LOCAL_DEX_PREOPT值改为fals

2828

安卓源码快捷编译命令

本文介绍了Android源码编译中常用的高效命令工具集。主要内容包括:1)基础构建命令如lunch(选择编译版本)、m/mmm(模块编译)及其变体;2)快速代码搜索命令如cgrep/jgrep(按语言类型检索);3)目录跳转工具godir/gomod;4)快速镜像重建命令如snod/vnod。文章还列举了tapas/banchan等特殊场景命令,并区分了常用与不常用指令。这些工具能显著提升Android系统开发效率,避免重复操作,建议开发者掌握核心命令(如lunch、mmm、cgrep)并根据需求拓展使用场

. 1046

android apk编译时间,Android源码mm模块编译 & mm编译apk

1. 修改内核以后,不用每次都去make编译,只需mm对模块进行编译就可以。 在Android目录下运行 $ . build/envsetup.sh 或者 $ source build/envsetup.sh ,然后就会多出几个可用的命令: - croot: Changes directory to the top of the tree. - m: Makes from the top of ...

weixin_42494160的博客 459

在Android源码中编译带.so库文件的APK,使其具体系统签名和系统权限

1.在原APK源码中增加系统权限和所需Inject Event权限 更改AndroidManifest.xml文件,增加字段android:sharedUserId="android.uid.system"及增加 如下所示     package="net.pocketmagic.android.eventinjector"     android:versionCode="1

一度空间的博客 3890

Android m/mm/mmm/make编译模块

Android编译环境初始化完成后,我们就可以用m/mm/mmm/make命令编译源代码了。lunch命令其实是定义在build/envsetup.sh文件中的函数lunch提供的。与lunch命令一样,m、mm和mmm命令也分别是由定义在build/envsetup.sh文件中的函数m、mm和mmm提供的,而这三个函数又都是通过make命令来对源代码进行编译的。

weixin_49303682的博客 3080

android13源码下编译apk

如果代码依赖appcompat等androidx下的包,无需额外导入对应的jar包,直接通过在Android.mk中添加对应的androidx模块名即可,这些模块在系统源码中都有。如果要让apk有system系统权限!apk源码可放在packages/app或vendor下使用mm编译,编译产物位于*这种方式编译出来的apk所在进程的uid为system。注:系统中存在的其他预编译包,也可以用这个方法,若找不到对应的包则可以导入jar包。该apk是media/download系统中的一环。

weixin_37817510的博客 3458

如何实现SOLIDWORKS阵列的“智能变更”?

有时,我们在设计一个零件时,零件上有一排阵列孔,同时零件有不同的长度,我们又希望可以做到零件长度改变时,这排孔可以按长度等距增减孔阵列的个数;或是零件长度加长或缩短时,这排孔保持个数不变,按零件长度增减孔距。 那具体要怎么做呢?接下来,我们一起来看看怎么用SOLIDWORKS中简单的操作来实现这两种智能的变更: 零件长度加长或缩短时,这排孔要按长度等距增减孔阵列的个数。 零件长度加长或缩短时,这排孔保持个数不变,按零件长度增减孔距。 那接下来,我们一起来看看怎么用简单的操作来实现这两种智能的

SOLIDWORKS艾金米 2077

Android 源码下编译APK

有些时候,我们写的 app 需要获取系统的一些权限,比如获取联系人信息,Mail 信息等等,就需要在 android 源码下编译APK,让app与系统源码具有一样的签名。 1、在源码目录下运行$ . build/envsetup.sh 目的是使mm/mmm命令可用 2、修改 AndroidManifest.xml(非必须,除非app需要system ID) 添加: android:shared

晓阳 493

String+CytoScape构建PPI网络

1.下载CytoScape Cytoscape是一款专业强大好用的物生信息分析软件,主要达用于专业的研究人员使用,软件主要适用于整合模块化网络和生物科学联系网络图的绘制,支持多种文件格式,导入后就可以直接进行编辑或者分析等操作了,除此之外,软件还提供了强大的编辑工具,支持添加相应的注释信息,软件基于java环境组件打造。 下载地址:https://cytoscape.org/ 因为软件基于java...

xiaobai1_1的博客 1万+

无网络环境部署:手动获取并安装OneNote for Windows 10完整指南

本文提供了一份详尽的OneNote for Windows 10离线安装指南。针对无网络或内网隔离环境,详细介绍了如何从官方渠道获取正确的产品ID,利用第三方工具下载纯净的.appxbundle安装包,并解决系统兼容性与依赖框架问题。最后,通过PowerShell管理员命令完成安全部署,是IT管理员和高级用户在离线环境下部署UWP应用的实用参考。

loss4bartender的博客 495

基于Android源码的模块编译

实际开发中,并不需要每次都编译所有源代码,只需要编译自己修改的模块即可。Android 的编译系统提供了强大的机制支持单独模块的编译,而且十分简单。 Android 提供几种方式用于编译单独模块 。 (1)编译应用程序模块 命令:make 模块名字 (提示:在这之前需要特别说明一下,最好执行下source build/envsetup.sh和 lunch Hi3796MV100-eng命令。

OpenSpirit Mr.Dr 2177

[官方培训]19-物理模拟 Epic 肖月 笔记

物理引擎全局解算精度的设置,帧率越高,子步越多得到的模拟结果就越精确。引擎默认情况下是以变化的帧率运行的,但是对于Chaos物理引擎来说。一般子步越小,帧率越固定,效果就会更好更稳定一些。图示的分步选项就是依据下方的最长子步时长和最大步数对动态变化的帧率,进一步的做拆分来保证物理效果。对于影视项目建议都开启分步选项。红色框内有三个迭代次数的设置,这是Chaos基于位置的约束求解算法专用的一个设置,可以简单理解为迭代次数越高,当前帧一个子步内得到的结果就越精确。

Tcohneyn的博客 1545

android:m/mm/mmm

1、 修改APK应用:在packages中的应用如果修改后都可以单独编译。先执行$. build/envsetup.sh #初始化$mmm packages/providers/ContactsProvider/##用mm/mmm来编译生成的.apk并不会打包到system.img中,需要我们手动通过make snod把system文件夹打包为system.img##可以使用make sno...

weixin_30468137的博客 472

保姆级教程:用Anaconda+PyCharm搞定YOLOv8本地部署(附避坑指南)

本文提供了一份详细的YOLOv8本地部署指南,涵盖Anaconda环境配置、PyCharm集成到模型部署的全过程。特别针对国内开发者需求,整合了镜像加速和常见报错解决方案,帮助快速完成目标检测模型的本地部署与实战应用。

weixin_42528090的博客 433

Python爬虫实战:基于Playwright与异步技术的专利数据抓取系统

专利数据是企业技术创新、市场竞争分析和行业趋势预测的关键情报来源。然而,专利数据通常分散在各个国家的专利局网站,数据结构复杂,反爬机制严格,使得高效抓取成为技术挑战。本文将详细介绍如何构建一个基于最新Python技术的专利数据抓取系统,涵盖Selenium的现代化替代方案Playwright、异步编程、智能代理轮换等高级技术。

2201_76125261的博客 1562

给一个apk签系统签名

一些有用的废话 场景 有一个apk,没有源码,但是需要系统签名 但是我没有做过,不会!!! 只能找百度了. 实现方式,两种: 使用jar进行签名 放到系统源码中进行单编 apk必须要做的事情 在AndroidManifest.xml文件中,设置如下属性: Android:sharedUserId=“android.uid.system” 使用jar进行签名 结果 不成功,原因不明 具体使...

u011379195的专栏 3898

汽车IVI中控开发入门及进阶(47):CarPlay开发

车载信息娱乐(IVI)系统已经从仅仅播放音乐的设备发展成为现代车辆的核心部件。除了播放音乐,IVI系统还为驾驶员提供导航、通信、空调、电源配置、油耗性能、剩余行驶里程、节能建议和许多其他功能。​驾驶座逐渐变成了你家和工作场所之外的额外生活空间。2014年,苹果推出了Apple CarPlay,这是一款汽车界面,允许驾驶员使用iPhone应用程序和其他IVI功能,如苹果地图、Siri、苹果音乐、iMessage,并拨打电话。

码农17年的博客 1129

Android模块化编译

1、我们平常在编译Android源码,有时并不需要编译整个Android源码,而只需要编译模个模块,这是可以使用mmm工具来编译。其使用方法是:mmm ,如编译frameworks下的所有文件,则可以这样子:. build/envsetup.sh && choosecombo 1 1 2 3 &&export ANDROID_JAVA_HOME=$JAVA_HOME && mmm fr

走南闯北的专栏 2846

STM32F103VCT6+W5500 TCP 服务端通信

STM32F103VCT6 W5500的TCP连接通讯的程序

坚韧与专注 7818

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 关于left / right / stereo / mono
下一篇: 海思android4.4 SDK编译Latin输入法
simonjay2007
博客等级 码龄17年 104粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值