Android系統移植與平台開發- 編譯並運行Android4.0模擬器

來源:互聯網
上載者:User

作者:唐攀,華清遠見嵌入式培訓講師。

1.   編譯Android模擬器

在Ubuntu下,我們可以在源碼裡編譯出自己的模擬器及SDK等編譯工具,當然這個和在windows裡下載的看起來沒有什麼區別。(Android SDK開發環境搭建)

編譯Android模擬器的步驟和編譯Android系統很相似:

Ø  build/envsetup.sh

Ø  lunch sdk-eng

Ø  make sdk

在每次執行make的時候,編譯系統會自動的驗證上次編譯項和這次編譯項,如果兩次不一樣,會刪除所有的目標代碼,其實現在./build/core/main.mk

[plain] view plaincopyprint?

              1.  71 # This allows us to force a clean build - includedafter the config.make 
                      2.  72 # environment setup is done, but before we generateany dependencies. This
                      3.  73 # file does the rm -rf inline so the deps which areall done below will
                      4.  74 # be generated correctly
                      5.  75 include $(BUILD_SYSTEM)/cleanbuild.mk

我們將第75行注釋掉,這樣就不會每次都自動刪除上次編譯的中間代碼重新編譯了。

編譯完之後效果如所示:

sdk安裝在了下面的目錄裡:

[plain] view plaincopyprint?

              1.   WORKING_DIRECTORY/out/host/linux-x86/sdk

在該目錄下有一個壓縮包,裡面就是我們從eclipse裡更新下載指定Target的sdk包。

如果你做過app開發都會知道,我們只有下載了不同版本的sdk之後才能建立不同版本的模擬器。當我們編譯完sdk之後就可以建立並運行Android4.0的模擬器了。

[plain] view plaincopyprint?

              1.  $ cd WORKING_DIRECTORY/out/host/linux-x86/sdk/android-sdk_eng.linux_linux-x86/tools

首先,查看當前編譯出來的sdk的id號,用於建立一個模擬器:

[plain] view plaincopyprint?

              1.  $ ./android list targets
                      2.  Available Android targets:
                      3.  ---------- 
                      4.  id: 1 or "android-14" 
                      5.         Name:Android 4.0 
                      6.         Type:Platform 
                      7.         API   level:14
                      8.         Revision: 2
                      9.          Skins:WXGA800, WQVGA400, WXGA720, HVGA, WVGA854, WQVGA432, WVGA800 (default), QVGA,WSVGA 
                      10.  ABIs : no ABIs.

建立一個模擬器

[plain] view plaincopyprint?

              1.  $ ./android create avd -n mydroid -t 1

註:-n 表示指定模擬器的名字, -t表示指定建立類比的版本id

啟動模擬器

[plain] view plaincopyprint?

              1.  $ ./emulator -avd mydroid &

由於模擬器要啟動android系統,它要使用幾個映像檔案,分別是:kernel-qemu , system.img, userdata.img, ramdisk.img

Ø  kernel-qemu:核心映像檔案,它是linux作業系統針對qemu模擬器編譯的核心檔案,裡面安裝有qemu的模擬硬體驅動,如果將來在開發板或手機上移植android,那麼,第一步就是要先make出一個支援開發板或手機的kernel來。

Ø  system.img:是android系統的檔案系統,裡麵包含了android系統的應用程式(apk),系統用到的各種庫(jar, so, a)和資源,設定檔(etc目錄下),系統命令(bin,usr/bin, xbin),該映像檔案是由out/target/product/PRODUCT/system目錄打包產生的,我們可以對這個目錄裡的東西進行定製化,比如,你要想讓android系統預設為安裝一個應用程式,那麼可以將要安裝的apk檔案拷貝到out/target/product/PRODUCT/system/app目錄下

Ø  userdata.img:使用者資料映像,裡麵包含有程式安裝資訊,好比如是windows的C:/Program Files/目錄

Ø  ramdisk.img:記憶體磁碟映像,這個檔案對於沒有做過Linux移植的人來說,不好理解,linux核心啟動起來,要掛載一個檔案系統作為自己的根檔案系統,通常檔案系統是存放在塊裝置上的,也就是硬碟或flash上的,裡面含有Linux核心啟動過程中依賴的一些程式和設定檔,前面所述的userdata.img和system.img映像,在linux系統啟動起來後掛載到其data,system目錄下。

我們可以通過下面的指令碼run_emulator.sh,來指定Android模擬器來載入指定的映像檔案:

[plain] view plaincopyprint?

              1.  #!/bin/bash 
                      2.  PWD_PATH=`pwd`
                      3.  IMG_PATH=$PWD_PATH/out/target/product/generic 
                      4.  exportPATH=$PWD_PATH/out/host/linux-x86/sdk/android-sdk_eng.linux_linux-x86/tools:$PATH 
                      5.  exportANDROID_PRODUCT_OUT=$PWD_PATH/out/target/product/generic
                      6.  export ANDROID_SWT=$PWD_PATH/out/host/linux-x86/framework
                      7.  emulator-kernel$PWD_PATH/kernel/goldfish/arch/arm/boot/zImage

註:
        ANDROID_PRODUCT_OUT:環境變數必須指定,emulator就是從該環境變數下尋找所有的映像檔案的
        -kernel:指定核心映像

當然也可以分別指定每個映像檔案,通過下面的命令:

[plain] view plaincopyprint?

              1.  $ emulator-kernel$PWD_PATH/kernel/goldfish/arch/arm/boot/zImage\ 
                      2.  -image $IMG_PATH/system.img \
                      3.  -data $IMG_PATH/userdata.img\ 
                      4.  -ramdisk $IMG_PATH/ramdisk.img

註:
        -system指定system.img
        -data指定userdata.img
        -ramdisk指定ramdisk.img

如果將來要運行adb shell串連模擬器的話,我們都要使用root許可權,否則會出現:error:device not found的錯誤。

通過啟動起來的Android系統->System Settings->About phone,可知使用的是我們自己編譯的核心啟動的。

推薦閱讀:Android系統移植與平台開發- 準備Android開發環境

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.