Android Studio 编译系统源码

Posted by Jfson on 2017-05-16

环境配置 & 下载

  • 参考文章

官方文档
湫水blog
清华镜像
调试
以下所有操作在mac上进行

  • 推荐下载 7.0及以上系统!!!

  • 1.创建磁盘映像(80G)

    1
    $ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g ~/android.dmg
  • 2.安装MacPorts (类似brew)
    安装完成后,运行:

    1
    2
    // 一路根据提示,选择y,回车
    $ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

    如果这里报错了,说找不到port命令,就需要在~/.bash_profile中添加一行:

    1
    export PATH=/opt/local/bin:$PATH。

(操作步骤–>打开终端–> open .bash_profile –>添加 –> source .bash_profile)
Xcode自带,不需要安装

  • 3.设置文件描述符限制

    在Mac OS中,默认限制的同时打开的文件数量很少,不能满足编译过程中的高并发需要,因此,在~/.bash_profile中添加下面的命令(步骤同上):

    1
    2
    # set the number of open files to be 1024
    ulimit -S -n 1024
  • 4.下载Repo

  • 4.1 创建bin目录并指向Path,确保存在bin目录

    1
    2
    $ mkdir ~/bin
    $ PATH=~/bin:$PATH
  • 4.2 然后在命令行中输入下面的命令,下载Repo,并且修改属性(翻墙):

    1
    2
    $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    $ chmod a+x ~/bin/repo
  • 4.3 打开并修改Repo文件中 REPO_URL地址为国内镜像(~/bin/repo)
    1
    REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
  • 4.4 修改地址, 创建目录
    1
    2
    mkdir /Volumes/untitled/xxx
    cd /Volumes/untitled/xxx
  • 5.下载
    选择版本进行同步
    1
    2
    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-android-6.0.1_r79
    repo sync

编译

使用下面的命令开始编译源码:

1
2
# 16为线程数量
make -j16

  • 1.编译过程中可能会失败,我遇到个找不到系统版本的问题一:

    1
    2
    3
    4
    build/core/combo/mac_version.mk:38: *****************************************************
    build/core/combo/mac_version.mk:39: * Can not find SDK 10.6 at /Developer/SDKs/MacOSX10.6.sdk
    build/core/combo/mac_version.mk:40: *****************************************************
    build/core/combo/mac_version.mk:41: *** Stop.. Stop.
    • 1.1 首先查看系统版本,我的是10.12.2
    • 1.2然后找到源码目录,打开build/core/combo/mac_version.mk文件,将mac_sdk_versions_supported改为系统中所装版本
      1
      2
      #mac_sdk_versions_supported := 10.6 10.7 10.8 10.9
      mac_sdk_versions_supported := 10.12
  • 2.问题二,MacOSXSDK 版本不对,10.12不支持
    1
    system/core/libcutils/threads.c:38:10: error: 'syscall' is deprecated: first deprecated in OS X 10.12 - syscall(2) is unsupported; please switch to a supported interface. For SYS_kdebug_trace use kdebug_signpost(). [-Werror,-Wdeprecated-declarations]
  • 2.1下载:https://github.com/phracker/MacOSX-SDKs
  • 2.2解压zip包以后将 MacOSX10.11.sdk 拷贝到我的目录 /Users/sun/Downloads/macos/MacOSX10.10.sdk
  • 2.3修改引用

    1
    sudo ln -s /Users/sun/Downloads/macos/MacOSX10.10.sdk /Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
  • 2.4 然后确保AOSP源码下build/core/combo/mac_version.mk文件中mac_sdk_versions_supported := 10.9 10.10 10.11,不多说,都是泪啊
  • 参考地址

导入Android Studio

  • 1.编译idegen模块

    1
    2
    3
    4
    $ mmm development/tools/idegen/
    # 如果报错
    # 就在源码目录下执行如下指令(点与build之间是有空格的):
    $ . build/envsetup.sh
  • 2.在根目录生成对应的android.ipr、android.iml IDEA工程配置文件

    1
    development/tools/idegen/idegen.sh
  • 3.生成的三个文件:

    1
    2
    3
    android.ipr:通常是保存工程相关的设置,比如编译器配置,入口,相关的libraries等
    android.iml:则是主要是描述了modules,比如modules的路径,依赖关系等.
    android.iws:则主要是包含了一些个人工作区的设置.
  • 4 优化配置,减少编译时长
    修改android.iml文件,只保留了framworks和packages模块,添加以下代码

    <excludeFolder url="file://$MODULE_DIR$/.repo" />
    <excludeFolder url="file://$MODULE_DIR$/abi" />
    <excludeFolder url="file://$MODULE_DIR$/art" />
    <excludeFolder url="file://$MODULE_DIR$/bionic" />
    <excludeFolder url="file://$MODULE_DIR$/bootable" />
    <excludeFolder url="file://$MODULE_DIR$/build" />
    <excludeFolder url="file://$MODULE_DIR$/cts" />
    <excludeFolder url="file://$MODULE_DIR$/dalvik" />
    <excludeFolder url="file://$MODULE_DIR$/developers" />
    <excludeFolder url="file://$MODULE_DIR$/development" />
    <excludeFolder url="file://$MODULE_DIR$/device" />
    <excludeFolder url="file://$MODULE_DIR$/docs" />
    <excludeFolder url="file://$MODULE_DIR$/external" />
    <excludeFolder url="file://$MODULE_DIR$/hardware" />
    <excludeFolder url="file://$MODULE_DIR$/libcore" />
    <excludeFolder url="file://$MODULE_DIR$/libnativehelper" />
    <excludeFolder url="file://$MODULE_DIR$/ndk" />
    <excludeFolder url="file://$MODULE_DIR$/out" />
    <excludeFolder url="file://$MODULE_DIR$/pdk" />
    <excludeFolder url="file://$MODULE_DIR$/prebuilt" />
    <excludeFolder url="file://$MODULE_DIR$/prebuilts" />
    <excludeFolder url="file://$MODULE_DIR$/sdk" />
    <excludeFolder url="file://$MODULE_DIR$/system" />
    <excludeFolder url="file://$MODULE_DIR$/tools" />
    
  • 5.使用Android studio打开任意一个项目,然后选择File->Open,打开根目录下的android.ipr文件夹,然后等待漫长的index完成后,就可以方便查看源码了。
    如果访问不了之前创建的磁盘,直接双击android.ipr文件用 Android Studio 打开即可。

  • 6.调试优化参见最上链接。

  • 7.如果你的sh命令执行不了,去下载一个iTerm2终端吧,好使。

最后

  • 嫑放弃,嫑放弃,嫑放弃!哈哈,整了3day,供参考!

pv UV: