【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

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