Android 源码编译 流程
- 格式:doc
- 大小:476.00 KB
- 文档页数:4
ANDROID源码编译流程编译Android源代码是一个相对复杂的过程,但是如果你按照正确的步骤进行,你就可以成功地编译出你自己的Android系统。
下面是一个大致的流程来编译Android源代码:1.环境准备:在开始编译Android源代码之前,你需要确保你的系统满足以下要求:- Linux系统(推荐使用Ubuntu)-64位操作系统-至少8GB的RAM-大规模存储空间(30GB或更多)你还需要安装一些必要的开发包和工具,例如JDK、Git等。
详细的要求可以在Android官方网站上找到。
2.获取源代码:要编译Android系统,你需要先获取源代码。
Android的源代码存储在Git仓库中,你可以使用Repo工具来管理多个Git仓库。
首先,你需要安装Repo工具。
你可以通过下面的命令来安装:```$ sudo apt-get install repo```之后,在一个合适的目录下创建一个新的文件夹来存放源代码:$ mkdir myandroid$ cd myandroid```使用Repo工具来初始化一个仓库:``````之后,同步源代码到你的本地仓库:```$ repo sync```这个过程可能需要花费几个小时甚至更长时间,取决于你的网络速度和计算机配置。
3.构建工具链:Android使用GNU Make和Ninja构建工具来构建系统。
你需要安装这些工具。
首先,安装GNU Make和一些必要的依赖库:```$ sudo apt-get install build-essential然后,安装Ninja:```$ sudo apt-get install ninja-build```4.配置构建环境:在构建Android系统之前,你需要进行一些配置操作。
首先,你需要选择要构建的目标设备和版本。
你可以在Android源代码的根目录中找到`lunch`脚本。
运行`lunch`脚本并选择你的目标:```$ source build/envsetup.sh$ lunch```然后,你需要选择编译时使用的编译器。
android编译流程Android编译流程是将源代码转化为可执行的Android应用程序的过程。
编译流程包括以下几个主要步骤:1.获取源代码:首先,开发人员需要从Android Open Source Project (AOSP) 或者其他可靠的源代码库中获取Android源代码。
获取源代码可以通过使用版本控制工具如Git来完成。
2.准备构建环境:在编译之前,需要准备好构建环境。
这包括安装正确的开发工具、依赖库和配置。
- 开发工具:Android编译使用Java编程语言,因此需要安装Java Development Kit (JDK)。
同时还需要安装Android软件开发工具包(SDK),用于构建和测试Android应用。
- 依赖库:编译Android需要一些依赖库,包括C/C++编译器、make 工具、libc、libm和其他系统库。
这些库可以通过安装合适的软件包管理工具来获取。
-配置:开发人员需要根据构建计划配置构建环境。
这包括选择编译器版本、构建目标平台以及其他构建选项。
3.设置环境变量:为了让系统能够找到正确的构建工具和依赖库,开发人员需要设置一些环境变量。
这可以通过在命令行终端中设置系统环境变量或者使用脚本文件进行配置来实现。
4.执行初始化构建:在进行实际的编译之前,需要执行一些初始化构建操作。
这包括解压源代码文件、创建构建描述文件、设置编译选项等。
5.编译源代码:编译源代码是整个编译流程的核心步骤。
在此步骤中,构建系统将递归地遍历整个源代码树,并将每个源文件编译成目标文件。
编译过程通常分为以下几个阶段:-预处理:在编译之前,构建系统会首先对源代码进行预处理。
预处理器将处理预处理指令、宏定义等,并将源代码转化为可供编译器识别的形式。
-编译:编译器将源代码编译成汇编语言或者中间代码。
-汇编:汇编器将汇编语言代码转化为机器可执行的二进制指令。
android源码编译流程
Android源码编译是一项相对复杂的工作,需要多次配置环境和执行命令。
以下是一般的Android源码编译流程:
1. 准备编译环境
在编译Android源码之前,需要先准备好编译环境。
这包括安装必要的软件和工具,例如JDK、Python、Git、make、ccache等。
2. 获取源码
Android源码是存储在Git仓库中的,因此需要使用Git命令行工具获取源码。
可以使用repo工具来自动化这个过程。
3. 配置编译环境
在获取到源码之后,需要配置编译环境。
这包括设置环境变量、选择编译目标、配置编译选项等。
Android源码提供了一些预定义的编译选项,也可以通过lunch命令来进行交互式配置。
4. 执行编译命令
配置好编译环境之后,就可以执行编译命令了。
这包括使用make 命令编译整个系统,或者只编译某个模块。
编译完成后,会生成一些二进制文件和镜像文件,例如system.img、boot.img、recovery.img 等。
5. 刷入和测试
编译完成后,可以将生成的镜像文件刷入设备进行测试。
这包括将system.img刷入系统分区、boot.img刷入引导分区、recovery.img 刷入恢复分区等。
测试完成后,就可以将编译好的源码部署到实际的
设备上了。
总的来说,Android源码编译是一个相对复杂的过程,需要多次配置环境和执行命令。
但是,掌握了这个过程,就能够更好地理解Android系统的工作原理,并进行自定义开发和调试。
android img 的编译过程
Android img的编译过程通常包括以下步骤:
在Android源码根目录下执行初始化环境命令:source build/envsetup.sh。
使用lunch命令选择需要编译的版本,如:lunch full-eng。
执行make命令进行编译,如:make bootimage,这个命令会编译生成boot.img。
boot.img的生成过程主要是将kernel、ramdisk、dtb打包到一起。
在这个过程中,需要用到dtb.img,如果dtb.img过大导致编译不过,那么需要分析dtb.img的生成过程。
dtb.img实际上是将kernel下的dts文件重新命名后拷贝到out目录下生成的。
此外,编译Android系统时,make命令实际上是在执行Makefile文件。
Android系统的Makefile文件在源码根目录下,并且这个Makefile文件会包含另一个主要的Makefile文件,即main.mk。
在main.mk中,定义了一个默认目标droid,这个目标依赖于droid_targets。
droid_targets又依赖于droidcode和dist_files两大伪目标。
当执行make命令时,make工具会检查并解析这些依赖关系,然后按照依赖顺序生成目标文件。
Android源码编译的全过程记录写本篇⽂章主要参考了官⽅⽂档和⽹上的⼀些资料,但是对于Android最新的代码来说,⽹上资料有些已经过时。
本⽂中步骤已经作者实验,⼤家可以亲⾃执⾏试试。
由于没有使⽤Eclipse的习惯,所以没有做Eclipse的相关配置。
编译环境:ubuntu9.10,widnows平台⽬前不被⽀持。
1)安装必要的软件环境$ 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是没有问题的。
⽽make sdk,就会有问题,严格来说是在make doc出问题,它需要的javadoc版本为1.5。
因此,我们安装完sun-java6-jdk后最好再安装sun-java5-jdk,或者只安装sun-java5-jdk。
Ubuntu下编译Android源码全过程(转)源码, 编译, Ubuntu, Android一、获取Android源代码Git是LinuxTorvalds(Linux之父)为了帮助管理Linux内核开发而开发的一个开放源码的分布式版本控制软件,它不同于Subversion、CVS这样的集中式版本控制系统。
在集中式版本控制系统中只有一个仓库(Repository),许多个工作目录(WorkingCopy),而在Git这样的分布式版本控制系统中(其他主要的分布式版本控制系统还有BitKeeper、Mercurial、GNUArch、Bazaar、Darcs、SVK、Monotone等),每一个工作目录都包含一个完整仓库,它们支持离线工作,本地提交可以稍后提交到服务器上。
因为Android是由Kernel、Dalvik、Bionic、Prebuilt、build等多个项目组成,如果我们分别使用Git来逐个获取显得很麻烦,所以Android项目编写了一个名为Repo的Python 的脚本来统一管理这些项目的仓库,使得项目的获取更加简单。
在Ubuntu 8.04上安装Git只需要设定正确的更新源,然后使用apt-get就可以了,apt-get 是一条Linux命令,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。
apt-get命令一般需要root权限执行,所以一般跟着sudo命令。
sudo apt-get install git-core curl这条命令会从互联网的软件仓库中安装git-core和curl。
其中curl是一个利用URL语法在命令行方式下工作的文件传输工具,它支持很多协议,包括FTP、FTPS、HTTP、HTTPS、TELENT等,我们需要安装它从网络上获取Repo脚本文件。
curl/repo>~/bin/repo这句命令会下载repo脚本文件到当前主目录的/bin目录下,并保存在文件repo中。
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的编译过程Android应用程序的编译过程涉及多个步骤,包括代码编译、资源处理、打包和优化等。
下面我将从多个角度全面介绍Android应用程序的编译过程。
首先,Android应用程序的编译过程通常从Java或Kotlin源代码开始。
开发人员编写应用程序的业务逻辑和功能,然后使用Java编译器或Kotlin编译器将源代码编译成Java字节码或Kotlin字节码。
其次,Android应用程序还涉及资源文件,如布局文件、图片、字符串等。
这些资源文件需要经过资源处理工具的处理,例如aapt (Android Asset Packaging Tool),它将资源文件编译成二进制格式,并生成R.java文件,其中包含资源ID的映射关系。
接下来,编译器将Java字节码或Kotlin字节码与资源文件一起打包成未签名的APK文件。
此时,还没有进行代码优化或混淆处理。
然后,未签名的APK文件需要经过代码优化和混淆处理。
代码优化可以包括删除未使用的代码、压缩代码等,以提高应用程序的性能和减小文件大小。
混淆处理则是为了保护应用程序的安全,将变量名、方法名等重命名为无意义的名称,使得反编译后的代码难以理解。
最后,经过代码优化和混淆处理的未签名APK文件将被签名,生成最终的APK文件。
签名是为了验证APK文件的真实性和完整性,确保在应用程序安装和更新时不会被篡改。
总的来说,Android应用程序的编译过程涉及代码编译、资源处理、打包、优化和签名等多个步骤,最终生成可安装的APK文件。
这些步骤保证了应用程序的性能、安全性和稳定性。
编译Android内核源代码下载好Android内核源代码这里使用的是模拟器所以下载的是android-goldfish-2.6.29版本的打开Android内核源代码目录下的Makefile文件修改体系结构和交叉编译工具即ARCH 和CROSS_COMPILE为Android模拟器编译内核分为三个步骤第一步是将交叉编译工具所在的目录添加到环境变量PA TH中第二步是修改硬件配置文件goldfish_defconfig第三步时执行make命令编译好的Android内核镜像文件zImage位于Android内核源代码目录下arch/arm/boot子目录中运行Android模拟器命令emulator 带参数-kernel 以指定Android模拟器所使用的内核镜像文件使用adb命令或者打开模拟器手机的设置关于手机查看内核版本是否为自己编译的开发一个Android应用程序来验证系统的行为这里假设读者已经熟悉如何使用Android SDK来开发Android应用程序在linux下的Android应用程序工程一般包含有一个源代码目录src 一个资源目录res 一个配置文件AndroidManifes.xml和一个编译脚本文件Android.mk这里吐槽一下AndroidManifest英文不要拼错我写错成了AndroidMainfest找半天才找到原因单独编译和打包Android应用程序模块在使用mmm命令之前要在Android源代码目录下执行以下source ./build/envsetup.sh脚本文件mmm命令才可以被使用命令mmm的用法可以通过-help来查看单独编译Android应用程序模块USER@MACHINE:~/Android$ mmm ./packages/experimental/HelloAndroid重新打包Android系统镜像文件USER@MACHINE:~Android$ make snod执行emulator命令启动Android模拟器在应用程序启动器中可以看到刚刚应用程序的快捷图标点击软件正常运行OK修改架构和交叉编译链查看交叉编译工具所在目录make goldfish_defconfig内核编译成功emulator带参数启动 &表示在后台启动Android模拟器目的为了可以在同一终端下使用adb命令命令emulator 带参数-kernel 以指定Android模拟器所使用的内核镜像文件验证是否为自己编译的内核Linux version 2.6.29 (devwang@devwang-desktop) (gcc version 4.4.3 (GCC) ) #2 Sun Jan 25 16:53:55 HKT 2015果然是的很高兴有木有在linux下的Android应用程序工程一般包含有一个源代码目录src 一个资源目录res 一个配置文件AndroidManifes.xml和一个编译脚本文件Android.mk遇到的问题AndroidManifest百度参考解决方法:/vblittleboy/article/details/21012991如果Makefile出现:make: *** No rule to make target ` ‘, needed by xxx. Stop.的错误,那么基本上都是属于找不到所依赖的文件所导致的,所以应该去:检测确保,所依赖的文件,是否真实存在。
Android 4.0开发环境搭建及源码编译1、安装VMware Workstation pro2、安装ubuntu-12.04-desktop-amd643、gcc、g++降版本4、把aosp目录拷入5、在命令窗口下运行sudo ./jdk-6u29-linux-x64.bin6、在命令窗口下运行sudo gedit /etc/profile,并把profile_append中的内容追加到文件后面,并使配置生效7、在命令窗口下运行javac –verson,如果能显示版本号说明JDK安置成功8、安装编译依赖工具包1)sudo apt-get install bison2)sudo apt-get install flex3)sudo apt-get install apt-file4)sudo apt-file update5)sudo apt-get install lib32z16)sudo apt-get install gperf7)sudo apt-get install zlib1g-dev8)sudo apt-get install liblzma-dev9)sudo apt-get install ia32-libs10)sudo apt-get install lib32stdc++611)sudo apt-get install g++-multilib12)sudo apt-get install zlib1g-dev13)sudo apt-get install lib32z-dev14)sudo apt-get install lib32ncurses5-dev 15)sudo apt-get install build-essential 16)sudo apt-get install libx11-dev17)sudo apt-get install libgl1-mesa-dev 18)sudo apt-get install libglu1-mesa-dev 19)sudo apt-get install git20)sudo apt-get install git-core21)sudo apt-get install python-mardown 22)sudo apt-get install yum23)sudo yum install libx11-devel.i686(下不了,不要了)24)sudo apt-get install libv4l-dev25)sudo ln –s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h9、解压tar xvf aosp4r.tar10、解压tar xvf goldfish2629.tar11、解压sdk14.tar12、解压eclipse.tar13、运行error_ln中的两条命令14、进入目录goldfish_2.6.29,运行脚本build_kernel.sh15、返回上一级,现进入目录aosp,运行1)source ./build/envsetup.sh2) 运行lunch 选13)make -j416、创建模拟器~/aosp/android-sdk-linux/tools下运行./android create avd –n avd –t 1 17、运行脚本run_emulator.sh。
Android 源码编译调试流程
by mengke
1 编译流程
sudo apt-get install build-essential
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 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-dev
sudo apt-get install zlib1g-dev
sudo apt-get install valgrind
sudo apt-get install python2.5
安装java环境
sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts sun-java6-jdk
sudo apt-get install sun-java5-jdk (ubuntu 910 估计会有一些问题)
(注:官方文档说如果用sun-java6-jdk可出问题,得要用sun-java5-jdk。
经测试发现,如果仅仅make(make不包括make sdk),用sun-java6-jdk是没有问题的。
而make sdk,就会有问题,严格来说是在make doc出问题,它需要的javadoc版本为1.5。
因此,我们安装完sun-java6-jdk后最好再安装sun-java5-jdk,或者只安装sun-java5-jdk。
这里sun-java6-jdk和sun-java5-jdk都安装,并只修改javadoc.1.gz和javadoc。
因为只有这两个是make sdk用到的。
这样的话,除了javadoc工具是用1.5版本,其它均用1.6版本:
sudo apt-get install sun-java5-jdk)
cd /etc/alternatives
sudo rm javadoc.1.gz
sudo ln -s /usr/lib/jvm/java-1.5.0-sun/man/man1/javadoc.1.gz javadoc.1.gz
sudo rm javadoc
sudo ln -s /usr/lib/jvm/java-1.5.0-sun/bin/javadoc javadoc
假设源代码的目录为mydroid
root@mk-desktop:~/mydroid# ls
Makefile build development frameworks out sdk
bionic cts device hardware packages system
bootable dalvik external ndk prebuilt vendor
2 make 整个环境
执行make 命令(最好系统不要运行别的程序,这个很耗费资源和时间,我的机器用了4个小时)
3 make sdk
执行make sdk
mmm指令:编译整个andoid源码
root@mk-desktop:~/mydroid# mmm
mm指令:编译部分andoid源码
root@mk-desktop:~/mydroid/packages/apps/AlarmClock# mm
4 eclipse 视图介绍
打开eclipse后我们需要用到的是第二三四个
第二个像个小机器人,就是ddms视图
第三个右上有个J,这个是最常用的编辑试图
第四个像个小强,这个是调试的时候需要使用的调试试图
调试
5 在模拟器上运行编译好Android
编译好Android之后,emulator在~/mydroid/out/host/linux-x86 /bin下,
ramdisk.img system.img userdata.img则在~/mydroid/out/target/product/generic下
cd ~/mydroid/out/host/linux-x86/bin
增加环境变量
vim ~/.bashrc
在.bashrc中新增环境变量,如下
#java 程序开发/运行的一些环境变量export
Android_PRODUCT_OUT=~/mydroid/out/target/product/generic
Android_PRODUCT_OUT_BIN=~/mydroid/out/host/linux-x86/bin
export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}
最后,同步这些变化:
source ~/.bashrc
启动emulator
root@mk-desktop:~/mydroid/out/target/product/generic# emulator -image system.img -data userdata.img -ramdisk ramdisk.img
启动eclipse
在eclipse的ddms视图中选择好进程,
在eclipse的编辑试图Run->Debug Configurations->Remotejavaapplication上双击,然后,”Host:”设为localhost,”Port:”设为8700,”ConnectionType”为
Standard(SocketAttach)
然后“Apply”
6 单步调试例子:
在/mydroid_test/packages/apps/Calculator/src/com/android/calculator2/Calculator.java
第155行前右键加断点
然后操作模拟器打开计算器,按下拨号键,此时程序就会停在断点上。