利用mm命令编译Android模块
Ubuntu下Android源码修改、编译及运行、launcher定制

环境Linux 版本:Ubuntu 11.04 (可由10.10的版本进行升级)64位系统GCC版本:gcc version 4.5.2Java版本:java version "1.6.0_26"下载android源码前注意:1、保证Ubuntu系统中的容量在80G左右,以保证足够的空间来存放android源码以及编译后的相关文件。
2、保证Ubuntu系统进行Internet访问。
联网方法:采用拨号进行连接。
相关操作步骤如下所示:1、虚拟机→设置→硬件→网络适配器→网络连接→桥接2、启动Ubuntu系统,打开终端(在普通用户下),输入相关命令如下:$ pppoeconf //打开后输入上网账号跟密码,确认保存$ sudo pon dsl-provider //上网连接命令经过这两个步骤后就可以进行上网了。
Android源码编译所依赖的tools01.$ sudo apt-get update02.$ sudo apt-get -y install git-core03.$ sudo apt-get -y install gnupg04.$ sudo apt-get -y install sun-java6-jdk flex05.$ sudo apt-get -y install bison06.$ sudo apt-get -y install gperf07.$ sudo apt-get -y install libsdl-dev08.$ sudo apt-get -y install libesd0-dev09.$ sudo apt-get -y install libwxgtk2.6-dev10.$ sudo apt-get -y install build-essential11.$ sudo apt-get -y install zip12.$ sudo apt-get -y install curl13.$ sudo apt-get -y install libncurses5-dev14.$ sudo apt-get -y install zlib1g-dev15.$ sudo apt-get -y install valgrind注意:(如果是32bit的系统的话,则要更改几个Android.mk文件)01./external/clearsilver/cgi/Android.mk02./external/clearsilver/java-jni/Android.mk03./external/clearsilver/util/Android.mk04./external/clearsilver/cs/Android.mk用gedit打开,修改m64为m32即可另外将build/core/main.mk中的ifneq (64,$(findstring 64,$(build_arch)))修改为:ifneq (i686,$(findstring i686,$(build_arch)))对于32位系统所出现的问题,解决方法:Error1:make: ***[out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] error 1在terminal中输入$ gedit frameworks/base/libs/utils/Android.mk将LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)修改为:LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) –fpermissiveError2:make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] error 1此处编译错误是由于ubuntu 11.10采用了GCC4.6.1导致的修改源码目录下/build/core/combo/HOST_linux-x86.mk并将以下语句:HOST_GLOBAL_CFLAGS+= -D_FORTIFY_SOURCE=0修改为:HOST_GLOBAL_CFLAGS+= -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0Android源码下载1、安装repo安装过程步骤如下所示:Repo下载安装1、$ mkdir ~/bin //在home目录下创建bin文件夹2、$ PATH=~/bin:$PA TH //环境变量设置3、$ curl https:///dl/googlesource/git-repo/repo > ~/bin/repo //repo下载4、$ chmod a+x ~/bin/repo //权限设置,保证repo可执行Repo client初始化1、$ mkdir Android //创建Android目录,用于存放下载的android源码2、$ cd Android //进入到Android目录3、$ repo init -u https:///platform/manifest //指定URL清单,指定包含在Android源代码的各种存储库将被安置在工作目录中当然也可以指定android版本,使用如下命令:$ repo init -u https:///platform/manifest -b android-4.0.1_r1Android源码文件获取$ repo sync注意:在Android源码下载过程中凡出现问题,可以进入Android源码下载的相关官方网站/source/downloading.html 进行查看。
Android系统编译

Android系统编译Android 系统编译博客分类:•Android最近研究了下Android 的编译系统,下面结合编译我们自己的产品mobot 来对整个编译系统进行必要的介绍,方便大家今后对默认编译的修改。
先列出几个觉得重要的Make 文件:build/buildspec.mkbuild/envsetup.shbuild/core/main.mkbuild/core/envsetup.mkbuild/config.mk总的来说,Android 以模块 (module/package) 的形式来组织各个系统的部件,每个模块(module/package) 的目录下都会有一个Android.mk 。
所谓 module 就是指系统的 Native Code ,而相对于Java 写的 Android application 称为 package 。
Makefile的主要流程 1初始化参数设置 2读取Product 的设定 3读取BoardConfig 4读取所有Module 4产生相应的Rules ,生成 image 5具体make 操作: 6完整编译 6模块编译 6单独编译image 文件 7一些疑问和解答: 7Makefile的主要流程以下主要流程都在build/core/main.mk 里安排。
l 初始化相关的参数设置(buildspec.mk 、envsetup.mk 、config.mk)l 检测编译环境和目标环境l 决定目标productl 读取product 的配置信息及目标平台信息l 清除输出目录l 检查版本号l 读取Board 的配置l 读取所有Module 的配置l 根据配置产生必要的规则(build/core/Makefile)l 生成image初始化参数设置在main.mk里,简单设置几个主要编译路径的变量后,来到config.mk :——————————————config.mk ——————————————其中设置了源文件的一系列路径,包括头文件、库文件、服务、API 已经编译工具的路径。
Mtk Android编译命令

banyan_addon 建立MTK sdk addon
cts 建立cts包
bootimage 编译boot映像
cacheimage 编译cache映像
systemimage 编译系统映像
mrproper 移除所有产生的文件+config+。。。
mm 通过android本地命令“mm”编译模块
emigen 产生EMI设置源代码
nandgen 生成支持nand flash设备列表
codegen 生成跟踪DB(META/凯瑟等使用的工具)。
userdataimage 编译用户数据映像
target--packege 编译目标文件包
updataepackege 编译更新包
dist 编译分发包
Modules:
pl, preloader : Specify to build preloader.
snod 没有依赖的情况下去编译系统映像
recoveryimage 编译恢复映像
secroimage 编译secro映像
factoryimage 编译工厂映像
userdataimagenodeps 没有依赖的情况去编译用户数据映像
NULL 编译所有
(makeMtk|mk) [options] project actions [modules]
options:
-t 打印标准输出信息
-o 通过附加参数去make
project:
一个可用的项目(可以用mk listp来查看有哪些可用项目),或则缺省(延续上一次的项目)
lk : Specify to build little kernel.
ub, uboot : Specify to build uboot.
Android源代码编译过程及指令

Android源代码编译过程及指令编译Android源代码分为两种情况:1. 完整编译源码:./mk_aliphone.sh --> 完整编译脚本--> 6735 输⼊对应的编号--> userdebugadbnew(-->remake)上述指令流程后,若报错,则将错误解决后,执⾏. ./mk_aliphone.sh后开始编译流程2. 源码编译完成后,单独编译模块:. ./build/envsetup.sh (当前⽬录:build/⽬录上级⽬录) --> 初始化环境的脚本:envsetup.shlunch(在当前⽬录即可)选择CPU:full_aeon6735_65c_s_l1-userdebug选择要编译的模块(即:进⼊到想要编译的模块)⽐如:~/v6SourceCode/aliyunos/packages/apps/uShell(只需要执⾏⼀次脚本和lunch;再次进⼊时就不需要)mm -b(触发编译)source xxx.sh 初始化编译环境lunch 指定本次编译的⽬标设备以及编译类型make -j12 开始编译,默认是编译整个系统,参数表⽰编译的job数量单独编译apk结果⽬录:~/v6SourceCode/out/target/product/generic(aeon6735_65c_s_l1)/system/app/uShell(对应编译的模块)单独编译apk后,将结果apk安装到设备中,⼀般有两种⽅式:adb install和adb push;可以分别使⽤两种⽅式安装。
其他资料:引⾃:对⽐博⽂:按照Google给出的编译步骤如下:1. source build/envsetup.sh 加载编译指令(envsetup.sh⽂件存放在Android源代码根⽬录下的build⽬录下)2. lunch 选择平台编译选项 --> 控制台列出所有可供选择的平台,使⽤哪个平台根据具体情况⽽定,本次选择6735_debug3. make 执⾏编译分析1:source build/envsetup.sh上述指令⽤来将envsetup.sh⾥的所有指令加载到环境变量中,⽐如:⽹上提供的指令列表function help() # 显⽰帮助信息function get_abs_build_var() # 获取绝对变量function get_build_var() # 获取绝对变量function check_product() # 检查productfunction check_variant() # 检查变量function setpaths() # 设置⽂件路径function printconfig() # 打印配置function set_stuff_for_environment() # 设置环境变量function set_sequence_number() # 设置序号function settitle() # 设置标题function choosetype() # 设置typefunction chooseproduct() # 设置productfunction choosevariant() # 设置variantfunction tapas() # 功能同choosecombofunction choosecombo() # 设置编译参数function add_lunch_combo() # 添加lunch项⽬function print_lunch_menu() # 打印lunch列表function lunch() # 配置lunchfunction m() # make from topfunction findmakefile() # 查找makefilefunction mm() # make from current directoryfunction mmm() # make the supplied directoriesfunction croot() # 回到根⽬录function cproj()function pid()function systemstack()function gdbclient()function jgrep() # 查找java⽂件function cgrep() # 查找c/cpp⽂件function resgrep()function tracedmdump()function runhat()function getbugreports()function startviewserver()function stopviewserver()function isviewserverstarted()function smoketest()function runtest()function godir () # 跳到指定⽬录 405具体看⼀下YunOS平台上的envsetup.sh⽂件内容:envsetup.sh主要的作⽤如下:1. 加载编译时使⽤到的函数命令:m、mm等等2. 添加两个编译选项:generic-eng和simulator3. 查找vendor/<⼚商⽬录>/和vendor/<⼚商⽬录>/build/下的vendorsetup.sh;如果存在的话,就加载执⾏,添加⼚商⾃⼰定义的编译选项分析2:lunch执⾏lunch命令,它会打印出⼀个选择菜单,列出可⽤的编译选项;lunch命令是envsetup.sh⾥定义的⼀个命令,⽤来让⽤户选择编译项,来定义Product和编译过程中⽤到的全局变量。
【推荐下载】Android编译-missing separator-错误的解决

Android 编译”missing separator”错误的解决2016/11/17 14203今天在Android7.0 源码环境中利用mm 编译某个模块的时候,总是莫名的报错,报错信息如下:device/actions/common/prebuilt/apk/actions/FileExplorer/Android.mk:15: *** missing separator.1 ifeq ($(wildcard $(TOP)/device/actions/common/packages/AgingTest/Android.mk),)23 LOCAL_PATH := $(call my-dir)4 include $(CLEAR_VARS)5 LOCAL_MODULE := prebuild_apk_AgingTest6 LOCAL_MODULE_STEM := prebuild_apk_AgingTest.apk7 LOCAL_SRC_FILES := app/AgingTest.apk8 LOCAL_MODULE_TAGS := optional9 LOCAL_MODULE_CLASS := APPS 10 LOCAL_DEX_PREOPT := false 11 LOCAL_CERTIFICATE := PRESIGNED 12 LOCAL_MODULE_PATH := $(TARGET_OUT)/app 13 include $(BUILD_PREBUILT) 14 15 endif #here need a space, why? without it, compile failed! 没发现什么错误啊,但就是编译不过啊,搞了很久,最后发现:居然是最后一行的”endif”后面没有空格导致的,加个空格就可以编过,这他娘的什么江湖啊,不是,什么规则啊,知道的同学,麻烦告知,不胜感激!tips:感谢大家的阅读,本文由我司收集整编。
MTKandroid快速编译方法

MTKandroid快速编译方法[FAQ10625] 提升Android编译速度Platform:MT6572MT6582MT6588MT6589MT6592MT6595M T6571MT6582/92+MT6290Branch:GB3JB2JB3JB5JB9GB5JB7FAQ Content[DESCRIPTION]Android codebase都很大,编译一次都需要花很多时间,如果是preloader/lk/bootimage还好,但是Android的话都是非常久。
实际上这个编译时间还是可以进一步缩短![KEYWORD]ccache编译时间提升降低[SOLUTION]1. 移除modules_to_check(1). Android默认是所有模块都会编译的(不管需不需要),这个有些冗余,可以通过修改编译系统不编译哪些没有用到的模块(2). 修改方法:alps/build/core/main.mkfiles: prebuilt \$(modules_to_install) \$(modules_to_check) \$(INSTALLED_ANDROID_INFO_TXT_TARGET)修改为:files: prebuilt \$(modules_to_install) \$(INSTALLED_ANDROID_INFO_TXT_TARGET)(3). 如果是ubi nand文件系统的项目(比如72 nand项目),还需要在alps/build/core/Makefile中:$(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \$(INSTALLED_RAMDISK_TARGET) \$(INSTALLED_BOOTIMAGE_TARGET) \$(recovery_binary) \$(recovery_initrc) $(recovery_kernel) \$(INSTALLED_2NDBOOTLOADER_TARGET) \$(recovery_build_prop) $(recovery_resource_deps) \$(recovery_fstab) \$(recovery_gzip) $(recovery_sec_ko) \$(RECOVERY_INSTALL_OTA_KEYS)的前面添加:ifeq ($(TARGET_USERIMAGES_USE_UBIFS),true)$(INSTALLED_RECOVERYIMAGE_TARGET):$(recovery_ubiformat)endif否则会编译失败!(4). 修改后Android编译时间降低16%~18%(数据仅供参考)(5). 此种方法google已在4.3版本默认应用了。
Ubuntu下编译Android源码并运行Emulator 2

Ubuntu下编译Android源码并运行Emulator 2//apt-get autoremove sun-java5-jdk//apt-get install nautilus-open-terminalandroid源码的编译安装虚拟机时建议设置空间为16G左右,否则后面编译源代码可能会导致空间不够编译环境:Ubuntu8.101、安装一些环境sudo apt-get install build-essential //sudo apt-get install makesudo apt-get install gccsudo apt-get install g++ //sudo apt-get install libc6-devsudo apt-get install patch //sudo apt-get install texinfo //sudo apt-get install libncurses-dev //sudo apt-get install git-core gnupg //sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl sudo apt-get install ncurses-devsudo apt-get install zlib1g-devsudo apt-get install valgrindsudo apt-get install python2.5安装java环境sudo apt-get install sun-java5-jdk不要用sun-java6-jdk,否则会有问题2、设置环境变量vim ~/.bashrc在.bashrc中新增或整合PA TH变量,如下#java 程序开发/运行的一些环境变量在home/你的用户名/.bashrc中加入下面一些,有些是后面运行编译后的模拟器而用的export JA VA_HOME=usr/lib/jvm/java-1.5.0-sunexport JRE_HOME=usr/lib/jvm/java-1.5.0-sun/jreexport PA TH=$PATH JA V A_HOME/binexport PA TH=$PATH:~/mydroid/out/host/linux-x86/binexport ANDROID_PRODUCT_OUT=~/mydroid/out/target/product/genericexport CLASSPATH=.{JA V A_HOME}/lib JRE_HOME/lib CLASSPATHexport JA VA_PATH=${JA V A_HOME}/bin{JRE_HOME}/binHOME_BIN=~/bin/export PA TH=${PATH}{JA V A_PA TH}{JRE_PATH}{HOME_BIN};3、安装repo(用来更新android源码)创建~/bin目录,用来存放repo程序,如下:$ cd ~$ mkdir bin注意:下载后的.repo也许并不在这个文件夹中,请返回上一级目录找到后拷贝至此下载repo脚本并使其可执行:$ curl /repo >~/bin/repo$ chmod a+x ~/bin/repo4、下载android源码并更新之$ mkdir mydroid$ cd mydroid方式一建议不要用repo来下载(android源码超过1G,非常慢),直接在网上下载http: ///bbs/pub/cupcake.tar.gz。
android模块编译,mm,mmm

android模块编译,mm,mmm如果你只修改某⼀个模块的内容,却每次都要执⾏make, 最后等待很长时间。
使⽤模块编译,只需要在你所在的模块的⽬录或者其⼦⽬录,执⾏mm,便可以编译出⼀个单独的apk,这样岂不快哉!具体步骤:1)打开~/.baserc⽂件,加⼊source ~/I850/build/envsetup.sh. 加⼊你⾃⼰该⽂件所在的路径,这样就免去了每次启动新的终端执⾏mm 命令之前,需要引⽤此⽂件。
2)完成步骤1之后,就可以在你的模块⾥⾯随意执⾏mm了,要想使⽤其他快速命令,可以查看envsetup.sh⽂件,⽐如cgrep,jgrep,resgrep在不同类型的⽂件⾥⾯进⾏相应的查询。
还有m,mmm等等3)还可以使⽤adb push 将你的apk push到模拟器或者⼿机终端,也可以在⼯程根⽬录通过make -snod⽣成新的system.img编译模块Android中的⼀个应⽤程序可以单独编译,编译后需要重新⽣成system.img。
在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查看⽤法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在Android开发过程中,当我们只需要编译某个修改过的模块时,使用mm命令可以使你不用编译整个Android项目,而只需单独编译该模块即可,这样速度是不是很快呢?具体的步骤如下:
1. 在Android源代码目录下:
[c-sharp]view plaincopy
1cd mydroid
2source build/envsetup.sh
也可以将source ~/mydroid/build/envsetup.sh放到~/.bashrc中,这样每次打开shell时就会自动运行该脚本。
2. 在shell中使用help命令查看可以运行的命令
[c-sharp]view plaincopy
3# help
4Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment:
5- croot: Changes directory to the top of the tree.
6- m: Makes from the top of the tree.
7- mm: Builds all of the modules in the current directory.
8- mmm: Builds all of the modules in the supplied directories.
9- cgrep: Greps on all local C/C++ files.
10- jgrep: Greps on all local Java files.
11- resgrep: Greps on all local res/*.xml files.
12- godir: Go to the directory containing a file.
13
14Look at the source to view more functions. The complete list is:
15add_lunch_combo cgrep check_product check_variant choosecombo chooseproduct choosetype choosevariant cproj 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 set_java_home setpaths set_sequence_number set_stuff_for_environment settitle smoketest
startviewserver stopviewserver systemstack tapas tracedmdump
可以看到mm命令,意思是编译当前文件夹下的所有模块。
3. 接下来的事情将变得很简单,只需来到需要编译的模块文件夹下,运行mm命令即可,当然我们也可以用mmm命令,如mmm external/jpeg/,和在external/jpeg/目录下运行mm命令具有同样的效果。