android源码编译以及导入过程

1.背景

源于自己想重新探索下android系统整个源码结构以及研究核心服务组件的实现原理,另外想将整个过程记录下来以备后续查看。(本次编译实例为android8.1.0,系统环境为ubuntu)

2.源码下载

不用说首先肯定得先参考官网将对应的源码拉下来,这里我就直接给官网地址不瞎补充了。下载地址

3.编译环境搭建

编译前需要根据源码对应的版本安装相应版本的jdk,不然将无法执行编译操作。

android系统版本jdk版本
7.0以上OpenJdk8
5.x-6.0OpenJdk7
2.3-4.4.xJava Jdk6

本人是安装openjdk8,直接通过命令行如下:

    $ sudo apt-get update
    $ sudo apt-get install openjdk-8-jdk
复制代码

然后修改环境变量,我以前是用javajdk8因此需要修改才能正常使用。

注意如果缓存不够会报警,需要在源码树的根路径执行以下命令(不同源码路径可能会不一样):

prebuilts/misc/linux-x86/ccache/ccache -M 50G
复制代码
执行编译过程中如果报错很大可能是某些依赖工具没有安装,可以通过google查询对应软件名进行安装即可。当然为了防止编译中出错可以将以下依赖工具全部装下:
复制代码
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential  
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib 
sudo apt-get install libc6-dev-i386 
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev 
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
复制代码

4.编译

初始化编译环境

执行如下命令:

    $ source build/envsetup.sh
复制代码

不难发现该命令只是引入了其他执行脚本,至于这些脚本做什么,目前不在本文中细说.
该命令执行成功后,我们会得到了一些有用的命令,比如最下面要用到的lunch命令.

选择编译目标

通过lunch指令设置编译目标,所谓的编译目标就是生成的镜像要运行在什么样的设备上.这里我们设置的编译目标是aosp_arm64-eng,因此执行指令:

$ lunch aosp_arm64-eng
复制代码
编译目标格式说明

编译目标的格式:BUILD-BUILDTYPE,比如上面的aosp_arm-eng的BUILD是aosp_arm,BUILDTYPE是eng.

编译目标列表
如果想查看所有的编译目标可以通过在命令行下输入(会列出所有编译目标):
复制代码
$ lunch
复制代码

注意点:google亲儿子有专用编译目标如下

设备型号设备代码编译目标
Nexus 6Pangleraosp_angler-userdebug
Nexus 5Xbullheadaosp_bullhead-userdebug
Nexus 6shamuaosp_shamu-userdebug
Nexus 5hammerheadaosp_hammerhead-userdebug

5.开始编译

$ make -j8
复制代码

该指令通过-j参数来设置参与编译的线程数量,以提高编译速度.比如这里我们设置8个线程同时编译:

6.源码导入

编译完成之后我们还需要生成androidstudio所需要的格式,在源码根目录执行以下命令即可:

$ mmm development/tools/idegen/
$ sh ./development/tools/idegen/idegen.sh
复制代码

修改android.iml文件去掉不想阅读的代码。
打开Intellij和Android Studio,File->open->android.ipr,或者Andoird Stuido, Open an existing Android Studio project -> android.ipr所在目录,然后等待索引的建立即可。
之后再删除当前项目setting中SDKs中classpath和sourcepath的指向,指向到源码目录下的frameworks和external目录下,apply即可。

结尾

本文属于个人实践总结,其中参考了许多其他人写的文章如有不妥敬请见谅。

转载于:https://juejin.im/post/5af94df7f265da0ba2671b5d

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值