Mac OS 10.6(Snow Leopard)編譯Android源代碼


最近在看Android內核剖析(柯元丹著),准備把Android源代碼研究一下。做net開發時,就是通過microsoft symbol server取得net framework的源代碼加載到debugger調試程序的,這種方式對於框架的學習是最方便不過的。很多時候,我也養成了習慣了隨手打開源文件而不是API文檔的習慣。Android源代碼需要在*nix系統下編譯,正好手頭有個macbook,於是打算在Mac OS下編譯。本文參考了android官網以及部分網友的blog,文中如引用均給已出相應連接。

一.配置環境

   筆記本:Macbook MC207CH/A  2.26GHz Intel Core 2 Duo

   內存:2GB 1067MHz DDR3

   OS : Snow Leopard 10.6

   XCode :  4.0 with ios sdk 4.2 (有問題,后面有解決方案)

   JDK : 1.6 

   Eclipse :  Indigo (Java EE)

二.設置Mac OS 編譯環境

   參照官網Setting up a Mac OS X build environment,不再贅述。

   1.特別強調Android源代碼必須在大小寫敏感的文件系統下編譯,而Mac OS默認不是大小寫敏感的,因此需要創建一個大小寫敏感的磁盤鏡像文件。

   具體方法進入應用程序/實用工具/磁盤工具,選擇文件->新建->新建空白映像:

     屏幕快照 2012-01-31 下午04.06.38

  2. 使用make 3.81 (revert from make3.82)

      強調在mkdir /Users/Shared/dports后需要使用cd /Users/Shared/dports切換到該文件夾下執行svn co,這里我剛開始沒有注意無法安裝gmake 3.81

三. 下載Android源代碼

   參照官網Downloading the Source Tree

   1. 特別強調在Initializing a Repo client 一節,應該把當前目錄設置為前文創建的大小寫敏感的文件系統下,比如我把新創建的dmg掛載到/Users/basilwang/android,那么需要執行$cd /Users/basilwang/android  源代碼才能放到新創建的這個路徑下

      我剛開始沒有注意,直接執行了

      $ repo init -u https://android.googlesource.com/platform/manifest

  結果把源代碼下載到其他路徑下,白白浪費我2個多小時的時間,而后我把下載的文件扔到了回收站了,結果出了一個錯誤,害的我又花了一些時間排除這個錯誤(后面詳述)

   2. 這里推薦使用Android內核剖析(柯元丹著)一書提供的一段防止下載異常的腳本

   #!/bin/bash
   #FileName get-android.sh
   PATH=./bin:$PATH
   repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.3_r1.1
   repo sync
   while [ $? = 1 ]; do
   echo "================sync failed, re-sync again ====="
   sleep 3
   repo sync
   done

    這里下載的是2.3.3 gingerbread版本

四. 編譯Android源代碼(Gingerbread)

    Gingerbread的編譯還依賴於MacOSX10.5.sdk,但本機是10.6,於是下載Xcode 3.25,安裝的時候選擇另外的路徑比如Developer325,安裝完畢后Xcode4和Xcode325共存

    另外修改兩個地方

   1 external/qemu/Makefile.android,其中第72行,LEOPARD_SDK:= /Developer/SDKs/MacOSX10.5.sdk,將其修改為:
LEOPARD_SDK:= /Developer325/SDKs/MacOSX10.5.sdk

   2 build/core/combo/HOST_darwin-x86.mk,其中第29行,

sdk_105_root := /Developer/SDKs/MacOSX10.5.sdk 改為

sdk_105_root := /Developer325/SDKs/MacOSX10.5.sdk

   現在可以開始編譯源代碼

   $make,需要很長時間,我大概用了2個多小時才編譯完成

   此處報了兩個錯誤,耽誤了我很長時間

   1 執行make后

find: `frameworks/base/frameworks/base/docs/html': No such file or
directory
find: `out/target/common/docs/gen': No such file or directory
find: `frameworks/base/frameworks/base/docs/html': No such file or
directory
find: `out/target/common/docs/gen': No such file or directory
find: `frameworks/base/frameworks/base/docs/html': No such file or
directory
find: `out/target/common/docs/gen': No such file or directory
find: `frameworks/base/frameworks/base/docs/html': No such file or
directory
find: `out/target/common/docs/gen': No such file or directory
find: `frameworks/base/frameworks/base/docs/html': No such file or
directory
find: `out/target/common/docs/gen': No such file or directory

Jean-Baptiste Queru在Error building Gingerbread?回答

Oh, that error reported by "find" is actually a known harmless issue.
We should add it to the documentation.

  2

.Trashes/501/bionic/libc: MODULE.TARGET.STATIC_LIBRARIES.libc_common already defined by bionic/libc.  Stop.

    開始我一直在檢查為什么會重復定義(already defined),make clean也不管用,最后發現原來編譯時找到了回收站.Trashes我刪除過的文件,郁悶,清空回收站就ok.

五.將源代碼導入Eclipse

   1. 新建Java Project將路徑指向Gingerbread目錄, 此處為~/android

   2. 拷貝.classpath

       $sudo cp ~/android/development/ide/eclipse/.classpath   ~/android/.classpath

       $chmod +w  ~/android/.classpath    將.classpath設置為可寫

   3. build 出現如下錯誤

       nopackage

      整理報錯信息,集中在com.android.common包中

com.android.common.ArrayListCursor;

com.android.common.speech.LoggingEvents;

com.android.common.Rfc822InputFilter;

com.android.common.Rfc822Validator;

com.android.common.Search;

com.android.common.userhappiness.UserHappinessSignals

     在Java Build Path界面下

     buildpath

    移除出錯jar包,並且選擇Add JARs 增加out/target/common/obj/JAVA_LIBRARIES/android-common_intermediates/javalib.jar

    buildpath1

   至此編譯成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM