Mac下載並編譯Google安卓AOSP項目代碼

来源:http://www.cnblogs.com/ryanchi/archive/2016/07/18/5682186.html
-Advertisement-
Play Games

Mac下載並編譯Google安卓AOSP項目代碼 參考 這兩天用Mac下載安卓AOSP源碼,且把遇到的問題記下來。當然作為一個菜鳥,難免會有錯誤或者描述不對的地方,歡迎各路大神小神批評指正。轉載請註明出處。 一、準備環境 (請提前安裝好xcode或command line tools) Instal ...


Mac下載並編譯Google安卓AOSP項目代碼

參考 https://source.android.com/source/index.html

這兩天用Mac下載安卓AOSP源碼,且把遇到的問題記下來。當然作為一個菜鳥,難免會有錯誤或者描述不對的地方,歡迎各路大神小神批評指正。轉載請註明出處http://www.cnblogs.com/ryanchi/p/5682186.html

一、準備環境

(請提前安裝好xcode或command line tools)

  • Installing the JDK
    The master branch of Android in the Android Open Source Project (AOSP) requires Java 8

  • Creating a case-sensitive disk image
    執行下麵命令,將會在/Users/當前用戶/目錄下創建android.dmg文件,當然也可以自己定義文件位置。
    $ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
    This will create a .dmg (or possibly a .dmg.sparseimage) file.

    官方文檔推薦40GB,後來發現完全不夠用,這裡我直接上100g,並且文件位置直接放在桌面,下次開機時直接雙擊打開,雖然MBP經常不關機。。。
    $ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 100g ~/Desktop/android.dmg

    • 如果你鏡像創建完畢,想改變鏡像大小,可以執行下麵代碼:
      $ hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage

    • 你可以為bash添加function,以便快速掛載和卸載android.dmg文件。但如果和我一樣偷懶鏡像文件直接放桌面,則可以省略這一步,直接從桌面裝載鏡像就行。

      # mount the android file image  
      function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }  
      # unmount the android file image
      function umountAndroid() { hdiutil detach /Volumes/android; }

二、Installing required packages

  1. Install MacPorts from macports.org
    直接下載MacPorts_xxx.pkg文件安裝即可(xxx為版本號)。

    Note: Make sure that /opt/local/bin appears in your path before /usr/bin。可以通過$ echo $PATH命令查看。如果不是,在~/.bash_profile文件中添加下麵代碼,添加完畢後直接執行$ source ~/.bash_profile命令。

    export PATH=/opt/local/bin:$PATH    
    • 我的情況是MacPorts_xxx.pkg安裝完畢後,其自動在~/.bash_profile文件里添加了export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
  2. Get make, git, and GPG packages from MacPorts:
    $ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

    報錯:

    Error: Port gmake not found  

    執行$ sudo port -d sync即可。
    若執行上述命令繼續報如下錯誤:

    receiving file list ... rsync: read error: Operation timed out (60)
    Error: Synchronization of the local ports tree failed doing rsync
    port sync failed: Synchronization of 1 source(s) failed  

    解決辦法:
    修改 /opt/local/etc/macports/sources.conf,將原來最後一行修改成如下,然後執行$ sudo prot -v selfupdate即可。

    #rsync://rsync.macports.org/release/tarballs/ports.tar [default]
    https://distfiles.macports.org/ports.tar.gz [default]

三、下載源碼

  • Installing Repo

    $ mkdir ~/bin       # 在當前用戶目錄新建bin\文件夾
    $ PATH=~/bin:$PATH      # 將bin目錄添加到PATH
    
    $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    $ chmod a+x ~/bin/repo
  • Downloading the Android Source Tree
    考慮到國內網路問題,這一步驟可以參考清華大學鏡像資源站https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/的教程,寫的很詳細。
    1. 下載AOSP月更新的初始化包,https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
    2. 解壓。將下載得到的aosp-latest.tar壓縮文件直接拷貝到前面創建的xxx.dmg鏡像文件裝載的磁碟目錄,執行$ tar xf aosp-latest.tar,稍等解壓完畢後,當前目錄會出現一個AOSP文件夾,該文件夾下有一個隱藏文件夾.repo
    3. 同步代碼樹。執行$ repo sync。具體可以參考下麵步驟:

      wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下載初始化包
      tar xf aosp-latest.tar
      cd AOSP   # 解壓得到的 AOSP 工程目錄
      # 這時 ls 的話什麼也看不到,因為只有一個隱藏的 .repo 目錄
      repo sync # 正常同步一遍即可得到完整目錄
      # 或 repo sync -l 僅checkout代碼

四、Build

  1. Clean up
    To ensure the newly installed binaries are properly taken into account after being extracted, delete the existing output of any previous build using:

    $ make clobber

    報錯

    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.  Stop.

    解決辦法:參考關於完整Android源碼的閱讀~/.bash_profile文件中指定ANDROID_JAVA_HOME為JDK路徑即可。

    export ANDROID_JAVA_HOME=${JAVA_HOME}
  2. Set up environment

    $ source build/envsetup.sh
  3. Choose a target

    $ lunch aosp_arm-eng
    Buildtype Use
    user limited access; suited for production
    userdebug like "user" but with root access and debuggability; preferred for debugging
    eng development configuration with additional debugging tools
    可選的有aosp_arm-eng、 aosp_arm64-eng、aosp_mips-eng、aosp_mips64-eng、aosp_x86-eng......
  4. Build the code

    $ make -jN

    N為數字,一般為cpu線程數1到2倍。我的本本是mbp2015年中,使用$ make -j8,很多warning,不管即可,用了一個多小時,最後輸出結果#### make completed successfully (01:06:05 (hh:mm:ss)) ####

  5. Emulate an Android Device
    運行模擬器

    $ emulator

五、Building Kernels

到了這裡,略坑。由於需要克隆谷歌git倉庫到本地,所以配置完git的http代理以後,到AOSP項目中,cd進入kernel文件夾,直接

$ git clone https://android.googlesource.com/kernel/goldfish.git

等了一晚,結果如下:

remote: Sending approximately 982.87 MiB ...
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: 過早的文件結束符(EOF)
fatal: index-pack failed

由於使用的梯子不給力,試了好幾次,都是clone了一部分後直接掛掉。。。所以現在正琢磨自己搭建ss伺服器,同時也希望有好的梯子童鞋可以私聊推薦一下。內核這部分內容可以參考谷歌https://source.android.com/source/building-kernels.html或者羅升陽老師的博客 在Ubuntu上下載、編譯和安裝Android最新內核源代碼(Linux Kernel)

THE END!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • split() 方法用於把一個字元串分割成字元串數組。<script type="text/javascript"> var str="How are you doing today?" document.write(str.split(" ") + "<br />")document.write( ...
  • 表單校驗是頁面開發中非常常見的一類需求,相信每個前端開發人員都有這方面的經驗。網上有很多成熟的表單校驗框架,雖然按照它們預設的設計,用起來沒有多大的問題,但是在實際工作中,表單校驗有可能有比較複雜的個性化的需求,使得我們用這些插件的預設機制並不能完成這些功能,所以要根據自己的需要去改造它們(畢竟自己 ...
  • [1]創建 [2]本質 [3]稀疏 [4]長度 [5]遍歷 [6]類數組 ...
  • 本章內容: 定義 節點類型 節點關係 選擇器 樣式操作方法style 表格操作方法 表單操作方法 元素節點ELEMENT 屬性節點attributes 文本節點TEXT 文檔節點 Document 位置操作方法 定時器 彈出框 location 其它 事件操作 實例 定義 文檔對象模型(Docume ...
  • (幾個重點概念解析) 一、層疊上下文 二、層疊水平 三、層疊順序(以下層疊順序按照由內向外排列,即z軸上的值越來越大,越靠近用戶) 四、z-index 五、我的理解: 頁面中元素的層疊情況是由層疊順序這個規則決定的。在最初的頁面里,所有元素按照預設的情況依次排列。而z-index屬性像是一個外來戶, ...
  • $('div a'):div標簽下所有層次a元素的jquery對象 $('div>a'):div標簽下子元素層次a元素的jquery對象 ...
  • PlaceholderTextView 效果 源碼 https://github.com/YouXianMing/UI-Component-Collection 的 PlaceholderTextView ...
  • 剛剛請教了一個php高手。就hao123.com 來舉例。因為要考慮到一個公司的多個app。所以 如下樣式,如果公司名稱簡稱xtz,app的 名稱簡稱cht xtz.hao123.com xtzcht.hao123.com 如果是測試的話:test_xtzcht.hao123.com baiduap ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...