单编译framework相关模块
android开发人员大概都是从上层做起,捣鼓捣鼓收音机,记事本,主界面什么的。开发工具eclipse+ADT就可以了,有的模块会需要导入一些依赖包。
慢慢的,这些表面工作已经成为一种体力活,开始觉得厌倦,这时多半也混成老油条了。或许是组织信任你,也可能是你自己想要change,所以你表示
要搞搞更具技术含量的东西,理所当然的framework开始以各种姿态出现在你的生活中,并以它独有的方式影响着你的心情。
前段日子,作为一个极具二b青年气质的程序员怀着忐忑的心情开始了我的framework相关工作。这里略作小结。
组织交给我的任务是根据UI提供的设计方案实现一个新锁屏(技术评审的时候我很猥琐的投了看起来最容易实现的一种方案)。
做的时候,思路很快锊顺了,但做起来异常费劲,每次做点修改,或者加点调试信息,都是全编译生成system.img,一趟下来半小时没了,一天也调试不了几次。
编译的时候看看书,和同事聊聊天什么的,时间不够,加班来凑,顺便混个加班餐,锁屏硬就是在这种2b节奏下弄出来的。
组织验完锁屏表示小伙子做得还可以,接下来你把状态栏和setting也做了吧。屌丝的虚荣心在那瞬间得到了极大地满足,立马表示愿为组织肝脑涂地,在所不惜!
一天中午我正在以2b节奏被状态栏以各种姿势(bug)调戏着,一边盯着屏幕全编译,一边思绪万千。突然一高富帅划过身边,淡淡的扔下一句:可以单编译的。
高富帅回到座位随手发给我一个网址,当时我的世界观发生了改变。
1.初始化编译环境
. build/envsetup.sh
2.选择编译策略
choosecombo 1 2 9 2& chooseproduct XXX
3.这里分不同情况讨论
比如锁屏就分了三个地方:
a,逻辑是Frameworks/base/policy/src/com/android/internal/policy/impl/目录下这里的文件做了相关改动后需要
cd Frameworks/base/policy
mm
得到android.policy.jar文件备用。
b,视图是在 Framework/base/core/java/com/android/internal/widget/路径下,这里的文件做了修改则需要
cd Frameworks/base/
mm
得到framework.jar文件备用。
c,资源文件在Framework/base/core/res/res/发生了变化。
cd Frameworks/base/core/res/
touch find
mm
得到framework-res.apk文件备用。
4.弄到手机里面
adb remount
adb push XXX system/framework
adb push 。。。。。。
adb reboot
Tips:
每次但编译最好清掉out/obj下的对应中间文件。尤其是有资源文件更新时。
其他framework下的功能模块以此类似,比如状态栏就是在framework/base/package/systemUI下mm。
自从会单编译后。那里有错,编那里,组织再也不用担心我的进度了。
对不起观众,渣排版,泪流满面。