您的位置:首页 > 移动开发 > Android开发

Android系统实际开发工作中的流程和必要技能

2016-04-16 21:47 351 查看

引言:

做为一个Android开发工程师,结合实际项目(需要源码的系统开发)开发经验,谈谈整个流程和一些必要的技能。


repo/git

项目开始,首先CI会将基线版本拉到CI服务上,同时配置好git仓、gerrit和分支,并开通相关开发人员的各种权限(代码下载、review、+2等),然后在通知开发,可以拉代码。

开发人员在本地Linux服务器上,用repo下载代码:

mkdir new_project_xx
cd new_project_xx
repo init -u yourname@xxx/manifest.git
repo sync -j8
repo start main_branch --all


这里先在服务器上建立一个目录,用于存放基线版本库。然后用repo 下载含有git仓信息的manifest.git,根据这个git文件,用sync同步代码。即把CI服务器上的代码下载到本地,这步操作可能会因网络中断、md5较验不过失败,只需要下次执行就可以。-j8告诉服务器,如果可能用8个线程来下载代码。代码下载完成后,将所有git项目切到main_branch分支上去,这样就为代码下载、上库做好准备了。

make

代码下载完成,然后开始编译。Android编译实质还是在Linux平台编译,当然经典的make不得不提,假设在本地服务器上相关的编译工具(JDK,g++, Python)和环境变量都已经弄好。

source ./build/envsetup.sh
choosecomb eng product_ID  full arm64 ...
make -j8


初始化Android编译环境,主要配置产品代号(可能有多个产品一套代码),eng还是usr、arm平台等。最后make会寻找当前目录下的makefile或Makefile文件,进入makefile编译过程。

如果顺利的话,会提示编译成功。一般来说现在的版本编译分为ap编译、cp编译,有些公司还有cust编译,本地编译多是ap编译,可能无法编译出大包nup或npg直接烧写。但可以进行增量编译,一般的项目足以满足。若要出完整大包,只能让CI编译了。通常的做法,CI会定时出每日版本,到时再验证即可。

vim,sourceinsight,ADT

编译完代码,根据项目需求,实现具体功能。这需要修改代码,常见的做法有:

a:直接在Linux服务器上进行修改

由于服务器一般采用ssh连接,无法用带有界面的工具去修改代码,所以最好采用vim进行修改,然后保存退出。值得一提的是vim入门起点高,但绝对是Linux上的一把利器,后续会将vim的用法更上来。

b:把相关代码拉到windows上,用sourceinsight,ADT进行修改

这是大多数同事最为常用的方法,修改直观,不过修改完后需要再次传回本地服务器上。

mm,mma,mm -B, mmm

修改完代码后,开始进行增量编译。在Android环境下,编译变得较为简单。找到相关的Android.mk文件,针对x.bin,x.so,用mm或者mma。编译apk,jar包时多采用 mm -B。或在项目根目录下,用mmm加Android.mk的路径。

make secbootimage -j8
make secrecoveryimage -j8
make systemimage -j8


对于系统开发,通常还会编译各image文件。如修改kernel,编bootimage,或secbootimage;修改recovery,编secrecoveryimage等。

adb,fastboot

正常情况下,编译出来的apk,so,bin等文件后,需要烧写到手机的rom中或data分区,以覆盖原有的文件。这时adb和fastboot工具大显身手的时候到了。

adb devices
adb remount
adb push x.apk /system/app
adb push x.apk /system/priv-app
adb push x.lib /system/lib
adb push x.lib /system/lib4
adb push x.bin /system/bin
adb reboot
...
fastboot devices
fastboot flash boot bootimage
fastboot reboot


adb 的使用使得Android开发调试变得相对简单了不少,相关的usb驱动是必须的,同时保证具有root权限。至于怎么取得root权限,通常的方法有:

a: 烧写有root权限的nup包

b: 安装su程序

c: 用fastboot烧写root权限的bootimage

有了root权限就可以将编译出来的文件烧写到system分区,为什么要root权限,因为system分区是只读分区,首先要将它重新挂载为可读写分区。即上面的adb remount。当然也可以在shell环境中,手动挂载,后边再介绍如何挂载。

至此,重启Android设备(apk不需要重启),验证新的功能是否生效,若有问题则回到流程3,直到没有bug出现。

git,repo

当本地把功能验过之后,剩下的是完成上库操作。

git pull origin main_branch
git add .
git commit
repo upload .


先更新下当前分支的代码,以防冲突。再把修改的代码写上简要介绍和说明,然后提交到gerrit上进行review操作,登录gerrit网址,添加指定人review,保证至少有一人有+2权限,以便能进行push操作。OK,此至你负责的小模块开发大部分已完成。

之所以说是大部分,是因为还需要做第二天的版本回归验证,这一点很重要,你的模块在本地验证通过,但有可能影响了其它模块。回归验证后,如果是外发版本,还要转测(转给测试)。

所有完成后,你尽可能写一篇文档,详细描述该功能的一些关键问题,所谓的善始善终如是!

PS:在功能模块或特性开发时,正规流程还复杂得多,如SE方案讨论,预研,需求澄清,DT,WT等,在此不再详述。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息