安卓系统源码有多大(如何编译一个精简的Android系统)

本文目录
如何编译一个精简的Android系统
本次试验使用的android源码是4.2,编译的架构是mini-mips。
一、所做的工作
1、修改build/target/product/mini.mk,去掉一些不必要的模块(例如Phone、DownloadManager等)
2、修改SystemServer.java,屏蔽一些service,让系统能够启动起来(例如,Location Manager、Telephony Registry)
3、修改dalvik/vm/native/dalvik_system_Zygote.cpp,注释掉因为检查不到外部存储而导致dalvik abort的地方 (这是googel的一个bug,在2013年1月份已解决,如果用这以后的代码不用修改此处)
4、修改WindowManagerService.java,把发送BOOT_TIMEOUT消息的时间改为0(之前为30秒)
二、系统优化后的效果(验证工作均在mips模拟器上进行)
1、节省运行内存,下面是全编译与mini编译的内存使用状态的对比
1)full build
MemTotal: 499360 kB
MemFree: 242064 kB
2)mini build
MemTotal: 499360 kB
MemFree: 395192 kB
2、缩短开机启动时间
在虚拟机上的启动时间
1)full build-29秒
2)mini build-14秒
3、只启动home程序,其余的应用程序均被移除
三、保留android的开发环境
1、adb,ddms,apkinstall等,都能正常工作
2、在eclipse中编写的android应用程序能够运行在该mini-android之上
四、开机自动启动指定应用程序
本次测试使用Gallery.apk应用程序,修改其源码后可以实现随系统的启动而自动启动的功能。
为什么android的源码那么大
1.Android是一种以Linux为基础的开放源码操作系统,2.主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。3.Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。4.Android的主要竞争对手是苹果公司的iOS以及RIM的Blackberry OS。2011年第一季度,Android在全球的市场份额首次超过塞班系统,
一个安卓系统占用多大的容量
Android系统占用手机内存的大小随着版本的不同而不同,一般在100-1000M不等。
安卓系统的优化相比于IOS和WP要差一些,而且垃圾和碎片问题十分严重,另外安卓相比IOS是真后台,如果后台运行很多软件对内存占用是非常高的。
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备
编译整个模块的android源码需要多大的空间
预留100G或以上空间用于存放源码及编译产出,本人编译的KitKat 源码(带.repo目录)+编译产出在80G左右
第一次下载好Android源代码工程后,我们通常是在Android源代码工程目录下执行make命令,经过漫长的等待之后,就可以得到Android系统镜像system.img了。以后如果我们修改了Android源代码中的某个模块或者在Android源代码工程新增一个自己的模块,是不是还是执行make命令呢?答案是否定的,Google为我们准备了另外的命令来支持编译单独的模块,以及重新打包system.img的命令。在继续学习Android源代码之前,就让我们先来看看这个命令吧。
一. 首先在Android源代码目录下的build目录下,有个脚本文件envsetup.sh,执行这个脚本文件后,就可以获得一些有用的工具:
USER-NAME@MACHINE-NAME:~/Android$ . ./build/envsetup.sh
注意,这是一个source命令,执行之后,就会有一些额外的命令可以使用:
- 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.
这些命令的具体用法,可以在命令的后面加-help来查看,这里我们只关注mmm命令,也就是可以用它来编译指定目录的所有模块,通常这个目录只包含一个模块。
二. 使用mmm命令来编译指定的模块,例如Email应用程序:
USER-NAME@MACHINE-NAME:~/Android$ mmm packages/apps/Email/
编译完成之后,就可以在out/target/product/generic/system/app目录下看到Email.apk文件了。Android系统自带的App都放在这具目录下。另外,Android系统的一些可执行文件,例如C编译的可执行文件,放在out/target/product/generic/system/bin目录下,动态链接库文件放在out/target/product/generic/system/lib目录下,out/target/product/generic/system/lib/hw目录存放的是硬件抽象层(HAL)接口文件,后面的文章里面,我们会陆续提及到,敬请关注。
三. 编译好模块后,还要重新打包一下system.img文件,这样我们把system.img运行在模拟器上时,就可以看到我们的程序了。
USER-NAME@MACHINE-NAME:~/Android$ make snod
四. 参照Ubuntu上下载、编译和安装Android最新源代码一文介绍的方法运行模拟器:
USER-NAME@MACHINE-NAME:~/Android$ emulator
这样一切就搞定了。

更多文章:
apacheii评分英文全称(apache危重病评分有什么意义)
2026年3月8日 22:45
怎样停止apache(如何在 ubuntu 下关闭 apache 服务器的开机自启动)
2026年9月4日 05:45
java验证手机号码是否正确的代码(java里怎么判断用户输入的手机号是否合法)
2026年9月23日 21:00
oracle数据库开发教程(如何新建一个oracle数据库)
2025年6月29日 10:30
linux打印命令(linux中如何用sed命令打印行号:内容)
2026年5月31日 01:45
nginx 修改referer(如何配置Nginx做高可用)
2025年12月15日 07:45
css所有标签及其属性汇总(HTML,CSS里面关于 id,class,name 属性的区别和用法)
2025年10月19日 14:45
网页设计教程谁的好(我想学网页制作 ,从哪开始好 用什么软件 有什么视频教程推荐的么)
2026年9月21日 17:45
resilient是什么意思(resilient是什么意思)
2026年8月9日 16:30
dataerror(安装系统时出现7-zip:Data error是什么原因)
2025年7月22日 00:15
mustery怎么读(mystery应该读‘密死坠’还是‘密死特瑞’)
2026年7月12日 23:30










