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

引言:

做为一个Android开发工程师,结合实际项目(需要源码的系统开发)开发经验,谈谈整个流程和一些必要的技能。
  1. 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分支上去,这样就为代码下载、上库做好准备了。

  2. 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会定时出每日版本,到时再验证即可。

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

    • a:直接在Linux服务器上进行修改
      由于服务器一般采用ssh连接,无法用带有界面的工具去修改代码,所以最好采用vim进行修改,然后保存退出。值得一提的是vim入门起点高,但绝对是Linux上的一把利器,后续会将vim的用法更上来。
    • b:把相关代码拉到windows上,用sourceinsight,ADT进行修改
      这是大多数同事最为常用的方法,修改直观,不过修改完后需要再次传回本地服务器上。
  4. 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等。

  5. 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出现。

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

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

    先更新下当前分支的代码,以防冲突。再把修改的代码写上简要介绍和说明,然后提交到gerrit上进行review操作,登录gerrit网址,添加指定人review,保证至少有一人有+2权限,以便能进行push操作。OK,此至你负责的小模块开发大部分已完成。
    之所以说是大部分,是因为还需要做第二天的版本回归验证,这一点很重要,你的模块在本地验证通过,但有可能影响了其它模块。回归验证后,如果是外发版本,还要转测(转给测试)。
    所有完成后,你尽可能写一篇文档,详细描述该功能的一些关键问题,所谓的善始善终如是!

PS:在功能模块或特性开发时,正规流程还复杂得多,如SE方案讨论,预研,需求澄清,DT,WT等,在此不再详述。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值