如何单独编译Android源代码中的模块
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 已经编译工具的路径。
简述android源代码的编译过程
简述android源代码的编译过程
android源代码的编译过程大致可以分为三个步骤:准备、编译
和构建。
首先,准备。
它要求编译环境符合android源代码编译文档要求,编译机器配置最新版本才能支持android。
为了更好地加快android源码下载进度和构建速度,请使用“repo sync”来同步整个android源
构建,并使用Git工具获取最新的代码树。
其次,编译。
它要求按照Android构建文档的步骤,使用Ninja
构建系统编译原生Android源码,这几乎可以在编译机上完成。
最后,构建。
它要求按照Android构建文档的步骤,使用定制的Android编译系统构建安卓固件文件,该系统将运行在主流移动设备上,并在生成中提供android设备固件。
android源代码下载和编译教程
Android源代码由两部分组成,其一是Android系统应用部分的代码,其次是Android 所使用的内核代码,如果针对Google Nexus S来开发ROM,就需要下载三星的内核代码Android 系统应用代码:https:///platform/manifestAndroid内核代码:https:///kernel/samsung.git准备阶段:设置Linux编译环境(本人是Ubuntu 11.10 ,32位系统),一般你需要以下配置:Python 2.5 -- 2.7.GNU Make 3.81 -- 3.82,,JDK 6 (for Gingerbread or newer); JDK 5( for Froyo or older).Git 1.7 or newer.1、安装一些必备的包。
Git是Linux Torvalds为了帮助管理Linux内核而开发的一个开放源码的分布式版本控制系统软件,它不同于SVN,CVS这样集中式的版本控制系统。
在集中式版本控制系统中只有一个仓库(repository),许多个工作目录,而git这样的分布式控制系统中,每一个工作目录都包含一个完整仓库,它们支持离线工作,本地提交可以稍后提交到服务器上。
分布式系统理论上也比集中式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而收到影响?因为Android是由kernel,Dalvik,Bionic,prebuild,build等多个Git项目组成,所以Android项目编写了一个名为repo的python的脚本来统一管理这些项目的仓库,使得Git的使用更加简单。
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \libxml2-utils xsltproc$ sudo apt-get install libx11-dev:i3862、创建源代码目录首先确保在当前用户的主目录下创建一个/bin目录(如果没有的话),然后把它加到PATH 环境变量中:$ mkdir ~/bin$ PATH=~/bin:$PATH 或者$export PATH=$PATH:~/bin3、用curl下载repo脚本,并保存在~/bin/repo文件中:$ curl https:///dl/googlesource/git-repo/repo > ~/bin/repo为repo加上执行权限$ chmod a+x ~/bin/repo4、初始化版本库首先建立一个目录,用来存放下载下来的东西$mkdir MyAndroid$cd MyAndroid以后,执行如下命令$ repo init -u https:///platform/manifest -b android-2.3.7_r1我这里下载的是android2.3.7版本的,所用的参数是android-2.3.7_r1。
android单独编译某个模块
android单独编译某个模块第⼀次下载好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命令,也就是可以⽤它来编译指定⽬录的所有模块,通常这个⽬录只包含⼀个模块。
利用mm命令编译Android模块
在Android开发过程中,当我们只需要编译某个修改过的模块时,使用mm命令可以使你不用编译整个Android项目,而只需单独编译该模块即可,这样速度是不是很快呢?具体的步骤如下:1. 在Android源代码目录下:[c-sharp]view plaincopy1cd mydroid2source build/envsetup.sh也可以将source ~/mydroid/build/envsetup.sh放到~/.bashrc中,这样每次打开shell时就会自动运行该脚本。
2. 在shell中使用help命令查看可以运行的命令[c-sharp]view plaincopy3# help4Invoke ". 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.1314Look 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 jgreplunch m mm mmm pid printconfig print_lunch_menu resgrep runhat runtest set_java_home setpaths set_sequence_number set_stuff_for_environment settitle smoketeststartviewserver stopviewserver systemstack tapas tracedmdump可以看到mm命令,意思是编译当前文件夹下的所有模块。
自己动手编译Android(LineageOS)源码
⾃⼰动⼿编译Android(LineageOS)源码⼀、编译LineageOS源码准备设备:⼩⽶ MIX2设备代号:chironAndroid版本:9.0PC配置:系统:Ubuntu18.04⾄少12G RAM⾄少200GB 剩余硬盘空间良好的⽹络环境1.下载并解压SDKsdk中包含fastboot和adb下载wget https:///android/repository/platform-tools-latest-linux.zip解压unzip platform-tools-latest-linux.zip -d ~添加到环境变量gedit ~/.profile输⼊:# add Android SDK platform tools to pathif [ -d "$HOME/platform-tools" ] ; thenPATH="$HOME/platform-tools:$PATH"fi保存。
使改动⽣效:source ~/.profile2.安装依赖安装必要库和⼯具sudo apt-get install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev安装openjdk-8-jdksudo apt install -y openjdk-8-jdk3.配置源创建repo存放⽬录mkdir -p ~/bin创建源码存放⽬录mkdir -p ~/android/lineage× 注:请确保该⽬录所在的磁盘有⾜够的空间(⾄少200G)安装repocurl https:///git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo将~/bin放⼊环境变量gedit ~/.profile加⼊:# set PATH so it includes user's private bin if it existsif [ -d "$HOME/bin" ] ; thenPATH="$HOME/bin:$PATH"fi使改动⽣效:source ~/.profile初始化repocd ~/android/lineagerepo init -u https:///LineageOS/android.git -b lineage-16.0× 注:这⾥的lineage-16.0是分⽀名,对应Android 9.0。
Ubuntu12.04下在Android4.0.4源码下载及其编译过程
Ubuntu12.04下在Android4.0.4源码下载及其编译过程一、下载源码1、下载工具repo:https:///tools/repo/在本地目录建个bin的文件夹,进入bin文件夹;通过git下载:1.git clone https:///tools/repo下载完成后,进入repo文件夹,切换到稳定分支:1.git checkout -b stable origin/stable将repo命令所在的目录,即/home/yourname/bin/repo添加到环境变量中:1.export PATH=$PATH:~/bin/repo在本地目录下新建目录:android4.0.4,并进入该文件夹:[html]view plaincopy1.cd ~;mkdir android4.0.4;cd android4.0.4;在文件夹下执行下面命令来下载Android源码:1.repo init -u https:///platform/manifest你也可以直接切换到你想要下的版本的分支,而不是“master”分支:1.repo init -u https:///platform/manifest -b android-4.0.4_r2关于到底是哪个分支,根据自己的情况而定,详情可参照:https:///platform/manifest/如你想下载最新的Android4.1代码,即可将分支名称更换成:android-4.1.1_r4你也可以参照官网的下载方式来下载:/source/downloading.html实验证明,我总是在下载那个repo工具的时候,无法连接到相应的地址。
下载是个漫长的过程,下载完成后的大小大概有14G,所以要提前准备好这么大的空间。
下载完成后的目录大概有这些:如图二、编译源码如果你的电脑的环境经常做开发,那么很多环境应该已经搭建好了,如果没有,可以参照官网:/source/initializing.html这里要提醒的是:用apt-get或者ubuntu软件中直接安装的jdk,jre的时候,编译Android是总是编译不过,出现JDK版本不一致的情况;解决办法如下:到oracle官网中下载jdk:/technetwork/java/javase/downloads/index-jsp-138363.html建议下载这个:jdk-6u35-linux-i586.bin下载完成后,运行得到一个jdk1.6.0_35文件夹,然后,将相应的JAVA环境加到系统环境中,简单的可以这样:1.vi ~/.bashrc在.bashrc文件最后添加:1.JAVA_HOME=/home/clw712/tools/jdk1.6.0_352.CLASSPATH=$JAVA_HOME/lib/3.ANDROID_PRODUCT_OUT=/home/clw712/bin/android/out/target/product/generic4.ANDROID=/home/clw712/bin/android5.ANDROID_SWT=/home/clw712/bin/android/out/host/linux-x86/framework6.PATH=$ANDROID/out/host/linux-x86/bin:$ANDROID/prebuilt/android-arm/kernel/:$JAVA_HOME/bin:$ANDROID_PRODUCT_OUT:$PATH7.8.export PATH JAVA_HOME CLASSPATH ANDROID_PRODUCT_OUT ANDROID_SWT当然上述路径还有后面编译好了,用到的路径,是用来运行emulator的。
安卓系统源码编译
安卓源码编译1、编译环境的搭建操作系统推荐安装64位的ubuntu10.04,其他版本的ubuntu也可以安装,但是可能出现一些莫名其妙的Bug。
系统安装结束之后,还需要安装一些编译源码需要的工具和依赖包。
具体内容如下:确认下列软件安装成功并且版本号正确:1.1 gcc4.4,而不是gcc4.6,如果是4.6,需要安装gcc4.4,命令如下:sudo apt-get install gcc-4.4sudo apt-get install g++-4.4cd /usr/binls -l gcc*sudo mv gcc gcc.baksudo ln -s gcc-4.4 gccls -l g++*sudo mv g++ g++.baksudo ln -s g++-4.4 g++gcc -vg++ -v1.2 python2.5-2.7,ubuntu10.04版本,默认的python版本是2.6。
1.3 JDK版本是1.6.0,而不是openJDK,1.4 安装git sudo apt-get install git-core gnupg1.5 一些依赖包的安装:Ubuntu系统版本不同,所需要安装的依赖包也不同,具体情况如下所述:u buntu 10.04(64位)$ sudo apt-get install git-core gnupg flex bison gperf build-essential \zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \libxml2-utils xsltprocubuntu 11.10(64位)$ sudo apt-get install libx11-dev:i386ubuntu 12.04(64位)$ sudo apt-get install git-core gnupg flex bison gperf build-essential \zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos \python-markdown libxml2-utils xsltproc zlib1g-dev:i386$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so1.6 调试工具的安装sudo apt-get install valgrind2、安卓系统源码编译依次执行如下命令:source build/envsetup.shlunch full-engmake -j4建议:最后一条命令使用make showcommands,这样可以显示编译命令,使得编译的时候,屏幕没有输出的时候,不会感觉无聊。
android2.3单独编译framework尝试
android2.3单独编译framework尝试android2.3单独编译framework 尝试2011-04-20 17:46root@zhupan-desktop:~/android/android2.3# . build/envsetup.shincluding device/htc/dream/vendorsetup.shincluding device/htc/passion/vendorsetup.shincluding device/htc/sapphire/vendorsetup.shroot@zhupan-desktop:~/android/android2.3# cd frameworks/root@zhupan-desktop:~/android/android2.3/frameworks# mmm====================================== ======PLATFORM_VERSION_CODENAME=RELPLATFORM_VERSION=2.2.1TARGET_PRODUCT=genericTARGET_BUILD_VARIANT=engTARGET_SIMULATOR=TARGET_BUILD_TYPE=releaseTARGET_BUILD_APPS=TARGET_ARCH=armHOST_ARCH=x86HOST_OS=linuxHOST_BUILD_TYPE=releaseBUILD_ID=MASTER====================================== ======make:进入目录'/root/android/android2.3'Install: out/host/linux-x86/bin/aprioriInstall: out/host/linux-x86/bin/soslimInstall: out/target/product/generic/system/lib/libdl.soInstall: out/target/product/generic/system/lib/libc.sotarget Non-prelinked: libc_malloc_debug_leak (out/target/product/generic/symbols/system/lib/libc_malloc_de bug_leak.so)Install:out/target/product/generic/system/lib/libc_malloc_debug_leak. sotarget Non-prelinked: libc_malloc_debug_qemu (out/target/product/generic/symbols/system/lib/libc_malloc_de bug_qemu.so)Install:out/target/product/generic/system/lib/libc_malloc_debug_qem u.soInstall: out/target/product/generic/system/lib/libm.soInstall: out/target/product/generic/system/lib/libstdc++.so Install:out/target/product/generic/system/lib/libthread_db.so target Non-prelinked: linker (out/target/product/generic/symbols/system/bin/linker) Install: out/target/product/generic/system/bin/linkerInstall: out/host/linux-x86/bin/aaptInstall: out/host/linux-x86/framework/apicheck.jarInstall: out/host/linux-x86/framework/clearsilver.jarInstall: out/host/linux-x86/framework/droiddoc.jarInstall: out/host/linux-x86/lib/libneo_util.soInstall: out/host/linux-x86/lib/libneo_cs.soInstall: out/host/linux-x86/lib/libneo_cgi.soInstall: out/host/linux-x86/lib/libclearsilver-jni.so Copying:out/target/common/obj/JAVA_LIBRARIES/core_inter。
android编译大全 完全指南
关于 -b 和 -m 参数的说明参见: https:///wiki/QAEP
v
执行 repo sync 就可以开始下载源码了
$ repo sync (漫长的过程,视速度而言需要半天以上) Android 编译大全(二) 2. 编译源代码 v 执行 ls -la /bin/sh 命令,如果输出如下:
注:本文档以 Froyo 版本为基础进行编译。 1.2. Source code 的获取 v 在源码存放目录 android 中执行
$ repo init -u git:///platform/manifest.git -b carrot.cupcake -m M7201JSDCBALYA6380.xml 就可以获得代码了
n sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev buildessential zip curl n n n n sudo apt-get install ncurses-dev sudo apt-get install zlib1g-dev sudo apt-get install valgrind sudo apt-get install python2.5 (Ubuntu 可能已经自带 )
build 之后的 log 如下: …… creating boot.img... creating recovery.img... creating system.img...
creating userdata.img... cleaning up... Done. Android 编译大全(三) 3. 验证编译之后的模块 $export ANDROID_PRODUCT_OUT=<SrcDir>/out/target/product/generic $cd ./out/host/linux-x86/bin $./emulator
【转】Android编译系统详解(三)——编译流程详解
【转】Android编译系统详解(三)——编译流程详解原⽂⽹址:本⽂原创作者: 欢迎转载,请注明出处和1.概述编译Android的第三步是使⽤mka命令进⾏编译,当然我们也可以使⽤make –j4,但是推荐使⽤mka命令。
因为mka将⾃动计算-j选项的数字,让我们不⽤纠结这个数字到底是多少(这个数字其实就是所有cpu的核⼼数)。
在编译时我们可以带上我们需要编译的⽬标,假设你想⽣成recovery,那么使⽤mka recoveryimage,如果想⽣成ota包,那么需要使⽤mka otapackage,后续会介绍所有可以使⽤的⽬标。
另外注意有⼀些⽬标只是起到修饰的作⽤,也就是说需要和其它⽬标⼀起使⽤,共有4个⽤于修饰的伪⽬标:1) showcommands 显⽰编译过程中使⽤的命令2) incrementaljavac⽤于增量编译java代码3) checkbuild⽤于检验那些需要检验的模块4) all如果使⽤all修饰编译⽬标,会编译所有模块研究Android编译系统时最头疼的可能是变量,成百个变量我们⽆法记住其含义,也不知道这些变量会是什么值,为此我专门做了⼀个编译变量的参考⽹站,你可以在该⽹站查找变量,它能告诉你变量的含义,也会给出你该变量的⽰例值,另外也详细解释了编译系统⾥每个Makefile的作⽤,这样你在看编译系统的代码时不⾄于⼀头雾⽔。
编译的核⼼⽂件是和,main.mk主要作⽤是检查编译环境是否符合要求,确定产品配置,决定产品需要使⽤的模块,并定义了许多⽬标供开发者使⽤,⽐如droid,sdk等⽬标,但是⽣成这些⽬标的规则主要在Makefile⾥定义,⽽内核的编译规则放在build/core/task/kernel.mk我们将先整体介绍main.mk的执⾏流程,然后再针对在Linux上编译默认⽬标时使⽤的关键代码进⾏分析。
Makefile主要定义了各个⽬标的⽣成规则,因此不再详细介绍它的执⾏流程,若有兴趣看每个⽬标的⽣成规则,可查看2. main.mk执⾏流程2.1 检验编译环境并建⽴产品配置1) 设置Shell变量为bash,不能使⽤其它shell2) 关闭make的suffix规则,rcs/sccs规则,并设置⼀个规则: 当某个规则失败了,就删除所有⽬标3) 检验make的版本,cygwin可使⽤任意版本make,但是linux或者mac只能使⽤3.81版本或者3.82版本4) 设置PWD,TOP,TOPDIR,BUILD_SYSTEM等变量,定义了默认⽬标变量,但是暂时并未定义默认⽬标的⽣成规则5) 包含,该makefile定义了两个⽬标help和out, help⽤于显⽰帮助,out⽤于检验编译系统是否正确6) 包含,config.mk作了很多配置,包括产品配置,包含该makefile后,会建⽴输出⽬录系列的变量,还会建⽴PRODUCT系列变量,后续介绍产品配置时,对此会有更多详细介绍7) 包含,该makefile会包含所有⼯程的CleanSpec.mk,写了CleanSpec.mk的⼯程会定义每次编译前的特殊清理步骤,cleanbuild.mk会执⾏这些清除步骤8) 检验编译环境,先检测上次编译结果,如果上次检验的版本和此次检验的版本⼀致,则不再检测,然后进⾏检测并将此次编译结果写⼊2.2 包含其它makefile及编译⽬标检测1) 如果⽬标⾥含有incrementaljavac,那么编译⽬标时将⽤incremental javac进⾏增量编译2) 设置EMMA_INSTRUMENT变量的值,emma是⽤于测试代码覆盖率的库3) 包含,该makefile定义了许多辅助函数4) 包含,该makefile定义了⾼通板⼦的⼀些辅助函数及宏5) 包含,该makefile定义了优化dex代码的⼀些宏6) 检测编译⽬标⾥是否有user,userdebug,eng,如果有则告诉⽤户放置在buildspec.mk或者使⽤lunch设置,检测TARGET_BUILD_VARIANT变量,看是否有效7) 包含, PDK主要是能提⾼现有设备升级能⼒,帮助设备制造商能更快的适配新版本的android2.3 根据TARGET_BUILD_VARIANT建⽴配置1) 如果编译⽬标⾥有sdk,win_sdk或者sdk_addon,那么设置is_sdk_build为true2) 如果定义了HAVE_SELINUX,那么编译时为build prop添加属性ro.build.selinux=13) 如果TARGET_BUILD_VARIANT是user或者userdebug,那么tags_to_install += debug 如果⽤户未定义DISABLE_DEXPREOPT为true,并且是user模式,那么将设置WITH_DEXPREOPT := true,该选项将开启apk的预优化,即将apk分成odex代码⽂件和apk资源⽂件4) 判断enable_target_debugging变量,默认是true,当build_variant是user时,则它是false。
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源代码下载及编译方法
本文主要参考官方文档(/download)和网上相关资料(/HKjinzhao/archive/2009/03/18/4002326.aspx,/2009/04/30/how-to-build-android-15-kernel-image/)。
网上的资料对于andorid的最新代码有的已经过时,或者有错误,这份文档本人亲自实验,保证可行。
另本人没有使用eclipse的习惯,所以并没有做eclipse的相关配置。
编译环境:ubuntu9.101)安装必要的软件环境$ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev官方推荐的就是上面这些,如果在编译过程中发现某些命令找不到,就apt-get它。
可能需要的包还有:$ sudo apt-get install make$ sudo apt-get install gcc$ sudo apt-get install g++$ sudo apt-get install libc6-dev$ sudo apt-get install patch$ sudo apt-get install texinfo$ sudo apt-get install zlib1g-dev$ sudo apt-get install valgrind$ sudo apt-get install python2.5(或者更高版本)需要注意的是,官方文档说如果用sun-java6-jdk可出问题,得要用sun-java5- jdk。
经测试发现,如果仅仅make(make不包括make sdk),用sun-java6-jdk是没有问题的。
android源码编译_转自刘望舒
android源码编译_转⾃刘望舒前⾔我们顺利的将AOSP下载了下来后,很多时候我们不仅仅需要去查看源码,还有以下的⼏个需求:1.定制Android系统2.将最新版本的Android系统刷⼊到⾃⼰的Android设备中3.将整个系统源码导⼊到Android Studio中4.动态调试Android系统源码为了实现这些需求,就需要我们去编译系统源码。
其中第三条和第四条也可以不⽤编译源码来实现,第三条只要有对应Android源码版本的android.iml 和 android.ipr 两个⽂件就可以将源码导⼊到Android Studio中,第四条动态调试系统源码不⼀定⾮要导⼊整个系统源码进⾏调试。
关于第三条和第四条的具体内容,我会在以后的内容中进⾏讲解。
1.编译系统概述了解以下⼀些概念,会对Android编译系统有⼤概的了解。
MakefileAndroid平台的编译系统,其实就是⽤Makefile写出来的⼀个独⽴项⽬。
它定义了编译的规则,实现了“⾃动化编译”,不仅把分散在数百个Git库中的代码整合起来、统⼀编译, ⽽且还把产物分门别类地输出到⼀个⽬录,打包成⼿机ROM,还可以⽣成应⽤开发时所使⽤的SDK、NDK等。
因此,采⽤Makefile编写的编译系统,也可以称为Makefile编译系统。
Android.mkMakefile编译系统的⼀部分,Android.mk是android编译环境下的⼀种特殊的“makefile”⽂件, 它是经过了android编译系统处理的。
Android.mk中定义了⼀个模块的必要参数,使模块随着平台编译。
通俗来讲就是告诉编译系统,以什么样的规则编译你的源代码,并⽣成对应的⽬标⽂件。
NinjaNinja是⼀个致⼒于速度的⼩型编译系统,如果把其他的编译系统看作⾼级语⾔,那么Ninja ⽬标就是汇编。
使⽤Ninja 主要⽬的就是因为其编译速度快。
SoongSoong是⾕歌⽤来替代此前的Makefile编译系统的替代品,负责解析Android.bp⽂件,并将之转换为Ninja⽂件BlueprintBlueprint⽤来解析Android.bp⽂件翻译成Ninja语法⽂件。
详细android源码下载编译图文教程
前几天,又切换回ubuntu11.04系统了,体验以下unity 桌面。
android 系统源码(包括sdk 源码)的下载主要是需要用到git 工具,关于git 工具的使用我会抽空专门介绍,这里用到的时候简略说明一下。
1.安装git 和curl命令:$sudo apt-get install git-core curl说明:curl 是一个向服务器或从服务器传输数据的工具,它支持HTTP 、HTTPS 、FTP 、 FTPS 、 SCP 、SFTP 、TFTP 、DICT 、TELNET 、LDAP 或FILE 等协议。
对于web 开发人员来说,它对 HTTP POST 的支持为我们提供了很大的帮助。
git 是分布式的版本控制系统,在这里负责把远程版本库的源代码clone 下来。
2. 安装repo命令:?1234567 $mkdir bin //下载repo 脚本到本地bin 文件夹下 $curl /repo >~/bin/repo //设置本地repo 的可执行权限 $chmod a+x ~/bin/repo //临时把repo 添加到环境变量中,方便后面执行。
$export PATH=~/bin:$PATH说明:repo 是一个基于git 的版本库管理工具,可以简化android 开发中使git 的使用。
在这里,使用repo 和官方提供的android project 列表自动批量下载android 整个项目,免去了大量下载各个项目的手动工作量。
3.初始化repo 客户端命令:?1 2 3 4 //创建目录android/android-source 来存放下载的源码$mkdir android/android-source -p//进入目录$cd android/android-source5 6 //获取项目列表并且初始化目录$repo init -u git:///platform/manifest.git初始化完成后会显示repo initialized in /home//xx,如下图:4.同步版本库命令:?1 $repo sync 说白了,就是从服务器上下载最新的代码。
AndroidSDK源代码编译
AndroidSDK源代码编译1. 环境Ubuntu 10.04 32-bitsudo apt-get install git-coresudo apt-get install curlsudo apt-get install zlib -dev 变为 sudo apt-get install zlib1g -devsudo apt-get install bisonsudo apt-get install flexsudo apt-get install libncurses-dev (libncurses5-dev)sudo apt-get install g++sudo apt-get install libx11-devsudo apt-get install gperf安装Java6关于Java版本:Java6能够编译代码,但不能⽣成⽂档,最好准备两套Java环境Ubuntu 10.04 64-bitsudo apt-get install libc6-dev-i386sudo apt-get install lib32ncurses5-devsudo apt-get install libx11-devsudo apt-get install g++-multilibsudo apt-get install lib32z1-dev64-bit Java62. 下载Android SDKchmod a+x ~/bin/repo如果是想把Android当前主线上最新版本的所有的sourcecode拿下来,我们需要repo的帮助。
先建⽴⼀个⽬录,⽐如~/android,进去以后⽤repo init命令即可。
repo init -u git:///platform/manifest.git获取eclair代码:从Android 2.2开始,编译SDK需要64位系统,32位的,只好先编译Eclair了.repo sync3. 编译makecd eclair. ./build/envsetup.shmake sdk在模拟器上运⾏编译好的android编译好android之后,emulator在~/android/out/host/linux-x86/bin 下,ramdisk.img,system.img和userdata.img则在~/android/out/target/product /generic下$ cd ~/android/out/host/linux-x86/bin增加环境变量$ emacs ~/.bashrc在.bashrc中新增环境变量,如下#java 程序开发/运⾏的⼀些环境变量export ANDROID_PRODUCT_OUT=~/android/out/target/product/genericANDROID_PRODUCT_OUT_BIN=~/android/out/host/linux-x86/binexport PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT};最后,同步这些变化:$ source ~/.bashrc$ cd ~/android/out/target/product/generic$ emulator -system system.img -data userdata.img -ramdisk ramdisk.img最后进⼊android桌⾯,就说明成功了。
Android2.2源码编译步骤详解
Android2.2源码编译步骤详解Ubuntu10.4 + Android2.2 + JDK1.51、编译环境Android2.2 + Ubuntu10.04 + JDK1.5安装必要的软件环境sudo apt-get install git-coresudo apt-get install gnupgsudo apt-get install flexsudo apt-get install bisonsudo apt-get install gperfsudo apt-get install libsdl-devsudo apt-get install libesd0-devsudo apt-get install libwxgtk2.6-devsudo apt-get install build-essentialsudo apt-get install zipsudo apt-get install curlsudo apt-get install libncurses5-devsudo apt-get install zlib1g-dev以上就是官方推荐的软件包,可能需要的软件包还有以下几个sudo apt-get install makesudo apt-get install gccsudo apt-get install g++sudo apt-get install libc6-devsudo apt-get install patchsudo apt-get install texinfosudo apt-get install valgrindsudo apt-get install pythonJDK1.5安装官方声明:32位操作系统下JDK必须要用1.5的,是因为在编译Android api docs时需要1.5的。
用JDK1.6必须用64位系统,当然也有解决办法,网上教程很多此处就不再一一声明。
安卓编译详解
安卓编译详解安卓编译详解1.关于make1.Make命令在执行的时候,默认会在当前目录找到Makefile文件,根据Makefile文件中的指令来对代码进行编译2.Makefile文件中的指令可以是编译命令,例如gcc,也可以是其它命令,例如Linux系统中的shell命令cp、rm3.make命令事实也是通过shell命令来完成任务的,但是它的神奇之处是可以帮我们处理好文件之间的依赖关系1.Makefile文件最基础的功能就是描述文件之间的依赖关系以及怎么处理这些依赖关系2.Make根据Makefile指令两个文件之间存在依赖关系,以及当被依赖文件发生变化时如何处理目标文件4.Makefile可划分为Makefile片段(fragement),Makefile通过include指令来将片段组装在一个Makefile 2.build/envsetup.sh脚本文件1.envsetup.sh会在vendor和device两个目录将厂商指定的envsetup.sh也source到当前shell,通过vendor和device两个目录的envsetup.sh可获得厂商提供的产品配置信息2.envsetup.sh还提供了以下几个重要的命令来帮助我们编译Android源码mm1.lunch:用来初始化编译环境,例如设置环境变量和指定目标产品型号1.设置TARGET_PRODUCT、TARGET_BUILD_VARIANT、TARGET_BUILD_TYPE和TARGET_BUILD_APPS等环境变量,用来指定目标产品类型和编译类型2.通过make命令执行build/core/config.mk脚本1.build/core/config.mk会加载build/core/dumpvar.mk打印出当前的编译环境配置信息2.build/core/config.mk脚本还会加载BoradConfig.mk和envsetup.mk配置目标产品型号相关信息2.m:相当于是在执行make命令。
android.mk编译规则
Android.mk编译规则一、引言在A nd ro id应用开发过程中,我们经常需要编译和构建代码,以生成可执行的ap k文件。
而在A nd ro id开发环境中,使用`And r oi d.mk`文件来定义编译规则和构建过程。
本文将介绍`An dr oi d.mk`编译规则的使用方法和注意事项。
二、创建A ndroid.m k文件首先,我们需要在项目的根目录下创建一个名为`An dr oi d.mk`的文件。
这个文件将用于定义编译规则。
三、编写编译规则1.定义变量在`An dr oi d.mk`文件中,我们可以定义一些变量,以方便使用和管理。
例如:定义目标模块名L O CA L_MO DU LE:=MyM o du le定义源文件路径L O CA L_SR C_FI LE S:=s rc/m ai n.cs rc/ut i l.c定义依赖的库文件L O CA L_LD LI BS:=-l m2.添加子模块如果项目有多个模块需要编译,可以使用`i nc lu de`指令将子模块的`A nd ro id.m k`文件包含进来。
例如:i n cl ud e$(C LE AR_VA R S)定义子模块名和源文件路径L O CA L_M O DU LE:=Sub M od ul eL O CA L_SR C_FI LE S:=s rc/s ub mo du le.ci n cl ud e$(B UI LD_SH A RE D_LI BR AR Y)i n cl ud e$(C LE AR_VA R S)定义主模块名和源文件路径L O CA L_MO DU LE:=Mai n Mo du leL O CA L_SR C_FI LE S:=s rc/m ai n.c添加子模块依赖L O CA L_SH AR ED_L IBR A RI ES:=Su bM od ulei n cl ud e$(B UI LD_SH A RE D_LI BR AR Y)3.定义编译目标在`An dr oi d.mk`文件中,我们可以使用`L OC AL_M OD UL E`变量来定义编译目标的名称。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何单独编译Android源代码中的模块第一次下载好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
这样一切就搞定了。