日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

手把手教你在Mac OS下载、编译及导入Android源码

發布時間:2024/4/15 Android 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手把手教你在Mac OS下载、编译及导入Android源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 要求

1.1 硬件

  • 160g可用磁盤空間。

筆者編譯的是Android 9.0源碼,下載下來后將近40g,編譯后153g,所以至少需要160g可用磁盤空間。

看網上有別人下載編譯7.1.1版本的源碼,編譯下來需要67g,則可用磁盤空間至少需要分配80g。

注:在編譯過程中,如果由于磁盤空間不足導致編譯失敗,可重新調整磁盤大小,然后接著之前的進度繼續編譯,所以此處看個人編譯的版本,但至少要保證可用磁盤不能太小。

1.2 軟件

1.2.1 編譯的Android版本與需要的Mac OS版本
  • Android 6.0 (Marshmallow) - AOSP master:Mac OS v10.10 (Yosemite) 或更高版本,具有 Xcode 4.5.2 和命令行工具
  • Android 5.x (Lollipop) :Mac OS v10.8 (Mountain Lion),具有 Xcode 4.5.2 和命令行工具
  • Android 4.1.x-4.3.x (Jelly Bean) - Android 4.4.x (KitKat) :Mac OS v10.6 (Snow Leopard) 或 Mac OS X v10.7 (Lion),以及 Xcode 4.2(Apple 的開發者工具)
  • Android 1.5 (Cupcake) - Android 4.0.x (Ice Cream Sandwich) :Mac OS v10.5 (Leopard) 或 Mac OS X v10.6 (Snow Leopard),以及 Mac OS X v10.5 SDK
1.2.2 JDK
  • Android 7.0 (Nougat) - Android 8.0 (O) :jdk 8u45 或更高版本
  • Android 5.x (Lollipop) - Android 6.0 (Marshmallow) :jdk-7u71-macosx-x64.dmg
  • Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat) :Java JDK 6

2. 準備工作

2.1 創建分區大小寫的磁盤映像

Mac OS默認會在不區分大小寫的文件系統中運行,但由于Git并不支持此類文件系統,所以需要在Mac OS上建立一個區分大小寫的磁盤分區。我們這里使用命令行來創建,一是比較方便,二是后期可擴展。

在終端輸入以下命令來創建一個160g大小的磁盤映像:

$ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 160g ~/android.dmg 復制代碼

會在當前用戶目錄下生成一個android.dmg.sparseimage文件,可簡單理解為該文件是編譯源碼所需要的驅動盤。

建議在分區時size指定為160g,但如果后期不夠,可以通過該命令來調整分區大小,例如下面命令調整為200g:

$ hdiutil resize -size 200g ~/android.dmg.sparseimage 復制代碼

注意:調整分區大小的命令,需要在該分區磁盤映像已卸載的情況下才能生效。

2.2 添加裝載和卸載磁盤分區的命令和函數

為了方便裝載和卸載該分區磁盤映像,我們可以向~/.bash_profile文件中添加如下函數:

# mount the android file image mountAndroid() { hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android; } 復制代碼

需要裝載分區磁盤映像時,執行如下命令即可,裝載路徑為/Volumes/android:

$ mountAndroid 復制代碼

同樣,卸載的函數如下,我們也將它添加到~/.bash_profile文件中:

# unmount the android file image umountAndroid() { hdiutil detach /Volumes/android; } 復制代碼

執行如下命令,便可卸載該分區磁盤映像:

$ umountAndroid 復制代碼

2.3 安裝Xcode和其它軟件包

  • 安裝Xcode命令行工具:
  • $ xcode-select --install 復制代碼
  • 安裝Xcode,直接在AppStore里安裝即可。

  • 安裝MacPorts或Homebrew,MacPorts和Homebrew是軟件包管理工具,可用來直接在終端里安裝、更新和卸載軟件包。建議二者都安裝,筆者在通過MacPorts安裝gnupg時死活裝不上,最后通過Homebrew安裝成功:

  • 在~/.bash_profile文件中導入路徑,就可以使用port或brew命令來管理軟件包了:

  • export PATH=/opt/local/bin:$PATHexport PATH=/usr/local/bin:$PATH 復制代碼
  • 安裝gmake、libsdl、git和gnupg
    • 如果是使用MacPorts,則執行如下命令:
    $ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg 復制代碼
    • 如果是使用Homebrew,則執行如下命令:
    $ brew install gmake libsdl git gnupg2 復制代碼

    2.4 下載Mac OS SDK

    由于新版本的Mac OS更新(我這里是10.14.4 Mojave版本),導致Android源碼在編譯時可能報如下錯誤:

    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]return syscall(SYS_thread_selfid); 復制代碼

    所以需要下載舊版本的Mac OS SDK,建議下載MacOSX10.11.sdk.tar.xz 版本,解壓到自定義目錄,然后建立軟鏈接。例如我放在~/lib目錄下,再給它創建一個軟鏈接,可以避免下次Mac OS或Xcode升級的時候被刪除:

    $ sudo ln -s ~/lib/MacOSX10.11.sdk /Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk 復制代碼

    2.3 設置文件描述符數量上限

    在 Mac OS 中,可同時打開的文件描述符的默認數量上限太低,在高度并行的編譯流程中,可能會超出此上限。要提高此上限,請將下列行添加到 ~/.bash_profile 中:

    # set the number of open files to be 1024 ulimit -S -n 1024 復制代碼

    至此,一切準備工作就緒,接下來就是下載源碼的過程了。

    3. 下載源碼

    3.1 說明

    這里參考Google 教程。由于墻的原因,即使我們作為技術人員能翻過去,但使用起來可能還是有各種各樣的問題,所以這里我們可以通過清華大學鏡像站來下載。

    3.2 下載安裝Repo工具

    由于Android源碼龐大復雜,所以Google專門開發了Repo來管理Android源碼庫,這里不多作介紹,有興趣可自行閱讀repo工具介紹。

    按照官方建議,首先在主目錄下有一個 bin/ 目錄,并且將該目錄包含在路徑中:

    $ mkdir ~/bin $ PATH=~/bin:$PATH 復制代碼

    然后下載Repo工具,并確保它可執行:

    $ curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo $ chmod a+x ~/bin/repo 復制代碼

    3.3 初始化 Repo 客戶端

    在2.2小節中,我們通過mountAndroid命令裝載了我們分區后的磁盤映像,其裝載路徑為/Volumes/android,所以我們需要在該目錄下進行初始化:

    切換到該目錄下,并且創建一個aosp的工作目錄:

    $ cd /Volumes/android/ $ mkdir aosp $ cd aosp 復制代碼

    現在,我們的源碼根目錄全路徑為/Volumes/android/aosp。

    Repo的運行過程中會嘗試訪問官方的git源更新自己,如果想使用清華的鏡像源進行更新,可以將如下內容復制到你的~/.bashrc(沒有該文件則創建一個)里:

    export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/' 復制代碼

    然后配置git,需要姓名和郵箱:

    $ git config --global user.name "Your Name" $ git config --global user.email "you@example.com" 復制代碼

    運行repo init來初始化master分支:

    $ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest 復制代碼

    要對master以外的分支進行校驗,請使用 -b 來指定相應分支。要查看分支列表,請參閱源代碼標記和版本,筆者這里指定的是android-9.0.0_r35分支:

    $ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-9.0.0_r35 復制代碼

    3.4 下載 Android 源代碼樹

    在終端輸入以下命令來下載源碼:

    $ repo sync 復制代碼

    由于下載源碼過程比較長,所以最好將你的Mac“系統偏好設置” -> “節能”里勾選上“防止進入睡眠”,如下圖所示:

    接下來就是漫長的等待過程了,30多g,帶寬如果還可以的話,差不多不到兩小時就下載完成了,會提示:

    Syncing work tree: 100%(xxx/xxx), done. 復制代碼

    4. 編譯

    編譯命令還是在下載源碼的目錄下輸入,即/Volumes/android/aosp。

    4.1 切換bash

    由于Android編譯只能使用bash,所以你如果使用zsh等其它的shell,需要切換至bash,切換命令如下:

    $ chsh -s /bin/bash 復制代碼

    然后重啟終端才能生效。

    4.2 環境設置

    使用envsetup.sh腳本初始化環境:

    $ source build/envsetup.sh 復制代碼

    4.3 選擇編譯目標

    輸入lunch,會提示如下:

    $ lunch You're building on DarwinLunch menu... pick a combo:1. aosp_arm-eng2. aosp_arm64-eng3. aosp_mips-eng4. aosp_mips64-eng5. aosp_x86-eng6. aosp_x86_64-eng7. aosp_car_arm-userdebug8. aosp_car_arm64-userdebug9. aosp_car_x86-userdebug10. aosp_car_x86_64-userdebug11. mini_emulator_arm64-userdebug12. m_e_arm-userdebug13. m_e_mips-userdebug14. m_e_mips64-eng15. mini_emulator_x86-userdebug16. mini_emulator_x86_64-userdebug17. uml-userdebug18. aosp_crosshatch-userdebug19. aosp_blueline-userdebug20. aosp_cf_x86_auto-userdebug21. aosp_cf_x86_phone-userdebug22. aosp_cf_x86_tablet-userdebug23. aosp_cf_x86_tablet_3g-userdebug24. aosp_cf_x86_tv-userdebug25. aosp_cf_x86_wear-userdebug26. aosp_cf_x86_64_auto-userdebug27. aosp_cf_x86_64_phone-userdebug28. aosp_cf_x86_64_tablet-userdebug29. aosp_cf_x86_64_tablet_3g-userdebug30. aosp_cf_x86_64_tv-userdebug31. aosp_cf_x86_64_wear-userdebug32. cf_x86_auto-userdebug33. cf_x86_phone-userdebug34. cf_x86_tablet-userdebug35. cf_x86_tablet_3g-userdebug36. cf_x86_tv-userdebug37. cf_x86_wear-userdebug38. cf_x86_64_phone-userdebug39. cf_x86_64_tablet-userdebug40. cf_x86_64_tablet_3g-userdebug41. cf_x86_64_tv-userdebug42. cf_x86_64_wear-userdebug43. aosp_marlin-userdebug44. aosp_marlin_svelte-userdebug45. aosp_sailfish-userdebug46. aosp_walleye-userdebug47. aosp_walleye_test-userdebug48. aosp_taimen-userdebug49. hikey-userdebug50. hikey64_only-userdebug51. hikey960-userdebugWhich would you like? [aosp_arm-eng] 復制代碼

    這里列出了所有的可編譯的目標。所有編譯目標都采用 BUILD-BUILDTYPE 形式,其中 BUILD 是表示特定功能組合的代號,BUILDTYPE 是以下類型之一,表示在什么環境下運行:

    編譯類型使用情況
    user權限受限;適用于生產環境
    userdebug與“user”類似,但具有 root 權限和可調試性;是進行調試時的首選編譯類型
    eng具有額外調試工具的開發配置

    比如aosp_arm-eng的BUILD為aosp_arm,BUILDTYPE為eng,aosp代表Android開源項目,arm表示系統是運行在arm架構的處理器上,更多見官方文檔。

    如果你有Pixel或Nexus真機,選擇對應的編譯目標即可,否則我們就選模擬器,即5.aosp_x86-eng。在上面的Which would you like? [aosp_arm-eng]后面輸入5即可。也直接選擇:

    $ lunch 5 復制代碼

    $ lunch aosp_x86-eng 復制代碼

    4.4 編譯代碼

    在編譯之前,通過輸入以下命令,可以查看你的Mac的CPU核數:

    $ sysctl -n machdep.cpu.core_count 4 復制代碼

    上面輸出的CPU核數為4,則可以啟動4個線程來編譯源碼:

    $ make -j4 復制代碼

    接下來就是漫長的編譯過程,一般需要2~3個小時,如果看到下面的提示,則表示已經編譯完成:

    #### build completed successfully (02:15:52 (hh:mm:ss)) #### 復制代碼

    4.5 運行模擬器

    在編譯完成后,終端里輸入以下命令,便可使用模擬器來運行編譯的版本:

    $ emulator 復制代碼

    5. Android Studio導入源碼

    5.1 編譯idegen模塊

    編譯完成之后,運行以下命令,編譯idegen模塊:

    $ mmm development/tools/idegen/ 復制代碼

    idegen模塊編譯完成后會有如下提示:

    #### make completed successfully (46 seconds) #### 復制代碼

    此時繼續運行下面的命令,會在aosp根目錄生成對應的android.ipr、android.iml IDEA工程配置文件

    $ development/tools/idegen/idegen.shRead excludes: 17ms Traversed tree: 218013ms 復制代碼

    5.2 導入源碼

    啟動Android Studio,選擇一個已存在的Android Studio項目,然后選中aosp根目錄下的android.ipr文件,如果提示需要你convert,確認convert就行。首次導入大概需要20~30分鐘:

    導入成功后,在Project Structure中,選擇Modules,刪除所有的依賴,只保留下圖所示。這樣在查看源碼跳轉的時候,不會進入android.jar,會直接跳轉至本項目的文件中。

    現在你可以自由地閱讀源碼了,enjoy it!

    參考

    Google官方Android源碼編譯教程 清華大學開源軟件鏡像站 - Android 鏡像使用幫助 macOS(Sierra 10.12)上Android源碼(AOSP)的下載、編譯與導入到Android Studio Android AOSP基礎(二)AOSP源碼下載 Android AOSP基礎(三)Android系統源碼的整編和單編 使用Android Studio導入源碼

    轉載于:https://juejin.im/post/5cc5165fe51d456e781f2082

    總結

    以上是生活随笔為你收集整理的手把手教你在Mac OS下载、编译及导入Android源码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。