Android源码调试环境搭建(源码下载,整编译,导入studio,断点调试)

友情提示

因为Android系统源码过于庞大, 编译源码又需要在linux环境中, 所以整个过程会很耗时, 而且即使你参照大神的文章在实际操作过程中也很可能会出现各种各样的问题, 只能根据实际情况逐一排查, 所以如果你也想下载编译调试源码, 请做好心理准备, 尤其是没有linux系统操作经验的人.
如果只是想阅读源码, 除了下载源码外, 在这里推荐个在线阅读源码地址:
https://www.androidos.net.cn/sourcecode
下面开始进入正题, 为了说明详细一些, 尽量在每个命令上面一行标注命令的含义. 另外, 不保证参照此文章就一定没有其他问题, 如果有,请逐一排查.

一 : 源码下载

  1. 下载repo工具(用于管理Android源代码的Python脚本)

    在正式下载repo工具之前, 需要下载用到的工具, 如果已经安装请略过

   安装git:
   sudo apt-get install git
   安装curl库:
   sudo apt-get install curl
   安装python:
   sudo apt-get install python

下载repo工具:

    在根目录(home)下创建bin目录
    mkdir ~/bin     
    将bin目录加入系统路径中        
    PATH=~/bin:$PATH      
    利用curl来将下载的repo保存到相应目录下   
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    为/bin/repo增加执行权限
    chmod a+x ~/bin/repo
  1. 下载源码
    最新源码下载地址:
    https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
    将下载后的aosp-latest.tar放在单独的一个文件夹中,终端cd到文件夹中进行解压
    解压命令:
    tar -xvf aosp-latest.tar

然后终端cd到解压的文件夹 ,

    开始同步源码:
    repo sync

**注意: 当第一次repo sync 成功后建议再repo sync 几次, 确保同步完全, 不然在之后的步骤中会有各种错误
至此, 源码下载完成

二 : 整编源码

  1. 先安装jdk, 版本要和下载的源码版本对应
     这里因为下载的是Android9.0源码, 所以安装的是jdk8
     sudo apt-get update
     sudo apt-get install openjdk-8-jdk
  1. 安装编译源码所需要的软件包
      sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
      sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
      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
      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 lib32z-dev ccache
      sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
      sudo apt-get install libssl-dev
      sudo apt-get install aptitude
  1. 初始化编译环境
     source build/envsetup.sh
     如果编译失败, 改完错之后要重新编译, 所以删除掉之前编译产生的文件, 第一次编译时可以不执行这个命令
     make clobber
  1. 选择编译的目标模拟器
    lunch
    执行完这条命令后, 会出现可选择的模拟器列表, 这里选择的是aosp_x86-eng, 所在的编号是19, 然后在终端输入序号
  1. 开始编译
   这里可以根据自己的电脑配置进行更改make命令,  如果只是make命令就是单线程编译, 如果是make -j4就是4条线程进行编译
   make
  1. 遇到的错误
    如果在编译的过程中, 出现内存不够导致的编译失败, 要看具体原因, 这里遇到了这个问题:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000b0600000, 534773760,       0) failed; error='Not enough space' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 534773760 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/zgy/study/android_source_code/aosp/hs_err_pid8492.log
[ 97% 78894/80651] //frameworks/base:hiddenapi-lists-docs Metalava

每次编译到了97%就挂了, 有的时候还卡死机, 查找资料, 说是交换区空间不足导致, 于是,增加swap空间:

先查看现在的swap空间
free -h
开始增加swap空间, 这里增加了8个G
dd if=/dev/zero of=/home/swap bs=1G count=8
把这个分区变成swap分区.
/sbin/mkswap /home/swap
使其成为有效状态
/sbin/swapon /home/swap
最后再查看一下swap空间, 确保增加空间成功
free -h 

之后编译成功通过

### build completed successfully (04:59:30(hh:mm:ss)) ###
  1. 运行模拟器
    此时可以直接在终端中执行:
emulator

如果终端已经关闭了,可以重新打开,按顺序执行以下命令(在之后的每次打开模拟器都要如此)

source build/envsetup.sh
输入目标编译的模拟器在模拟器列表中的序号, 或者名称
lunch 19  
emulator

三 : 导入到studio中并调试

  1. 生成配置文件
    如果想导入到studio中,需要配置文件, 先查看源码目录下out/host/linux-x86/framework/idegen.jar是否存在,如果不存在, 进入源码根目录执行如下的命令进行编译
source build/envsetup.sh
lunch
mmm development/tools/idegen/

这里在执行最后一行编译idegen时报错如下:

build/make/core/main.mk:766: error: CtsMediaStressTestCases.LOCAL_HOST_REQUIRED_MODULES : illegal value cts-dynamic-config : 
not a host module. If you want to specify target modules to be required to be installed along with your 
target module, add those module names to LOCAL_REQUIRED_MODULES instead.
15:54:44 ckati failed with: exit status 1

查找资料, 解决办法如下:

最后一行把mmm改为mmma, 即
mmma development/tools/idegen/

完成以上步骤后, 如果成功, 会在源码目录下out/host/linux-x86/framework目录下看到idegen.jar

继续执行命令
sudo development/tools/idegen/idegen.sh

成功会在源码根目录中看到android.iml 和 android.ipr两个文件, 其中android.ipr就是我们要用studio导入的文件.因为源码太庞大, 导入会占用大量内存, 所以先设置studio的内存
在home目录下面找到.AndroidStudio文件夹(隐藏文件Ctrl + h显示), 打开config/studio64.vmoptions文件,:

-Xms256m
-Xmx2196m (对其进行修改即可, 大小根据自己电脑配置进行修改, 我电脑8G内存)
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djna.nosys=true
-Djna.boot.library.path=

-da
-Dawt.useSystemAAFontSettings=lcd
-Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine

此时, 就可以打开studio通过Open an existing Android Studio project选择android.ipr来导入源码了, 导入的过程有些漫长, 耐心等待

  1. 调试
    导入完成后先配置SDK和JDK, 确保Android源码使用的Java就是Android源码中的。具体过程这里先不写了,结尾会有其他参考文章链接, 如果以上的步骤没有问题, 剩余的步骤按部就班照着操作即可.

因为整个过程细节繁多, 本文写的不是详细, 而且每个人遇到的问题都不尽相同, 本文只是记录整体流程和遇到的一些错误及解决方案. 如果有人遇到问题可以互相交流学习. 最后, 放上参考文章链接, 特别感谢一下明哥

明哥的文章链接:
https://mp.weixin.qq.com/s?__biz=MzI1MjMyOTU2Ng==&mid=2247486321&idx=1&sn=8381bff0a6484949e11ff66a89be459d&pass_ticket=zSZGInP6o0Cbimdza5s6LoNQaXhKIE4sZrBmKKK%2Bjq%2BckG%2F1tMILj15Xj1HhERgN

如果想关注更多, 请扫描关注二维码

神气小风.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,706评论 4 366
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,002评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,462评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,375评论 0 216
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,763评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,849评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,033评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,768评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,490评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,734评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,204评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,566评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,227评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,137评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,934评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,926评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,774评论 2 274

推荐阅读更多精彩内容