博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android源码编译以及导入过程
阅读量:6804 次
发布时间:2019-06-26

本文共 2355 字,大约阅读时间需要 7 分钟。

1.背景

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

2.源码下载

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

3.编译环境搭建

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

android系统版本 jdk版本
7.0以上 OpenJdk8
5.x-6.0 OpenJdk7
2.3-4.4.x Java 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-devsudo 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 m4sudo 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 6P angler aosp_angler-userdebug
Nexus 5X bullhead aosp_bullhead-userdebug
Nexus 6 shamu aosp_shamu-userdebug
Nexus 5 hammerhead aosp_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

你可能感兴趣的文章
4.1Python文件基本操作
查看>>
nginx源码分析之线程池
查看>>
正向代理、透明代理、反向代理的理解示意图
查看>>
CSS清除浮动_清除float浮动
查看>>
Laravel User Agent 轻松识别客户端(微信)信息(2019版)
查看>>
嵌入式开发/调试辅助工具
查看>>
开发小技巧: 如何在jQuery中禁用或者启用滚动事件.scroll
查看>>
Todoist Chrome:待办事项列表及任务管理
查看>>
RxJava
查看>>
java日期多次使用修改,数据有问题
查看>>
强调编码标准
查看>>
聊聊springboot session timeout参数设置
查看>>
jvm内存对象分析
查看>>
聊聊rocketmq的SequenceProducerImpl
查看>>
HTML&CSS基础学习笔记8-预格式文本
查看>>
nginx + lua 构建网站防护waf(一)
查看>>
Django part 6 ---Static File
查看>>
安装office2007时发生错误1706解决方法
查看>>
Java实现生产者消费者问题与读者写者问题
查看>>
关于 epoch、 iteration和batchsize
查看>>