android源码编译及rom制作_第1页
android源码编译及rom制作_第2页
android源码编译及rom制作_第3页
android源码编译及rom制作_第4页
android源码编译及rom制作_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LOGOAndroid源码编译

及ROM制作Presentation邵光栋CyanogenMod源码编译ContentsAndroid

CodeTreeAndroid源码编译个性化修改1234ROM制作5GoogleAndroid源代码位置:/source/downloading.htmlAndroid

CodeTree系统架构Android系统是按层次、分模块来设计的。整个系统:内核空间和用户空间内核空间包含了进程管理、内存管理以及设备驱动程序模块等,其中Android专用驱动Binder、Logger和Ashmem就是在内核空间实现的用户空间包含了硬件抽象层(HAL)、外部库和运行时库层(ExternalLibraries&AndroidRuntime)、应用程序框架层(ApplicationFramework)和应用程序层(Applications)四个层次。|--Makefile|--bionic

(bionicC库)|--bootable

(启动引导相关代码)|--build

(存放系统编译规则及generic等基础开发包配置)|--cts

(Android兼容性测试套件标准)|--dalvik

(dalvikJAVA虚拟机)|--development

(应用程序开发相关)|--external

(android使用的一些开源的模组)|--frameworks

(核心框架——java及C++语言)|--hardware

(主要保护硬解适配层HAL代码)|--out

(编译完成后的代码输出与此目录)|--packages

(应用程序包)|--prebuilt

(x86和arm架构下预编译的一些资源)|--sdk

(sdk及模拟器)|--system

(文件系统库、应用及组件——C语言)|--vendor

(厂商定制代码)代码树

Android源码编译初始化编译环境下载代码树编译编译内核

初始化编译环境设置Linux编译环境安装必需包配置USB访问设置高速缓存

初始化编译环境系统:Linux或者MacOS,不支持Windows大小:8.5GB(实际2-3GB)预留空间:一次编译至少30GB

一整套编译100GB选择编译分支建议:不要使用虚拟机安装ubuntu编译1、编译花费时间长,需要内存大2、如果配置低,可能会卡住不动3、虚拟机连接手机有问题,很可能不识别,编译前需要从手机拉

配置数据;不能使用fastboot模式刷机

设置Linux编译环境内部测试版本:Ubuntu10.04Gingerbread(2.3.x)ornewer:64bit系统工具:Python2.5-2.7

GNUmake3.81-3.82

JDK6(生成

Gingerbread或更高版本)

JDK5(Froyo或旧版本)

Git1.7或更高版本gcc/g++4.4(其他版本编译出错)

设置Linux编译环境安装JDK:Java6:$sudoadd-apt-repository"deb/lucidpartner"$sudoapt-getupdate$sudoapt-getinstallsun-java6-jdkJava5:$sudoadd-apt-repository"deb/ubuntuhardymainmultiverse“$sudoadd-apt-repository"deb/ubuntuhardy-updatesmainmultiverse“$sudoapt-getupdate$sudoapt-getinstallsun-java5-jdk

安装必需包64位Ubuntu,推荐使用10.04安装编译所需要的包$sudoapt-getinstallgit-coregnupgflexbisongperfbuild-essentialzipcurlzlib1g-devlibc6-devlib32ncurses5-devia32-libsx11proto-core-devlibx11-devlib32readline5-devlib32z-devlibgl1-mesa-devg++-multilibmingw32tofrodospython-markdownlibxml2-utilsxsltprocOnUbuntu10.10:$sudoln-s/usr/lib32/mesa/libGL.so.1/usr/lib32/mesa/libGL.soOnUbuntu11.10:$sudoapt-getinstalllibx11-dev:i386OnUbuntu12.04:$sudoapt-getinstallgit-coregnupgflexbisongperfbuild-essentialzipcurllibc6-devlibncurses5-dev:i386x11proto-core-devlibx11-dev:i386libreadline6-dev:i386libgl1-mesa-glx:i386libgl1-mesa-devg++-multilibmingw32openjdk-6-jdktofrodospython-markdownlibxml2-utilsxsltproczlib1g-dev:i386$sudoln-s/usr/lib/i386-linux-gnu/mesa/libGL.so.1/usr/lib/i386-linux-gnu/libGL.so

配置USB访问在GNU/Linux系统下(特别是Ubuntu系统下),默认配置下普通用户不能直接访问USB设备,需要对系统进行一些配置。方法:1、查看你手机的ID号。将手机连接上电,脑在terminal下运行lsusb命令

Bus002Device007:ID

18d1:4e212、创建文件/etc/udev/rules.d/51-android.rules(作为root用户),

<username>必须更换的实际的授权访问usb手机的用户的用户名#adbprotocolonpassion(NexusOne)SUBSYSTEM=="usb",ATTR{idVendor}=="18d1",ATTR{idProduct}=="4e21",MODE="0600",OWNER="<username>“

sudochmoda+rx/etc/udev/rules.d/51-android.rules

sudo/etc/init.d/udevrestart3.重启adb服务(必须为sudo已配置android环境变量)

进入sdk的platform-tools目录

sudo./adbkill-server

sudo./adbdevices

#adbprotocolonpassion(NexusOne)SUBSYSTEM=="usb",ATTR{idVendor}=="18d1",ATTR{idProduct}=="4e12",MODE="0600",OWNER="<username>“#adbprotocoloncrespo/crespo4g(NexusS)SUBSYSTEM=="usb",ATTR{idVendor}=="18d1",ATTR{idProduct}=="4e22",MODE="0600",OWNER="<username>“#adbprotocolonstingray/wingray(Xoom)SUBSYSTEM=="usb",ATTR{idVendor}=="22b8",ATTR{idProduct}=="70a9",MODE="0600",OWNER="<username>“#adbprotocolonmaguro/toro(GalaxyNexus)SUBSYSTEM=="usb",ATTR{idVendor}=="04e8",ATTR{idProduct}=="6860",MODE="0600",OWNER="<username#adbprotocolonpanda(PandaBoard)SUBSYSTEM=="usb",ATTR{idVendor}=="0451",ATTR{idProduct}=="d101",MODE="0600",OWNER="<username>“#adbprotocolongrouper(Nexus7)SUBSYSTEM=="usb",ATTR{idVendor}=="18d1",ATTR{idProduct}=="4e42",MODE="0600",OWNER="<username>“

设置高速缓存高速缓存编译生成的信息,并在编译的特定部分使用高速缓存的信息(如头文件),这样就节省了通常使用cpp解析这些信息所需要的时间。可选的,建议配置,以节省编译时间方法:在.bashrc中添加

exportUSE_CCACHE=1

默认情况下,高速缓存保存在~/.ccache,建议设置缓存大小为50-100G

如果主目录位于NFS或其他非本地文件系统上,要将下面语句添加到.bashrc中,之后保存并退出:

exportCCACHE_DIR=<path-to-your-cache-directory>

<path-to-your-cache-directory>修改为cache目录的位置

下载完代码后运行

prebuilt/linux-x86/ccache/ccache-M50G

下载代码树1、下载repo(实际是用python写的一个操作Git的脚本)$mkdir~/bin$exportPATH=~/bin:$PATH$curl/dl/googlesource/git-repo/repo>~/bin/repo$chmoda+x~/bin/repo2、初始化repo客户端设置客户端访问android仓库创建工作目录$mkdirWORKING_DIRECTORY$cdWORKING_DIRECTORY初始化repo下载源码版本主分支$repoinit–u/platform/manifest其他分支

$repoinit-u/platform/manifest-bandroid-4.0.1_r1将服务器数据同步到本地$reposync-jN

下载代码树3、验证git标签将以下公共密钥加载到本地GnuPG密钥数据库$gpg–import复制粘贴以下内容,键入(Ctrl-D)结束-----BEGINPGPPUBLICKEYBLOCK-----Version:GnuPGv(GNU/Linux)mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSVlFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw78tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMDu4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0ZwNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq……

编译1、初始化使用envsetup.sh初始化安装环境:$sourcebuild/envsetup.sh加载device目录下的环境信息

编译选择编译目标:$lunchfull-eng

编译2、编译$make–jN3、运行刷机

进入fastboot模式,可以使用adbshell或者组合键$adbrebootbootloader$fastbootflashall–w-w选项是清除/data数据$fastbootflashbootboot.img$fastbootflashsystemsystem.img模拟$emulator

编译

编译4、编译输出在编译完整个项目后,终端会出现如下提示:Targetsystemfsimage:out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img

Installsystemfsimage:out/target/product/generic/system.img

Targetramdisk:out/target/product/generic/ramdisk.img

Targetuserdatafsimage:out/target/product/generic/userdata.img

Installedfilelist:out/target/product/generic/installed-files.txt

out文件夹下是编译结果

编译内核(可选)1、可以直接使用已经编译好的内核,从其他刷机包提取2、自己编译选择并下载编译版本$gitclone/device/ti/panda$cdpanda$gitlogkernel下载资源$gitclone/kernel/common.git$gitclone/kernel/exynos.git$gitclone/kernel/goldfish.git$gitclone/kernel/msm.git$gitclone/kernel/omap.git$gitclone/kernel/samsung.git$gitclone/kernel/tegra.gitGoldfish包含内核平台的仿真。Mam有ADP1、ADP2、NexusOne的资源,并可工作在高通MSM芯片组。Samsung用于NexusS,并可工作在三星

Hummingbird芯片组。Tegra用于Xoom和Nexus7,并可工作在NVIDIATegra芯片组。Exynos可工作在三星Exynos芯片组

编译内核3、下载预编译工具$gitclone/platform/prebuilt$exportPATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH4、编译$exportARCH=arm$exportSUBARCH=arm$exportCROSS_COMPILE=arm-eabi-$cdomap$gitbranch–a(查看可选版本)$gitcheckout<commit_from_first_step>$makepanda_defconfig$make如果要编译tunakernel,只需要将panda替换为tunamagurokernel是device/samsung/tuna/kernel

crespoandcrespo4gkernel是device/samsung/crespo/kernel

stingrayandwingraykernel是device/moto/wingray/kernel

结果分析out/target/product/generic:镜像ramdisk.img,system.img,userdata.img

目录root,system,dataramdisk.img:根文件系统system.img:包括了主要的包、库等文件userdata.img:包括了一些用户数据android加载这3个映像文件后,会把system和userdata分别加载到ramdisk文件系统中的system和data目录下

几个命令sourcesource命令会把对应脚本中的内容读取到当前的bash解释器中,在当前的执行环境中执行;其中定义的function以及通过export声明的变量等在source执行结束之后依然存在于当前的bash环境中。Source后会多出几个可用的命令:croot:

Changesdirectorytothetopofthetree.

-m:

Makesfromthetopofthetree.

-mm:

Buildsallofthemodulesinthecurrentdirectory.

-mmm:

Buildsallofthemodulesinthesupplieddirectories.

-cgrep:

GrepsonalllocalC/C++files.

-jgrep:

GrepsonalllocalJavafiles.

-resgrep:Grepsonalllocalres/*.xmlfiles.

-godir:

Gotothedirectorycontainingafile.

-printconfig:当前build的配置情况.

在修改了某一个模块以后,可以使用$mmm<目录>

来重新编译所有在<目录>中的所有模块,使用$mm

编译当前目录中的所有模块。

编完之后,即修改了Android系统以后,可以使用$makesnod重新生成system.img

CyanogenMod源码编译CyanogenMod(简称cm):Cyanogen团队是目前全球最大的Android第三方编译团队,其发布的Android2.1内核CM5系列ROM被广泛使用,促进了用户从Android1.6到Android2.1版本的第三方升级。这个小组曾经先于google公司为很多手机率先定制出稳定的1.6ROM。CyanogenMod目前系列有CM4(android1.6)、CM5(android2.1)、CM6(android2.2)、CM7(android2.3)、CM8(android3.*)、CM9(android4.0)、CM10(android4.1)CM与Android关系:谷歌共享的源代码仅能用于Nexus系列手机上,并不适合所有机型。CM团队通过Google共享的Android源代码,经过内核部分的修改和GPL协议开发出来了CM系列固件。优点:CM系列固件的表层UI界面使用的是ADWLauncher界面,

细节设置非常给力,而且有多种主题可用,

CM系列固件极速、精简

CyanogenMod源码编译下载源码$mkdirCyanogenMod

获取gingerbread的分支源代码$repoinit-ugit:///CyanogenMod/android.git-bgingerbread

同步服务器代码到本地$reposync–jN下载匹配的device目录:

/读取手机上的配置文件:

在连接手机的情况下,运行下载目录下的extract-files.sh主要作用:从手机上下载固件相关文件、lib、二进制文件,并生成vendor目录

CyanogenMod源码编译生成编译脚本文件$cd~/CyanogenMod/vendor/cyanogen$./get-rommanager$./extract-google-files//复制编译脚本文件到CyanogenMod目录下,后面编译整个系统用的就是这个文件$cp~/CyanogenMod/vendor/cyanogen/products/cyanogen_lieberty.mk~/CyanogenMod/buildspec.mk编译脚本

//初始化脚本,这个是后面的重要基础步骤$sourcebuild/envsetup.sh//选择编译的产品$lunchcyanogen_liberty-eng//开始编译$make-j4问题:可下载的device有限,具体device的制作过程尚不清楚?

个性化修改1、一般定制ROM其实就是对手机内存里的system/app文件夹的内容进行自定义,系统所有的程序都在这个文件夹里,比如浏览器、拨号器、联系人等。自己安装的软件\data\文件夹中。定制包的结构:*.zip/system/app/my.apk(你想要放进系统中的程序)

/META-INF/com/google/update-script(定制包脚本)

/META-INF/CERT.SF(签名文件)

/META-INF/CERT.RSA(签名文件)

/META-INF/MANIFEST.MF(签名文件)

个性化修改添加目录的语句为copy_dirPACKAGE:定制包路径手机内存路径

删除程序的语句为delete手机内存路径

显示进程语句为show_progress显示在Recovery系统中进度:show_progress(frac,sec)

frac,进度完成数值;Sec,总秒数

deleteSYSTEM:app/DivXRegCode.odex

deleteSYSTEM:ap

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论