【Android】Macbook Pro 10.14(macOS Mojave)编译Android9.0(aosp master)过程记录

记一次Android源码编译过程

实验环境

  • MacOS Mojave 10.14; RAM 16G
  • SSD硬盘 960G
  • 能访问google的网络环境

第一步:准备环境

可参考官网说明:https://source.android.com/setup/build/initializing

  1. 准备磁盘

    1. 磁盘镜像方式(官方推荐25G,建议60G+)
      # 创建一个 .dmg(也可能是 .dmg.sparseimage)文件
      hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 60g ~/android.dmg
      
      # 调整大小
      hdiutil resize -size 100g ~/android.dmg.sparseimage
      
      # 在 .bash_profile 中添加挂载辅助函数
      mountAndroid() { hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android; }
      umountAndroid() { hdiutil detach /Volumes/android; }
      
    2. 外置硬盘方式:直接格式外外置硬盘(MAC OS拓展 (区分大小写,日志式))
  2. 安装Xcode命令行工具:这一步一般会需要最新的MacOS大版本(目前需要MoJave)

    # 安装Xcode命令行工具 ,直接使用最新版本会有一些问题,可以在下面的链接下载旧版本的命令行工具即可(9.4.1)
    # 建议从这里下:https://developer.apple.com/download/more/
    xcode-select --install
    
  3. 安装MacPortshttps://www.macports.org/install.php

    # 从上面的链接选择合适版本安装后,编辑 ~/.bash_profile,确保 /opt/local/bin 必须显示在 /usr/bin 前面:
    export PATH=/opt/local/bin:$PATH
    
  4. 用MacPorts准备相关编译工具

    # 分别是gmake,libsdl,gnupg(gnupg1过时了,这里选择gnupg2),git
    POSIXLY_CORRECT=1 sudo port install gmake libsdl gnupg2 git
    
  5. 设置文件符数量上限

    # ~/.bash_profile:  set the number of open files to be 1024
    ulimit -S -n 1024
    
  6. 配置Repo与下载源码

    mkdir ~/bin
    PATH=~/bin:$PATH
    # 下载Repo
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    chmod a+x ~/bin/repo
    
    # 挂载磁盘并创建源码存放路径
    mountAndroid
    mkdir /Volumes/android/aosp
    cd /Volumes/android/aosp
    
    # 检出分支 默认master 加 -b android-8.1.0_r64 可切换到8.1
    repo init -u https://android.googlesource.com/platform/manifest
    
    # 长达一个小时+的下载过程
    repo sync
    
    # 切换分支到
    repo start android-8.1.0_r64 --all
    

第二步:编译源码

到这里,如果image镜像是在模拟器运行就可以开始编译了,否则还需按官网说明下载驱动。

# 清空输出目录
cd /Volumes/android/aosp
make clobber

# 生成编译脚本
. build/envsetup.sh

# 选择构建目标
lunch
aosp_x86_64-eng
# aosp:Android Open Source Project,可供进行编译使用;
# _x84_64: Binder支持64位;
# -eng:拥有各种调试工具的开发版设置,拥有root跟debug权限

# 编译;make jN,一般N为当前CPU核心数的1~2倍,这个过程应该需要一点时间 :)
make -j4

# 经过漫长莫约3h+后,我这边已经build好了,由于没有原生真机只能模拟器运行了
# 关闭命令行后,可以先跑下面两个命令:
# . build/envsetup.sh
# lunch
emulator

导入源码到AS调试Java层代码

由于导入源码占内存较大,可先在 /应用程序/Android Studio⁩/Contents⁩/⁨bin⁩/studio.vmoptions 中配置内存参数:-Xmx2048m

# 初始化命令工具
. build/envsetup.sh 
#编译 idegen 模块,生成idegen.jar
mmm development/tools/idegen/
# 生成针对 Android 开发工具的配置文件
./development/tools/idegen/idegen.sh

# 这样会在源码路径下生成以下三个熟悉的文件
# android.ipr:编译器配置、入口,相关的libraries等。也是导入源码的入口。
# android.iml:描述了modules和依赖关系等,有确认不需要导入的文件夹可在这里设置。
# android.iws:工作区的设置。
android.ipr

# 一段时间后,就能导入进来了,配置一下依赖跳转
# File -> Project Structure 打开 Module,然后选中 Dependencies:
# 保留 JDK 跟 Module Source 项,并添加源码的 external 和 frameworks 依赖
# 启动模拟器,就可以 Attach Debugger to Android process 调试了。
# 调试可以参考:http://weishu.me/2016/05/30/how-to-debug-android-framework/

使用gdbclient调试C层代码

gdb操作可参考:https://blog.csdn.net/dream_cs/article/details/78847065

# 通过 shell ps + grep 过滤进程
adb shell ps -A | grep calculator

# gdbclient <pid> 可以通过 gdbserver 调试对应的进程
gdbclient 2341

# r:run
# b <path/file>:<line>:breakpoint
# c:continue
# s:step
# p <variable>:print
(gdb) c

问题记录

  1. MacOS 编译Android源码提示找不到tools.jar

    build/core/config.mk:663: error: Error: could not find jdk tools.jar at /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/../lib/tools.jar, please check if your JDK was installed correctly.
    
    

    解决:可以保证设备是有JDK的,查一下文件发现,还需要在 .bash_profile 中配置变量 export ANDROID_JAVA_HOME=$JAVA_HOME,好了了以后需要刷新一下:. ~/.bash_profile

  2. 找不到对应的macOS.sdk:internal error: Could not find a supported mac sdk: [“10.10” “10.11” “10.12” “10.13”]
    解决:

    # 先查看XCode 中 mac sdk的版本,我的是 10.14
    cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
    ls
    
    # 方式一、在源码目录 darwinSupportedSdkVersions 中添加(这个方式我试过,后续在我的设备还是编译不过去)
    vim build/soong/cc/config/x86_darwin_host.go
    
    darwinSupportedSdkVersions = []string{
                    "10.10",
                    "10.11",
                    "10.12",
                    "10.13",
                    "10.14",
                }
    # 方式二、在 https://github.com/phracker/MacOSX-SDKs/releases 下载 Command_Line_Tools_macOS_10.13_for_Xcode_9.4.1.dmg (这个以前是10.13的)安装即可。
    

另外有参考:
https://www.cnblogs.com/liumce/p/8027559.html
https://blog.csdn.net/yemao_guyue/article/details/80871390
https://www.jianshu.com/p/063a0bcdc7f5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章