怎么maven 单独编译子模块安卓系统源码指定模块

经验6103 米
威望112 米
在线时间530 小时
版本6.7.21
积分 8078, 距离下一级还需 11922 积分
积分 8078, 距离下一级还需 11922 积分
机型小米Note 双网通版
签到次数99
MIUI版本6.7.21
来自网页版
本帖最后由 崋麗謝幕 于
21:20 编辑
声明:此系列教程由華麗謝幕本人搜集整理并编辑,转载请注明作者并附带原帖链接,发现违规转载永久停更。
教程一《WIN7、WIN8下硬盘安装DeepinLinux构成双系统》为什么是DeepinLinux而不是Ubuntu?其实DeepinLinux和Ubuntu除了界面之外没有什么区别,Ubuntu安装完需要自己去升级下载语言包和中文输入法,而DeepinLinux就省去了这些麻烦,而且还内置了些实用软件,平时用来编译娱乐都是不错的。
一、首先是分区,右键单击计算机--管理--磁盘管理装DeepinLinux分配的硬盘大小(最好是80G以上)不要太小(源码体积都很大哦),这里请注意,DeepinLinux和Windows文件系统完全不同,所以我们划好要给DeepinLinux的分区后,最好直接腾出一个盘,选定盘符后直接删除卷。到时候,安装好的DeepinLinux的分区,在Windows下是看不到的,但是进入DeepinLinux是可以访问Windows的磁盘的。这才叫双系统,和wubi那种可不一样哦。二、需要准备的东东
1.EasyBCD(附件有下载)
2.DeepinLinux光盘镜像,下载链接:
三、双系统安装教程
1.安装EasyBCD,之后打开它,选择“添加新条目”
1.jpg (343.52 KB, 下载次数: 3)
2.点击右边的“NeoGrub”再点击“安装”
2.jpg (350.69 KB, 下载次数: 2)
3.点击“配置”
3.jpg (350.39 KB, 下载次数: 2)
4.弹出引导配置
4.jpg (218.98 KB, 下载次数: 3)
删除里面所有的内容,并把下列内容粘贴进去title Install DeepinLinux
root (hd0,0)
kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename=/deepin_12.12.1_zh-hans_final_amd64.iso ro quiet splash locale=zh_CN.UTF-8
initrd (hd0,0)/initrd.lz复制代码保存并关闭,然后关闭EasyBCD。
特别注意:对于有的电脑上你的第一个盘符并不是C盘,在磁盘管理中可以看出,所以安装时需将(hd0,0)改为(hd0,1)【假设为第二个】5.把准备好的deepin_12.12.1_zh-hans_final_amd64.iso用压缩软件或者虚拟光驱打开,找到casper文件夹,复制里面的initrd.lz和vmlinuz到C盘,把.disk文件夹也复制到C盘,然后在把iso也拷贝到C盘
5.jpg (178.92 KB, 下载次数: 3)
6.重启电脑,会看见“NeoGrub 引导加载器”这个选项,选择进入,就会进入到DeepinLinux的体验模式。
7.进去之后 先要按Ctrl+Alt+T 打开终端,输入代码:sudo umount -l /isodevice复制代码这一命令取消掉对光盘所在 驱动器的挂载(注意,这里的-l是L的小写,-l 与 /isodevice 之间有一个空格),否则分区界面找不到分区。
8.点击屏幕上的“安装Deepin12.12.1”
会弹出一些选项,比如语言,时区等等,这些自己选择就行,关键是安弹出安装类型时要选择“其他”或是“自定义”。
提示联网,暂时不用联网,下一步。
进入到分区界面,找到你前面留好的那个分区:
1.先分一个SWAP分区(也就是交换空间)交换空间的大小=8G-你电脑的内存(ram)大小,也就是说,你的电脑内存大于8G也可以不分这个交换空间
2.剩下的整个都设为根分区也就是挂载点是“/”的分区(最好设为逻辑分区)
哦了,下一步,开始安装,期间会弹出用户名和密码的设置,自己设置就行了,安装完成会提示重启,重启之后有个新的引导菜单,第一项就是进入DeepinLinux,第三项是进入原来的系统。
至此双系统搞定,恭喜您踏上了安卓源码编译的第一步,下一章将介绍源码编译环境的搭建。
(1.48 MB, 下载次数: 88)
14:06 上传
点击文件名下载附件
下载积分: 经验 -1 米
教程二地址:
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
支持谢幕啊!!&
已有&3&人评分
精品文章^_^
预装WIN8的电脑到第6步就搞不定了,没法启.
支持教程啊,希望继续更新适配教程.
经验3265 米
在线时间964 小时
版本V8.0.5.0.MBECNDG
积分 4534, 距离下一级还需 466 积分
积分 4534, 距离下一级还需 466 积分
机型Samsung I9300
MIUI版本V8.0.5.0.MBECNDG
来自网页版
抢座。。。。。。。
经验2780 米
在线时间370 小时
积分 3604, 距离下一级还需 1396 积分
积分 3604, 距离下一级还需 1396 积分
机型Google Nexus 5
签到次数36
MIUI版本5.4.3
来自网页版
经验961 米
在线时间84 小时
版本5.7.10
积分 1129, 距离下一级还需 871 积分
积分 1129, 距离下一级还需 871 积分
机型小米手机2/2S
签到次数39
MIUI版本5.7.10
来自网页版
经验5186 米
在线时间484 小时
版本7.1.20
我是刷机狂
积分 5995, 距离下一级还需 14005 积分
积分 5995, 距离下一级还需 14005 积分
机型小米Note 2
签到次数89
MIUI版本7.1.20
来自网页版
经验3265 米
在线时间964 小时
版本V8.0.5.0.MBECNDG
积分 4534, 距离下一级还需 466 积分
积分 4534, 距离下一级还需 466 积分
机型Samsung I9300
MIUI版本V8.0.5.0.MBECNDG
来自网页版
再怒抢一楼
经验632 米
在线时间81 小时
积分 877, 距离下一级还需 1123 积分
积分 877, 距离下一级还需 1123 积分
机型小米手机3
MIUI版本4.1.3
来自网页版
这工作还是大神去弄吧
经验6655 米
在线时间347 小时
版本7.1.20
机型小米手机2/2S
签到次数178
MIUI版本7.1.20
通过手机发布
经验4999 米
在线时间160 小时
版本5.10.15
积分 5280, 距离下一级还需 14720 积分
积分 5280, 距离下一级还需 14720 积分
机型小米平板1
签到次数155
MIUI版本5.10.15
通过手机发布
顶。。。。。。。
经验3695 米
在线时间684 小时
版本V8.1.6.0.MAACNDI
积分 4513, 距离下一级还需 487 积分
积分 4513, 距离下一级还需 487 积分
机型小米手机5
签到次数55
MIUI版本V8.1.6.0.MAACNDI
来自网页版
不明觉厉,支持楼主
1000万用户纪念勋章
MIUI1000万用户纪念勋章
小米平板首发纪念勋章
小米平板首发纪念勋章
关注腾讯微博
已关注腾讯微博
关注新浪微博
已关注新浪微博
MIUI 2000万
MIUI 2000万发烧友纪念勋章
MIUI三周年
MIUI三周年纪念勋章
MIUI 3000万
MIUI 3000万发烧友纪念勋章
已关注微信
MIUI五周年
MIUI五周年纪念勋章
已关注极客秀微信
APP 1000万
MIUI论坛APP注册用户突破1000万纪念勋章
Copyright (C) 2016 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号& Android源码编译的全过程记录
Android源码编译的全过程记录
&&&&&& 写本篇文章主要参考了官方文档和网上的一些资料,但是对于Android最新的代码来说,网上资料有些已经过时。本文中步骤已经作者实验,大家可以亲自执行试试。由于没有使用的习惯,所以没有做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。这里sun-java6-jdk和sun-java5-jdk都安装,并只修改javadoc.1.gz和javadoc。因为只有这两个是make sdk用到的。这样的话,除了javadoc工具是用1.5版本,其它均用1.6版本:&&&&&&&&& $ sudo apt-get install sun-java6-jdk&&&&&& 修改javadoc的link:$ 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&&&&&& 2)设置环境变量&&&&&& $ emacs ~/.bashrc&&&&&& 在.bashrc中新增或整合PATH变量,如下:&&&&&& #java 程序开发/运行的一些环境变量JAVA_HOME=/usr/lib/jvm/java-6-sunJRE_HOME=${JAVA_HOME}/jreexport ANDROID_JAVA_HOME=$JAVA_HOMEexport CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATHexport JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/binexport JAVA_HOME;export JRE_HOME;export CLASSPATH;HOME_BIN=~/bin/export PATH=${PATH}:${JAVA_PATH}:${HOME_BIN};&&&&&& 保存后,同步更新:source ~/.bashrc&&&&&& 3)安装repo(用来更新android源码)&&&&&& 创建~/bin目录,用来存放repo程序,如下:&&&&&& $ cd ~&&&&&& $ mkdir bin&&&&&& 并加到环境变量PATH中,在第2步中已经加入。&&&&&& 下载repo脚本并使其可执行:&&&&&& $ curl
&~/bin/repo&&&&&& $ chmod a+x ~/bin/repo&&&&&& 4)初始化repo&&&&&& repo是android对git的一个封装,简化了一些git的操作。&&&&&& 创建工程目录:&&&&&& $ mkdir android&&&&&& $ cd android&&&&&& repo初始化:&&&&&& $ repo init -u git://android.git.kernel.org/platform/manifest.git&&&&&& 在此过程中需要输入名字和email地址。初始化成功后,会显示:&&&&&& repo initialized in /android&&&&&& 在~/android下会有一个.repo的隐藏目录。&&&&&& 5)同步源代码&&&&&& $ repo sync&&&&&& 这一步要很久很久。&&&&&& 6)编译android源码,并得到~/android/out目录&&&&&& $ cd ~/andoird&&&&&& $ make&&&&&& 这一过程很久。&&&&&& 7)在模拟器上运行编译好的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桌面,就说明成功了。&&&&&& 8)编译模块&&&&&&&android中的一个应用程序可以单独编译,编译后要重新生成system.img。&&&&&& 在源码目录下执行&&&&&& $ . 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.&&&&&& 可以加&help查看用法。&&&&&& 我们可以使用mmm来编译指定目录的模块,如编译联系人:&&&&&& $ mmm packages/apps/Contacts/&&&&&& 编完之后生成两个文件:&&&&&& out/target/product/generic/data/app/ContactsTests.apk&&&&&& out/target/product/generic/system/app/Contacts.apk&&&&&& 可以使用&&&&&& $ make snod&&&&&& 重新生成system.img,再运行模拟器。&&&&&& 9)编译SDK&&&&&& 直接执行make是不包括make sdk的。make sdk用来生成SDK,这样,我们就可以用与源码同步的SDK来开发android了。&&&&&& a)修改/frameworks/base/include/utils/Asset.h&&&&&& &UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024& 改为 &UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024&&&&&&& 原因是eclipse编译工程需要大于1.3M的buffer;&&&&&& b)编译&&&&&& 由于本人不使用eclipse,所以没有进行这步;&&&&&& c)执行make sdk&&&&&& 注意,这里需要的javadoc版本为1.5,所以你需要在步骤1中同时安装sun-java5-jdk&&&&&& $ make sdk&&&&&& 编译很慢。编译后生成的SDK存放在out/host/linux-x86/sdk/,此目录下有android-sdk_eng.xxx_linux- x86.zip和android-sdk_eng.xxx_linux-x86目录。android-sdk_eng.xxx_linux-x86就是 SDK目录。&&&&&& 实际上,当用mmm命令编译模块时,一样会把SDK的输出文件清除,因此,最好把android-sdk_eng.xxx_linux-x86移出来。&&&&&& 此后的应用开发,就在该SDK上进行,所以把7)对于~/.bashrc的修改注释掉,增加如下一行:&&&&&& export PATH=${PATH}:~/android/out/host/linux-x86/sdk/android-sdk_eng.xxx_linux-x86/tools&&&&&& 注意要把xxx换成真实的路径;&&&&&& d)关于环境变量、android工具的选择&&&&&&&目前的android工具有:&&&&&&& A、我们从网上下载的,如果你下载过的话( tools下有许多android工具,lib/images下有img映像)&&&&&&& B、我们用make sdk编译出来的SDK( tools下也有许多android工具,lib/images下有img映像)&&&&&&& C、我们用make编译出来的out目录( tools下也有许多android工具,lib/images下有img映像)&&&&&& 那么我们应该用那些工具和img呢?&&&&&& 首先,我们一般不会用A选项的工具和img,因为一般来说它比较旧,也源码不同步。其次,也不会用C选项的工具和img,因为这些工具和img没有经过SDK的归类处理,会有工具和配置找不到的情况;事实上,make sdk产生的很多工具和img,在make编译出来out目录的时候,已经编译产生了,make sdk只是做了copy而已。&&&&&& e)安装、配置ADT&&&&&& 略过;&&&&&& f)创建Android Virtual Device&&&&&& 编译出来的SDK是没有(Android Virtual Device)的,我们可以通过android工具查看:&&&&&& $ android list&&&&&&&创建AVD:&&&&&& $ android create avd -t 1 -n myavd&&&&&& 可以android &help来查看上面命令选项的用法。创建中有一些选项,默认就行了。&&&&&& 再执行android list,可以看到AVD存放的位置。&&&&&& 以后每次运行emulator都要加-avd myavd或@myavd选项:&&&&&& $ emulator -avd myavd&&&&&& 10)编译linux内核映像&&&&&&&a)准备交叉编译工具链&&&&&&&android代码树中有一个prebuilt项目,包含了我们编译内核所需的交叉编译工具。&&&&&&&b)设定环境变量&&&&&& $ emacs ~/.bashrc&&&&&& 增加如下两行:&&&&&& export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin&&&&&& export ARCH=arm&&&&&& 保存后,同步变化:&&&&&& $ source ~/.bashrc&&&&&& c)获得合适的内核源代码&&&&&& $ cd ~/android&&&&&&&获得内核源代码仓库&&&&&& $ git clone git://android.git.kernel.org/kernel/common.git kernel&&&&&& $ cd kernel&&&&&& $ git branch&&&&&& 显示&&&&&& * android-2.6.27&&&&&& 说明你现在在android-2.6.27这个分支上,也是kernel/common.git的默认主分支。&&&&&& 显示所有head分支:&&&&&& $ git branch -a&&&&&& 显示* android-2.6.27remotes/origin/HEAD -& origin/android-2.6.27remotes/origin/android-2.6.25remotes/origin/android-2.6.27remotes/origin/android-2.6.29remotes/origin/android-goldfish-2.6.27remotes/origin/android-goldfish-2.6.29&&&&&&&我们选取最新的android-goldfish-2.6.29,其中goldfish是android的模拟器模拟的CPU。&&&&&&&$ git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29&&&&&&&$ git branch&&&&&&&显示&&&&&&&android-2.6.27&&&&&&&* android-goldfish-2.6.29&&&&&&&我们已经工作在android-goldfish-2.6.29分支上了。&&&&&&&d)设定交叉编译参数&&&&&&&打开kernel目录下的Makefile文件,把CROSS_COMPILE指向刚才下载的prebuilt中的arm-eabi编译器.&&&&&&&CROSS_COMPILE ?= arm-eabi-&&&&&&&把&&&&&&&LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\&&&&&&&$(call ld-option, -Wl$(comma)&build-id,))&&&&&&&这一行注释掉,并且添加一个空的LDFLAGS_BUILD_ID定义,如下:&&&&&&&LDFLAGS_BUILD_ID =&&&&&&&e)编译内核映像&&&&&&&$ cd ~/android/kernel&&&&&&&$ make goldfish_defconfig&&&&&&&$ make&&&&&&&f)测试生成的内核映像&&&&&& $ emulator -avd myavd -kernel ~/android/kernel/arch/arm/boot/zImage
本文发布:
本文地址:
发布:鸡啄米
&&( 22:0:1)&&( 22:54:41)&&( 22:43:32)&&( 23:20:31)&&( 22:4:25)&&( 21:45:8)&&( 21:40:25)&&( 0:17:57)&&( 23:4:35)&&( 21:30:52)
好久没来了,博主这里越来越专业,佩服!!鸡啄米 于
22:30:01 回复谢谢,你确实很久没来了
完全随机文章需求发布后1小时内收到服务商响应每个需求平均有10个服务商参与95%以上的需求得到了圆满解决所有需求不向雇主收取任何佣金一站式解决企业建站需求
android源码编译系统修改
有相似问题想解决?专业顾问来帮助您
匹配服务商
选择服务商,签单
服务商工作
验收并付款
已投标服务商
综合评分:5颗星
速度:4.67
服务:4.67
态度:4.67
好评率:100%
TA的热销服务
共有6个服务商参与报价,查看更多服务商报价
参与报价,开始赚钱
提交你的报价和方案
中标后交付作品
获得任务赏金
极速:10分钟急速响应
高品质:精选服务商提供服务
放心:不满意可退款
APP成品套餐
APP成品源码套餐
根据浏览的需求为您推荐
交易成功的需求
APP开发相关需求单独编译Android源代码中的模块_Linux编程_Linux公社-Linux系统门户网站
你好,游客
单独编译Android源代码中的模块
来源:Linux社区&
作者:wuxiaoer
第一次下载好源代码后,通过在Android源代码工程下执行make命令,然后得到Android的系统镜像system.img.
那么当我们修改了android源代码中某个模块或者android源代码工程中新增了一个自己的模块。此时可以用make命令进行重新编译,不过重新编译比较浪费时间。google提供了另外的命令来进行单独模块的编译,以及重新打包到system.img镜像中的命令。
以下介绍单独编译android中模块的命令,以及打包system.img的命令。
一、首先,执行脚本文件 envsetup.sh
&该文件在Android源代码目录下的build目录中,在这个shell 脚本中定义了 hmm,& croot, m, mm, mmm 等 function
&执行命令如下:
@:~/my_android$ . ./build/envsetup.sh
@ubuntu:~/my_android$ source build/envsetup.sh
在当前目录下输入命令hmm(android 4.2版本使用hmm,其他版本貌似使用的是help命令),显示envsetup.sh提供命令
@ubuntu:~/my_android$ hmm
&Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment:- lunch:& lunch &product_name&-&build_variant&- tapas:& tapas [&App1& &App2& ...] [arm|x86|mips] [eng|userdebug|user]- 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.
Look at the source to view more functions. The complete list is:addcompletions add_lunch_combo cgrep check_product check_variant choosecombo chooseproduct choosetype choosevariant cproj croot findmakefile gdbclient gdbwrapper get_abs_build_var getbugreports get_build_var getlastscreenshot getprebuilt getscreenshotpath getsdcardpath gettargetarch gettop godir hmm isviewserverstarted jgrep key_back key_home key_menu lunch _lunch m mangrep mm mmm pid printconfig print_lunch_menu resgrep runhat runtest set_java_home setpaths set_sequence_number set_stuff_for_environment settitle smoketest stacks startviewserver stopviewserver systemstack tapas tracedmdump
这些命令的具体用法,可以在命令的后面加-help来查看,这里我们只关注mmm命令,也就是可以用它来编译指定目录的所有模块,通常这个目录只包含一个模块。
关于source
&source 命令会把对应脚本中的内容读取到当前的bash 解释器中,在当前的执行环境中执行;其中定义的 function 以及通过 export 声明的变量等在 source 执行结束之后依然存在于当前的bash 环境中。比如我们常用的 source .bashrc 或者 source /etc/profile 等目的是为了引用刚刚改动过的环境变量。
相关资讯 & & &
& (01月11日)
& (01月11日)
& (01/31/:19)
& (01月11日)
& (07/01/:26)
& (04/14/:51)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款您现在的位置:
> 编译Android源码制作ROM,烧录
编译Android源码制作ROM,烧录
编辑:安卓之家
来源:网络整理
Android源码编译后,在out/target/product/generic下生成的三个镜像文 件:ramdisk.img,system.img,userdata.img以及它们对应的目录树root,system,data。 ramdisk.img是根文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,android加载 这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和 data目录下。
三个镜像文件及其三个目录树之间的生成关系是我们进行ROM制作的基础,下面将做详细介绍。
Ramdisk.img&
Ramdisk镜像是采用cpio打包,gzip压缩的。用file验证:
# file ramdisk.img
# ramdisk.img: gzip compressed data, from Unix
为了便于说明问题,我们将ramdisk.img拷贝到其它一个目录,然后按以下步骤将ramdisk.img还原为目录树:
# mv ramdisk.img ramdisk.img.gz
# gunzip ramdisk.img.gz
# mkdir ramdisk
#cd ramdisk
# cpio Ci CF ../ramdisk.img
这样,就得到一个完整的ramdisk目录,与out/target/product/generic/root对比后,我们发现它们是一样的内容。
通过执行以下的操作,我们可由目录树再生成ramdisk镜像
# cd ramdisk
# find . | cpio -o -H newc | gzip & ../ramdisk-new.img
system.img & userdata.img&
这两个镜像都属于yaffs2文件格式,生成方式是一样的。我们就以system.img为例来说明。
System.img && system目录树&
所需工具unyaffs, 下载地址&
# mkdir system
# cd system
# unyaffs ../system.img
system目录树 && system.img
所需工具 mkyaffs2image,Android源码编译后会生成该工具,在 out/host/linux-x86/bin 目录下。
命令格式:&
进入mkyaffs2image所在目录,设置执行权限chmod a+x ./mkyaffs2image
# ~/Code/cbin/mkyaffs2image ~/Code/system&~/Code/system_new.img
了解以上方法的意义在于,我们可以对镜像文件镜像修改,定制,以符合自己的需求。
Android ROM的制作方法&
网上有很多制作Android ROM的教程,这里罗列一些链接:
北理工的陈罡写的两篇文章,是我目前发现的最好的教程,写的非常详细
这两篇文章参考了国外论坛的几个经典教程:
?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images
国内还有一篇文章写的也不错,这篇文章更侧重于制作类似Patch的ROM包
这里基于自己的理解和测试,总结了一些方法步骤。
1.从可用的ROM起步&
Android 的ROM包通常称为update.zip包,你可以到上下载现成的.zip包。要学习ROM包的制作,我们可以从这样一个zip包开始。解开zip包后,通常有这样一些内容:
这是编译内核源代码生成的内核映像,然后与android源码编译出来的ramdisk.img一起通过mkbootimg工具创建出来的,图省事的朋友也可以从网上其他的刷机包里面拷贝一个能用的出来即可,基本上都差不多。&
这个目录是手工创建的,主要用来存放一个升级脚本update-script(这个脚本的内容与system目录中包含的文件有很大关联)以及签名。&
这个目录就是编译android的平台源代码生成的
要创建自己的ROM,我们通常会涉及到以下的一些工作:
1. 编译内核生成内核映像。但一般情况下,我们没有必要自己去编,直接从刷机包里面取出一个就可以。譬如,你要做一个2.2版本的升级包。可以到网上找一个与自己机型相匹配的刷机包,从里面取出相应的kernel.img。
2. ramdisk.img的修改。ramdisk.img 是根文件系统,里面包含了启动配置脚本。
3. update-script的修改。
4. System的修改。
我们先做个简单的测试工作,来为后面更复杂的工作做好铺垫。测试内容为:先对zip进行解包,然后分别在ramdisk和system的根目录下添加一个小文件,接着,生成新的ROM,并验证ROM是否可用。
详细的步骤可以参考。这里要指出 的是,这篇文章以及网上许多类似网站提到的方法都是针对HTC G1或 Nexus one的。而我在测试的时候,用的是HTC G3 Hero。以上的方法导致的一个后果是,重新打包后再烧录,机器无法正常启动,adb shell也无法登陆。后来在国外的一篇博客上看到了对此问题的说明,问题的根源很简单,从G3开始,打包的时候需要指定 “--base”参数。对于Hero,参数为”--base
0x”,但对于其它型号的机器,”--base&要设定为多少,需要参考内核代码的实现。
解包打包可用两个脚本完成unpack-bootimg.pl, repack-bootimg.pl。其中打包脚本用到的mkbootimg工具,在out/host/linux-x86/bin目录下。 unpack-bootimg.pl可直接将boot.img生成内核镜像boot.img-kernel和ramdisk目录树boot.img- ramdisk。repack-bootimg.pl可将boot.img-kernel和boot.img-ramdisk重新生成boot.img。
在解包后,我们在ramdisk和system目录下,各添加一个测试小文件(譬如叫mytest)。做完这些开始组包,重新生成 update.zip。到这里我们的工作并没有完全结束,还有最后的一步――签名。签名需要用到签名工具testsign.jar,这是一个基于java 1.6版本的工具。在编译Android源码的时候,我们强调要用java 1.5。在这里,我们必须切换到1.6版本。切换办法见这里。
2.利用自己编译的镜像生成ROM&
1)重新生成boot.img
将前面解包得到的boot.img-ramdisk 和 编译源码后out/target/product/generic/下的root目录树放在一个目录下,然后用repack-bootimg.pl重新生成boot.img
2) 创建一个目录 myupdate,将上面生成的boot.img放到这个目录下
3)将编译Android后,out/target/product/generic/生成的system目录树拷贝到myupdate目录
4)在myupdate目录下创建update-script脚本目录
# mkdir -p META-INF/com/google/android
5)删除system/bin目录下的“符号链接”,创建update-script脚本
安卓游戏下载排行榜
安卓软件下载排行榜

我要回帖

更多关于 android 源码编译模块 的文章

 

随机推荐