編譯Windows版Android Emulator(Cupcake)

來源:互聯網
上載者:User

 

Android SDK提供了一個基於Qemu的模擬器來類比Android系統的智能手機,得益於Qemu的跨平台特性,不論是Linux、Mac OS還是Windows的使用者都可以通過模擬器大大提高開發效率。不過歸根結底,Qemu還是在類Unix平台上發展起來的項目,所以在Windows平台上的編譯還是值得一看。Google在git上描述如何編譯Android Eclipse外掛程式ADT的時候順帶提到了如何構建Windows版的Android SDK,國內也有朋友寫了構建Windows版的Android SDK(此為轉帖,原作者blog已無法訪問)的文章,但是對於如何單獨構建Windows版的Android模擬器目前並沒有任何官方的文檔提及,William只是在網路上找到一些零碎的討論,今天就結合自己的實踐整理出來和大家共用。

在Windows下編譯Android模擬器的兩種方法

Android給出的構建Windows版SDK的make_windows_sdk.sh指令碼中,包含有make -j 4 emulator,即編譯模擬器的命令,所以看起來模擬器能在Cygwin環境下構建出來的。另外,由於Android模擬器是基於Qemu,Android只是在其基礎上添加了新的虛擬設備,定義了自己的skin機制等,所以只要是標準Qemu能夠正常編譯的環境,Android模擬器也就沒有問題。The QEMU forum有一篇很詳盡的關於在Windows環境編譯Qemu的文章,Step-by-step QEMU compilation under Windows ,是在MinGW/MSYS下完成的,因而在MinGW/MSYS環境下構建看來也可行。

既然使用make_windows_sdk.sh依賴的Cygwin看起來更像是官方製作SDK發布的環境,那麼它應當是幾乎100% working,下面還是先來嘗試一下非官方的做法吧。

MinGW/MSYS環境的準備

MinGW和MSYS的環境不算複雜,官方網站也有詳細的協助文檔,下面就說說我的安裝過程。

需要下載的安裝包包括:
1、MinGW-5.1.4.exe, 這是MinGW的自動安裝工具(Automated MinGW Installer)
2、MSYS-1.0.11.exe
3、msysDTK-1.0.1,MSYS Developer Tool Kit,包括autoconf、automake、libtool、cvs等工具
4、pthreads-w32-2-8-0-release.exe,emulator所需要的pthread庫。

zlib、libpng、SDL以及它依賴的directx-devel庫就不需要下載了,zlib和libpng已經包含在Android Emulator源碼包中,SDL我們也可以用Android Prebuilt中提供的binary,稍後會給出連結。

安裝MinGW時,除非有特別的需要,我們安裝常用的gcc core、g++編譯器就行。如果網路條件實在不好,可以開啟mingw.ini找出檔案名稱,然後通過下載工具到MinGW網站下載。另外值得一提的是,MinGW為了更好的管理軟體包的發布,使用了current、previous和candidate來區分不同版本軟體包的組合,這裡我選擇的是current,gcc版本為3.4.5。安裝路徑隨意,這裡假設是c:\mingw

安裝MSYS時會詢問是否有安裝MinGW,選擇Y的話會要求輸入MinGW的安裝路徑,輸入之後很快就可以完成MSYS安裝。這裡我們假設MSYS的安裝路徑是c:\msys。接下來安裝好msysDTK-1.0.1,我們就可以通過案頭上的捷徑來進入MSYS了。這裡我們要通過“ls /mingw”命令確認一下MinGW是否被正確掛載到MSYS的/mingw目錄,如果可以看到bin、doc、include等目錄就說明掛載成功,否則請檢查MSYS安裝目錄中etc下的fstab檔案,格式請參考fstab.sample。掛載成功以後,試試“gcc -v”,能夠正常返回gcc version 3.4.5等字樣,我們就可以進入到下一步了。

取得Android Emulator原始碼和Prebuilt中的SDL庫

請參考我之前的文章Git和Repo掃盲——如何取得Android原始碼來取得Android Emulator原始碼和Prebuilt中的SDL庫,或者你也可以簡單的從GitWeb下載Emulator和Prebuilt的snapshot版本。

下載完成以後,把Emulator解壓縮到c:\msys\home\< 當前登陸的使用者名稱 >目錄下,Prebuilt我們只需要其中Windows目錄下的sdl目錄就可以了,同樣放到c:\msys\home\< 當前登陸的使用者名稱 >目錄。

這裡有必要提一下Android Emulator的build system,在Google發布的源碼包android-emulator-1.0_r2.tar.bz2中,我們可以很方便的使用build-emulator.sh指令碼來編譯(中間可能會遇到些問題),在這個指令碼中我們可以看到,構建Emulator的指令碼是android-rebuild.sh,而它則會調用同一目錄下的android-configure.sh來完成configure。回到Cupcake中的External/qemu目錄,我們可以看到android-rebuild.sh和android-configure.sh這兩個指令碼同樣存在(一開始我確實是以為只有以源碼包形式發布的Emulator中才包含了這幾個指令碼),所以我們可以在編譯整個Android Cupcake代碼樹時編譯Emulator,同樣也利用這個平行的build system來單獨的構建Emulator。從這個角度來說,單獨的構建Emulator,無論是Cygwin還是MinGW/MSYS,方法就不會有什麼差別了。

編譯Android Emulator的過程

做好前面的幾步之後,開啟MSYS,進入到Emulator(qemu)目錄,執行./android-rebuild.sh –sdl-config=/home/< 當前登陸的使用者名稱 >/sdl/bin/sdl-config 命令即可,它會自動調用android-configure.sh指令碼進行configure,隨後開始編譯,–sdl-config則指定了sdl庫的路徑。

這裡我們可能遇到的問題是缺少libpthread,如果遇到的話解開pthreads-w32-2-8-0-release.exe,把Pre-built.2中的libpthreadGC2.a改名為libpthread.a複製到c:\mingw\lib目錄,pthread.h複製到c:\mingw\include目錄即可解決。

除此之外,編譯Cupcake中的Android Emulator相當的順利,之前編譯android-emulator-1.0_r2.tar.bz2時遇到過的“unsupported cpu”, “bad ELF header”等錯誤都沒有遇到。

測試產生的Android Emulator

測試產生的emulator.exe能否正常工作,最簡單的辦法就是把它複製到當前安裝好的Android SDK的tools目錄下,連-kernel,-ramdisk,-system這些參數都省的加了。建立一個avd,比如“test_avd”,然後在控制台運行“emualtor.exe @test_avd” 即可,如果有什麼不正常,加上-debug-all和-show-kernel參數可以有助debug。

好了,有圖有真相!標題列中的“Build with MSYS/MINGW”是我自己加的。
歡迎留言提問!

出處 編譯Windows版Android Emulator(Cupcake) - William Hua的Blog

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.